@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,43 @@
1
+ import { CIIBaseDecoder } from '../cii.decoder.js';
2
+ import type { TCreditNote, TDebitNote } from '../../../interfaces/common.js';
3
+ /**
4
+ * Decoder for ZUGFeRD invoice format
5
+ */
6
+ export declare class ZUGFeRDDecoder extends CIIBaseDecoder {
7
+ /**
8
+ * Decodes a ZUGFeRD credit note
9
+ * @returns Promise resolving to a TCreditNote object
10
+ */
11
+ protected decodeCreditNote(): Promise<TCreditNote>;
12
+ /**
13
+ * Decodes a ZUGFeRD debit note (invoice)
14
+ * @returns Promise resolving to a TDebitNote object
15
+ */
16
+ protected decodeDebitNote(): Promise<TDebitNote>;
17
+ /**
18
+ * Extracts common invoice data from ZUGFeRD XML
19
+ * @returns Common invoice data
20
+ */
21
+ private extractCommonData;
22
+ /**
23
+ * Extracts party information from ZUGFeRD XML
24
+ * @param partyXPath XPath to the party node
25
+ * @returns Party information as TContact
26
+ */
27
+ private extractParty;
28
+ /**
29
+ * Extracts invoice items from ZUGFeRD XML
30
+ * @returns Array of invoice items
31
+ */
32
+ private extractItems;
33
+ /**
34
+ * Extracts notes from ZUGFeRD XML
35
+ * @returns Array of notes
36
+ */
37
+ private extractNotes;
38
+ /**
39
+ * Creates a default date for empty date fields
40
+ * @returns Default date as timestamp
41
+ */
42
+ private createDefaultDate;
43
+ }
@@ -0,0 +1,218 @@
1
+ import { CIIBaseDecoder } from '../cii.decoder.js';
2
+ import { business, finance } from '../../../plugins.js';
3
+ import { EN16931Validator } from '../../validation/en16931.validator.js';
4
+ /**
5
+ * Decoder for ZUGFeRD invoice format
6
+ */
7
+ export class ZUGFeRDDecoder extends CIIBaseDecoder {
8
+ /**
9
+ * Decodes a ZUGFeRD credit note
10
+ * @returns Promise resolving to a TCreditNote object
11
+ */
12
+ async decodeCreditNote() {
13
+ // Get common invoice data
14
+ const commonData = await this.extractCommonData();
15
+ // Create a credit note with the common data
16
+ return {
17
+ ...commonData,
18
+ accountingDocType: 'creditnote'
19
+ };
20
+ }
21
+ /**
22
+ * Decodes a ZUGFeRD debit note (invoice)
23
+ * @returns Promise resolving to a TDebitNote object
24
+ */
25
+ async decodeDebitNote() {
26
+ // Get common invoice data
27
+ const commonData = await this.extractCommonData();
28
+ // Create a debit note with the common data
29
+ return {
30
+ ...commonData,
31
+ accountingDocType: 'debitnote'
32
+ };
33
+ }
34
+ /**
35
+ * Extracts common invoice data from ZUGFeRD XML
36
+ * @returns Common invoice data
37
+ */
38
+ async extractCommonData() {
39
+ // Extract invoice ID
40
+ const invoiceId = this.getText('//rsm:ExchangedDocument/ram:ID');
41
+ // Extract issue date
42
+ const issueDateStr = this.getText('//ram:IssueDateTime/udt:DateTimeString');
43
+ const issueDateFormat = this.getText('//ram:IssueDateTime/udt:DateTimeString/@format');
44
+ const issueDate = this.parseCIIDate(issueDateStr, issueDateFormat);
45
+ // Extract seller information
46
+ const seller = this.extractParty('//ram:SellerTradeParty');
47
+ // Extract buyer information
48
+ const buyer = this.extractParty('//ram:BuyerTradeParty');
49
+ // Extract items
50
+ const items = this.extractItems();
51
+ // Extract due date
52
+ const dueDateStr = this.getText('//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString');
53
+ const dueDate = dueDateStr ? new Date(dueDateStr).getTime() : Date.now();
54
+ const dueInDays = Math.round((dueDate - issueDate) / (1000 * 60 * 60 * 24));
55
+ // Extract currency
56
+ const currencyCode = this.getText('//ram:InvoiceCurrencyCode') || 'EUR';
57
+ // Extract total amount (not used in this implementation but could be useful)
58
+ // const totalAmount = this.getNumber('//ram:GrandTotalAmount');
59
+ // Extract notes
60
+ const allNotes = this.extractNotes();
61
+ // Extract subject and notes separately
62
+ // If we have notes, the first one might be the subject
63
+ let subject = `Invoice ${invoiceId}`;
64
+ let notes = [...allNotes];
65
+ // If the first note doesn't look like a payment term or other standard note,
66
+ // treat it as the subject
67
+ if (allNotes.length > 0 && !allNotes[0].toLowerCase().includes('due in') &&
68
+ !allNotes[0].toLowerCase().includes('payment')) {
69
+ subject = allNotes[0];
70
+ notes = allNotes.slice(1); // Remove subject from notes
71
+ }
72
+ // Check for reverse charge
73
+ const reverseCharge = this.exists('//ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[text()="62"]');
74
+ // Create the common invoice data
75
+ const invoiceData = {
76
+ type: 'accounting-doc',
77
+ accountingDocType: 'invoice',
78
+ id: invoiceId,
79
+ accountingDocId: invoiceId,
80
+ date: issueDate,
81
+ accountingDocStatus: 'issued',
82
+ versionInfo: {
83
+ type: 'final',
84
+ version: '1.0.0'
85
+ },
86
+ language: 'en',
87
+ incidenceId: invoiceId,
88
+ from: seller,
89
+ to: buyer,
90
+ subject: subject,
91
+ items: items,
92
+ dueInDays: dueInDays,
93
+ reverseCharge: reverseCharge,
94
+ currency: currencyCode,
95
+ notes: notes,
96
+ deliveryDate: issueDate,
97
+ objectActions: []
98
+ };
99
+ // Validate mandatory EN16931 fields unless validation is skipped
100
+ if (!this.skipValidation) {
101
+ EN16931Validator.validateMandatoryFields(invoiceData);
102
+ }
103
+ return invoiceData;
104
+ }
105
+ /**
106
+ * Extracts party information from ZUGFeRD XML
107
+ * @param partyXPath XPath to the party node
108
+ * @returns Party information as TContact
109
+ */
110
+ extractParty(partyXPath) {
111
+ // Extract name
112
+ const name = this.getText(`${partyXPath}/ram:Name`);
113
+ // Extract address
114
+ const streetName = this.getText(`${partyXPath}/ram:PostalTradeAddress/ram:LineOne`);
115
+ const city = this.getText(`${partyXPath}/ram:PostalTradeAddress/ram:CityName`);
116
+ const postalCode = this.getText(`${partyXPath}/ram:PostalTradeAddress/ram:PostcodeCode`);
117
+ const country = this.getText(`${partyXPath}/ram:PostalTradeAddress/ram:CountryID`);
118
+ // Try to extract house number from street if possible
119
+ let houseNumber = '';
120
+ const streetParts = streetName.match(/^(.*?)\s+(\d+.*)$/);
121
+ if (streetParts) {
122
+ // If we can split into street name and house number
123
+ houseNumber = streetParts[2];
124
+ }
125
+ // Create address object
126
+ const address = {
127
+ streetName: streetName,
128
+ houseNumber: houseNumber,
129
+ city: city,
130
+ postalCode: postalCode,
131
+ countryCode: country
132
+ };
133
+ // Extract VAT ID
134
+ const vatId = this.getText(`${partyXPath}/ram:SpecifiedTaxRegistration/ram:ID[@schemeID="VA"]`) || '';
135
+ // Extract registration ID
136
+ const registrationId = this.getText(`${partyXPath}/ram:SpecifiedTaxRegistration/ram:ID[@schemeID="FC"]`) || '';
137
+ // Create contact object
138
+ return {
139
+ type: 'company',
140
+ name: name,
141
+ description: '',
142
+ address: address,
143
+ status: 'active',
144
+ foundedDate: this.createDefaultDate(),
145
+ registrationDetails: {
146
+ vatId: vatId,
147
+ registrationId: registrationId,
148
+ registrationName: ''
149
+ }
150
+ };
151
+ }
152
+ /**
153
+ * Extracts invoice items from ZUGFeRD XML
154
+ * @returns Array of invoice items
155
+ */
156
+ extractItems() {
157
+ const items = [];
158
+ // Get all item nodes
159
+ const itemNodes = this.select('//ram:IncludedSupplyChainTradeLineItem', this.doc);
160
+ // Process each item
161
+ if (Array.isArray(itemNodes)) {
162
+ for (let i = 0; i < itemNodes.length; i++) {
163
+ const itemNode = itemNodes[i];
164
+ // Extract item data
165
+ const name = this.getText('ram:SpecifiedTradeProduct/ram:Name', itemNode);
166
+ const articleNumber = this.getText('ram:SpecifiedTradeProduct/ram:SellerAssignedID', itemNode);
167
+ const unitQuantity = this.getNumber('ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', itemNode);
168
+ const unitType = this.getText('ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode', itemNode) || 'EA';
169
+ const unitNetPrice = this.getNumber('ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', itemNode);
170
+ const vatPercentage = this.getNumber('ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', itemNode);
171
+ // Create item object
172
+ items.push({
173
+ position: i + 1,
174
+ name: name,
175
+ articleNumber: articleNumber,
176
+ unitType: unitType,
177
+ unitQuantity: unitQuantity,
178
+ unitNetPrice: unitNetPrice,
179
+ vatPercentage: vatPercentage
180
+ });
181
+ }
182
+ }
183
+ return items;
184
+ }
185
+ /**
186
+ * Extracts notes from ZUGFeRD XML
187
+ * @returns Array of notes
188
+ */
189
+ extractNotes() {
190
+ const notes = [];
191
+ // Get all note nodes
192
+ const noteNodes = this.select('//ram:IncludedNote', this.doc);
193
+ // Process each note
194
+ if (Array.isArray(noteNodes)) {
195
+ for (let i = 0; i < noteNodes.length; i++) {
196
+ const noteNode = noteNodes[i];
197
+ const noteText = this.getText('ram:Content', noteNode);
198
+ if (noteText) {
199
+ notes.push(noteText);
200
+ }
201
+ }
202
+ }
203
+ return notes;
204
+ }
205
+ /**
206
+ * Creates a default date for empty date fields
207
+ * @returns Default date as timestamp
208
+ */
209
+ createDefaultDate() {
210
+ // Create a date object that will be compatible with TContact
211
+ return {
212
+ year: 2000,
213
+ month: 1,
214
+ day: 1
215
+ };
216
+ }
217
+ }
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVnZmVyZC5kZWNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvZm9ybWF0cy9jaWkvenVnZmVyZC96dWdmZXJkLmRlY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFDaEQ7OztPQUdHO0lBQ08sS0FBSyxDQUFDLGdCQUFnQjtRQUM5QiwwQkFBMEI7UUFDMUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVsRCw0Q0FBNEM7UUFDNUMsT0FBTztZQUNMLEdBQUcsVUFBVTtZQUNiLGlCQUFpQixFQUFFLFlBQXFCO1NBQ2YsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sS0FBSyxDQUFDLGVBQWU7UUFDN0IsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFbEQsMkNBQTJDO1FBQzNDLE9BQU87WUFDTCxHQUFHLFVBQVU7WUFDYixpQkFBaUIsRUFBRSxXQUFvQjtTQUNmLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxpQkFBaUI7UUFDN0IscUJBQXFCO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUVqRSxxQkFBcUI7UUFDckIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FB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
@@ -0,0 +1,97 @@
1
+ import { CIIBaseEncoder } from '../cii.encoder.js';
2
+ import type { TCreditNote, TDebitNote } from '../../../interfaces/common.js';
3
+ /**
4
+ * Encoder for ZUGFeRD invoice format
5
+ */
6
+ export declare class ZUGFeRDEncoder extends CIIBaseEncoder {
7
+ constructor();
8
+ /**
9
+ * Encodes a credit note into ZUGFeRD XML
10
+ * @param creditNote Credit note to encode
11
+ * @returns ZUGFeRD XML string
12
+ */
13
+ protected encodeCreditNote(creditNote: TCreditNote): Promise<string>;
14
+ /**
15
+ * Encodes a debit note (invoice) into ZUGFeRD XML
16
+ * @param debitNote Debit note to encode
17
+ * @returns ZUGFeRD XML string
18
+ */
19
+ protected encodeDebitNote(debitNote: TDebitNote): Promise<string>;
20
+ /**
21
+ * Creates a base ZUGFeRD XML document
22
+ * @returns XML document with basic structure
23
+ */
24
+ private createBaseXml;
25
+ /**
26
+ * Adds ZUGFeRD profile information to the XML document
27
+ * @param doc XML document
28
+ */
29
+ private addProfile;
30
+ /**
31
+ * Sets the document type code in the XML document
32
+ * @param doc XML document
33
+ * @param typeCode Document type code (380 for invoice, 381 for credit note)
34
+ */
35
+ private setDocumentTypeCode;
36
+ /**
37
+ * Adds common invoice data to the XML document
38
+ * @param doc XML document
39
+ * @param invoice Invoice data
40
+ */
41
+ private addCommonInvoiceData;
42
+ /**
43
+ * Adds agreement section with seller and buyer information
44
+ * @param doc XML document
45
+ * @param transactionElement Transaction element
46
+ * @param invoice Invoice data
47
+ */
48
+ private addAgreementSection;
49
+ /**
50
+ * Adds party information to an element
51
+ * @param doc XML document
52
+ * @param partyElement Party element
53
+ * @param party Party data
54
+ */
55
+ private addPartyInfo;
56
+ /**
57
+ * Adds delivery section with delivery information
58
+ * @param doc XML document
59
+ * @param transactionElement Transaction element
60
+ * @param invoice Invoice data
61
+ */
62
+ private addDeliverySection;
63
+ /**
64
+ * Adds settlement section with payment terms and totals
65
+ * @param doc XML document
66
+ * @param transactionElement Transaction element
67
+ * @param invoice Invoice data
68
+ */
69
+ private addSettlementSection;
70
+ /**
71
+ * Adds tax details to the settlement section
72
+ * @param doc XML document
73
+ * @param settlementElement Settlement element
74
+ * @param invoice Invoice data
75
+ */
76
+ private addTaxDetails;
77
+ /**
78
+ * Adds monetary summation to the settlement section
79
+ * @param doc XML document
80
+ * @param settlementElement Settlement element
81
+ * @param invoice Invoice data
82
+ */
83
+ private addMonetarySummation;
84
+ /**
85
+ * Adds line items to the XML document
86
+ * @param doc XML document
87
+ * @param transactionElement Transaction element
88
+ * @param invoice Invoice data
89
+ */
90
+ private addLineItems;
91
+ /**
92
+ * Formats a date as YYYYMMDD
93
+ * @param timestamp Timestamp to format
94
+ * @returns Formatted date string
95
+ */
96
+ private formatDateYYYYMMDD;
97
+ }