@fin.cx/einvoice 5.0.3 → 5.1.3

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.
Files changed (117) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/einvoice.d.ts +4 -8
  3. package/dist_ts/einvoice.js +46 -7
  4. package/dist_ts/formats/converters/xml-to-einvoice.converter.d.ts +21 -0
  5. package/dist_ts/formats/converters/xml-to-einvoice.converter.js +127 -0
  6. package/dist_ts/formats/semantic/bt-bg.model.d.ts +445 -0
  7. package/dist_ts/formats/semantic/bt-bg.model.js +12 -0
  8. package/dist_ts/formats/semantic/semantic.adapter.d.ts +87 -0
  9. package/dist_ts/formats/semantic/semantic.adapter.js +538 -0
  10. package/dist_ts/formats/semantic/semantic.validator.d.ts +48 -0
  11. package/dist_ts/formats/semantic/semantic.validator.js +596 -0
  12. package/dist_ts/formats/utils/currency.calculator.decimal.d.ts +98 -0
  13. package/dist_ts/formats/utils/currency.calculator.decimal.js +212 -0
  14. package/dist_ts/formats/utils/currency.utils.d.ts +99 -0
  15. package/dist_ts/formats/utils/currency.utils.js +250 -0
  16. package/dist_ts/formats/utils/decimal.d.ts +151 -0
  17. package/dist_ts/formats/utils/decimal.js +435 -0
  18. package/dist_ts/formats/validation/codelist.validator.d.ts +49 -0
  19. package/dist_ts/formats/validation/codelist.validator.js +188 -0
  20. package/dist_ts/formats/validation/conformance.harness.d.ts +99 -0
  21. package/dist_ts/formats/validation/conformance.harness.js +471 -0
  22. package/dist_ts/formats/validation/en16931.business-rules.validator.d.ts +58 -0
  23. package/dist_ts/formats/validation/en16931.business-rules.validator.js +459 -0
  24. package/dist_ts/formats/validation/facturx.validator.d.ts +75 -0
  25. package/dist_ts/formats/validation/facturx.validator.js +522 -0
  26. package/dist_ts/formats/validation/integrated.validator.d.ts +82 -0
  27. package/dist_ts/formats/validation/integrated.validator.js +311 -0
  28. package/dist_ts/formats/validation/peppol.validator.d.ts +77 -0
  29. package/dist_ts/formats/validation/peppol.validator.js +529 -0
  30. package/dist_ts/formats/validation/schematron.downloader.d.ts +71 -0
  31. package/dist_ts/formats/validation/schematron.downloader.js +254 -0
  32. package/dist_ts/formats/validation/schematron.integration.d.ts +60 -0
  33. package/dist_ts/formats/validation/schematron.integration.js +230 -0
  34. package/dist_ts/formats/validation/schematron.validator.d.ts +79 -0
  35. package/dist_ts/formats/validation/schematron.validator.js +288 -0
  36. package/dist_ts/formats/validation/schematron.worker.d.ts +50 -0
  37. package/dist_ts/formats/validation/schematron.worker.js +185 -0
  38. package/dist_ts/formats/validation/validation.types.d.ts +163 -0
  39. package/dist_ts/formats/validation/validation.types.js +181 -0
  40. package/dist_ts/formats/validation/vat-categories.validator.d.ts +87 -0
  41. package/dist_ts/formats/validation/vat-categories.validator.js +497 -0
  42. package/dist_ts/formats/validation/xrechnung.validator.d.ts +92 -0
  43. package/dist_ts/formats/validation/xrechnung.validator.js +417 -0
  44. package/dist_ts/interfaces/common.d.ts +1 -0
  45. package/dist_ts/interfaces/en16931-metadata.d.ts +83 -0
  46. package/dist_ts/interfaces/en16931-metadata.js +6 -0
  47. package/dist_ts/plugins.d.ts +3 -1
  48. package/dist_ts/plugins.js +7 -2
  49. package/dist_ts_install/download-schematron.d.ts +6 -0
  50. package/dist_ts_install/download-schematron.js +62 -0
  51. package/dist_ts_install/download-test-samples.d.ts +19 -0
  52. package/dist_ts_install/download-test-samples.js +169 -0
  53. package/dist_ts_install/download-xrechnung-rules.d.ts +7 -0
  54. package/dist_ts_install/download-xrechnung-rules.js +146 -0
  55. package/dist_ts_install/index.d.ts +8 -0
  56. package/dist_ts_install/index.js +246 -0
  57. package/npmextra.json +1 -1
  58. package/package.json +12 -6
  59. package/readme.md +255 -810
  60. package/ts/00_commitinfo_data.ts +1 -1
  61. package/ts/einvoice.ts +63 -14
  62. package/ts/formats/converters/xml-to-einvoice.converter.ts +142 -0
  63. package/ts/formats/semantic/bt-bg.model.ts +524 -0
  64. package/ts/formats/semantic/semantic.adapter.ts +600 -0
  65. package/ts/formats/semantic/semantic.validator.ts +654 -0
  66. package/ts/formats/utils/currency.calculator.decimal.ts +323 -0
  67. package/ts/formats/utils/currency.utils.ts +299 -0
  68. package/ts/formats/utils/decimal.ts +509 -0
  69. package/ts/formats/validation/codelist.validator.ts +317 -0
  70. package/ts/formats/validation/conformance.harness.ts +591 -0
  71. package/ts/formats/validation/en16931.business-rules.validator.ts +694 -0
  72. package/ts/formats/validation/facturx.validator.ts +579 -0
  73. package/ts/formats/validation/integrated.validator.ts +405 -0
  74. package/ts/formats/validation/peppol.validator.ts +589 -0
  75. package/ts/formats/validation/schematron.downloader.ts +304 -0
  76. package/ts/formats/validation/schematron.integration.ts +285 -0
  77. package/ts/formats/validation/schematron.validator.ts +348 -0
  78. package/ts/formats/validation/schematron.worker.ts +221 -0
  79. package/ts/formats/validation/validation.types.ts +274 -0
  80. package/ts/formats/validation/vat-categories.validator.ts +845 -0
  81. package/ts/formats/validation/xrechnung.validator.ts +494 -0
  82. package/ts/interfaces/common.ts +1 -0
  83. package/ts/interfaces/en16931-metadata.ts +104 -0
  84. package/ts/plugins.ts +8 -0
  85. package/ts/tspublish.json +3 -0
  86. package/dist_ts/classes.decoder.d.ts +0 -40
  87. package/dist_ts/classes.decoder.js +0 -320
  88. package/dist_ts/classes.encoder.d.ts +0 -51
  89. package/dist_ts/classes.encoder.js +0 -293
  90. package/dist_ts/classes.xinvoice.d.ts +0 -136
  91. package/dist_ts/classes.xinvoice.js +0 -352
  92. package/dist_ts/formats/base.decoder.d.ts +0 -19
  93. package/dist_ts/formats/base.decoder.js +0 -130
  94. package/dist_ts/formats/base.validator.d.ts +0 -44
  95. package/dist_ts/formats/base.validator.js +0 -39
  96. package/dist_ts/formats/decoder.factory.d.ts +0 -15
  97. package/dist_ts/formats/decoder.factory.js +0 -46
  98. package/dist_ts/formats/factorx.decoder.d.ts +0 -18
  99. package/dist_ts/formats/factorx.decoder.js +0 -178
  100. package/dist_ts/formats/factorx.encoder.d.ts +0 -51
  101. package/dist_ts/formats/factorx.encoder.js +0 -293
  102. package/dist_ts/formats/facturx.decoder.d.ts +0 -18
  103. package/dist_ts/formats/facturx.decoder.js +0 -210
  104. package/dist_ts/formats/facturx.encoder.d.ts +0 -51
  105. package/dist_ts/formats/facturx.encoder.js +0 -293
  106. package/dist_ts/formats/facturx.validator.d.ts +0 -67
  107. package/dist_ts/formats/facturx.validator.js +0 -266
  108. package/dist_ts/formats/pdf/robust-pdf.extractor.d.ts +0 -40
  109. package/dist_ts/formats/pdf/robust-pdf.extractor.js +0 -324
  110. package/dist_ts/formats/ubl.validator.d.ts +0 -82
  111. package/dist_ts/formats/ubl.validator.js +0 -306
  112. package/dist_ts/formats/validator.factory.d.ts +0 -18
  113. package/dist_ts/formats/validator.factory.js +0 -78
  114. package/dist_ts/formats/xinvoice.decoder.d.ts +0 -28
  115. package/dist_ts/formats/xinvoice.decoder.js +0 -332
  116. package/dist_ts/formats/xinvoice.encoder.d.ts +0 -19
  117. package/dist_ts/formats/xinvoice.encoder.js +0 -282
@@ -1,352 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- import { business, finance } from './plugins.js';
3
- import { InvoiceFormat, ValidationLevel } from './interfaces/common.js';
4
- // PDF-related imports are handled by the PDF utilities
5
- // Import factories
6
- import { DecoderFactory } from './formats/factories/decoder.factory.js';
7
- import { EncoderFactory } from './formats/factories/encoder.factory.js';
8
- import { ValidatorFactory } from './formats/factories/validator.factory.js';
9
- // Import PDF utilities
10
- import { PDFEmbedder } from './formats/pdf/pdf.embedder.js';
11
- import { PDFExtractor } from './formats/pdf/pdf.extractor.js';
12
- // Import format detector
13
- import { FormatDetector } from './formats/utils/format.detector.js';
14
- /**
15
- * Main class for working with electronic invoices.
16
- * Supports various invoice formats including Factur-X, ZUGFeRD, UBL, and XRechnung
17
- * Implements TInvoice interface for seamless integration with existing systems
18
- */
19
- export class XInvoice {
20
- /**
21
- * Creates a new XInvoice instance
22
- * @param options Configuration options
23
- */
24
- constructor(options) {
25
- // TInvoice interface properties
26
- this.id = '';
27
- this.invoiceId = '';
28
- this.invoiceType = 'debitnote';
29
- this.versionInfo = {
30
- type: 'draft',
31
- version: '1.0.0'
32
- };
33
- this.type = 'invoice';
34
- this.date = Date.now();
35
- this.status = 'invoice';
36
- this.subject = '';
37
- this.incidenceId = '';
38
- this.language = 'en';
39
- this.objectActions = [];
40
- this.pdf = null;
41
- this.pdfAttachments = null;
42
- this.accentColor = null;
43
- this.logoUrl = null;
44
- // Additional properties for invoice data
45
- this.items = [];
46
- this.dueInDays = 30;
47
- this.reverseCharge = false;
48
- this.currency = 'EUR';
49
- this.notes = [];
50
- // XInvoice specific properties
51
- this.xmlString = '';
52
- this.detectedFormat = InvoiceFormat.UNKNOWN;
53
- this.validationErrors = [];
54
- this.options = {
55
- validateOnLoad: false,
56
- validationLevel: ValidationLevel.SYNTAX
57
- };
58
- // PDF utilities
59
- this.pdfEmbedder = new PDFEmbedder();
60
- this.pdfExtractor = new PDFExtractor();
61
- // Initialize empty contact objects
62
- this.from = this.createEmptyContact();
63
- this.to = this.createEmptyContact();
64
- // Apply options if provided
65
- if (options) {
66
- this.options = { ...this.options, ...options };
67
- }
68
- }
69
- /**
70
- * Creates an empty TContact object
71
- */
72
- createEmptyContact() {
73
- return {
74
- name: '',
75
- type: 'company',
76
- description: '',
77
- address: {
78
- streetName: '',
79
- houseNumber: '0',
80
- city: '',
81
- country: '',
82
- postalCode: ''
83
- },
84
- status: 'active',
85
- foundedDate: {
86
- year: 2000,
87
- month: 1,
88
- day: 1
89
- },
90
- registrationDetails: {
91
- vatId: '',
92
- registrationId: '',
93
- registrationName: ''
94
- }
95
- };
96
- }
97
- /**
98
- * Creates a new XInvoice instance from XML
99
- * @param xmlString XML content
100
- * @param options Configuration options
101
- * @returns XInvoice instance
102
- */
103
- static async fromXml(xmlString, options) {
104
- const xinvoice = new XInvoice(options);
105
- // Load XML data
106
- await xinvoice.loadXml(xmlString);
107
- return xinvoice;
108
- }
109
- /**
110
- * Creates a new XInvoice instance from PDF
111
- * @param pdfBuffer PDF buffer
112
- * @param options Configuration options
113
- * @returns XInvoice instance
114
- */
115
- static async fromPdf(pdfBuffer, options) {
116
- const xinvoice = new XInvoice(options);
117
- // Load PDF data
118
- await xinvoice.loadPdf(pdfBuffer);
119
- return xinvoice;
120
- }
121
- /**
122
- * Loads XML data into the XInvoice instance
123
- * @param xmlString XML content
124
- * @param validate Whether to validate the XML
125
- * @returns This instance for chaining
126
- */
127
- async loadXml(xmlString, validate = false) {
128
- this.xmlString = xmlString;
129
- // Detect format
130
- this.detectedFormat = FormatDetector.detectFormat(xmlString);
131
- try {
132
- // Initialize the decoder with the XML string using the factory
133
- const decoder = DecoderFactory.createDecoder(xmlString);
134
- // Decode the XML into a TInvoice object
135
- const invoice = await decoder.decode();
136
- // Copy data from the decoded invoice
137
- this.copyInvoiceData(invoice);
138
- // Validate the XML if requested or if validateOnLoad is true
139
- if (validate || this.options.validateOnLoad) {
140
- await this.validate(this.options.validationLevel);
141
- }
142
- }
143
- catch (error) {
144
- console.error('Error loading XML:', error);
145
- throw error;
146
- }
147
- return this;
148
- }
149
- /**
150
- * Loads PDF data into the XInvoice instance
151
- * @param pdfBuffer PDF buffer
152
- * @param validate Whether to validate the extracted XML
153
- * @returns This instance for chaining
154
- */
155
- async loadPdf(pdfBuffer, validate = false) {
156
- try {
157
- // Extract XML from PDF using the consolidated extractor
158
- const extractResult = await this.pdfExtractor.extractXml(pdfBuffer);
159
- // Store the PDF buffer
160
- this.pdf = {
161
- name: 'invoice.pdf',
162
- id: `invoice-${Date.now()}`,
163
- metadata: {
164
- textExtraction: '',
165
- format: extractResult.success ? extractResult.format?.toString() : undefined
166
- },
167
- buffer: pdfBuffer instanceof Buffer ? new Uint8Array(pdfBuffer) : pdfBuffer
168
- };
169
- // Handle extraction result
170
- if (!extractResult.success || !extractResult.xml) {
171
- const errorMessage = extractResult.error ? extractResult.error.message : 'Unknown error extracting XML from PDF';
172
- console.warn('XML extraction failed:', errorMessage);
173
- throw new Error(`No XML found in PDF: ${errorMessage}`);
174
- }
175
- // Load the extracted XML
176
- await this.loadXml(extractResult.xml, validate);
177
- // Store the detected format
178
- this.detectedFormat = extractResult.format || InvoiceFormat.UNKNOWN;
179
- return this;
180
- }
181
- catch (error) {
182
- console.error('Error loading PDF:', error);
183
- throw error;
184
- }
185
- }
186
- /**
187
- * Copies data from a TInvoice object
188
- * @param invoice Source invoice data
189
- */
190
- copyInvoiceData(invoice) {
191
- // Copy basic properties
192
- this.id = invoice.id;
193
- this.invoiceId = invoice.invoiceId || invoice.id;
194
- this.invoiceType = invoice.invoiceType;
195
- this.versionInfo = { ...invoice.versionInfo };
196
- this.type = invoice.type;
197
- this.date = invoice.date;
198
- this.status = invoice.status;
199
- this.subject = invoice.subject;
200
- this.from = { ...invoice.from };
201
- this.to = { ...invoice.to };
202
- this.incidenceId = invoice.incidenceId;
203
- this.language = invoice.language;
204
- this.legalContact = invoice.legalContact ? { ...invoice.legalContact } : undefined;
205
- this.objectActions = [...invoice.objectActions];
206
- this.pdf = invoice.pdf;
207
- this.pdfAttachments = invoice.pdfAttachments;
208
- // Copy invoice-specific properties
209
- if (invoice.items)
210
- this.items = [...invoice.items];
211
- if (invoice.dueInDays)
212
- this.dueInDays = invoice.dueInDays;
213
- if (invoice.reverseCharge !== undefined)
214
- this.reverseCharge = invoice.reverseCharge;
215
- if (invoice.currency)
216
- this.currency = invoice.currency;
217
- if (invoice.notes)
218
- this.notes = [...invoice.notes];
219
- if (invoice.periodOfPerformance)
220
- this.periodOfPerformance = { ...invoice.periodOfPerformance };
221
- if (invoice.deliveryDate)
222
- this.deliveryDate = invoice.deliveryDate;
223
- if (invoice.buyerReference)
224
- this.buyerReference = invoice.buyerReference;
225
- if (invoice.electronicAddress)
226
- this.electronicAddress = { ...invoice.electronicAddress };
227
- if (invoice.paymentOptions)
228
- this.paymentOptions = { ...invoice.paymentOptions };
229
- }
230
- /**
231
- * Validates the XML against the appropriate format rules
232
- * @param level Validation level (syntax, semantic, business)
233
- * @returns Validation result
234
- */
235
- async validate(level = ValidationLevel.SYNTAX) {
236
- if (!this.xmlString) {
237
- throw new Error('No XML to validate');
238
- }
239
- try {
240
- // Initialize the validator with the XML string
241
- const validator = ValidatorFactory.createValidator(this.xmlString);
242
- // Run validation
243
- const result = validator.validate(level);
244
- // Store validation errors
245
- this.validationErrors = result.errors;
246
- return result;
247
- }
248
- catch (error) {
249
- console.error('Error validating XML:', error);
250
- const errorResult = {
251
- valid: false,
252
- errors: [{
253
- code: 'VAL-ERROR',
254
- message: `Validation error: ${error instanceof Error ? error.message : String(error)}`
255
- }],
256
- level
257
- };
258
- this.validationErrors = errorResult.errors;
259
- return errorResult;
260
- }
261
- }
262
- /**
263
- * Checks if the invoice is valid
264
- * @returns True if no validation errors were found
265
- */
266
- isValid() {
267
- return this.validationErrors.length === 0;
268
- }
269
- /**
270
- * Gets validation errors from the last validation
271
- * @returns Array of validation errors
272
- */
273
- getValidationErrors() {
274
- return this.validationErrors;
275
- }
276
- /**
277
- * Exports the invoice as XML in the specified format
278
- * @param format Target format (e.g., 'facturx', 'xrechnung')
279
- * @returns XML string in the specified format
280
- */
281
- async exportXml(format = 'facturx') {
282
- // Create encoder for the specified format
283
- const encoder = EncoderFactory.createEncoder(format);
284
- // Generate XML
285
- return await encoder.encode(this);
286
- }
287
- /**
288
- * Exports the invoice as a PDF with embedded XML
289
- * @param format Target format (e.g., 'facturx', 'zugferd', 'xrechnung', 'ubl')
290
- * @returns PDF object with embedded XML
291
- */
292
- async exportPdf(format = 'facturx') {
293
- if (!this.pdf) {
294
- throw new Error('No PDF data available. Use loadPdf() first or set the pdf property.');
295
- }
296
- // Generate XML in the specified format
297
- const xmlContent = await this.exportXml(format);
298
- // Determine filename based on format
299
- let filename = 'invoice.xml';
300
- let description = 'XML Invoice';
301
- switch (format.toLowerCase()) {
302
- case 'facturx':
303
- filename = 'factur-x.xml';
304
- description = 'Factur-X XML Invoice';
305
- break;
306
- case 'zugferd':
307
- filename = 'zugferd-invoice.xml';
308
- description = 'ZUGFeRD XML Invoice';
309
- break;
310
- case 'xrechnung':
311
- filename = 'xrechnung.xml';
312
- description = 'XRechnung XML Invoice';
313
- break;
314
- case 'ubl':
315
- filename = 'ubl-invoice.xml';
316
- description = 'UBL XML Invoice';
317
- break;
318
- }
319
- // Embed XML into PDF
320
- const result = await this.pdfEmbedder.createPdfWithXml(this.pdf.buffer, xmlContent, filename, description, this.pdf.name, this.pdf.id);
321
- // Handle potential errors
322
- if (!result.success || !result.pdf) {
323
- const errorMessage = result.error ? result.error.message : 'Unknown error embedding XML into PDF';
324
- console.error('Error exporting PDF:', errorMessage);
325
- throw new Error(`Failed to export PDF: ${errorMessage}`);
326
- }
327
- return result.pdf;
328
- }
329
- /**
330
- * Gets the raw XML content
331
- * @returns XML string
332
- */
333
- getXml() {
334
- return this.xmlString;
335
- }
336
- /**
337
- * Gets the invoice format as an enum value
338
- * @returns InvoiceFormat enum value
339
- */
340
- getFormat() {
341
- return this.detectedFormat;
342
- }
343
- /**
344
- * Checks if the invoice is in the specified format
345
- * @param format Format to check
346
- * @returns True if the invoice is in the specified format
347
- */
348
- isFormat(format) {
349
- return this.detectedFormat === format;
350
- }
351
- }
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy54aW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMueGludm9pY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RSx1REFBdUQ7QUFFdkQsbUJBQW1CO0FBQ25CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFNUUsdUJBQXVCO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUQseUJBQXlCO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFpRG5COzs7T0FHRztJQUNILFlBQVksT0FBeUI7UUFwRHJDLGdDQUFnQztRQUN6QixPQUFFLEdBQVcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBK0IsV0FBVyxDQUFDO1FBQ3RELGdCQUFXLEdBQTJEO1lBQzNFLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQztRQUNLLFNBQUksR0FBYyxTQUFTLENBQUM7UUFDNUIsU0FBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixXQUFNLEdBQThDLFNBQVMsQ0FBQztRQUM5RCxZ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
@@ -1,19 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- /**
3
- * Base decoder class for all invoice XML formats.
4
- * Provides common functionality and interfaces for different format decoders.
5
- */
6
- export declare abstract class BaseDecoder {
7
- protected xmlString: string;
8
- constructor(xmlString: string);
9
- /**
10
- * Abstract method that each format-specific decoder must implement.
11
- * Converts XML into a structured letter object based on the XML format.
12
- */
13
- abstract getLetterData(): Promise<plugins.tsclass.business.ILetter>;
14
- /**
15
- * Creates a default letter object with minimal data.
16
- * Used as a fallback when parsing fails.
17
- */
18
- protected createDefaultLetter(): plugins.tsclass.business.ILetter;
19
- }
@@ -1,130 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- /**
3
- * Base decoder class for all invoice XML formats.
4
- * Provides common functionality and interfaces for different format decoders.
5
- */
6
- export class BaseDecoder {
7
- constructor(xmlString) {
8
- if (!xmlString) {
9
- throw new Error('No XML string provided to decoder');
10
- }
11
- this.xmlString = xmlString;
12
- }
13
- /**
14
- * Creates a default letter object with minimal data.
15
- * Used as a fallback when parsing fails.
16
- */
17
- createDefaultLetter() {
18
- // Create a default seller
19
- const seller = {
20
- name: 'Unknown Seller',
21
- type: 'company',
22
- description: 'Unknown Seller',
23
- address: {
24
- streetName: 'Unknown',
25
- houseNumber: '0',
26
- city: 'Unknown',
27
- country: 'Unknown',
28
- postalCode: 'Unknown',
29
- },
30
- registrationDetails: {
31
- vatId: 'Unknown',
32
- registrationId: 'Unknown',
33
- registrationName: 'Unknown'
34
- },
35
- foundedDate: {
36
- year: 2000,
37
- month: 1,
38
- day: 1
39
- },
40
- closedDate: {
41
- year: 9999,
42
- month: 12,
43
- day: 31
44
- },
45
- status: 'active'
46
- };
47
- // Create a default buyer
48
- const buyer = {
49
- name: 'Unknown Buyer',
50
- type: 'company',
51
- description: 'Unknown Buyer',
52
- address: {
53
- streetName: 'Unknown',
54
- houseNumber: '0',
55
- city: 'Unknown',
56
- country: 'Unknown',
57
- postalCode: 'Unknown',
58
- },
59
- registrationDetails: {
60
- vatId: 'Unknown',
61
- registrationId: 'Unknown',
62
- registrationName: 'Unknown'
63
- },
64
- foundedDate: {
65
- year: 2000,
66
- month: 1,
67
- day: 1
68
- },
69
- closedDate: {
70
- year: 9999,
71
- month: 12,
72
- day: 31
73
- },
74
- status: 'active'
75
- };
76
- // Create default invoice data
77
- const invoiceData = {
78
- id: 'Unknown',
79
- status: null,
80
- type: 'debitnote',
81
- billedBy: seller,
82
- billedTo: buyer,
83
- deliveryDate: Date.now(),
84
- dueInDays: 30,
85
- periodOfPerformance: null,
86
- printResult: null,
87
- currency: 'EUR',
88
- notes: [],
89
- items: [
90
- {
91
- name: 'Unknown Item',
92
- unitQuantity: 1,
93
- unitNetPrice: 0,
94
- vatPercentage: 0,
95
- position: 0,
96
- unitType: 'units',
97
- }
98
- ],
99
- reverseCharge: false,
100
- };
101
- // Return a default letter
102
- return {
103
- versionInfo: {
104
- type: 'draft',
105
- version: '1.0.0',
106
- },
107
- type: 'invoice',
108
- date: Date.now(),
109
- subject: 'Unknown Invoice',
110
- from: seller,
111
- to: buyer,
112
- content: {
113
- invoiceData: invoiceData,
114
- textData: null,
115
- timesheetData: null,
116
- contractData: null,
117
- },
118
- needsCoverSheet: false,
119
- objectActions: [],
120
- pdf: null,
121
- incidenceId: null,
122
- language: null,
123
- legalContact: null,
124
- logoUrl: null,
125
- pdfAttachments: null,
126
- accentColor: null,
127
- };
128
- }
129
- }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5kZWNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZm9ybWF0cy9iYXNlLmRlY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFekM7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixXQUFXO0lBRy9CLFlBQVksU0FBaUI7UUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBUUQ7OztPQUdHO0lBQ08sbUJBQW1CO1FBQzNCLDBCQUEwQjtRQUMxQixNQUFNLE1BQU0sR0FBc0M7WUFDaEQsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixJQUFJLEVBQUUsU0FBUztZQUNmLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixXQUFXLEVBQUUsR0FBRztnQkFDaEIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFVBQVUsRUFBRSxTQUFTO2FBQ3RCO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxTQUFTO2dCQUNoQixjQUFjLEVBQUUsU0FBUztnQkFDekIsZ0JBQWdCLEVBQUUsU0FBUzthQUM1QjtZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSTtnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEVBQUUsQ0FBQzthQUNQO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxJQUFJO2dCQUNWLEtBQUssRUFBRSxFQUFFO2dCQUNULEdBQUcsRUFBRSxFQUFFO2FBQ1I7WUFDRCxNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDO1FBRUYseUJBQXlCO1FBQ3pCLE1BQU0sS0FBSyxHQUFzQztZQUMvQyxJQUFJLEVBQUUsZUFBZTtZQUNyQixJQUFJLEVBQUUsU0FBUztZQUNmLFdBQVcsRUFBRSxlQUFlO1lBQzVCLE9BQU8sRUFBRTtnQkFDUCxVQUFVLEVBQUUsU0FBUztnQkFDckIsV0FBVyxFQUFFLEdBQUc7Z0JBQ2hCLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixVQUFVLEVBQUUsU0FBUzthQUN0QjtZQUNELG1CQUFtQixFQUFFO2dCQUNuQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsY0FBYyxFQUFFLFNBQVM7Z0JBQ3pCLGdCQUFnQixFQUFFLFNBQVM7YUFDNUI7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsR0FBRyxFQUFFLENBQUM7YUFDUDtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsSUFBSTtnQkFDVixLQUFLLEVBQUUsRUFBRTtnQkFDVCxHQUFHLEVBQUUsRUFBRTthQUNSO1lBQ0QsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixNQUFNLFdBQVcsR0FBcUM7WUFDcEQsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxXQUFXO1lBQ2pCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEIsU0FBUyxFQUFFLEVBQUU7WUFDYixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxLQUEwQztZQUNwRCxLQUFLLEVBQUUsRUFBRTtZQUNULEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsWUFBWSxFQUFFLENBQUM7b0JBQ2YsWUFBWSxFQUFFLENBQUM7b0JBQ2YsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsRUFBRSxPQUFPO2lCQUNsQjthQUNGO1lBQ0QsYUFBYSxFQUFFLEtBQUs7U0FDckIsQ0FBQztRQUVGLDBCQUEwQjtRQUMxQixPQUFPO1lBQ0wsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxPQUFPO2FBQ2pCO1lBQ0QsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNoQixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLElBQUksRUFBRSxNQUFNO1lBQ1osRUFBRSxFQUFFLEtBQUs7WUFDVCxPQUFPLEVBQUU7Z0JBQ1AsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixZQUFZLEVBQUUsSUFBSTthQUNuQjtZQUNELGVBQWUsRUFBRSxLQUFLO1lBQ3RCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEdBQUcsRUFBRSxJQUFJO1lBQ1QsV0FBVyxFQUFFLElBQUk7WUFDakIsUUFBUSxFQUFFLElBQUk7WUFDZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixPQUFPLEVBQUUsSUFBSTtZQUNiLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
@@ -1,44 +0,0 @@
1
- import { ValidationLevel } from '../interfaces.js';
2
- import type { ValidationResult, ValidationError } from '../interfaces.js';
3
- /**
4
- * Base validator class that defines common validation functionality
5
- * for all invoice format validators
6
- */
7
- export declare abstract class BaseValidator {
8
- protected xml: string;
9
- protected errors: ValidationError[];
10
- constructor(xml: string);
11
- /**
12
- * Validates XML against the specified level of validation
13
- * @param level Validation level (syntax, semantic, business)
14
- * @returns Result of validation
15
- */
16
- abstract validate(level?: ValidationLevel): ValidationResult;
17
- /**
18
- * Gets all validation errors found during validation
19
- * @returns Array of validation errors
20
- */
21
- getValidationErrors(): ValidationError[];
22
- /**
23
- * Checks if the document is valid
24
- * @returns True if no validation errors were found
25
- */
26
- isValid(): boolean;
27
- /**
28
- * Validates XML against schema
29
- * @returns True if schema validation passed
30
- */
31
- protected abstract validateSchema(): boolean;
32
- /**
33
- * Validates business rules
34
- * @returns True if business rule validation passed
35
- */
36
- protected abstract validateBusinessRules(): boolean;
37
- /**
38
- * Adds an error to the validation errors list
39
- * @param code Error code
40
- * @param message Error message
41
- * @param location Location in the XML where the error occurred
42
- */
43
- protected addError(code: string, message: string, location?: string): void;
44
- }
@@ -1,39 +0,0 @@
1
- import { ValidationLevel } from '../interfaces.js';
2
- /**
3
- * Base validator class that defines common validation functionality
4
- * for all invoice format validators
5
- */
6
- export class BaseValidator {
7
- constructor(xml) {
8
- this.errors = [];
9
- this.xml = xml;
10
- }
11
- /**
12
- * Gets all validation errors found during validation
13
- * @returns Array of validation errors
14
- */
15
- getValidationErrors() {
16
- return this.errors;
17
- }
18
- /**
19
- * Checks if the document is valid
20
- * @returns True if no validation errors were found
21
- */
22
- isValid() {
23
- return this.errors.length === 0;
24
- }
25
- /**
26
- * Adds an error to the validation errors list
27
- * @param code Error code
28
- * @param message Error message
29
- * @param location Location in the XML where the error occurred
30
- */
31
- addError(code, message, location = '') {
32
- this.errors.push({
33
- code,
34
- message,
35
- location
36
- });
37
- }
38
- }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9mb3JtYXRzL2Jhc2UudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUduRDs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUFJakMsWUFBWSxHQUFXO1FBRmIsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFHdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQVNEOzs7T0FHRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBY0Q7Ozs7O09BS0c7SUFDTyxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBRSxXQUFtQixFQUFFO1FBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSTtZQUNKLE9BQU87WUFDUCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
@@ -1,15 +0,0 @@
1
- import { BaseDecoder } from './base.decoder.js';
2
- /**
3
- * Factory class for creating the appropriate decoder based on XML format.
4
- * Analyzes XML content and returns the best decoder for the given format.
5
- */
6
- export declare class DecoderFactory {
7
- /**
8
- * Creates a decoder for the given XML content
9
- */
10
- static createDecoder(xmlString: string): BaseDecoder;
11
- /**
12
- * Detects the XML invoice format using string pattern matching
13
- */
14
- private static detectFormat;
15
- }
@@ -1,46 +0,0 @@
1
- import { BaseDecoder } from './base.decoder.js';
2
- import { FacturXDecoder } from './facturx.decoder.js';
3
- import { XInvoiceDecoder } from './xinvoice.decoder.js';
4
- /**
5
- * Factory class for creating the appropriate decoder based on XML format.
6
- * Analyzes XML content and returns the best decoder for the given format.
7
- */
8
- export class DecoderFactory {
9
- /**
10
- * Creates a decoder for the given XML content
11
- */
12
- static createDecoder(xmlString) {
13
- if (!xmlString) {
14
- throw new Error('No XML string provided for decoder selection');
15
- }
16
- const format = DecoderFactory.detectFormat(xmlString);
17
- switch (format) {
18
- case 'XInvoice/UBL':
19
- return new XInvoiceDecoder(xmlString);
20
- case 'FacturX/ZUGFeRD':
21
- default:
22
- // Default to FacturX/ZUGFeRD decoder
23
- return new FacturXDecoder(xmlString);
24
- }
25
- }
26
- /**
27
- * Detects the XML invoice format using string pattern matching
28
- */
29
- static detectFormat(xmlString) {
30
- // XInvoice/UBL format
31
- if (xmlString.includes('oasis:names:specification:ubl') ||
32
- xmlString.includes('Invoice xmlns') ||
33
- xmlString.includes('xrechnung')) {
34
- return 'XInvoice/UBL';
35
- }
36
- // ZUGFeRD/Factur-X (CII format)
37
- if (xmlString.includes('CrossIndustryInvoice') ||
38
- xmlString.includes('un/cefact') ||
39
- xmlString.includes('rsm:')) {
40
- return 'FacturX/ZUGFeRD';
41
- }
42
- // Default to FacturX/ZUGFeRD
43
- return 'FacturX/ZUGFeRD';
44
- }
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2Rlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZm9ybWF0cy9kZWNvZGVyLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekI7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxjQUFjO2dCQUNqQixPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhDLEtBQUssaUJBQWlCLENBQUM7WUFDdkI7Z0JBQ0UscUNBQXFDO2dCQUNyQyxPQUFPLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQWlCO1FBQzNDLHNCQUFzQjtRQUN0QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUM7WUFDbkQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDbkMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0NBQ0YifQ==