@fin.cx/einvoice 9.0.0 → 10.0.1
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 +27 -2
- package/dist_ts/formats/base/base.decoder.js +52 -27
- 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 +35 -0
- package/dist_ts/formats/utils/date.value.js +98 -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 +4 -4
- package/readme.md +152 -7
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +52 -2
- package/ts/formats/base/base.decoder.ts +55 -45
- 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 +106 -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
|
@@ -6,15 +6,11 @@
|
|
|
6
6
|
* Required for B2G invoicing in Germany since November 2020
|
|
7
7
|
*/
|
|
8
8
|
import type { EInvoice } from '../../einvoice.js';
|
|
9
|
-
import type
|
|
9
|
+
import { type ValidationResult } from './validation.types.js';
|
|
10
10
|
/**
|
|
11
11
|
* XRechnung-specific validator implementing German CIUS rules
|
|
12
12
|
*/
|
|
13
13
|
export declare class XRechnungValidator {
|
|
14
|
-
private static readonly LEITWEG_ID_PATTERN;
|
|
15
|
-
private static readonly IBAN_PATTERNS;
|
|
16
|
-
private static readonly BIC_PATTERN;
|
|
17
|
-
private static readonly SEPA_COUNTRIES;
|
|
18
14
|
/**
|
|
19
15
|
* Validate XRechnung-specific requirements
|
|
20
16
|
*/
|
|
@@ -24,67 +20,24 @@ export declare class XRechnungValidator {
|
|
|
24
20
|
*/
|
|
25
21
|
private isXRechnungInvoice;
|
|
26
22
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* Rule: XR-DE-01
|
|
30
|
-
*/
|
|
31
|
-
private validateLeitwegId;
|
|
32
|
-
/**
|
|
33
|
-
* Check if string looks like a Leitweg-ID
|
|
34
|
-
*/
|
|
35
|
-
private looksLikeLeitwegId;
|
|
36
|
-
/**
|
|
37
|
-
* Check if this is a B2G invoice
|
|
38
|
-
*/
|
|
39
|
-
private isB2GInvoice;
|
|
40
|
-
/**
|
|
41
|
-
* Validate mandatory buyer reference (BT-10)
|
|
42
|
-
* Rule: XR-DE-15
|
|
23
|
+
* The buyer reference (BT-10) is stated (BR-DE-15). In German public procurement it carries
|
|
24
|
+
* the Leitweg-ID; the XRechnung rules do not check its format.
|
|
43
25
|
*/
|
|
44
26
|
private validateBuyerReference;
|
|
45
27
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Validate IBAN format and checksum
|
|
52
|
-
*/
|
|
53
|
-
private validateIBAN;
|
|
54
|
-
/**
|
|
55
|
-
* Validate BIC format
|
|
56
|
-
*/
|
|
57
|
-
private validateBIC;
|
|
58
|
-
/**
|
|
59
|
-
* Validate seller contact details
|
|
60
|
-
* Rule: XR-DE-02
|
|
28
|
+
* The seller contact (BG-6), as the XRechnung encoder writes it from the seller
|
|
29
|
+
* (`metadata.contactInformation`, otherwise its name, telephone number and email address):
|
|
30
|
+
* BR-DE-2 asks for it, BR-DE-27 and BR-DE-28 ask a telephone number (BT-42) and an email
|
|
31
|
+
* address (BT-43) to have the forms the XRechnung rules state (warnings).
|
|
61
32
|
*/
|
|
62
33
|
private validateSellerContact;
|
|
63
34
|
/**
|
|
64
|
-
*
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* Validate phone format (basic)
|
|
69
|
-
*/
|
|
70
|
-
private isValidPhone;
|
|
71
|
-
/**
|
|
72
|
-
* Validate tax registration details
|
|
73
|
-
* Rules: XR-DE-03, XR-DE-04
|
|
35
|
+
* The seller VAT identifier (BT-31) or tax registration identifier (BT-32) of the seller's
|
|
36
|
+
* registration details, `vatId` and `taxNumber` (BR-DE-16). The rule applies when a line
|
|
37
|
+
* states a VAT category code S, Z, E, AE, K, G, L or M; the encoders write S or AE for every
|
|
38
|
+
* line. It also accepts a tax representative (BG-11), which the envelope cannot state.
|
|
74
39
|
*/
|
|
75
40
|
private validateTaxRegistration;
|
|
76
|
-
/**
|
|
77
|
-
* Validate German VAT ID format
|
|
78
|
-
*/
|
|
79
|
-
private isValidGermanVatId;
|
|
80
|
-
/**
|
|
81
|
-
* Check if value looks like a German Tax ID
|
|
82
|
-
*/
|
|
83
|
-
private looksLikeGermanTaxId;
|
|
84
|
-
/**
|
|
85
|
-
* Validate German Tax ID format
|
|
86
|
-
*/
|
|
87
|
-
private isValidGermanTaxId;
|
|
88
41
|
/**
|
|
89
42
|
* Create XRechnung profile validator instance
|
|
90
43
|
*/
|
|
@@ -5,29 +5,14 @@
|
|
|
5
5
|
* XRechnung is the German Core Invoice Usage Specification (CIUS) of EN16931
|
|
6
6
|
* Required for B2G invoicing in Germany since November 2020
|
|
7
7
|
*/
|
|
8
|
+
import { EINVOICE_RULE_SOURCE } from './validation.types.js';
|
|
8
9
|
import { UBL_CUSTOMIZATION_IDS } from '../ubl/ubl.types.js';
|
|
10
|
+
import { getPartyContact } from '../utils/party.contact.js';
|
|
11
|
+
import { GERMAN_VAT_ID_FORMAT_CODE, germanVatIdFormatMessage, isMalformedGermanVatId } from '../utils/vat.id.js';
|
|
9
12
|
/**
|
|
10
13
|
* XRechnung-specific validator implementing German CIUS rules
|
|
11
14
|
*/
|
|
12
15
|
export class XRechnungValidator {
|
|
13
|
-
static LEITWEG_ID_PATTERN = /^[0-9]{2,3}-[0-9]{1,12}-[0-9]{2,30}$/;
|
|
14
|
-
static IBAN_PATTERNS = {
|
|
15
|
-
DE: { length: 22, pattern: /^DE[0-9]{2}[0-9]{8}[0-9]{10}$/ },
|
|
16
|
-
AT: { length: 20, pattern: /^AT[0-9]{2}[0-9]{5}[0-9]{11}$/ },
|
|
17
|
-
CH: { length: 21, pattern: /^CH[0-9]{2}[0-9]{5}[0-9A-Z]{12}$/ },
|
|
18
|
-
FR: { length: 27, pattern: /^FR[0-9]{2}[0-9]{5}[0-9]{5}[0-9A-Z]{11}[0-9]{2}$/ },
|
|
19
|
-
NL: { length: 18, pattern: /^NL[0-9]{2}[A-Z]{4}[0-9]{10}$/ },
|
|
20
|
-
BE: { length: 16, pattern: /^BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}$/ },
|
|
21
|
-
IT: { length: 27, pattern: /^IT[0-9]{2}[A-Z][0-9]{5}[0-9]{5}[0-9A-Z]{12}$/ },
|
|
22
|
-
ES: { length: 24, pattern: /^ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{2}[0-9]{10}$/ }
|
|
23
|
-
};
|
|
24
|
-
static BIC_PATTERN = /^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$/;
|
|
25
|
-
// SEPA countries
|
|
26
|
-
static SEPA_COUNTRIES = new Set([
|
|
27
|
-
'AD', 'AT', 'BE', 'BG', 'CH', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI',
|
|
28
|
-
'FR', 'GB', 'GI', 'GR', 'HR', 'HU', 'IE', 'IS', 'IT', 'LI', 'LT', 'LU',
|
|
29
|
-
'LV', 'MC', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK', 'SM', 'VA'
|
|
30
|
-
]);
|
|
31
16
|
/**
|
|
32
17
|
* Validate XRechnung-specific requirements
|
|
33
18
|
*/
|
|
@@ -38,9 +23,7 @@ export class XRechnungValidator {
|
|
|
38
23
|
return results; // Not XRechnung, skip validation
|
|
39
24
|
}
|
|
40
25
|
// Validate mandatory fields
|
|
41
|
-
results.push(...this.validateLeitwegId(invoice));
|
|
42
26
|
results.push(...this.validateBuyerReference(invoice));
|
|
43
|
-
results.push(...this.validatePaymentDetails(invoice));
|
|
44
27
|
results.push(...this.validateSellerContact(invoice));
|
|
45
28
|
results.push(...this.validateTaxRegistration(invoice));
|
|
46
29
|
return results;
|
|
@@ -63,352 +46,103 @@ export class XRechnungValidator {
|
|
|
63
46
|
customizationId.toLowerCase().includes(profile.toLowerCase()));
|
|
64
47
|
}
|
|
65
48
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* Rule: XR-DE-01
|
|
69
|
-
*/
|
|
70
|
-
validateLeitwegId(invoice) {
|
|
71
|
-
const results = [];
|
|
72
|
-
// Leitweg-ID is typically in buyer reference (BT-10) for B2G
|
|
73
|
-
const buyerReference = invoice.metadata?.buyerReference || invoice.buyerReference || '';
|
|
74
|
-
// Check if it looks like a Leitweg-ID
|
|
75
|
-
if (buyerReference && this.looksLikeLeitwegId(buyerReference)) {
|
|
76
|
-
if (!XRechnungValidator.LEITWEG_ID_PATTERN.test(buyerReference.trim())) {
|
|
77
|
-
results.push({
|
|
78
|
-
ruleId: 'XR-DE-01',
|
|
79
|
-
severity: 'error',
|
|
80
|
-
source: 'XRECHNUNG',
|
|
81
|
-
message: `Invalid Leitweg-ID format: ${buyerReference}. Expected pattern: [0-9]{2,3}-[0-9]{1,12}-[0-9]{2,30}`,
|
|
82
|
-
btReference: 'BT-10',
|
|
83
|
-
field: 'buyerReference',
|
|
84
|
-
value: buyerReference
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// For B2G invoices, Leitweg-ID might be mandatory
|
|
89
|
-
if (this.isB2GInvoice(invoice) && !buyerReference) {
|
|
90
|
-
results.push({
|
|
91
|
-
ruleId: 'XR-DE-15',
|
|
92
|
-
severity: 'error',
|
|
93
|
-
source: 'XRECHNUNG',
|
|
94
|
-
message: 'Buyer reference (Leitweg-ID) is mandatory for B2G invoices in Germany',
|
|
95
|
-
btReference: 'BT-10',
|
|
96
|
-
field: 'buyerReference'
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return results;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Check if string looks like a Leitweg-ID
|
|
103
|
-
*/
|
|
104
|
-
looksLikeLeitwegId(value) {
|
|
105
|
-
// Contains dashes and numbers in the right proportion
|
|
106
|
-
return value.includes('-') && /^\d+-\d+-\d+$/.test(value.trim());
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Check if this is a B2G invoice
|
|
110
|
-
*/
|
|
111
|
-
isB2GInvoice(invoice) {
|
|
112
|
-
// Check if buyer is a public entity (simplified check)
|
|
113
|
-
const buyerName = invoice.to?.name?.toLowerCase() || '';
|
|
114
|
-
const buyerType = invoice.metadata?.extensions?.buyerType?.toLowerCase() || '';
|
|
115
|
-
const publicIndicators = [
|
|
116
|
-
'bundesamt', 'landesamt', 'stadtverwaltung', 'gemeinde',
|
|
117
|
-
'ministerium', 'behörde', 'öffentlich', 'public', 'government'
|
|
118
|
-
];
|
|
119
|
-
return publicIndicators.some(indicator => buyerName.includes(indicator) || buyerType.includes(indicator));
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Validate mandatory buyer reference (BT-10)
|
|
123
|
-
* Rule: XR-DE-15
|
|
49
|
+
* The buyer reference (BT-10) is stated (BR-DE-15). In German public procurement it carries
|
|
50
|
+
* the Leitweg-ID; the XRechnung rules do not check its format.
|
|
124
51
|
*/
|
|
125
52
|
validateBuyerReference(invoice) {
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (this.isB2GInvoice(invoice)) {
|
|
130
|
-
return results;
|
|
53
|
+
const buyerReference = invoice.buyerReference || '';
|
|
54
|
+
if (buyerReference.trim().length > 0) {
|
|
55
|
+
return [];
|
|
131
56
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
ruleId: 'XR-DE-15',
|
|
57
|
+
return [{
|
|
58
|
+
ruleId: 'BR-DE-15',
|
|
135
59
|
severity: 'error',
|
|
136
60
|
source: 'XRECHNUNG',
|
|
137
|
-
message: '
|
|
61
|
+
message: 'The buyer reference (BT-10) is stated',
|
|
138
62
|
btReference: 'BT-10',
|
|
139
63
|
field: 'buyerReference'
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return results;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Validate payment details (IBAN/BIC for SEPA)
|
|
146
|
-
* Rules: XR-DE-19, XR-DE-20
|
|
147
|
-
*/
|
|
148
|
-
validatePaymentDetails(invoice) {
|
|
149
|
-
const results = [];
|
|
150
|
-
// Check payment means
|
|
151
|
-
const paymentMeans = invoice.metadata?.extensions?.paymentMeans;
|
|
152
|
-
if (!paymentMeans || paymentMeans.length === 0) {
|
|
153
|
-
return results; // No payment details to validate
|
|
154
|
-
}
|
|
155
|
-
for (const payment of paymentMeans) {
|
|
156
|
-
// Validate IBAN if present
|
|
157
|
-
if (payment.iban) {
|
|
158
|
-
const ibanResult = this.validateIBAN(payment.iban);
|
|
159
|
-
if (!ibanResult.valid) {
|
|
160
|
-
results.push({
|
|
161
|
-
ruleId: 'XR-DE-19',
|
|
162
|
-
severity: 'error',
|
|
163
|
-
source: 'XRECHNUNG',
|
|
164
|
-
message: `Invalid IBAN: ${ibanResult.message}`,
|
|
165
|
-
btReference: 'BT-84',
|
|
166
|
-
field: 'iban',
|
|
167
|
-
value: payment.iban
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
// Check if IBAN country is in SEPA zone
|
|
171
|
-
const countryCode = payment.iban.substring(0, 2);
|
|
172
|
-
if (!XRechnungValidator.SEPA_COUNTRIES.has(countryCode)) {
|
|
173
|
-
results.push({
|
|
174
|
-
ruleId: 'XR-DE-19',
|
|
175
|
-
severity: 'warning',
|
|
176
|
-
source: 'XRECHNUNG',
|
|
177
|
-
message: `IBAN country ${countryCode} is not in SEPA zone`,
|
|
178
|
-
btReference: 'BT-84',
|
|
179
|
-
field: 'iban',
|
|
180
|
-
value: payment.iban
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
// Validate BIC if present
|
|
185
|
-
if (payment.bic) {
|
|
186
|
-
const bicResult = this.validateBIC(payment.bic);
|
|
187
|
-
if (!bicResult.valid) {
|
|
188
|
-
results.push({
|
|
189
|
-
ruleId: 'XR-DE-20',
|
|
190
|
-
severity: 'error',
|
|
191
|
-
source: 'XRECHNUNG',
|
|
192
|
-
message: `Invalid BIC: ${bicResult.message}`,
|
|
193
|
-
btReference: 'BT-86',
|
|
194
|
-
field: 'bic',
|
|
195
|
-
value: payment.bic
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// For German domestic payments, BIC is optional if IBAN starts with DE
|
|
200
|
-
if (payment.iban?.startsWith('DE') && !payment.bic) {
|
|
201
|
-
// This is fine, BIC is optional for domestic German payments
|
|
202
|
-
}
|
|
203
|
-
else if (payment.iban && !payment.iban.startsWith('DE') && !payment.bic) {
|
|
204
|
-
results.push({
|
|
205
|
-
ruleId: 'XR-DE-20',
|
|
206
|
-
severity: 'warning',
|
|
207
|
-
source: 'XRECHNUNG',
|
|
208
|
-
message: 'BIC is recommended for international SEPA transfers',
|
|
209
|
-
btReference: 'BT-86',
|
|
210
|
-
field: 'bic'
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return results;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Validate IBAN format and checksum
|
|
218
|
-
*/
|
|
219
|
-
validateIBAN(iban) {
|
|
220
|
-
// Remove spaces and convert to uppercase
|
|
221
|
-
const cleanIBAN = iban.replace(/\s/g, '').toUpperCase();
|
|
222
|
-
// Check basic format
|
|
223
|
-
if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/.test(cleanIBAN)) {
|
|
224
|
-
return { valid: false, message: 'Invalid IBAN format' };
|
|
225
|
-
}
|
|
226
|
-
// Get country code
|
|
227
|
-
const countryCode = cleanIBAN.substring(0, 2);
|
|
228
|
-
// Check country-specific format
|
|
229
|
-
const countryFormat = XRechnungValidator.IBAN_PATTERNS[countryCode];
|
|
230
|
-
if (countryFormat) {
|
|
231
|
-
if (cleanIBAN.length !== countryFormat.length) {
|
|
232
|
-
return {
|
|
233
|
-
valid: false,
|
|
234
|
-
message: `Invalid IBAN length for ${countryCode}: expected ${countryFormat.length}, got ${cleanIBAN.length}`
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
if (!countryFormat.pattern.test(cleanIBAN)) {
|
|
238
|
-
return {
|
|
239
|
-
valid: false,
|
|
240
|
-
message: `Invalid IBAN format for ${countryCode}`
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// Validate checksum using mod-97 algorithm
|
|
245
|
-
const rearranged = cleanIBAN.substring(4) + cleanIBAN.substring(0, 4);
|
|
246
|
-
const numeric = rearranged.replace(/[A-Z]/g, char => (char.charCodeAt(0) - 55).toString());
|
|
247
|
-
// Calculate mod 97 for large numbers
|
|
248
|
-
let remainder = 0;
|
|
249
|
-
for (let i = 0; i < numeric.length; i++) {
|
|
250
|
-
remainder = (remainder * 10 + parseInt(numeric[i])) % 97;
|
|
251
|
-
}
|
|
252
|
-
if (remainder !== 1) {
|
|
253
|
-
return { valid: false, message: 'Invalid IBAN checksum' };
|
|
254
|
-
}
|
|
255
|
-
return { valid: true };
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Validate BIC format
|
|
259
|
-
*/
|
|
260
|
-
validateBIC(bic) {
|
|
261
|
-
const cleanBIC = bic.replace(/\s/g, '').toUpperCase();
|
|
262
|
-
if (!XRechnungValidator.BIC_PATTERN.test(cleanBIC)) {
|
|
263
|
-
return {
|
|
264
|
-
valid: false,
|
|
265
|
-
message: 'Invalid BIC format. Expected 8 or 11 alphanumeric characters'
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
// Additional validation could check if BIC exists in SWIFT directory
|
|
269
|
-
// but that requires external data
|
|
270
|
-
return { valid: true };
|
|
64
|
+
}];
|
|
271
65
|
}
|
|
272
66
|
/**
|
|
273
|
-
*
|
|
274
|
-
*
|
|
67
|
+
* The seller contact (BG-6), as the XRechnung encoder writes it from the seller
|
|
68
|
+
* (`metadata.contactInformation`, otherwise its name, telephone number and email address):
|
|
69
|
+
* BR-DE-2 asks for it, BR-DE-27 and BR-DE-28 ask a telephone number (BT-42) and an email
|
|
70
|
+
* address (BT-43) to have the forms the XRechnung rules state (warnings).
|
|
275
71
|
*/
|
|
276
72
|
validateSellerContact(invoice) {
|
|
277
73
|
const results = [];
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
if (!sellerContact || (!sellerContact.name && !sellerContact.email && !sellerContact.phone)) {
|
|
74
|
+
const sellerContact = getPartyContact(invoice.from);
|
|
75
|
+
if (!sellerContact) {
|
|
281
76
|
results.push({
|
|
282
|
-
ruleId: '
|
|
77
|
+
ruleId: 'BR-DE-2',
|
|
283
78
|
severity: 'error',
|
|
284
79
|
source: 'XRECHNUNG',
|
|
285
|
-
message: '
|
|
80
|
+
message: 'The seller contact (BG-6) is stated',
|
|
286
81
|
bgReference: 'BG-6',
|
|
287
|
-
field: '
|
|
82
|
+
field: 'from'
|
|
288
83
|
});
|
|
84
|
+
return results;
|
|
289
85
|
}
|
|
290
|
-
//
|
|
291
|
-
if (sellerContact
|
|
86
|
+
// XR-TELEPHONE-REGEX of the XRechnung rules: at least three digits
|
|
87
|
+
if (sellerContact.phone && !/([0-9].*){3,}/.test(sellerContact.phone.trim())) {
|
|
292
88
|
results.push({
|
|
293
|
-
ruleId: '
|
|
89
|
+
ruleId: 'BR-DE-27',
|
|
294
90
|
severity: 'warning',
|
|
295
91
|
source: 'XRECHNUNG',
|
|
296
|
-
message: `
|
|
297
|
-
btReference: 'BT-
|
|
298
|
-
field: '
|
|
299
|
-
value: sellerContact.
|
|
92
|
+
message: `The seller contact telephone number (BT-42) contains at least three digits: ${sellerContact.phone}`,
|
|
93
|
+
btReference: 'BT-42',
|
|
94
|
+
field: 'from.phone',
|
|
95
|
+
value: sellerContact.phone
|
|
300
96
|
});
|
|
301
97
|
}
|
|
302
|
-
//
|
|
303
|
-
if (sellerContact
|
|
98
|
+
// XR-EMAIL-REGEX of the XRechnung rules
|
|
99
|
+
if (sellerContact.email && !/^[^@\s]+@([^@.\s]+\.)+[^@.\s]+$/.test(sellerContact.email.trim())) {
|
|
304
100
|
results.push({
|
|
305
|
-
ruleId: '
|
|
101
|
+
ruleId: 'BR-DE-28',
|
|
306
102
|
severity: 'warning',
|
|
307
103
|
source: 'XRECHNUNG',
|
|
308
|
-
message: `
|
|
309
|
-
btReference: 'BT-
|
|
310
|
-
field: '
|
|
311
|
-
value: sellerContact.
|
|
104
|
+
message: `The seller contact email address (BT-43) has exactly one @, with a domain after it: ${sellerContact.email}`,
|
|
105
|
+
btReference: 'BT-43',
|
|
106
|
+
field: 'from.email',
|
|
107
|
+
value: sellerContact.email
|
|
312
108
|
});
|
|
313
109
|
}
|
|
314
110
|
return results;
|
|
315
111
|
}
|
|
316
112
|
/**
|
|
317
|
-
*
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
return emailPattern.test(email);
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Validate phone format (basic)
|
|
325
|
-
*/
|
|
326
|
-
isValidPhone(phone) {
|
|
327
|
-
// Remove common formatting characters
|
|
328
|
-
const cleanPhone = phone.replace(/[\s\-\(\)\.]/g, '');
|
|
329
|
-
// Check if it contains only numbers and optional + at start
|
|
330
|
-
return /^\+?[0-9]{6,15}$/.test(cleanPhone);
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Validate tax registration details
|
|
334
|
-
* Rules: XR-DE-03, XR-DE-04
|
|
113
|
+
* The seller VAT identifier (BT-31) or tax registration identifier (BT-32) of the seller's
|
|
114
|
+
* registration details, `vatId` and `taxNumber` (BR-DE-16). The rule applies when a line
|
|
115
|
+
* states a VAT category code S, Z, E, AE, K, G, L or M; the encoders write S or AE for every
|
|
116
|
+
* line. It also accepts a tax representative (BG-11), which the envelope cannot state.
|
|
335
117
|
*/
|
|
336
118
|
validateTaxRegistration(invoice) {
|
|
337
119
|
const results = [];
|
|
338
|
-
const sellerVatId = invoice.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
const sellerTaxId = invoice.metadata?.extensions?.sellerTaxId;
|
|
342
|
-
// Either VAT ID or Tax ID must be present
|
|
343
|
-
if (!sellerVatId && !sellerTaxId) {
|
|
120
|
+
const sellerVatId = invoice.from?.registrationDetails?.vatId?.trim() || '';
|
|
121
|
+
const sellerTaxNumber = invoice.from?.registrationDetails?.taxNumber?.trim() || '';
|
|
122
|
+
if ((invoice.items ?? []).length > 0 && !sellerVatId && !sellerTaxNumber) {
|
|
344
123
|
results.push({
|
|
345
|
-
ruleId: '
|
|
124
|
+
ruleId: 'BR-DE-16',
|
|
346
125
|
severity: 'error',
|
|
347
126
|
source: 'XRECHNUNG',
|
|
348
|
-
message: '
|
|
127
|
+
message: 'The seller states its VAT identifier (BT-31) or tax registration identifier (BT-32), from.registrationDetails.vatId or .taxNumber',
|
|
349
128
|
btReference: 'BT-31',
|
|
350
|
-
field: '
|
|
129
|
+
field: 'from.registrationDetails'
|
|
351
130
|
});
|
|
352
131
|
}
|
|
353
|
-
//
|
|
354
|
-
if (sellerVatId
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
// Validate German Tax ID format if present
|
|
368
|
-
if (sellerTaxId && this.looksLikeGermanTaxId(sellerTaxId)) {
|
|
369
|
-
if (!this.isValidGermanTaxId(sellerTaxId)) {
|
|
370
|
-
results.push({
|
|
371
|
-
ruleId: 'XR-DE-04',
|
|
372
|
-
severity: 'warning',
|
|
373
|
-
source: 'XRECHNUNG',
|
|
374
|
-
message: `Invalid German Tax ID format: ${sellerTaxId}`,
|
|
375
|
-
btReference: 'BT-32',
|
|
376
|
-
field: 'taxId',
|
|
377
|
-
value: sellerTaxId
|
|
378
|
-
});
|
|
379
|
-
}
|
|
132
|
+
// The package's own check of the German VAT identification number format (no official rule)
|
|
133
|
+
if (isMalformedGermanVatId(sellerVatId)) {
|
|
134
|
+
results.push({
|
|
135
|
+
ruleId: GERMAN_VAT_ID_FORMAT_CODE,
|
|
136
|
+
severity: 'error',
|
|
137
|
+
source: EINVOICE_RULE_SOURCE,
|
|
138
|
+
message: germanVatIdFormatMessage(sellerVatId),
|
|
139
|
+
btReference: 'BT-31',
|
|
140
|
+
field: 'from.registrationDetails.vatId',
|
|
141
|
+
value: sellerVatId
|
|
142
|
+
});
|
|
380
143
|
}
|
|
381
144
|
return results;
|
|
382
145
|
}
|
|
383
|
-
/**
|
|
384
|
-
* Validate German VAT ID format
|
|
385
|
-
*/
|
|
386
|
-
isValidGermanVatId(vatId) {
|
|
387
|
-
// German VAT ID: DE followed by 9 digits
|
|
388
|
-
const germanVatPattern = /^DE[0-9]{9}$/;
|
|
389
|
-
return germanVatPattern.test(vatId.replace(/\s/g, ''));
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Check if value looks like a German Tax ID
|
|
393
|
-
*/
|
|
394
|
-
looksLikeGermanTaxId(value) {
|
|
395
|
-
const clean = value.replace(/[\s\/\-]/g, '');
|
|
396
|
-
return /^[0-9]{10,11}$/.test(clean);
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Validate German Tax ID format
|
|
400
|
-
*/
|
|
401
|
-
isValidGermanTaxId(taxId) {
|
|
402
|
-
// German Tax ID: 11 digits with specific checksum algorithm
|
|
403
|
-
const clean = taxId.replace(/[\s\/\-]/g, '');
|
|
404
|
-
if (!/^[0-9]{11}$/.test(clean)) {
|
|
405
|
-
return false;
|
|
406
|
-
}
|
|
407
|
-
// Simplified validation - full algorithm would require checksum calculation
|
|
408
|
-
// At least check that not all digits are the same
|
|
409
|
-
const firstDigit = clean[0];
|
|
410
|
-
return !clean.split('').every(digit => digit === firstDigit);
|
|
411
|
-
}
|
|
412
146
|
/**
|
|
413
147
|
* Create XRechnung profile validator instance
|
|
414
148
|
*/
|
|
@@ -416,4 +150,4 @@ export class XRechnungValidator {
|
|
|
416
150
|
return new XRechnungValidator();
|
|
417
151
|
}
|
|
418
152
|
}
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJlY2hudW5nLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdmFsaWRhdGlvbi94cmVjaG51bmcudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUlILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixNQUFNLENBQVUsa0JBQWtCLEdBQUcsc0NBQXNDLENBQUM7SUFDNUUsTUFBTSxDQUFVLGFBQWEsR0FBd0Q7UUFDM0YsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7UUFDNUQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7UUFDNUQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUU7UUFDL0QsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0RBQWtELEVBQUU7UUFDL0UsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7UUFDNUQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUU7UUFDbkUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0NBQStDLEVBQUU7UUFDNUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0NBQStDLEVBQUU7S0FDN0UsQ0FBQztJQUNNLE1BQU0sQ0FBVSxXQUFXLEdBQUcscUNBQXFDLENBQUM7SUFFNUUsaUJBQWlCO0lBQ1QsTUFBTSxDQUFVLGNBQWMsR0FB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
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJlY2hudW5nLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdmFsaWRhdGlvbi94cmVjaG51bmcudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBRSxvQkFBb0IsRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsT0FBaUI7UUFDakMsTUFBTSxPQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUV2Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sT0FBTyxDQUFDLENBQUMsaUNBQWlDO1FBQ25ELENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdkQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsT0FBaUI7UUFDMUMsTUFBTSxTQUFTLEdB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
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ import { ZUGFeRDEncoder } from './formats/cii/zugferd/zugferd.encoder.js';
|
|
|
28
28
|
import { ZUGFeRDValidator } from './formats/cii/zugferd/zugferd.validator.js';
|
|
29
29
|
import { ZUGFeRDV1Decoder } from './formats/cii/zugferd/zugferd.v1.decoder.js';
|
|
30
30
|
export type { TInvoice, TCorrectedInvoice, TCorrectedInvoiceReference, TInvoiceCorrection, TCreditNote, TDebitNote, TSelfBilledInvoice, TAccountingDoc, TAccountingDocType, TAccountingDocEnvelope, TInvoiceDocument, TContact, TLetterEnvelope, TDocumentEnvelope, IPdf, ValidationError, ValidationResult, IValidator, ExportFormat, EInvoiceOptions } from './interfaces/common.js';
|
|
31
|
+
export type { IEInvoiceStatedValues, IStatedDocumentTotals, IStatedVatBreakdown, IStatedLine, IStatedAllowanceCharge, } from './interfaces/stated.values.js';
|
|
31
32
|
export { ValidationLevel, InvoiceFormat } from './interfaces/common.js';
|
|
32
33
|
export { common as interfaces };
|
|
33
34
|
export { EInvoice };
|
package/dist_ts/index.js
CHANGED
|
@@ -98,4 +98,4 @@ export function validateXml(xml, level = common.ValidationLevel.SYNTAX) {
|
|
|
98
98
|
export function createEInvoice() {
|
|
99
99
|
return new EInvoice();
|
|
100
100
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUVqRCxtQkFBbUI7QUFDbkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU1RSxzQkFBc0I7QUFDdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakUsMEJBQTBCO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsMEJBQTBCO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsdUJBQXVCO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixF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
|
|
@@ -14,10 +14,6 @@ export interface IEInvoiceMetadata {
|
|
|
14
14
|
vatAccountingCurrency?: string;
|
|
15
15
|
documentTypeCode?: string;
|
|
16
16
|
paymentMeansCode?: string;
|
|
17
|
-
amountDue?: number;
|
|
18
|
-
sellerTaxId?: string;
|
|
19
|
-
buyerTaxId?: string;
|
|
20
|
-
buyerReference?: string;
|
|
21
17
|
profileId?: string;
|
|
22
18
|
paymentTerms?: string;
|
|
23
19
|
deliveryAddress?: {
|