Compare commits

...

11 Commits

16 changed files with 113 additions and 95 deletions

View File

@ -1,5 +1,28 @@
# Changelog
## 2025-03-20 - 6.1.1 - fix(finance)
Add clarifying comment for the buyerReference field in the invoice interface
- Document buyerReference as an optional field to help buyers identify the invoice
## 2025-03-20 - 6.1.0 - feat(business/address)
Add optional countryCode and coordinates properties to IAddress interface
- Extend address interface with an optional countryCode property
- Add optional coordinates object with lat and lng for geographic metadata
## 2025-03-19 - 6.0.1 - fix(business)
Remove exports for 'company' and 'person' modules from the business index
- Removed export statement for './company.js' in ts/business/index.ts
- Removed export statement for './person.js' in ts/business/index.ts
## 2025-03-19 - 6.0.0 - BREAKING CHANGE(TContact)
Reaffirm project metadata and documentation consistency
- Verified commitinfo data, package.json, and README content for correctness
- No functional code changes were introduced
## 2025-03-11 - 5.0.0 - BREAKING CHANGE(network)
Update reverse proxy configuration to support multiple destination IPs and ports

View File

@ -1,6 +1,6 @@
{
"name": "@tsclass/tsclass",
"version": "5.0.0",
"version": "6.1.1",
"private": false,
"description": "Provides TypeScript definitions for various business, financial, networking, content, and other common classes.",
"main": "dist_ts/index.js",

View File

@ -34,7 +34,7 @@ The business domain includes classes for managing contacts, companies, and proje
```typescript
import { business } from '@tsclass/tsclass';
const companyContact: business.IContact = {
const companyContact: business.TContact = {
type: 'company',
name: 'Example Company',
address: {
@ -48,7 +48,7 @@ const companyContact: business.IContact = {
email: 'contact@example.com'
};
const exampleCompany: business.ICompany = {
const exampleCompany: business.TCompany = {
name: 'Example Company',
foundedDate: {
day: 1,

View File

@ -3,7 +3,7 @@ import { tap, expect } from '@push.rocks/tapbundle';
import * as tsclass from '../ts/index.js';
tap.test('should assign a correct type', async () => {
let contact: tsclass.business.IContact;
let contact: tsclass.business.TContact;
});
tap.start();

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@tsclass/tsclass',
version: '5.0.0',
version: '6.1.1',
description: 'Provides TypeScript definitions for various business, financial, networking, content, and other common classes.'
}

View File

@ -5,4 +5,9 @@ export interface IAddress {
postalCode: string;
city: string;
country: string;
countryCode?: string;
coordinates?: {
lat: number;
lng: number;
};
}

View File

@ -1,20 +0,0 @@
import { business, general } from '../index.js';
/**
* describes a company's lifecycle state
*/
export type TCompanyStatus = 'planed' | 'founding' | 'active' | 'liquidation' | 'closed';
/**
* describes a company
*/
export interface ICompany {
name: string;
slogan?: string;
description?: string;
logoLink?: string;
foundedDate: general.IDate;
closedDate: general.IDate;
status: business.TCompanyStatus;
contact: business.IContact;
}

View File

@ -1,39 +1,60 @@
import { finance } from '../index.js';
import { business } from '../index.js';
import { finance, general } from "../index.js";
import { business } from "../index.js";
export type TContactSalutation = 'Mr' | 'Ms' | 'Mrs';
export type TSocialLinks = {
type: "facebook" | "twitter" | "linkedin" | string;
url: string;
};
export type TContactType = 'person' | 'company';
export type TRegistrationDetails = {
vatId: string;
registrationId: string;
registrationName: string;
};
export type TContactTitle = 'Doctor' | 'Professor';
export interface IContact {
// =======
// general
// =======
salutation?: TContactSalutation;
type: TContactType;
title?: TContactTitle;
relationship?: 'customer' | 'supplier' | 'partner' | 'employee' | 'other';
type TContactEnvelope<TYPE extends string, FIELDS> = {
type: TYPE;
name: string;
surname?: string;
legalEntity?: string;
address: business.IAddress;
description: string;
legalEntity?: string;
customerNumber?: string;
relationship?: "customer" | "supplier" | "partner" | "employee" | "other";
email?: string;
logoUrl?: string;
website?: string;
facebookUrl?: string;
twitterUrl?: string;
phone?: string;
fax?: string;
// =========
// financial
// =========
vatId?: string;
logoUrl?: string;
website?: string;
socials?: TSocialLinks[];
sepaConnection?: finance.ISepaConnection;
}
} & FIELDS;
export type TPerson = TContactEnvelope<
"person",
{
surname: string;
salutation: "Mr" | "Ms" | "Mrs";
sex: "male" | "female" | "other";
title: "Doctor" | "Professor";
registrationDetails?: TRegistrationDetails;
legalProxyFor?: {
type: "self" | "other";
contact?: TContact;
};
}
>;
export type TCompany = TContactEnvelope<
"company",
{
registrationDetails: TRegistrationDetails;
foundedDate: general.IDate;
closedDate: general.IDate;
status: "planned" | "founding" | "active" | "liquidation" | "closed";
}
>;
export type TContact = TPerson | TCompany;

View File

@ -1,12 +1,12 @@
import * as database from '../database/index.js';
import { type IPerson } from './person.js';
import * as database from "../database/index.js";
import type { TPerson } from "./index.js";
export interface IContract {
parties: {
signingOrder: number;
referencedAs: string;
person: IPerson;
role: 'signer' | 'cc';
person: TPerson;
role: "signer" | "cc";
signature: {
given: boolean;
timestamp?: number;

View File

@ -1,8 +1,6 @@
export * from './address.js';
export * from './company.js';
export * from './contact.js';
export * from './job.js';
export * from './letter.js';
export * from './pdf.js';
export * from './person.js';
export * from './project.js';

View File

@ -1,18 +1,17 @@
import * as finance from '../finance/index.js';
import { type ICompany } from './company.js';
import { type IContact } from './contact.js';
import * as finance from "../finance/index.js";
import { type TContact } from "./contact.js";
export class IJob {
type: 'contract' | 'employment';
type: "contract" | "employment";
techTags?: string[];
qualificationTags?: string[];
languages?: {
name: string;
level: 'basic' | 'intermediate' | 'advanced' | 'native';
level: "basic" | "intermediate" | "advanced" | "native";
}[];
name: string;
description: string;
monthlyTotal: number;
currency: finance.TCurrency;
from: ICompany;
contact: IContact;
}
from: TContact;
contact: TContact;
}

View File

@ -1,20 +1,20 @@
import * as business from './index.js';
import * as finance from '../finance/index.js';
import * as database from '../database/index.js';
import * as business from "./index.js";
import * as finance from "../finance/index.js";
import * as database from "../database/index.js";
export interface ILetter {
versionInfo: {
type: 'draft' | 'final';
type: "draft" | "final";
/**
* should follow semVer
*/
version: string;
};
incidenceId: string;
type: 'invoice' | 'notice' | 'warning' | 'verification' | 'contract';
type: "invoice" | "notice" | "warning" | "verification" | "contract";
date: number;
from: business.IContact;
to: business.IContact;
legalContact: business.IContact;
from: business.TContact;
to: business.TContact;
legalContact: business.TContact;
logoUrl: string;
subject: string;
accentColor?: string;
@ -27,7 +27,7 @@ export interface ILetter {
contractDate: number;
};
timesheetData: string;
}
};
pdf?: business.IPdf;
pdfAttachments: business.IPdf[];
language: string;

View File

@ -1,12 +0,0 @@
import { type IContact } from './contact.js';
export interface IPerson {
title: string;
name: string;
surname: string;
sex: 'male' | 'female' | 'queer';
legalProxyFor?: {
type: 'self' | 'other';
contact?: IContact;
};
}

View File

@ -13,5 +13,5 @@ export interface IVoucher {
date: Date;
description: string;
expenseItems: IExpenseItem[];
contactRef: business.IContact;
contactRef: business.TContact;
}

View File

@ -15,8 +15,12 @@ export interface IInvoiceItem {
export interface IInvoice {
id: string;
billedBy: business.IContact;
billedTo: business.IContact;
billedBy: business.TContact;
billedTo: business.TContact;
/**
* buyer reference is an optional field, that helps the buyer to identify the invoice
*/
buyerReference?: string;
type: 'creditnote' | 'debitnote';
status: TInvoiceStatus;
items: IInvoiceItem[];

View File

@ -1,17 +1,17 @@
import { type ICompany } from "../business/company.js";
import type { TCompany } from "../business/contact.js";
export interface IProduct {
name: string;
slogan: string;
description: string;
os: 'web-based',
category: 'Business Application',
os: "web-based";
category: "Business Application";
offers: any[];
features: IProductFeature[];
landingPage: string;
appLink: string;
logoLink: string;
publisher?: ICompany;
publisher?: TCompany;
}
export interface IProductFeature {
@ -19,4 +19,4 @@ export interface IProductFeature {
description: string;
linkText: string;
linkUrl: string;
}
}