@fin.cx/einvoice 5.0.2 → 5.1.2
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 +1 -1
- package/dist_ts/einvoice.d.ts +4 -8
- package/dist_ts/einvoice.js +46 -7
- package/dist_ts/formats/converters/xml-to-einvoice.converter.d.ts +21 -0
- package/dist_ts/formats/converters/xml-to-einvoice.converter.js +127 -0
- package/dist_ts/formats/semantic/bt-bg.model.d.ts +445 -0
- package/dist_ts/formats/semantic/bt-bg.model.js +12 -0
- package/dist_ts/formats/semantic/semantic.adapter.d.ts +87 -0
- package/dist_ts/formats/semantic/semantic.adapter.js +538 -0
- package/dist_ts/formats/semantic/semantic.validator.d.ts +48 -0
- package/dist_ts/formats/semantic/semantic.validator.js +596 -0
- package/dist_ts/formats/utils/currency.calculator.decimal.d.ts +98 -0
- package/dist_ts/formats/utils/currency.calculator.decimal.js +212 -0
- package/dist_ts/formats/utils/currency.utils.d.ts +99 -0
- package/dist_ts/formats/utils/currency.utils.js +250 -0
- package/dist_ts/formats/utils/decimal.d.ts +151 -0
- package/dist_ts/formats/utils/decimal.js +435 -0
- package/dist_ts/formats/validation/codelist.validator.d.ts +49 -0
- package/dist_ts/formats/validation/codelist.validator.js +188 -0
- package/dist_ts/formats/validation/conformance.harness.d.ts +99 -0
- package/dist_ts/formats/validation/conformance.harness.js +471 -0
- package/dist_ts/formats/validation/en16931.business-rules.validator.d.ts +58 -0
- package/dist_ts/formats/validation/en16931.business-rules.validator.js +459 -0
- package/dist_ts/formats/validation/facturx.validator.d.ts +75 -0
- package/dist_ts/formats/validation/facturx.validator.js +522 -0
- package/dist_ts/formats/validation/integrated.validator.d.ts +82 -0
- package/dist_ts/formats/validation/integrated.validator.js +311 -0
- package/dist_ts/formats/validation/peppol.validator.d.ts +77 -0
- package/dist_ts/formats/validation/peppol.validator.js +529 -0
- package/dist_ts/formats/validation/schematron.downloader.d.ts +71 -0
- package/dist_ts/formats/validation/schematron.downloader.js +254 -0
- package/dist_ts/formats/validation/schematron.integration.d.ts +60 -0
- package/dist_ts/formats/validation/schematron.integration.js +230 -0
- package/dist_ts/formats/validation/schematron.validator.d.ts +79 -0
- package/dist_ts/formats/validation/schematron.validator.js +288 -0
- package/dist_ts/formats/validation/schematron.worker.d.ts +50 -0
- package/dist_ts/formats/validation/schematron.worker.js +185 -0
- package/dist_ts/formats/validation/validation.types.d.ts +163 -0
- package/dist_ts/formats/validation/validation.types.js +181 -0
- package/dist_ts/formats/validation/vat-categories.validator.d.ts +87 -0
- package/dist_ts/formats/validation/vat-categories.validator.js +497 -0
- package/dist_ts/formats/validation/xrechnung.validator.d.ts +92 -0
- package/dist_ts/formats/validation/xrechnung.validator.js +417 -0
- package/dist_ts/interfaces/common.d.ts +1 -0
- package/dist_ts/interfaces/en16931-metadata.d.ts +83 -0
- package/dist_ts/interfaces/en16931-metadata.js +6 -0
- package/dist_ts/plugins.d.ts +3 -1
- package/dist_ts/plugins.js +7 -2
- package/dist_ts_install/download-schematron.d.ts +6 -0
- package/dist_ts_install/download-schematron.js +62 -0
- package/dist_ts_install/download-test-samples.d.ts +19 -0
- package/dist_ts_install/download-test-samples.js +169 -0
- package/dist_ts_install/download-xrechnung-rules.d.ts +7 -0
- package/dist_ts_install/download-xrechnung-rules.js +146 -0
- package/dist_ts_install/index.d.ts +8 -0
- package/dist_ts_install/index.js +246 -0
- package/package.json +13 -8
- package/readme.md +255 -810
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +63 -14
- package/ts/formats/converters/xml-to-einvoice.converter.ts +142 -0
- package/ts/formats/semantic/bt-bg.model.ts +524 -0
- package/ts/formats/semantic/semantic.adapter.ts +600 -0
- package/ts/formats/semantic/semantic.validator.ts +654 -0
- package/ts/formats/utils/currency.calculator.decimal.ts +323 -0
- package/ts/formats/utils/currency.utils.ts +299 -0
- package/ts/formats/utils/decimal.ts +509 -0
- package/ts/formats/validation/codelist.validator.ts +317 -0
- package/ts/formats/validation/conformance.harness.ts +591 -0
- package/ts/formats/validation/en16931.business-rules.validator.ts +694 -0
- package/ts/formats/validation/facturx.validator.ts +579 -0
- package/ts/formats/validation/integrated.validator.ts +405 -0
- package/ts/formats/validation/peppol.validator.ts +589 -0
- package/ts/formats/validation/schematron.downloader.ts +304 -0
- package/ts/formats/validation/schematron.integration.ts +285 -0
- package/ts/formats/validation/schematron.validator.ts +348 -0
- package/ts/formats/validation/schematron.worker.ts +221 -0
- package/ts/formats/validation/validation.types.ts +274 -0
- package/ts/formats/validation/vat-categories.validator.ts +845 -0
- package/ts/formats/validation/xrechnung.validator.ts +494 -0
- package/ts/interfaces/common.ts +1 -0
- package/ts/interfaces/en16931-metadata.ts +104 -0
- package/ts/plugins.ts +8 -0
- package/ts/tspublish.json +3 -0
- package/dist_ts/classes.decoder.d.ts +0 -40
- package/dist_ts/classes.decoder.js +0 -320
- package/dist_ts/classes.encoder.d.ts +0 -51
- package/dist_ts/classes.encoder.js +0 -293
- package/dist_ts/classes.xinvoice.d.ts +0 -136
- package/dist_ts/classes.xinvoice.js +0 -352
- package/dist_ts/formats/base.decoder.d.ts +0 -19
- package/dist_ts/formats/base.decoder.js +0 -130
- package/dist_ts/formats/base.validator.d.ts +0 -44
- package/dist_ts/formats/base.validator.js +0 -39
- package/dist_ts/formats/decoder.factory.d.ts +0 -15
- package/dist_ts/formats/decoder.factory.js +0 -46
- package/dist_ts/formats/factorx.decoder.d.ts +0 -18
- package/dist_ts/formats/factorx.decoder.js +0 -178
- package/dist_ts/formats/factorx.encoder.d.ts +0 -51
- package/dist_ts/formats/factorx.encoder.js +0 -293
- package/dist_ts/formats/facturx.decoder.d.ts +0 -18
- package/dist_ts/formats/facturx.decoder.js +0 -210
- package/dist_ts/formats/facturx.encoder.d.ts +0 -51
- package/dist_ts/formats/facturx.encoder.js +0 -293
- package/dist_ts/formats/facturx.validator.d.ts +0 -67
- package/dist_ts/formats/facturx.validator.js +0 -266
- package/dist_ts/formats/pdf/robust-pdf.extractor.d.ts +0 -40
- package/dist_ts/formats/pdf/robust-pdf.extractor.js +0 -324
- package/dist_ts/formats/ubl.validator.d.ts +0 -82
- package/dist_ts/formats/ubl.validator.js +0 -306
- package/dist_ts/formats/validator.factory.d.ts +0 -18
- package/dist_ts/formats/validator.factory.js +0 -78
- package/dist_ts/formats/xinvoice.decoder.d.ts +0 -28
- package/dist_ts/formats/xinvoice.decoder.js +0 -332
- package/dist_ts/formats/xinvoice.encoder.d.ts +0 -19
- package/dist_ts/formats/xinvoice.encoder.js +0 -282
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import * as xmldom from 'xmldom';
|
|
3
|
-
/**
|
|
4
|
-
* A class to convert a given XML string (ZUGFeRD/Factur-X, UBL or fatturaPA)
|
|
5
|
-
* into a structured ILetter with invoice data.
|
|
6
|
-
*
|
|
7
|
-
* Handles different invoice XML formats:
|
|
8
|
-
* - ZUGFeRD/Factur-X (CII)
|
|
9
|
-
* - UBL
|
|
10
|
-
* - FatturaPA
|
|
11
|
-
*/
|
|
12
|
-
export class FacturXDecoder {
|
|
13
|
-
constructor(xmlString) {
|
|
14
|
-
this.xmlDoc = null;
|
|
15
|
-
if (!xmlString) {
|
|
16
|
-
throw new Error('No XML string provided to decoder');
|
|
17
|
-
}
|
|
18
|
-
this.xmlString = xmlString;
|
|
19
|
-
// Simple format detection based on string contents
|
|
20
|
-
this.xmlFormat = this.detectFormat();
|
|
21
|
-
// Parse XML to DOM
|
|
22
|
-
try {
|
|
23
|
-
const parser = new xmldom.DOMParser();
|
|
24
|
-
this.xmlDoc = parser.parseFromString(this.xmlString, 'text/xml');
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
console.error('Error parsing XML:', error);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Detects the XML invoice format using simple string checks
|
|
32
|
-
*/
|
|
33
|
-
detectFormat() {
|
|
34
|
-
// ZUGFeRD/Factur-X (CII format)
|
|
35
|
-
if (this.xmlString.includes('CrossIndustryInvoice') ||
|
|
36
|
-
this.xmlString.includes('un/cefact') ||
|
|
37
|
-
this.xmlString.includes('rsm:')) {
|
|
38
|
-
return 'CII';
|
|
39
|
-
}
|
|
40
|
-
// UBL format
|
|
41
|
-
if (this.xmlString.includes('Invoice') ||
|
|
42
|
-
this.xmlString.includes('oasis:names:specification:ubl')) {
|
|
43
|
-
return 'UBL';
|
|
44
|
-
}
|
|
45
|
-
// FatturaPA format
|
|
46
|
-
if (this.xmlString.includes('FatturaElettronica') ||
|
|
47
|
-
this.xmlString.includes('fatturapa.gov.it')) {
|
|
48
|
-
return 'FatturaPA';
|
|
49
|
-
}
|
|
50
|
-
// Default to generic
|
|
51
|
-
return 'unknown';
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Extracts text from the first element matching the XPath-like selector
|
|
55
|
-
*/
|
|
56
|
-
getElementText(tagName) {
|
|
57
|
-
if (!this.xmlDoc) {
|
|
58
|
-
return '';
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
// Basic handling for namespaced tags
|
|
62
|
-
let namespace = '';
|
|
63
|
-
let localName = tagName;
|
|
64
|
-
if (tagName.includes(':')) {
|
|
65
|
-
const parts = tagName.split(':');
|
|
66
|
-
namespace = parts[0];
|
|
67
|
-
localName = parts[1];
|
|
68
|
-
}
|
|
69
|
-
// Find all elements with this name
|
|
70
|
-
const elements = this.xmlDoc.getElementsByTagName(tagName);
|
|
71
|
-
if (elements.length > 0) {
|
|
72
|
-
return elements[0].textContent || '';
|
|
73
|
-
}
|
|
74
|
-
// Try with just the local name if we didn't find it with the namespace
|
|
75
|
-
if (namespace) {
|
|
76
|
-
const elements = this.xmlDoc.getElementsByTagName(localName);
|
|
77
|
-
if (elements.length > 0) {
|
|
78
|
-
return elements[0].textContent || '';
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return '';
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
console.error(`Error extracting element ${tagName}:`, error);
|
|
85
|
-
return '';
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Converts XML to a structured letter object
|
|
90
|
-
*/
|
|
91
|
-
async getLetterData() {
|
|
92
|
-
try {
|
|
93
|
-
if (this.xmlFormat === 'CII') {
|
|
94
|
-
return this.parseCII();
|
|
95
|
-
}
|
|
96
|
-
else if (this.xmlFormat === 'UBL') {
|
|
97
|
-
// For now, use the default implementation
|
|
98
|
-
return this.parseGeneric();
|
|
99
|
-
}
|
|
100
|
-
else if (this.xmlFormat === 'FatturaPA') {
|
|
101
|
-
// For now, use the default implementation
|
|
102
|
-
return this.parseGeneric();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
return this.parseGeneric();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
console.error('Error converting XML to letter data:', error);
|
|
110
|
-
// If all else fails, return a minimal letter object
|
|
111
|
-
return this.createDefaultLetter();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Parse CII (ZUGFeRD/Factur-X) formatted XML
|
|
116
|
-
*/
|
|
117
|
-
parseCII() {
|
|
118
|
-
// Extract invoice ID
|
|
119
|
-
let invoiceId = this.getElementText('ram:ID');
|
|
120
|
-
if (!invoiceId) {
|
|
121
|
-
// Try alternative locations
|
|
122
|
-
invoiceId = this.getElementText('rsm:ExchangedDocument ram:ID') || 'Unknown';
|
|
123
|
-
}
|
|
124
|
-
// Extract seller name
|
|
125
|
-
let sellerName = this.getElementText('ram:Name');
|
|
126
|
-
if (!sellerName) {
|
|
127
|
-
sellerName = this.getElementText('ram:SellerTradeParty ram:Name') || 'Unknown Seller';
|
|
128
|
-
}
|
|
129
|
-
// Extract buyer name
|
|
130
|
-
let buyerName = '';
|
|
131
|
-
// Try to find BuyerTradeParty Name specifically
|
|
132
|
-
if (this.xmlDoc) {
|
|
133
|
-
const buyerParties = this.xmlDoc.getElementsByTagName('ram:BuyerTradeParty');
|
|
134
|
-
if (buyerParties.length > 0) {
|
|
135
|
-
const nameElements = buyerParties[0].getElementsByTagName('ram:Name');
|
|
136
|
-
if (nameElements.length > 0) {
|
|
137
|
-
buyerName = nameElements[0].textContent || '';
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (!buyerName) {
|
|
142
|
-
buyerName = 'Unknown Buyer';
|
|
143
|
-
}
|
|
144
|
-
// Create seller
|
|
145
|
-
const seller = {
|
|
146
|
-
name: sellerName,
|
|
147
|
-
type: 'company',
|
|
148
|
-
description: sellerName,
|
|
149
|
-
address: {
|
|
150
|
-
streetName: this.getElementText('ram:LineOne') || 'Unknown',
|
|
151
|
-
houseNumber: '0', // Required by IAddress interface
|
|
152
|
-
city: this.getElementText('ram:CityName') || 'Unknown',
|
|
153
|
-
country: this.getElementText('ram:CountryID') || 'Unknown',
|
|
154
|
-
postalCode: this.getElementText('ram:PostcodeCode') || 'Unknown',
|
|
155
|
-
},
|
|
156
|
-
};
|
|
157
|
-
// Create buyer
|
|
158
|
-
const buyer = {
|
|
159
|
-
name: buyerName,
|
|
160
|
-
type: 'company',
|
|
161
|
-
description: buyerName,
|
|
162
|
-
address: {
|
|
163
|
-
streetName: 'Unknown',
|
|
164
|
-
houseNumber: '0',
|
|
165
|
-
city: 'Unknown',
|
|
166
|
-
country: 'Unknown',
|
|
167
|
-
postalCode: 'Unknown',
|
|
168
|
-
},
|
|
169
|
-
};
|
|
170
|
-
// Extract invoice type
|
|
171
|
-
let invoiceType = 'debitnote';
|
|
172
|
-
const typeCode = this.getElementText('ram:TypeCode');
|
|
173
|
-
if (typeCode === '381') {
|
|
174
|
-
invoiceType = 'creditnote';
|
|
175
|
-
}
|
|
176
|
-
// Create invoice data
|
|
177
|
-
const invoiceData = {
|
|
178
|
-
id: invoiceId,
|
|
179
|
-
status: null,
|
|
180
|
-
type: invoiceType,
|
|
181
|
-
billedBy: seller,
|
|
182
|
-
billedTo: buyer,
|
|
183
|
-
deliveryDate: Date.now(),
|
|
184
|
-
dueInDays: 30,
|
|
185
|
-
periodOfPerformance: null,
|
|
186
|
-
printResult: null,
|
|
187
|
-
currency: (this.getElementText('ram:InvoiceCurrencyCode') || 'EUR'),
|
|
188
|
-
notes: [],
|
|
189
|
-
items: [
|
|
190
|
-
{
|
|
191
|
-
name: 'Item from XML',
|
|
192
|
-
unitQuantity: 1,
|
|
193
|
-
unitNetPrice: 0,
|
|
194
|
-
vatPercentage: 0,
|
|
195
|
-
position: 0,
|
|
196
|
-
unitType: 'units',
|
|
197
|
-
}
|
|
198
|
-
],
|
|
199
|
-
reverseCharge: false,
|
|
200
|
-
};
|
|
201
|
-
// Return a letter
|
|
202
|
-
return {
|
|
203
|
-
versionInfo: {
|
|
204
|
-
type: 'draft',
|
|
205
|
-
version: '1.0.0',
|
|
206
|
-
},
|
|
207
|
-
type: 'invoice',
|
|
208
|
-
date: Date.now(),
|
|
209
|
-
subject: `Invoice: ${invoiceId}`,
|
|
210
|
-
from: seller,
|
|
211
|
-
to: buyer,
|
|
212
|
-
content: {
|
|
213
|
-
invoiceData: invoiceData,
|
|
214
|
-
textData: null,
|
|
215
|
-
timesheetData: null,
|
|
216
|
-
contractData: null,
|
|
217
|
-
},
|
|
218
|
-
needsCoverSheet: false,
|
|
219
|
-
objectActions: [],
|
|
220
|
-
pdf: null,
|
|
221
|
-
incidenceId: null,
|
|
222
|
-
language: null,
|
|
223
|
-
legalContact: null,
|
|
224
|
-
logoUrl: null,
|
|
225
|
-
pdfAttachments: null,
|
|
226
|
-
accentColor: null,
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Parse generic XML using default approach
|
|
231
|
-
*/
|
|
232
|
-
parseGeneric() {
|
|
233
|
-
// Create a default letter with some extraction attempts
|
|
234
|
-
return this.createDefaultLetter();
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Creates a default letter object with minimal data
|
|
238
|
-
*/
|
|
239
|
-
createDefaultLetter() {
|
|
240
|
-
// Create a default seller
|
|
241
|
-
const seller = {
|
|
242
|
-
name: 'Unknown Seller',
|
|
243
|
-
type: 'company',
|
|
244
|
-
description: 'Unknown Seller', // Required by IContact interface
|
|
245
|
-
address: {
|
|
246
|
-
streetName: 'Unknown',
|
|
247
|
-
houseNumber: '0', // Required by IAddress interface
|
|
248
|
-
city: 'Unknown',
|
|
249
|
-
country: 'Unknown',
|
|
250
|
-
postalCode: 'Unknown',
|
|
251
|
-
},
|
|
252
|
-
};
|
|
253
|
-
// Create a default buyer
|
|
254
|
-
const buyer = {
|
|
255
|
-
name: 'Unknown Buyer',
|
|
256
|
-
type: 'company',
|
|
257
|
-
description: 'Unknown Buyer', // Required by IContact interface
|
|
258
|
-
address: {
|
|
259
|
-
streetName: 'Unknown',
|
|
260
|
-
houseNumber: '0', // Required by IAddress interface
|
|
261
|
-
city: 'Unknown',
|
|
262
|
-
country: 'Unknown',
|
|
263
|
-
postalCode: 'Unknown',
|
|
264
|
-
},
|
|
265
|
-
};
|
|
266
|
-
// Create default invoice data
|
|
267
|
-
const invoiceData = {
|
|
268
|
-
id: 'Unknown',
|
|
269
|
-
status: null,
|
|
270
|
-
type: 'debitnote',
|
|
271
|
-
billedBy: seller,
|
|
272
|
-
billedTo: buyer,
|
|
273
|
-
deliveryDate: Date.now(),
|
|
274
|
-
dueInDays: 30,
|
|
275
|
-
periodOfPerformance: null,
|
|
276
|
-
printResult: null,
|
|
277
|
-
currency: 'EUR',
|
|
278
|
-
notes: [],
|
|
279
|
-
items: [
|
|
280
|
-
{
|
|
281
|
-
name: 'Unknown Item',
|
|
282
|
-
unitQuantity: 1,
|
|
283
|
-
unitNetPrice: 0,
|
|
284
|
-
vatPercentage: 0,
|
|
285
|
-
position: 0,
|
|
286
|
-
unitType: 'units',
|
|
287
|
-
}
|
|
288
|
-
],
|
|
289
|
-
reverseCharge: false,
|
|
290
|
-
};
|
|
291
|
-
// Return a default letter
|
|
292
|
-
return {
|
|
293
|
-
versionInfo: {
|
|
294
|
-
type: 'draft',
|
|
295
|
-
version: '1.0.0',
|
|
296
|
-
},
|
|
297
|
-
type: 'invoice',
|
|
298
|
-
date: Date.now(),
|
|
299
|
-
subject: `Extracted Invoice (${this.xmlFormat} format)`,
|
|
300
|
-
from: seller,
|
|
301
|
-
to: buyer,
|
|
302
|
-
content: {
|
|
303
|
-
invoiceData: invoiceData,
|
|
304
|
-
textData: null,
|
|
305
|
-
timesheetData: null,
|
|
306
|
-
contractData: null,
|
|
307
|
-
},
|
|
308
|
-
needsCoverSheet: false,
|
|
309
|
-
objectActions: [],
|
|
310
|
-
pdf: null,
|
|
311
|
-
incidenceId: null,
|
|
312
|
-
language: null,
|
|
313
|
-
legalContact: null,
|
|
314
|
-
logoUrl: null,
|
|
315
|
-
pdfAttachments: null,
|
|
316
|
-
accentColor: null,
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kZWNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5kZWNvZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFLekIsWUFBWSxTQUFpQjtRQUZyQixXQUFNLEdBQW9CLElBQUksQ0FBQztRQUdyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBRTNCLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVyQyxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2xCLGdDQUFnQztRQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENB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
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* A class to convert a given ILetter with invoice data
|
|
4
|
-
* into a Factur-X compliant XML (also compatible with ZUGFeRD and EN16931).
|
|
5
|
-
*
|
|
6
|
-
* Factur-X is the French implementation of the European e-invoicing standard EN16931,
|
|
7
|
-
* which is also implemented in Germany as ZUGFeRD. Both formats are based on
|
|
8
|
-
* UN/CEFACT Cross Industry Invoice (CII) XML schemas.
|
|
9
|
-
*/
|
|
10
|
-
export declare class FacturXEncoder {
|
|
11
|
-
constructor();
|
|
12
|
-
/**
|
|
13
|
-
* Alias for createFacturXXml to maintain backward compatibility
|
|
14
|
-
*/
|
|
15
|
-
createZugferdXml(letterArg: plugins.tsclass.business.ILetter): string;
|
|
16
|
-
/**
|
|
17
|
-
* Creates a Factur-X compliant XML based on the provided letter data.
|
|
18
|
-
* This XML is also compliant with ZUGFeRD and EN16931 standards.
|
|
19
|
-
*/
|
|
20
|
-
createFacturXXml(letterArg: plugins.tsclass.business.ILetter): string;
|
|
21
|
-
/**
|
|
22
|
-
* Helper: Determine if the letter is in draft or final.
|
|
23
|
-
*/
|
|
24
|
-
private isDraft;
|
|
25
|
-
/**
|
|
26
|
-
* Helper: Format date to certain patterns (very minimal example).
|
|
27
|
-
* e.g. 'yyyyMMdd' => '20231231'
|
|
28
|
-
*/
|
|
29
|
-
private formatDate;
|
|
30
|
-
/**
|
|
31
|
-
* Helper: Map your custom 'unitType' to an ISO code or similar.
|
|
32
|
-
*/
|
|
33
|
-
private mapUnitType;
|
|
34
|
-
/**
|
|
35
|
-
* Example: Sum all VAT amounts from items.
|
|
36
|
-
*/
|
|
37
|
-
private sumAllVat;
|
|
38
|
-
/**
|
|
39
|
-
* Example: Extract main (or highest) VAT rate from items as representative.
|
|
40
|
-
* In reality, you might list multiple 'ApplicableTradeTax' blocks by group.
|
|
41
|
-
*/
|
|
42
|
-
private extractMainVatRate;
|
|
43
|
-
/**
|
|
44
|
-
* Example: Sum net amounts (without VAT).
|
|
45
|
-
*/
|
|
46
|
-
private calcLineTotalNet;
|
|
47
|
-
/**
|
|
48
|
-
* Example: net + VAT = grand total
|
|
49
|
-
*/
|
|
50
|
-
private calcGrandTotal;
|
|
51
|
-
}
|