@fin.cx/einvoice 5.0.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.
Files changed (171) hide show
  1. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  2. package/dist_ts/00_commitinfo_data.js +9 -0
  3. package/dist_ts/classes.decoder.d.ts +40 -0
  4. package/dist_ts/classes.decoder.js +320 -0
  5. package/dist_ts/classes.encoder.d.ts +51 -0
  6. package/dist_ts/classes.encoder.js +293 -0
  7. package/dist_ts/classes.xinvoice.d.ts +136 -0
  8. package/dist_ts/classes.xinvoice.js +352 -0
  9. package/dist_ts/einvoice.d.ts +217 -0
  10. package/dist_ts/einvoice.js +505 -0
  11. package/dist_ts/errors.d.ts +121 -0
  12. package/dist_ts/errors.js +241 -0
  13. package/dist_ts/formats/base/base.decoder.d.ts +32 -0
  14. package/dist_ts/formats/base/base.decoder.js +52 -0
  15. package/dist_ts/formats/base/base.encoder.d.ts +13 -0
  16. package/dist_ts/formats/base/base.encoder.js +7 -0
  17. package/dist_ts/formats/base/base.validator.d.ts +44 -0
  18. package/dist_ts/formats/base/base.validator.js +39 -0
  19. package/dist_ts/formats/base.decoder.d.ts +19 -0
  20. package/dist_ts/formats/base.decoder.js +130 -0
  21. package/dist_ts/formats/base.validator.d.ts +44 -0
  22. package/dist_ts/formats/base.validator.js +39 -0
  23. package/dist_ts/formats/cii/cii.decoder.d.ts +61 -0
  24. package/dist_ts/formats/cii/cii.decoder.js +111 -0
  25. package/dist_ts/formats/cii/cii.encoder.d.ts +43 -0
  26. package/dist_ts/formats/cii/cii.encoder.js +48 -0
  27. package/dist_ts/formats/cii/cii.types.d.ts +31 -0
  28. package/dist_ts/formats/cii/cii.types.js +40 -0
  29. package/dist_ts/formats/cii/cii.validator.d.ts +56 -0
  30. package/dist_ts/formats/cii/cii.validator.js +146 -0
  31. package/dist_ts/formats/cii/facturx/facturx.decoder.d.ts +43 -0
  32. package/dist_ts/formats/cii/facturx/facturx.decoder.js +207 -0
  33. package/dist_ts/formats/cii/facturx/facturx.encoder.d.ts +82 -0
  34. package/dist_ts/formats/cii/facturx/facturx.encoder.js +400 -0
  35. package/dist_ts/formats/cii/facturx/facturx.types.d.ts +10 -0
  36. package/dist_ts/formats/cii/facturx/facturx.types.js +15 -0
  37. package/dist_ts/formats/cii/facturx/facturx.validator.d.ts +32 -0
  38. package/dist_ts/formats/cii/facturx/facturx.validator.js +138 -0
  39. package/dist_ts/formats/cii/zugferd/zugferd.decoder.d.ts +43 -0
  40. package/dist_ts/formats/cii/zugferd/zugferd.decoder.js +218 -0
  41. package/dist_ts/formats/cii/zugferd/zugferd.encoder.d.ts +97 -0
  42. package/dist_ts/formats/cii/zugferd/zugferd.encoder.js +550 -0
  43. package/dist_ts/formats/cii/zugferd/zugferd.types.d.ts +10 -0
  44. package/dist_ts/formats/cii/zugferd/zugferd.types.js +15 -0
  45. package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.d.ts +49 -0
  46. package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.js +229 -0
  47. package/dist_ts/formats/cii/zugferd/zugferd.validator.d.ts +16 -0
  48. package/dist_ts/formats/cii/zugferd/zugferd.validator.js +29 -0
  49. package/dist_ts/formats/decoder.factory.d.ts +15 -0
  50. package/dist_ts/formats/decoder.factory.js +46 -0
  51. package/dist_ts/formats/factories/decoder.factory.d.ts +13 -0
  52. package/dist_ts/formats/factories/decoder.factory.js +56 -0
  53. package/dist_ts/formats/factories/encoder.factory.d.ts +14 -0
  54. package/dist_ts/formats/factories/encoder.factory.js +40 -0
  55. package/dist_ts/formats/factories/validator.factory.d.ts +12 -0
  56. package/dist_ts/formats/factories/validator.factory.js +110 -0
  57. package/dist_ts/formats/factorx.decoder.d.ts +18 -0
  58. package/dist_ts/formats/factorx.decoder.js +178 -0
  59. package/dist_ts/formats/factorx.encoder.d.ts +51 -0
  60. package/dist_ts/formats/factorx.encoder.js +293 -0
  61. package/dist_ts/formats/facturx.decoder.d.ts +18 -0
  62. package/dist_ts/formats/facturx.decoder.js +210 -0
  63. package/dist_ts/formats/facturx.encoder.d.ts +51 -0
  64. package/dist_ts/formats/facturx.encoder.js +293 -0
  65. package/dist_ts/formats/facturx.validator.d.ts +67 -0
  66. package/dist_ts/formats/facturx.validator.js +266 -0
  67. package/dist_ts/formats/pdf/extractors/associated.extractor.d.ts +14 -0
  68. package/dist_ts/formats/pdf/extractors/associated.extractor.js +68 -0
  69. package/dist_ts/formats/pdf/extractors/base.extractor.d.ts +92 -0
  70. package/dist_ts/formats/pdf/extractors/base.extractor.js +319 -0
  71. package/dist_ts/formats/pdf/extractors/index.d.ts +4 -0
  72. package/dist_ts/formats/pdf/extractors/index.js +5 -0
  73. package/dist_ts/formats/pdf/extractors/standard.extractor.d.ts +13 -0
  74. package/dist_ts/formats/pdf/extractors/standard.extractor.js +74 -0
  75. package/dist_ts/formats/pdf/extractors/text.extractor.d.ts +45 -0
  76. package/dist_ts/formats/pdf/extractors/text.extractor.js +151 -0
  77. package/dist_ts/formats/pdf/pdf.embedder.d.ts +69 -0
  78. package/dist_ts/formats/pdf/pdf.embedder.js +183 -0
  79. package/dist_ts/formats/pdf/pdf.extractor.d.ts +49 -0
  80. package/dist_ts/formats/pdf/pdf.extractor.js +98 -0
  81. package/dist_ts/formats/pdf/robust-pdf.extractor.d.ts +40 -0
  82. package/dist_ts/formats/pdf/robust-pdf.extractor.js +324 -0
  83. package/dist_ts/formats/ubl/en16931.ubl.validator.d.ts +18 -0
  84. package/dist_ts/formats/ubl/en16931.ubl.validator.js +169 -0
  85. package/dist_ts/formats/ubl/generic/ubl.encoder.d.ts +151 -0
  86. package/dist_ts/formats/ubl/generic/ubl.encoder.js +892 -0
  87. package/dist_ts/formats/ubl/ubl.decoder.d.ts +61 -0
  88. package/dist_ts/formats/ubl/ubl.decoder.js +95 -0
  89. package/dist_ts/formats/ubl/ubl.encoder.d.ts +38 -0
  90. package/dist_ts/formats/ubl/ubl.encoder.js +46 -0
  91. package/dist_ts/formats/ubl/ubl.types.d.ts +16 -0
  92. package/dist_ts/formats/ubl/ubl.types.js +21 -0
  93. package/dist_ts/formats/ubl/ubl.validator.d.ts +50 -0
  94. package/dist_ts/formats/ubl/ubl.validator.js +112 -0
  95. package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.d.ts +34 -0
  96. package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.js +424 -0
  97. package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.d.ts +75 -0
  98. package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.js +555 -0
  99. package/dist_ts/formats/ubl/xrechnung.validator.d.ts +15 -0
  100. package/dist_ts/formats/ubl/xrechnung.validator.js +107 -0
  101. package/dist_ts/formats/ubl.validator.d.ts +82 -0
  102. package/dist_ts/formats/ubl.validator.js +306 -0
  103. package/dist_ts/formats/utils/format.detector.d.ts +62 -0
  104. package/dist_ts/formats/utils/format.detector.js +249 -0
  105. package/dist_ts/formats/validation/en16931.validator.d.ts +23 -0
  106. package/dist_ts/formats/validation/en16931.validator.js +119 -0
  107. package/dist_ts/formats/validator.factory.d.ts +18 -0
  108. package/dist_ts/formats/validator.factory.js +78 -0
  109. package/dist_ts/formats/xinvoice.decoder.d.ts +28 -0
  110. package/dist_ts/formats/xinvoice.decoder.js +332 -0
  111. package/dist_ts/formats/xinvoice.encoder.d.ts +19 -0
  112. package/dist_ts/formats/xinvoice.encoder.js +282 -0
  113. package/dist_ts/index.d.ts +51 -0
  114. package/dist_ts/index.js +90 -0
  115. package/dist_ts/interfaces/common.d.ts +79 -0
  116. package/dist_ts/interfaces/common.js +24 -0
  117. package/dist_ts/interfaces.d.ts +87 -0
  118. package/dist_ts/interfaces.js +23 -0
  119. package/dist_ts/plugins.d.ts +14 -0
  120. package/dist_ts/plugins.js +31 -0
  121. package/npmextra.json +35 -0
  122. package/package.json +71 -0
  123. package/readme.hints.md +1107 -0
  124. package/readme.howtofixtests.md +38 -0
  125. package/readme.literature.md +1 -0
  126. package/readme.md +998 -0
  127. package/readme.plan.md +481 -0
  128. package/ts/00_commitinfo_data.ts +8 -0
  129. package/ts/einvoice.ts +603 -0
  130. package/ts/errors.ts +341 -0
  131. package/ts/formats/base/base.decoder.ts +68 -0
  132. package/ts/formats/base/base.encoder.ts +14 -0
  133. package/ts/formats/base/base.validator.ts +64 -0
  134. package/ts/formats/cii/cii.decoder.ts +139 -0
  135. package/ts/formats/cii/cii.encoder.ts +64 -0
  136. package/ts/formats/cii/cii.types.ts +44 -0
  137. package/ts/formats/cii/cii.validator.ts +171 -0
  138. package/ts/formats/cii/facturx/facturx.decoder.ts +243 -0
  139. package/ts/formats/cii/facturx/facturx.encoder.ts +483 -0
  140. package/ts/formats/cii/facturx/facturx.types.ts +18 -0
  141. package/ts/formats/cii/facturx/facturx.validator.ts +180 -0
  142. package/ts/formats/cii/zugferd/zugferd.decoder.ts +256 -0
  143. package/ts/formats/cii/zugferd/zugferd.encoder.ts +661 -0
  144. package/ts/formats/cii/zugferd/zugferd.types.ts +18 -0
  145. package/ts/formats/cii/zugferd/zugferd.v1.decoder.ts +267 -0
  146. package/ts/formats/cii/zugferd/zugferd.validator.ts +31 -0
  147. package/ts/formats/factories/decoder.factory.ts +62 -0
  148. package/ts/formats/factories/encoder.factory.ts +47 -0
  149. package/ts/formats/factories/validator.factory.ts +134 -0
  150. package/ts/formats/pdf/extractors/associated.extractor.ts +78 -0
  151. package/ts/formats/pdf/extractors/base.extractor.ts +355 -0
  152. package/ts/formats/pdf/extractors/index.ts +4 -0
  153. package/ts/formats/pdf/extractors/standard.extractor.ts +86 -0
  154. package/ts/formats/pdf/extractors/text.extractor.ts +162 -0
  155. package/ts/formats/pdf/pdf.embedder.ts +242 -0
  156. package/ts/formats/pdf/pdf.extractor.ts +141 -0
  157. package/ts/formats/ubl/en16931.ubl.validator.ts +216 -0
  158. package/ts/formats/ubl/generic/ubl.encoder.ts +1041 -0
  159. package/ts/formats/ubl/ubl.decoder.ts +121 -0
  160. package/ts/formats/ubl/ubl.encoder.ts +63 -0
  161. package/ts/formats/ubl/ubl.types.ts +22 -0
  162. package/ts/formats/ubl/ubl.validator.ts +133 -0
  163. package/ts/formats/ubl/xrechnung/xrechnung.decoder.ts +471 -0
  164. package/ts/formats/ubl/xrechnung/xrechnung.encoder.ts +619 -0
  165. package/ts/formats/ubl/xrechnung.validator.ts +185 -0
  166. package/ts/formats/utils/format.detector.ts +306 -0
  167. package/ts/formats/validation/en16931.validator.ts +135 -0
  168. package/ts/index.ts +164 -0
  169. package/ts/interfaces/common.ts +90 -0
  170. package/ts/interfaces.ts +98 -0
  171. package/ts/plugins.ts +61 -0
@@ -0,0 +1,352 @@
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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
@@ -0,0 +1,217 @@
1
+ import { business, finance } from './plugins.js';
2
+ import type { TInvoice, TAccountingDocItem } from '@tsclass/tsclass/dist_ts/finance/index.js';
3
+ import { InvoiceFormat, ValidationLevel } from './interfaces/common.js';
4
+ import type { ValidationResult, ValidationError, EInvoiceOptions, IPdf, ExportFormat } from './interfaces/common.js';
5
+ /**
6
+ * Main class for working with electronic invoices.
7
+ * Supports various invoice formats including Factur-X, ZUGFeRD, UBL, and XRechnung
8
+ * Extends the TInvoice interface for seamless integration with existing systems
9
+ */
10
+ export declare class EInvoice implements TInvoice {
11
+ /**
12
+ * Creates an EInvoice instance from XML string
13
+ * @param xmlString XML string to parse
14
+ * @returns EInvoice instance
15
+ */
16
+ static fromXml(xmlString: string): Promise<EInvoice>;
17
+ /**
18
+ * Creates an EInvoice instance from file
19
+ * @param filePath Path to the file
20
+ * @returns EInvoice instance
21
+ */
22
+ static fromFile(filePath: string): Promise<EInvoice>;
23
+ /**
24
+ * Creates an EInvoice instance from PDF
25
+ * @param pdfBuffer PDF buffer
26
+ * @returns EInvoice instance
27
+ */
28
+ static fromPdf(pdfBuffer: Buffer | string): Promise<EInvoice>;
29
+ type: 'accounting-doc';
30
+ accountingDocType: 'invoice';
31
+ accountingDocId: string;
32
+ accountingDocStatus: 'draft' | 'issued' | 'paid' | 'canceled' | 'refunded';
33
+ id: string;
34
+ date: number;
35
+ status: 'draft' | 'issued' | 'paid' | 'canceled' | 'refunded';
36
+ subject: string;
37
+ versionInfo: business.TDocumentEnvelope<string, any>['versionInfo'];
38
+ from: business.TContact;
39
+ to: business.TContact;
40
+ legalContact?: business.TContact;
41
+ incidenceId: string;
42
+ language: string;
43
+ objectActions: any[];
44
+ pdf: IPdf | null;
45
+ pdfAttachments: IPdf[] | null;
46
+ accentColor: string | null;
47
+ logoUrl: string | null;
48
+ items: TAccountingDocItem[];
49
+ dueInDays: number;
50
+ reverseCharge: boolean;
51
+ currency: finance.TCurrency;
52
+ notes: string[];
53
+ periodOfPerformance?: {
54
+ from: number;
55
+ to: number;
56
+ };
57
+ deliveryDate?: number;
58
+ buyerReference?: string;
59
+ electronicAddress?: {
60
+ scheme: string;
61
+ value: string;
62
+ };
63
+ paymentOptions?: finance.IPaymentOptionInfo;
64
+ relatedDocuments?: Array<{
65
+ relationType: 'corrects' | 'replaces' | 'references';
66
+ documentId: string;
67
+ issueDate?: number;
68
+ }>;
69
+ printResult?: {
70
+ pdfBufferString: string;
71
+ totalNet: number;
72
+ totalGross: number;
73
+ vatGroups: {
74
+ percentage: number;
75
+ items: TAccountingDocItem[];
76
+ }[];
77
+ };
78
+ get invoiceId(): string;
79
+ set invoiceId(value: string);
80
+ get invoiceType(): 'invoice' | 'creditnote' | 'debitnote';
81
+ set invoiceType(value: 'invoice' | 'creditnote' | 'debitnote');
82
+ get issueDate(): Date;
83
+ set issueDate(value: Date);
84
+ get totalNet(): number;
85
+ get totalVat(): number;
86
+ get totalGross(): number;
87
+ get taxBreakdown(): Array<{
88
+ taxPercent: number;
89
+ netAmount: number;
90
+ taxAmount: number;
91
+ }>;
92
+ metadata?: {
93
+ format?: InvoiceFormat;
94
+ version?: string;
95
+ profile?: string;
96
+ customizationId?: string;
97
+ extensions?: Record<string, any>;
98
+ };
99
+ private xmlString;
100
+ private detectedFormat;
101
+ private validationErrors;
102
+ private options;
103
+ private pdfEmbedder;
104
+ private pdfExtractor;
105
+ /**
106
+ * Creates a new EInvoice instance
107
+ * @param options Configuration options
108
+ */
109
+ constructor(options?: EInvoiceOptions);
110
+ /**
111
+ * Creates an empty TContact object
112
+ */
113
+ private createEmptyContact;
114
+ /**
115
+ * Exports the invoice as XML in the specified format
116
+ * @param format The export format
117
+ * @returns XML string
118
+ */
119
+ exportXml(format: ExportFormat): Promise<string>;
120
+ /**
121
+ * Loads invoice data from XML (alias for fromXmlString)
122
+ * @param xmlString The XML string to parse
123
+ * @returns The EInvoice instance for chaining
124
+ */
125
+ loadXml(xmlString: string): Promise<EInvoice>;
126
+ /**
127
+ * Loads invoice data from an XML string
128
+ * @param xmlString The XML string to parse
129
+ * @returns The EInvoice instance for chaining
130
+ */
131
+ fromXmlString(xmlString: string): Promise<EInvoice>;
132
+ /**
133
+ * Loads invoice data from a file
134
+ * @param filePath Path to the file to load
135
+ * @returns The EInvoice instance for chaining
136
+ */
137
+ fromFile(filePath: string): Promise<EInvoice>;
138
+ /**
139
+ * Loads invoice data from a PDF file
140
+ * @param filePath Path to the PDF file
141
+ * @returns The EInvoice instance for chaining
142
+ */
143
+ fromPdfFile(filePath: string): Promise<EInvoice>;
144
+ /**
145
+ * Maps data from a TInvoice to this EInvoice instance
146
+ */
147
+ private mapFromTInvoice;
148
+ /**
149
+ * Maps this EInvoice instance to a TInvoice
150
+ */
151
+ private mapToTInvoice;
152
+ /**
153
+ * Exports the invoice to an XML string in the specified format
154
+ * @param format The target format
155
+ * @returns The XML string
156
+ */
157
+ toXmlString(format: ExportFormat): Promise<string>;
158
+ /**
159
+ * Validates the invoice
160
+ * @param level The validation level to use
161
+ * @returns The validation result
162
+ */
163
+ validate(level?: ValidationLevel): Promise<ValidationResult>;
164
+ /**
165
+ * Embeds the invoice XML into a PDF
166
+ * @param pdfBuffer The PDF buffer to embed into
167
+ * @param format The format to use for embedding
168
+ * @returns The PDF buffer with embedded XML
169
+ */
170
+ embedInPdf(pdfBuffer: Buffer, format?: ExportFormat): Promise<Buffer>;
171
+ /**
172
+ * Saves the invoice to a file
173
+ * @param filePath The path to save to
174
+ * @param format The format to save in
175
+ */
176
+ saveToFile(filePath: string, format?: ExportFormat): Promise<void>;
177
+ /**
178
+ * Gets the validation errors
179
+ * @returns Array of validation errors
180
+ */
181
+ getValidationErrors(): ValidationError[];
182
+ /**
183
+ * Checks if the invoice is valid
184
+ * @returns True if valid, false otherwise
185
+ */
186
+ isValid(): boolean;
187
+ /**
188
+ * Gets the detected format
189
+ * @returns The detected invoice format
190
+ */
191
+ getFormat(): InvoiceFormat;
192
+ /**
193
+ * Gets the original XML string
194
+ * @returns The XML string
195
+ */
196
+ getXml(): string;
197
+ /**
198
+ * Calculates the total net amount
199
+ */
200
+ private calculateTotalNet;
201
+ /**
202
+ * Calculates the total VAT amount
203
+ */
204
+ private calculateTotalVat;
205
+ /**
206
+ * Calculates tax breakdown by rate
207
+ */
208
+ private calculateTaxBreakdown;
209
+ /**
210
+ * Creates a new invoice item
211
+ */
212
+ createItem(data: Partial<TAccountingDocItem>): TAccountingDocItem;
213
+ /**
214
+ * Adds an item to the invoice
215
+ */
216
+ addItem(item: Partial<TAccountingDocItem>): void;
217
+ }