Compare commits

...

4 Commits

Author SHA1 Message Date
f93daa90ae 9.1.0
Some checks failed
Default (tags) / security (push) Successful in 42s
Default (tags) / test (push) Successful in 43s
Default (tags) / release (push) Failing after 33s
Default (tags) / metadata (push) Successful in 46s
2025-04-29 14:07:38 +00:00
dfae08f3b1 feat(network): Add DNS convenience interface to support ACME DNS-01 challenge management in the network module. 2025-04-29 14:07:38 +00:00
7b419d4ed6 9.0.0
Some checks failed
Default (tags) / security (push) Successful in 37s
Default (tags) / test (push) Successful in 45s
Default (tags) / release (push) Failing after 33s
Default (tags) / metadata (push) Successful in 43s
2025-04-16 13:33:18 +00:00
5d342bc43f BREAKING CHANGE(finance): refactor: migrate invoice APIs to unified accounting document types 2025-04-16 13:33:17 +00:00
8 changed files with 243 additions and 68 deletions

View File

@ -1,5 +1,18 @@
# Changelog
## 2025-04-29 - 9.1.0 - feat(network)
Add DNS convenience interface to support ACME DNS-01 challenge management in the network module.
- Added IConvenientDnsProvider interface in ts/network/dnsconvenience.ts
- Updated ts/network/index.ts to export the DNS convenience interface
## 2025-04-16 - 9.0.0 - BREAKING CHANGE(finance)
refactor: migrate invoice APIs to unified accounting document types
- Introduced new accounting document types in ts/finance/accountingdoc.ts to standardize invoice, credit note, debit note, and self-billed invoice representations
- Updated ts/finance/index.ts to export the new accounting document module
- Removed the legacy ts/finance/invoice.ts module
## 2025-04-12 - 8.2.1 - fix(business/job)
Refactor job interface to support expanded employment details and improve type safety

View File

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

View File

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

206
ts/finance/accountingdoc.ts Normal file
View File

@ -0,0 +1,206 @@
import { business, finance } from '../index.js';
import type { TCurrency } from './currency.js';
/**
* Status of an accounting document
*
* draft: Document is in preparation (Entwurf)
* issued: Document has been issued/sent (Ausgestellt)
* paid: Document has been paid (Bezahlt)
* canceled: Document has been canceled (Storniert)
* refunded: Payment has been refunded (Erstattet)
*/
export type TAccountingDocStatus = 'draft' | 'issued' | 'paid' | 'canceled' | 'refunded';
/**
* Type of accounting document
*
* invoice: Standard invoice (Rechnung)
* creditnote: Credit note (Gutschrift als Rechnungskorrektur)
* debitnote: Debit note (Lastschrift/Belastungsanzeige)
* self-billed-invoice: Self-billed invoice (Gutschrift im Gutschriftverfahren)
*/
export type TAccountingDocType = 'invoice' | 'creditnote' | 'debitnote' | 'self-billed-invoice';
/**
* Item in an accounting document
* (Position in einer Rechnung/Gutschrift/Lastschrift)
*/
export type TAccountingDocItem = {
position: number;
name: string;
articleNumber?: string;
unitType: string;
unitQuantity: number;
unitNetPrice: number;
vatPercentage: number;
};
/**
* Reference to a related document
* (Referenz zu einem zugehörigen Dokument)
*/
export type TRelatedDocument = {
/**
* Type of relationship
* (Art der Beziehung)
*/
relationType: 'corrects' | 'replaces' | 'references';
/**
* ID of the related document
* (ID des zugehörigen Dokuments)
*/
documentId: string;
/**
* Issue date of the related document
* (Ausstellungsdatum des zugehörigen Dokuments)
*/
issueDate?: number;
};
/**
* Base type for all accounting documents (Basis-Typ für alle Buchungsdokumente)
*/
export type TAccountingDocEnvelope<
TYPE extends TAccountingDocType,
FIELDS,
> = business.TLetterEnvelope<
'accounting-doc',
{
/**
* Unique identifier of the accounting document
* (Eindeutige Kennung des Buchungsdokuments)
*/
accountingDocId: string;
/**
* Type of accounting document
* (Art des Buchungsdokuments)
*/
accountingDocType: TYPE;
/**
* Current status of the accounting document
* (Aktueller Status des Buchungsdokuments)
*/
accountingDocStatus: TAccountingDocStatus;
/**
* Line items of the accounting document
* (Positionen des Buchungsdokuments)
*/
items: TAccountingDocItem[];
/**
* Period of performance/service delivery
* (Leistungszeitraum)
*/
periodOfPerformance?: {
from: number;
to: number;
};
/**
* Date of delivery or service completion
* (Lieferdatum oder Leistungsdatum)
*/
deliveryDate?: number;
/**
* Payment due in days after issue
* (Zahlungsfrist in Tagen)
*/
dueInDays: number;
/**
* Whether reverse charge applies (VAT liability shifted to recipient)
* (Steuerschuldnerschaft des Leistungsempfängers)
*/
reverseCharge: boolean;
/**
* Reference provided by the buyer to identify the document
* (Referenz des Käufers zur Identifizierung des Dokuments)
*/
buyerReference?: string;
/**
* Electronic address information, needed for CII/XRechnung support
* (Elektronische Adressinformationen, benötigt für CII/XRechnung)
*/
electronicAddress?: {
scheme: string;
value: string;
};
/**
* References to related documents (e.g., an invoice referenced by a credit note)
* (Referenzen zu zugehörigen Dokumenten)
*/
relatedDocuments?: TRelatedDocument[];
/**
* Result of document printing/generation
* (Ergebnis der Dokumentenerstellung)
*/
printResult?: {
pdfBufferString: string;
totalNet: number;
totalGross: number;
vatGroups: {
percentage: number;
items: TAccountingDocItem[];
}[];
};
/**
* Additional notes or comments
* (Zusätzliche Anmerkungen oder Kommentare)
*/
notes: string[];
/**
* Payment options information
* (Zahlungsoptionen)
*/
paymentOptions?: finance.IPaymentOptionInfo;
/**
* Currency used in the document
* (Verwendete Währung)
*/
currency: TCurrency;
} & FIELDS
>;
/**
* Credit Note - document reducing amount owed
* (Gutschrift - Dokument zur Minderung einer Forderung)
*/
export type TCreditNote = TAccountingDocEnvelope<'creditnote', {}>;
/**
* Debit Note - document increasing amount owed
* (Lastschrift/Belastungsanzeige - Dokument zur Erhöhung einer Forderung)
*/
export type TDebitNote = TAccountingDocEnvelope<'debitnote', {}>;
/**
* Standard Invoice
* (Standardrechnung)
*/
export type TInvoice = TAccountingDocEnvelope<'invoice', {}>;
/**
* Self-billed Invoice - invoice created by the buyer
* (Gutschrift im Gutschriftverfahren - vom Käufer erstellte Rechnung)
*/
export type TSelfBilledInvoice = TAccountingDocEnvelope<'self-billed-invoice', {}>;
/**
* Union type for all accounting document types
* (Vereinigungstyp für alle Buchungsdokumentarten)
*/
export type TAccountingDoc = TCreditNote | TDebitNote | TInvoice | TSelfBilledInvoice;

View File

@ -1,6 +1,6 @@
export * from './checkingaccount.js';
export * from './currency.js';
export * from './expense.js';
export * from './invoice.js';
export * from './accountingdoc.js';
export * from './payment.js';
export * from './transaction.js';

View File

@ -1,65 +0,0 @@
import { business, finance } from '../index.js';
import type { TCurrency } from './currency.js';
export type TInvoiceStatus = 'draft' | 'invoice' | 'paid' | 'refunded';
export type TInvoiceItem = {
position: number;
name: string;
articleNumber?: string;
unitType: string;
unitQuantity: number;
unitNetPrice: number;
vatPercentage: number;
};
export type TInvoiceEnvelope<
TYPE extends 'creditnote' | 'debitnote',
FIELDS,
> = business.TLetterEnvelope<
'invoice',
{
invoiceId: string;
invoiceType: TYPE;
status: TInvoiceStatus;
items: TInvoiceItem[];
periodOfPerformance?: {
from: number;
to: number;
};
deliveryDate?: number;
dueInDays: number;
reverseCharge: boolean;
/**
* buyer reference is an optional field, that helps the buyer to identify the invoice
*/
buyerReference?: string;
/**
* also a kind of reference, esspecially needed for circular xinvoice support.
*/
electronicAddress?: {
scheme: string;
value: string;
};
printResult?: {
pdfBufferString: string;
totalNet: number;
totalGross: number;
vatGroups: {
percentage: number;
items: TInvoiceItem[];
};
};
notes: string[];
paymentOptions?: finance.IPaymentOptionInfo;
currency: TCurrency;
} & FIELDS
>;
export type TCreditNote = TInvoiceEnvelope<'creditnote', {}>;
export type TDebitNote = TInvoiceEnvelope<'debitnote', {}>;
export type TInvoice = TCreditNote | TDebitNote;
// Legacy type for backward compatibility
export interface IInvoiceItem extends TInvoiceItem {}

View File

@ -0,0 +1,20 @@
import type { IDnsChallenge } from './dnschallenge.js'
export interface IConvenientDnsProvider {
convenience: {
/**
* Create the TXT record for an ACME DNS-01 challenge.
*/
acmeSetDnsChallenge(dnsChallengeArg: IDnsChallenge): Promise<void>;
/**
* Remove the TXT record for an ACME DNS-01 challenge.
*/
acmeRemoveDnsChallenge(dnsChallengeArg: IDnsChallenge): Promise<void>;
/**
* Check whether this DNS provider can serve the given domain.
*/
isDomainSupported(domain: string): Promise<boolean>;
};
}

View File

@ -3,6 +3,7 @@ export * from './cname.js';
export * from './device.js';
export * from './dns.js';
export * from './dnschallenge.js';
export * from './dnsconvenience.js';
export * from './domaindelegation.js';
export * from './jwt.js';
export * from './networknode.js';