@fin.cx/einvoice 9.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/einvoice.d.ts +12 -0
- package/dist_ts/einvoice.js +45 -3
- package/dist_ts/formats/base/base.decoder.d.ts +18 -1
- package/dist_ts/formats/base/base.decoder.js +30 -17
- package/dist_ts/formats/cii/cii.decoder.d.ts +89 -6
- package/dist_ts/formats/cii/cii.decoder.js +125 -30
- package/dist_ts/formats/cii/cii.encoder.d.ts +71 -1
- package/dist_ts/formats/cii/cii.encoder.js +191 -12
- package/dist_ts/formats/cii/cii.types.d.ts +2 -5
- package/dist_ts/formats/cii/cii.types.js +7 -9
- package/dist_ts/formats/cii/cii.validator.d.ts +13 -6
- package/dist_ts/formats/cii/cii.validator.js +29 -30
- package/dist_ts/formats/cii/facturx/facturx.decoder.js +15 -3
- package/dist_ts/formats/cii/facturx/facturx.encoder.d.ts +0 -6
- package/dist_ts/formats/cii/facturx/facturx.encoder.js +11 -25
- package/dist_ts/formats/cii/facturx/facturx.types.d.ts +0 -5
- package/dist_ts/formats/cii/facturx/facturx.types.js +1 -8
- package/dist_ts/formats/cii/facturx/facturx.validator.d.ts +0 -5
- package/dist_ts/formats/cii/facturx/facturx.validator.js +5 -29
- package/dist_ts/formats/cii/zugferd/zugferd.decoder.js +15 -2
- package/dist_ts/formats/cii/zugferd/zugferd.encoder.d.ts +0 -7
- package/dist_ts/formats/cii/zugferd/zugferd.encoder.js +9 -67
- package/dist_ts/formats/cii/zugferd/zugferd.types.d.ts +0 -5
- package/dist_ts/formats/cii/zugferd/zugferd.types.js +1 -8
- package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.d.ts +26 -0
- package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.js +43 -1
- package/dist_ts/formats/cii/zugferd/zugferd.validator.js +6 -2
- package/dist_ts/formats/semantic/semantic.adapter.js +20 -18
- package/dist_ts/formats/ubl/en16931.ubl.validator.d.ts +0 -4
- package/dist_ts/formats/ubl/en16931.ubl.validator.js +5 -42
- package/dist_ts/formats/ubl/generic/ubl.encoder.js +18 -24
- package/dist_ts/formats/ubl/ubl.decoder.d.ts +4 -0
- package/dist_ts/formats/ubl/ubl.decoder.js +9 -1
- package/dist_ts/formats/ubl/ubl.encoder.js +9 -5
- package/dist_ts/formats/ubl/ubl.validator.d.ts +13 -0
- package/dist_ts/formats/ubl/ubl.validator.js +28 -1
- package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.js +10 -1
- package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.d.ts +0 -7
- package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.js +30 -45
- package/dist_ts/formats/ubl/xrechnung.validator.d.ts +5 -4
- package/dist_ts/formats/ubl/xrechnung.validator.js +71 -68
- package/dist_ts/formats/utils/date.value.d.ts +11 -0
- package/dist_ts/formats/utils/date.value.js +33 -1
- package/dist_ts/formats/utils/format.detector.js +16 -10
- package/dist_ts/formats/utils/party.contact.d.ts +16 -0
- package/dist_ts/formats/utils/party.contact.js +16 -0
- package/dist_ts/formats/utils/party.identifier.d.ts +28 -0
- package/dist_ts/formats/utils/party.identifier.js +49 -0
- package/dist_ts/formats/utils/peppol.profile.d.ts +10 -0
- package/dist_ts/formats/utils/peppol.profile.js +12 -0
- package/dist_ts/formats/utils/seller.identifier.d.ts +46 -0
- package/dist_ts/formats/utils/seller.identifier.js +78 -0
- package/dist_ts/formats/utils/stated.values.d.ts +80 -0
- package/dist_ts/formats/utils/stated.values.js +418 -0
- package/dist_ts/formats/utils/vat.category.d.ts +30 -2
- package/dist_ts/formats/utils/vat.category.js +36 -6
- package/dist_ts/formats/utils/vat.id.d.ts +18 -0
- package/dist_ts/formats/utils/vat.id.js +22 -0
- package/dist_ts/formats/validation/conformance.harness.js +6 -6
- package/dist_ts/formats/validation/en16931.business-rules.validator.js +4 -21
- package/dist_ts/formats/validation/facturx.validator.js +6 -6
- package/dist_ts/formats/validation/integrated.validator.js +4 -13
- package/dist_ts/formats/validation/peppol.validator.js +6 -13
- package/dist_ts/formats/validation/validation.types.d.ts +5 -0
- package/dist_ts/formats/validation/validation.types.js +6 -1
- package/dist_ts/formats/validation/vat-categories.validator.d.ts +21 -42
- package/dist_ts/formats/validation/vat-categories.validator.js +137 -431
- package/dist_ts/formats/validation/xrechnung.validator.d.ts +11 -58
- package/dist_ts/formats/validation/xrechnung.validator.js +58 -324
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +1 -1
- package/dist_ts/interfaces/en16931-metadata.d.ts +0 -4
- package/dist_ts/interfaces/stated.values.d.ts +93 -0
- package/dist_ts/interfaces/stated.values.js +2 -0
- package/package.json +2 -2
- package/readme.md +147 -7
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +52 -2
- package/ts/formats/base/base.decoder.ts +32 -29
- package/ts/formats/cii/cii.decoder.ts +159 -32
- package/ts/formats/cii/cii.encoder.ts +206 -14
- package/ts/formats/cii/cii.types.ts +7 -9
- package/ts/formats/cii/cii.validator.ts +30 -32
- package/ts/formats/cii/facturx/facturx.decoder.ts +16 -2
- package/ts/formats/cii/facturx/facturx.encoder.ts +13 -25
- package/ts/formats/cii/facturx/facturx.types.ts +0 -9
- package/ts/formats/cii/facturx/facturx.validator.ts +5 -43
- package/ts/formats/cii/zugferd/zugferd.decoder.ts +16 -1
- package/ts/formats/cii/zugferd/zugferd.encoder.ts +10 -72
- package/ts/formats/cii/zugferd/zugferd.types.ts +0 -9
- package/ts/formats/cii/zugferd/zugferd.v1.decoder.ts +56 -0
- package/ts/formats/cii/zugferd/zugferd.validator.ts +5 -1
- package/ts/formats/semantic/semantic.adapter.ts +19 -17
- package/ts/formats/ubl/en16931.ubl.validator.ts +5 -64
- package/ts/formats/ubl/generic/ubl.encoder.ts +19 -23
- package/ts/formats/ubl/ubl.decoder.ts +12 -0
- package/ts/formats/ubl/ubl.encoder.ts +8 -4
- package/ts/formats/ubl/ubl.validator.ts +29 -0
- package/ts/formats/ubl/xrechnung/xrechnung.decoder.ts +8 -0
- package/ts/formats/ubl/xrechnung/xrechnung.encoder.ts +33 -45
- package/ts/formats/ubl/xrechnung.validator.ts +75 -127
- package/ts/formats/utils/date.value.ts +33 -0
- package/ts/formats/utils/format.detector.ts +15 -9
- package/ts/formats/utils/party.contact.ts +30 -0
- package/ts/formats/utils/party.identifier.ts +61 -0
- package/ts/formats/utils/peppol.profile.ts +13 -0
- package/ts/formats/utils/seller.identifier.ts +102 -0
- package/ts/formats/utils/stated.values.ts +499 -0
- package/ts/formats/utils/vat.category.ts +47 -5
- package/ts/formats/utils/vat.id.ts +24 -0
- package/ts/formats/validation/conformance.harness.ts +5 -5
- package/ts/formats/validation/en16931.business-rules.validator.ts +3 -28
- package/ts/formats/validation/facturx.validator.ts +5 -5
- package/ts/formats/validation/integrated.validator.ts +3 -16
- package/ts/formats/validation/peppol.validator.ts +5 -16
- package/ts/formats/validation/validation.types.ts +7 -1
- package/ts/formats/validation/vat-categories.validator.ts +179 -761
- package/ts/formats/validation/xrechnung.validator.ts +61 -382
- package/ts/index.ts +9 -0
- package/ts/interfaces/en16931-metadata.ts +3 -7
- package/ts/interfaces/stated.values.ts +94 -0
- package/ts/readme.md +1 -1
- package/dist_ts/formats/utils/eu.memberstates.d.ts +0 -11
- package/dist_ts/formats/utils/eu.memberstates.js +0 -16
- package/ts/formats/utils/eu.memberstates.ts +0 -16
|
@@ -1,39 +1,16 @@
|
|
|
1
1
|
import { EN16931UBLValidator } from './en16931.ubl.validator.js';
|
|
2
|
+
import { GERMAN_VAT_ID_FORMAT_CODE, germanVatIdFormatMessage, isMalformedGermanVatId } from '../utils/vat.id.js';
|
|
2
3
|
/**
|
|
3
4
|
* XRechnung-specific validator that extends EN16931 validation
|
|
4
5
|
* Implements additional German CIUS (Core Invoice Usage Specification) rules
|
|
5
6
|
*/
|
|
6
7
|
export class XRechnungValidator extends EN16931UBLValidator {
|
|
7
|
-
/**
|
|
8
|
-
* Validates XRechnung-specific structure requirements
|
|
9
|
-
*/
|
|
10
|
-
validateStructure() {
|
|
11
|
-
// First validate EN16931 structure
|
|
12
|
-
let valid = super.validateStructure();
|
|
13
|
-
// XRechnung-specific: Check for proper customization ID
|
|
14
|
-
const customizationID = this.getText('//cbc:CustomizationID');
|
|
15
|
-
if (!customizationID || !customizationID.includes('xrechnung')) {
|
|
16
|
-
this.addError('XRECH-STRUCT-1', 'XRechnung customization ID is missing or invalid', '//cbc:CustomizationID');
|
|
17
|
-
valid = false;
|
|
18
|
-
}
|
|
19
|
-
return valid;
|
|
20
|
-
}
|
|
21
8
|
/**
|
|
22
9
|
* Validates XRechnung-specific business rules
|
|
23
10
|
*/
|
|
24
11
|
validateBusinessRules() {
|
|
25
12
|
// First validate EN16931 business rules
|
|
26
13
|
let valid = super.validateBusinessRules();
|
|
27
|
-
// BR-DE-1: Payment terms (BT-20) or Payment due date (BT-9) shall be provided.
|
|
28
|
-
if (!this.exists('//cbc:PaymentDueDate') && !this.exists('//cac:PaymentTerms/cbc:Note')) {
|
|
29
|
-
this.addError('BR-DE-1', 'Payment terms or Payment due date shall be provided', '//cac:PaymentTerms');
|
|
30
|
-
valid = false;
|
|
31
|
-
}
|
|
32
|
-
// BR-DE-2: The element "Buyer reference" (BT-10) shall be provided.
|
|
33
|
-
if (!this.exists('//cbc:BuyerReference')) {
|
|
34
|
-
this.addError('BR-DE-2', 'Buyer reference is required in XRechnung', '//cbc:BuyerReference');
|
|
35
|
-
valid = false;
|
|
36
|
-
}
|
|
37
14
|
// BR-DE-16 (XRechnung): when a VAT category code S, Z, E, AE, K, G, L or M is used (BT-95,
|
|
38
15
|
// BT-102, BT-151), the seller states a VAT identifier (BT-31) or a tax registration
|
|
39
16
|
// identifier (BT-32), which is any party tax scheme of the seller, or a tax representative
|
|
@@ -49,62 +26,88 @@ export class XRechnungValidator extends EN16931UBLValidator {
|
|
|
49
26
|
this.addError('BR-DE-16', 'A document with the VAT category code S, Z, E, AE, K, G, L or M states the seller VAT identifier (BT-31), the seller tax registration identifier (BT-32) or a seller tax representative (BG-11)', '//cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme');
|
|
50
27
|
valid = false;
|
|
51
28
|
}
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
29
|
+
// The rules below carry the IDs of the official rule sets and check what they check, in
|
|
30
|
+
// their context: KoSIT XRechnung Schematron 2.6.0 (BR-DE-*, and PEPPOL-EN16931-R010, which it
|
|
31
|
+
// includes) and the CEN EN 16931 validation artefacts 1.3.16 (BR-21, BR-49).
|
|
32
|
+
const supplierParty = '/*/cac:AccountingSupplierParty/cac:Party';
|
|
33
|
+
const customerParty = '/*/cac:AccountingCustomerParty/cac:Party';
|
|
34
|
+
const requireElement = (context, element, ruleId, message) => {
|
|
35
|
+
for (const node of this.nodes(context)) {
|
|
36
|
+
if (!this.exists(`${element}[normalize-space(.)]`, node)) {
|
|
37
|
+
this.addError(ruleId, message, `${context}/${element}`);
|
|
38
|
+
valid = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
// BR-DE-1: an invoice states PAYMENT INSTRUCTIONS (BG-16)
|
|
43
|
+
if (!this.exists('/*/cac:PaymentMeans')) {
|
|
44
|
+
this.addError('BR-DE-1', 'An invoice states the payment instructions (BG-16)', '/*/cac:PaymentMeans');
|
|
65
45
|
valid = false;
|
|
66
46
|
}
|
|
67
|
-
// BR-
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
|
|
47
|
+
// BR-49 (EN 16931): a payment instruction (BG-16) states the payment means type code (BT-81)
|
|
48
|
+
for (const [index, paymentMeans] of this.nodes('/*/cac:PaymentMeans').entries()) {
|
|
49
|
+
if (!this.exists('cbc:PaymentMeansCode', paymentMeans)) {
|
|
50
|
+
this.addError('BR-49', 'A payment instruction (BG-16) states the payment means type code (BT-81)', `/*/cac:PaymentMeans[${index + 1}]/cbc:PaymentMeansCode`);
|
|
51
|
+
valid = false;
|
|
52
|
+
}
|
|
71
53
|
}
|
|
72
|
-
// BR-DE-
|
|
73
|
-
|
|
74
|
-
|
|
54
|
+
// BR-DE-15: the buyer reference (BT-10) is stated
|
|
55
|
+
requireElement('/*', 'cbc:BuyerReference', 'BR-DE-15', 'The buyer reference (BT-10) is stated');
|
|
56
|
+
// BR-DE-2: the seller contact (BG-6) is stated; BR-DE-6 and BR-DE-7: with a telephone number
|
|
57
|
+
// (BT-42) and an email address (BT-43)
|
|
58
|
+
if (this.exists(supplierParty) && !this.exists(`${supplierParty}/cac:Contact`)) {
|
|
59
|
+
this.addError('BR-DE-2', 'The seller contact (BG-6) is stated', `${supplierParty}/cac:Contact`);
|
|
75
60
|
valid = false;
|
|
76
61
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
62
|
+
requireElement(`${supplierParty}/cac:Contact`, 'cbc:Telephone', 'BR-DE-6', 'The seller contact telephone number (BT-42) is stated');
|
|
63
|
+
requireElement(`${supplierParty}/cac:Contact`, 'cbc:ElectronicMail', 'BR-DE-7', 'The seller contact email address (BT-43) is stated');
|
|
64
|
+
// BR-DE-3, BR-DE-4: the seller city (BT-37) and post code (BT-38)
|
|
65
|
+
requireElement(`${supplierParty}/cac:PostalAddress`, 'cbc:CityName', 'BR-DE-3', 'The seller city (BT-37) is stated');
|
|
66
|
+
requireElement(`${supplierParty}/cac:PostalAddress`, 'cbc:PostalZone', 'BR-DE-4', 'The seller post code (BT-38) is stated');
|
|
67
|
+
// BR-DE-8, BR-DE-9: the buyer city (BT-52) and post code (BT-53)
|
|
68
|
+
requireElement(`${customerParty}/cac:PostalAddress`, 'cbc:CityName', 'BR-DE-8', 'The buyer city (BT-52) is stated');
|
|
69
|
+
requireElement(`${customerParty}/cac:PostalAddress`, 'cbc:PostalZone', 'BR-DE-9', 'The buyer post code (BT-53) is stated');
|
|
70
|
+
// PEPPOL-EN16931-R010, part of the XRechnung rules: the buyer electronic address (BT-49)
|
|
71
|
+
for (const party of this.nodes(customerParty)) {
|
|
72
|
+
if (!this.exists('cbc:EndpointID', party)) {
|
|
73
|
+
this.addError('PEPPOL-EN16931-R010', 'The buyer electronic address (BT-49) is stated', `${customerParty}/cbc:EndpointID`);
|
|
74
|
+
valid = false;
|
|
75
|
+
}
|
|
81
76
|
}
|
|
82
|
-
// BR-
|
|
83
|
-
|
|
84
|
-
this.
|
|
85
|
-
|
|
77
|
+
// BR-21 (EN 16931): each invoice line (BG-25) has an invoice line identifier (BT-126)
|
|
78
|
+
for (const [index, line] of this.nodes('/*/cac:InvoiceLine | /*/cac:CreditNoteLine').entries()) {
|
|
79
|
+
if (!this.exists('cbc:ID[normalize-space(.)]', line)) {
|
|
80
|
+
this.addError('BR-21', `Invoice line ${index + 1} has an invoice line identifier (BT-126)`, `${this.locationOf(line)}/cbc:ID`);
|
|
81
|
+
valid = false;
|
|
82
|
+
}
|
|
86
83
|
}
|
|
87
|
-
// BR-
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
// BR-CO-25 (EN 16931): while the amount due for payment (BT-115) is positive, the payment due
|
|
85
|
+
// date (BT-9) or the payment terms (BT-20) are stated. The CEN artefacts for UBL and CII do not
|
|
86
|
+
// check this rule; EN 16931 states it.
|
|
87
|
+
const amountDue = Number(this.getText('/*/cac:LegalMonetaryTotal/cbc:PayableAmount').trim());
|
|
88
|
+
if (amountDue > 0 &&
|
|
89
|
+
!this.exists('/*/cbc:DueDate[normalize-space(.)] | /*/cac:PaymentMeans/cbc:PaymentDueDate[normalize-space(.)]') &&
|
|
90
|
+
!this.exists('/*/cac:PaymentTerms/cbc:Note[normalize-space(.)]')) {
|
|
91
|
+
this.addError('BR-CO-25', 'While an amount is due (BT-115), the payment due date (BT-9) or the payment terms (BT-20) are stated', '/*/cac:PaymentTerms');
|
|
90
92
|
valid = false;
|
|
91
93
|
}
|
|
92
|
-
//
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
this.addError('BR-DE-15', `Invoice line ${i + 1} is missing identifier`, `//cac:InvoiceLine[${i + 1}]`);
|
|
94
|
+
// The package's own check of the German VAT identification number format (no official rule)
|
|
95
|
+
for (const vatId of this.nodes('/*/cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme[cac:TaxScheme/cbc:ID="VAT"]/cbc:CompanyID')) {
|
|
96
|
+
const value = (vatId.textContent ?? '').trim();
|
|
97
|
+
if (isMalformedGermanVatId(value)) {
|
|
98
|
+
this.addError(GERMAN_VAT_ID_FORMAT_CODE, germanVatIdFormatMessage(value), '/*/cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID');
|
|
98
99
|
valid = false;
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
|
-
// German VAT ID format validation
|
|
102
|
-
const supplierVatId = this.getText('//cac:AccountingSupplierParty//cbc:CompanyID[../cac:TaxScheme/cbc:ID="VAT"]');
|
|
103
|
-
if (supplierVatId && supplierVatId.startsWith('DE') && !/^DE[0-9]{9}$/.test(supplierVatId)) {
|
|
104
|
-
this.addError('BR-DE-VAT', 'German VAT ID format is invalid (must be DE followed by 9 digits)', '//cac:AccountingSupplierParty//cbc:CompanyID');
|
|
105
|
-
valid = false;
|
|
106
|
-
}
|
|
107
102
|
return valid;
|
|
108
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* The nodes an XPath expression selects
|
|
106
|
+
* @param xpathExpr XPath expression
|
|
107
|
+
*/
|
|
108
|
+
nodes(xpathExpr) {
|
|
109
|
+
const result = this.select(xpathExpr, this.doc);
|
|
110
|
+
return Array.isArray(result) ? result : [];
|
|
111
|
+
}
|
|
109
112
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJlY2hudW5nLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdWJsL3hyZWNobnVuZy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG1CQUFtQjtJQUN6RDs7T0FFRztJQUNPLHFCQUFxQjtRQUM3Qix3Q0FBd0M7UUFDeEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFMUMsMkZBQTJGO1FBQzNGLG9GQUFvRjtRQUNwRiwyRkFBMkY7UUFDM0YsNkZBQTZGO1FBQzdGLDBGQUEwRjtRQUMxRixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQy9CLGdMQUFnTCxFQUNoTCxJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7UUFDRixNQUFNLGVBQWUsR0FDbkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDNUIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUUsSUFBYSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckcsSUFDRSxlQUFlO1lBQ2YsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLCtGQUErRixDQUFDO1lBQzdH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
|
|
@@ -26,3 +26,14 @@ export declare const getWritableDate: (timestamp: unknown, field: string, target
|
|
|
26
26
|
* @param targetFormat The format being written
|
|
27
27
|
*/
|
|
28
28
|
export declare const getWritableDueDate: (issueTimestamp: unknown, dueInDays: unknown, targetFormat: string) => Date;
|
|
29
|
+
/**
|
|
30
|
+
* The calendar day a UBL `xsd:date` names (BT-2, BT-9, BT-26, BT-72, BT-73,
|
|
31
|
+
* BT-74), as the UTC midnight of that day; undefined when the value is no such
|
|
32
|
+
* date. The value is `YYYY-MM-DD`, optionally followed by a time zone: `Z`, or
|
|
33
|
+
* `+hh:mm` / `-hh:mm` of at most 14:00. The zone says where the day is; it
|
|
34
|
+
* does not name another day, so `2026-08-01+02:00` and `2026-08-01-12:00` both
|
|
35
|
+
* name 1 August 2026. EN 16931 dates are calendar days without a zone, and CII
|
|
36
|
+
* format 102 has none, so the day is what every format reads and writes.
|
|
37
|
+
* @param value The date as the document states it
|
|
38
|
+
*/
|
|
39
|
+
export declare const parseXsdDateDay: (value: string) => number | undefined;
|
|
@@ -47,4 +47,36 @@ export const getWritableDueDate = (issueTimestamp, dueInDays, targetFormat) => {
|
|
|
47
47
|
dueDate.setUTCDate(dueDate.getUTCDate() + dueInDays);
|
|
48
48
|
return dueDate;
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
/**
|
|
51
|
+
* The calendar day a UBL `xsd:date` names (BT-2, BT-9, BT-26, BT-72, BT-73,
|
|
52
|
+
* BT-74), as the UTC midnight of that day; undefined when the value is no such
|
|
53
|
+
* date. The value is `YYYY-MM-DD`, optionally followed by a time zone: `Z`, or
|
|
54
|
+
* `+hh:mm` / `-hh:mm` of at most 14:00. The zone says where the day is; it
|
|
55
|
+
* does not name another day, so `2026-08-01+02:00` and `2026-08-01-12:00` both
|
|
56
|
+
* name 1 August 2026. EN 16931 dates are calendar days without a zone, and CII
|
|
57
|
+
* format 102 has none, so the day is what every format reads and writes.
|
|
58
|
+
* @param value The date as the document states it
|
|
59
|
+
*/
|
|
60
|
+
export const parseXsdDateDay = (value) => {
|
|
61
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})(?:Z|[+-](\d{2}):(\d{2}))?$/.exec(value.trim());
|
|
62
|
+
if (!match) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
66
|
+
if (match[4] !== undefined) {
|
|
67
|
+
const [zoneHours, zoneMinutes] = [Number(match[4]), Number(match[5])];
|
|
68
|
+
if (zoneHours > 14 || zoneMinutes > 59 || (zoneHours === 14 && zoneMinutes !== 0)) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (year < 1) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const date = new Date(0);
|
|
76
|
+
date.setUTCFullYear(year, month - 1, day);
|
|
77
|
+
if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
return date.getTime();
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS52YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdXRpbHMvZGF0ZS52YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RDs7Ozs7OztHQU9HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFrQixFQUFFLEtBQWEsRUFBRSxZQUFvQixFQUFRLEVBQUU7SUFDL0YsTUFBTSxJQUFJLEdBQUcsT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0csSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLEdBQUcsS0FBSyxzQkFBc0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDL0UsWUFBWTtZQUNaLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxjQUF1QixFQUFFLFNBQWtCLEVBQUUsWUFBb0IsRUFBUSxFQUFFO0lBQzVHLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxjQUFjLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekYsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxJQUFJLG1CQUFtQixDQUFDLGdFQUFnRSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRTtZQUNqSCxZQUFZO1lBQ1osbUJBQW1CLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsK0ZBQStGO0lBQy9GLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWEsRUFBc0IsRUFBRTtJQUNuRSxNQUFNLEtBQUssR0FBRyxxREFBcUQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxXQUFXLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLEVBQUUsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNwRyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEIsQ0FBQyxDQUFDIn0=
|
|
@@ -80,12 +80,19 @@ export class FormatDetector {
|
|
|
80
80
|
if (/xrechnung/i.test(guidelineId)) {
|
|
81
81
|
return InvoiceFormat.XRECHNUNG;
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
// an identifier that names Factur-X or ZUGFeRD decides; ZUGFeRD 2.0 BASIC and EXTENDED name ZUGFeRD
|
|
84
|
+
// after the EN 16931 identifier they extend (urn:cen.eu:en16931:2017#...#urn:zugferd.de:2p0:...)
|
|
85
|
+
if (/factur-x/i.test(guidelineId)) {
|
|
84
86
|
return InvoiceFormat.FACTURX;
|
|
85
87
|
}
|
|
86
|
-
if (/zugferd/i.test(guidelineId) || /urn:ferd:/i.test(guidelineId)
|
|
88
|
+
if (/zugferd/i.test(guidelineId) || /urn:ferd:/i.test(guidelineId)) {
|
|
87
89
|
return InvoiceFormat.ZUGFERD;
|
|
88
90
|
}
|
|
91
|
+
// the EN 16931 profile identifier is shared by Factur-X 1.0 and ZUGFeRD 2.x, one standard with one
|
|
92
|
+
// XML: an XML-only document of it reads as Factur-X
|
|
93
|
+
if (/urn:cen\.eu:en16931:2017/i.test(guidelineId)) {
|
|
94
|
+
return InvoiceFormat.FACTURX;
|
|
95
|
+
}
|
|
89
96
|
return InvoiceFormat.CII;
|
|
90
97
|
}
|
|
91
98
|
if (/<(?:[A-Za-z_][\w.-]*:)?CrossIndustryDocument\b/.test(sample)) {
|
|
@@ -231,22 +238,21 @@ export class FormatDetector {
|
|
|
231
238
|
}
|
|
232
239
|
for (const idNode of Array.from(idNodes)) {
|
|
233
240
|
const profileText = idNode.textContent || '';
|
|
234
|
-
// Check for ZUGFeRD profiles
|
|
241
|
+
// Check for ZUGFeRD profiles: v1, the ZUGFeRD 2.0 identifiers (urn:zugferd.de:2p0:...) and the
|
|
242
|
+
// urn:zugferd:... identifiers earlier releases of this library wrote
|
|
235
243
|
if (profileText.includes('zugferd') ||
|
|
236
244
|
profileText.includes('urn:ferd:') ||
|
|
237
|
-
profileText === CII_PROFILE_IDS.ZUGFERD_BASIC ||
|
|
238
|
-
profileText === CII_PROFILE_IDS.ZUGFERD_COMFORT ||
|
|
239
|
-
profileText === CII_PROFILE_IDS.ZUGFERD_EXTENDED ||
|
|
240
245
|
profileText === CII_PROFILE_IDS.ZUGFERD_V1_BASIC ||
|
|
241
246
|
profileText === CII_PROFILE_IDS.ZUGFERD_V1_COMFORT ||
|
|
242
247
|
profileText === CII_PROFILE_IDS.ZUGFERD_V1_EXTENDED) {
|
|
243
248
|
return InvoiceFormat.ZUGFERD;
|
|
244
249
|
}
|
|
245
|
-
// Check for Factur-X profiles
|
|
250
|
+
// Check for Factur-X profiles; the EN 16931 profile of ZUGFeRD 2.x has the same identifier, and
|
|
251
|
+
// an XML-only document of it is Factur-X: ZUGFeRD 2.x and Factur-X 1.0 are one standard
|
|
246
252
|
if (profileText.includes('factur-x') ||
|
|
247
253
|
profileText === CII_PROFILE_IDS.FACTURX_MINIMUM ||
|
|
248
|
-
profileText === CII_PROFILE_IDS.
|
|
249
|
-
profileText === CII_PROFILE_IDS.
|
|
254
|
+
profileText === CII_PROFILE_IDS.FACTURX_BASIC_WL ||
|
|
255
|
+
profileText === CII_PROFILE_IDS.EN16931) {
|
|
250
256
|
return InvoiceFormat.FACTURX;
|
|
251
257
|
}
|
|
252
258
|
}
|
|
@@ -278,4 +284,4 @@ export class FormatDetector {
|
|
|
278
284
|
return InvoiceFormat.CII;
|
|
279
285
|
}
|
|
280
286
|
}
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmRldGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy91dGlscy9mb3JtYXQuZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBVztRQUNwQyxJQUFJLENBQUM7WUFDSCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQy9CLENBQUM7WUFFRCxnREFBZ0Q7WUFDaEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztZQUVELHFDQUFxQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNwRSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBRWpDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDL0IsQ0FBQztZQUVELHFEQUFx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
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmRldGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy91dGlscy9mb3JtYXQuZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBVztRQUNwQyxJQUFJLENBQUM7WUFDSCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQy9CLENBQUM7WUFFRCxnREFBZ0Q7WUFDaEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztZQUVELHFDQUFxQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNwRSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBRWpDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDL0IsQ0FBQztZQUVELHFEQUFx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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { business } from '@tsclass/tsclass';
|
|
2
|
+
/** The contact of a party: the seller contact (BG-6) or the buyer contact (BG-9) */
|
|
3
|
+
export interface IPartyContact {
|
|
4
|
+
/** Contact point (BT-41, BT-56) */
|
|
5
|
+
name?: string;
|
|
6
|
+
/** Telephone number (BT-42, BT-57) */
|
|
7
|
+
phone?: string;
|
|
8
|
+
/** Email address (BT-43, BT-58) */
|
|
9
|
+
email?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The contact a party states, as the encoders write it: the contact metadata first, otherwise
|
|
13
|
+
* the party's own name, telephone number and email address; none when the party states neither.
|
|
14
|
+
* @param party The seller or the buyer
|
|
15
|
+
*/
|
|
16
|
+
export declare const getPartyContact: (party: business.TContact | undefined) => IPartyContact | undefined;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The contact a party states, as the encoders write it: the contact metadata first, otherwise
|
|
3
|
+
* the party's own name, telephone number and email address; none when the party states neither.
|
|
4
|
+
* @param party The seller or the buyer
|
|
5
|
+
*/
|
|
6
|
+
export const getPartyContact = (party) => {
|
|
7
|
+
const explicit = party?.metadata?.contactInformation;
|
|
8
|
+
if (explicit && (explicit.name || explicit.phone || explicit.email)) {
|
|
9
|
+
return explicit;
|
|
10
|
+
}
|
|
11
|
+
if (party?.email || party?.phone) {
|
|
12
|
+
return { name: party.name, phone: party.phone, email: party.email };
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydHkuY29udGFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdXRpbHMvcGFydHkuY29udGFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBb0MsRUFBNkIsRUFBRTtJQUNqRyxNQUFNLFFBQVEsR0FBSSxLQUErQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQztJQUNoRyxJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxLQUFLLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TAccountingDoc } from '../../interfaces/common.js';
|
|
2
|
+
/** A party identifier: the seller identifier (BT-29) or the buyer identifier (BT-46), with its scheme */
|
|
3
|
+
export interface IPartyIdentifier {
|
|
4
|
+
value: string;
|
|
5
|
+
/** The identification scheme (BT-29-1, BT-46-1): an ISO/IEC 6523 ICD code, or SEPA for a creditor identifier */
|
|
6
|
+
scheme?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The party identifiers (BT-29 seller, BT-46 buyer) a party carries in
|
|
10
|
+
* `additionalIdentifiers`, where the decoders keep the ones a document states;
|
|
11
|
+
* the envelope has no typed field for them. Entries without a value are
|
|
12
|
+
* skipped, a blank scheme is none.
|
|
13
|
+
* @param party The seller or the buyer
|
|
14
|
+
*/
|
|
15
|
+
export declare const getPartyIdentifiers: (party: unknown) => IPartyIdentifier[];
|
|
16
|
+
/**
|
|
17
|
+
* Refuses a document whose buyer carries an identifier (BT-46) with the scheme
|
|
18
|
+
* SEPA, naming the rule. The SEPA scheme is the creditor identifier (BT-90) of
|
|
19
|
+
* the seller or the payee. The CEN artefacts 1.3.16 report it on a buyer as
|
|
20
|
+
* BR-CL-10, "Any identifier identification scheme identifier MUST be coded
|
|
21
|
+
* using one of the ISO 6523 ICD list.": UBL admits it in a party identification
|
|
22
|
+
* of the seller and the payee only, and CII in no `ram:GlobalID` at all, which
|
|
23
|
+
* is where CII writes an identifier with a scheme. Nothing is left out
|
|
24
|
+
* silently.
|
|
25
|
+
* @param accountingDoc The document
|
|
26
|
+
* @param targetFormat The format being written
|
|
27
|
+
*/
|
|
28
|
+
export declare const assertPartyIdentifiersWritable: (accountingDoc: Pick<TAccountingDoc, "to">, targetFormat: string) => void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { EInvoiceFormatError } from '../../errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* The party identifiers (BT-29 seller, BT-46 buyer) a party carries in
|
|
4
|
+
* `additionalIdentifiers`, where the decoders keep the ones a document states;
|
|
5
|
+
* the envelope has no typed field for them. Entries without a value are
|
|
6
|
+
* skipped, a blank scheme is none.
|
|
7
|
+
* @param party The seller or the buyer
|
|
8
|
+
*/
|
|
9
|
+
export const getPartyIdentifiers = (party) => {
|
|
10
|
+
const entries = party?.additionalIdentifiers;
|
|
11
|
+
if (!Array.isArray(entries)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const identifiers = [];
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
const { value, scheme } = (entry ?? {});
|
|
17
|
+
if (typeof value !== 'string' || !value.trim()) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const trimmedScheme = typeof scheme === 'string' ? scheme.trim() : '';
|
|
21
|
+
identifiers.push({ value: value.trim(), ...(trimmedScheme ? { scheme: trimmedScheme } : {}) });
|
|
22
|
+
}
|
|
23
|
+
return identifiers;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Refuses a document whose buyer carries an identifier (BT-46) with the scheme
|
|
27
|
+
* SEPA, naming the rule. The SEPA scheme is the creditor identifier (BT-90) of
|
|
28
|
+
* the seller or the payee. The CEN artefacts 1.3.16 report it on a buyer as
|
|
29
|
+
* BR-CL-10, "Any identifier identification scheme identifier MUST be coded
|
|
30
|
+
* using one of the ISO 6523 ICD list.": UBL admits it in a party identification
|
|
31
|
+
* of the seller and the payee only, and CII in no `ram:GlobalID` at all, which
|
|
32
|
+
* is where CII writes an identifier with a scheme. Nothing is left out
|
|
33
|
+
* silently.
|
|
34
|
+
* @param accountingDoc The document
|
|
35
|
+
* @param targetFormat The format being written
|
|
36
|
+
*/
|
|
37
|
+
export const assertPartyIdentifiersWritable = (accountingDoc, targetFormat) => {
|
|
38
|
+
const entries = accountingDoc.to?.additionalIdentifiers;
|
|
39
|
+
if (!Array.isArray(entries)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
entries.forEach((entry, index) => {
|
|
43
|
+
const { scheme } = (entry ?? {});
|
|
44
|
+
if (typeof scheme === 'string' && scheme.trim().toUpperCase() === 'SEPA') {
|
|
45
|
+
throw new EInvoiceFormatError(`BR-CL-10: Any identifier identification scheme identifier MUST be coded using one of the ISO 6523 ICD list. to.additionalIdentifiers[${index}] states the scheme SEPA, the creditor identifier (BT-90) of a seller or payee, which a buyer identifier (BT-46) cannot have`, { targetFormat, unsupportedFeatures: ['BR-CL-10'] });
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydHkuaWRlbnRpZmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdXRpbHMvcGFydHkuaWRlbnRpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVN0RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWMsRUFBc0IsRUFBRTtJQUN4RSxNQUFNLE9BQU8sR0FBYSxLQUF5RCxFQUFFLHFCQUFxQixDQUFDO0lBQzNHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQXVCLEVBQUUsQ0FBQztJQUMzQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUEwQyxDQUFDO1FBQ2pGLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDL0MsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxhQUF5QyxFQUFFLFlBQW9CLEVBQVEsRUFBRTtJQUN0SCxNQUFNLE9BQU8sR0FBYSxhQUFhLENBQUMsRUFBc0QsRUFBRSxxQkFBcUIsQ0FBQztJQUN0SCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU87SUFDVCxDQUFDO0lBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWMsRUFBRSxLQUFhLEVBQUUsRUFBRTtRQUNoRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUF5QixDQUFDO1FBQ3pELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN6RSxNQUFNLElBQUksbUJBQW1CLENBQzNCLHdJQUF3SSxLQUFLLDhIQUE4SCxFQUMzUSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ3BELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a specification identifier (BT-24) is that of PEPPOL BIS Billing 3.0,
|
|
3
|
+
* `urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0`,
|
|
4
|
+
* the one identifier the PEPPOL BIS Billing 3.0 rules apply to. PINT, the
|
|
5
|
+
* A-NZ, Singapore and other PEPPOL derivatives, and the PEPPOL business process
|
|
6
|
+
* type (BT-23, `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0`), which an
|
|
7
|
+
* EN 16931 document may state as well, do not make a document one.
|
|
8
|
+
* @param customizationId The specification identifier
|
|
9
|
+
*/
|
|
10
|
+
export declare const isPeppolBisBilling3: (customizationId: string | undefined) => boolean;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { UBL_CUSTOMIZATION_IDS } from '../ubl/ubl.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a specification identifier (BT-24) is that of PEPPOL BIS Billing 3.0,
|
|
4
|
+
* `urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0`,
|
|
5
|
+
* the one identifier the PEPPOL BIS Billing 3.0 rules apply to. PINT, the
|
|
6
|
+
* A-NZ, Singapore and other PEPPOL derivatives, and the PEPPOL business process
|
|
7
|
+
* type (BT-23, `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0`), which an
|
|
8
|
+
* EN 16931 document may state as well, do not make a document one.
|
|
9
|
+
* @param customizationId The specification identifier
|
|
10
|
+
*/
|
|
11
|
+
export const isPeppolBisBilling3 = (customizationId) => (customizationId ?? '').trim() === UBL_CUSTOMIZATION_IDS.PEPPOL_BIS;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVwcG9sLnByb2ZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3V0aWxzL3BlcHBvbC5wcm9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxlQUFtQyxFQUFXLEVBQUUsQ0FDbEYsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUsscUJBQXFCLENBQUMsVUFBVSxDQUFDIn0=
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { TAccountingDoc } from '../../interfaces/common.js';
|
|
2
|
+
/**
|
|
3
|
+
* The official text of EN 16931 BR-CO-26 (CEN/TC 434 EN 16931 validation
|
|
4
|
+
* artefacts 1.3.16, fatal in UBL and CII)
|
|
5
|
+
*/
|
|
6
|
+
export declare const BR_CO_26_TEXT = "In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.";
|
|
7
|
+
/**
|
|
8
|
+
* Whether the seller of a UBL document meets BR-CO-26, as the CEN artefacts
|
|
9
|
+
* check it on `cac:AccountingSupplierParty`: a VAT identifier (BT-31, a
|
|
10
|
+
* `cac:PartyTaxScheme` with the scheme VAT), a seller identifier (BT-29, a
|
|
11
|
+
* `cac:PartyIdentification` whose scheme is not SEPA) or a legal registration
|
|
12
|
+
* identifier (BT-30, `cac:PartyLegalEntity/cbc:CompanyID`). A document without
|
|
13
|
+
* a seller party is not checked; BR-06 and BR-08 report that.
|
|
14
|
+
* @param doc The UBL document
|
|
15
|
+
*/
|
|
16
|
+
export declare const ublSellerMeetsBrCo26: (doc: Document) => boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Whether the seller of a CII document meets BR-CO-26, as the CEN artefacts
|
|
19
|
+
* check it on `ram:SellerTradeParty`: a seller identifier (BT-29, `ram:ID` or
|
|
20
|
+
* `ram:GlobalID`), a legal registration identifier (BT-30,
|
|
21
|
+
* `ram:SpecifiedLegalOrganization/ram:ID`) or a VAT identifier (BT-31,
|
|
22
|
+
* `ram:SpecifiedTaxRegistration/ram:ID` with the scheme VA).
|
|
23
|
+
* @param doc The CII document
|
|
24
|
+
*/
|
|
25
|
+
export declare const ciiSellerMeetsBrCo26: (doc: Document) => boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the seller of an envelope states an identifier BR-CO-26 accepts:
|
|
28
|
+
* the VAT identifier (BT-31, `registrationDetails.vatId`), the legal
|
|
29
|
+
* registration identifier (BT-30, `registrationDetails.registrationId`) or a
|
|
30
|
+
* seller identifier (BT-29), which a decoded UBL document keeps in the
|
|
31
|
+
* party's `additionalIdentifiers`. A tax number (BT-32) is none of them.
|
|
32
|
+
* @param accountingDoc The document
|
|
33
|
+
*/
|
|
34
|
+
export declare const envelopeSellerMeetsBrCo26: (accountingDoc: Pick<TAccountingDoc, "from">) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Refuses a written document whose seller fails BR-CO-26, naming the rule; no
|
|
37
|
+
* identifier is put in place of a missing one. The seller states its VAT
|
|
38
|
+
* identifier (`registrationDetails.vatId`, BT-31) or its legal registration
|
|
39
|
+
* identifier (`registrationDetails.registrationId`, BT-30); a tax number
|
|
40
|
+
* (BT-32) alone does not identify it. A seller identifier (BT-29) is written
|
|
41
|
+
* from the party's `additionalIdentifiers` (no typed field in the envelope).
|
|
42
|
+
* @param xml The written document
|
|
43
|
+
* @param syntax The syntax it is written in
|
|
44
|
+
* @param targetFormat The format being written
|
|
45
|
+
*/
|
|
46
|
+
export declare const assertSellerIdentified: (xml: string, syntax: "ubl" | "cii", targetFormat: string) => void;
|