@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,241 @@
1
+ /**
2
+ * Base error class for all EInvoice-related errors
3
+ */
4
+ export class EInvoiceError extends Error {
5
+ constructor(message, code, details, cause) {
6
+ super(message);
7
+ this.name = 'EInvoiceError';
8
+ this.code = code;
9
+ this.details = details;
10
+ this.cause = cause;
11
+ // Maintains proper stack trace for where our error was thrown (only available on V8)
12
+ if (Error.captureStackTrace) {
13
+ Error.captureStackTrace(this, this.constructor);
14
+ }
15
+ }
16
+ /**
17
+ * Returns a detailed error message including cause if available
18
+ */
19
+ getDetailedMessage() {
20
+ let message = `${this.name} [${this.code}]: ${this.message}`;
21
+ if (this.details) {
22
+ message += `\nDetails: ${JSON.stringify(this.details, null, 2)}`;
23
+ }
24
+ if (this.cause) {
25
+ message += `\nCaused by: ${this.cause.message}`;
26
+ }
27
+ return message;
28
+ }
29
+ }
30
+ /**
31
+ * Error thrown when XML parsing fails
32
+ */
33
+ export class EInvoiceParsingError extends EInvoiceError {
34
+ constructor(message, details, cause) {
35
+ super(message, 'PARSE_ERROR', details, cause);
36
+ this.name = 'EInvoiceParsingError';
37
+ this.line = details?.line;
38
+ this.column = details?.column;
39
+ this.xmlSnippet = details?.xmlSnippet;
40
+ }
41
+ /**
42
+ * Returns a user-friendly error message with location information
43
+ */
44
+ getLocationMessage() {
45
+ let message = this.message;
46
+ if (this.line !== undefined && this.column !== undefined) {
47
+ message += ` at line ${this.line}, column ${this.column}`;
48
+ }
49
+ if (this.xmlSnippet) {
50
+ message += `\nNear: ${this.xmlSnippet}`;
51
+ }
52
+ return message;
53
+ }
54
+ }
55
+ /**
56
+ * Error thrown when validation fails
57
+ */
58
+ export class EInvoiceValidationError extends EInvoiceError {
59
+ constructor(message, validationErrors, details) {
60
+ super(message, 'VALIDATION_ERROR', details);
61
+ this.name = 'EInvoiceValidationError';
62
+ this.validationErrors = validationErrors;
63
+ }
64
+ /**
65
+ * Returns a formatted validation report
66
+ */
67
+ getValidationReport() {
68
+ let report = `${this.message}\n\nValidation errors:\n`;
69
+ for (const error of this.validationErrors) {
70
+ report += `- [${error.code}] ${error.message}`;
71
+ if (error.location) {
72
+ report += ` (at ${error.location})`;
73
+ }
74
+ if (error.severity) {
75
+ report += ` [${error.severity.toUpperCase()}]`;
76
+ }
77
+ report += '\n';
78
+ }
79
+ return report;
80
+ }
81
+ /**
82
+ * Gets validation errors by severity
83
+ */
84
+ getErrorsBySeverity(severity) {
85
+ return this.validationErrors.filter(e => (e.severity || 'error') === severity);
86
+ }
87
+ }
88
+ /**
89
+ * Error thrown during PDF operations
90
+ */
91
+ export class EInvoicePDFError extends EInvoiceError {
92
+ constructor(message, operation, details, cause) {
93
+ super(message, `PDF_${operation.toUpperCase()}_ERROR`, details, cause);
94
+ this.name = 'EInvoicePDFError';
95
+ this.operation = operation;
96
+ this.pdfInfo = details?.pdfInfo;
97
+ }
98
+ /**
99
+ * Returns recovery suggestions based on the operation
100
+ */
101
+ getRecoverySuggestions() {
102
+ const suggestions = [];
103
+ switch (this.operation) {
104
+ case 'extract':
105
+ suggestions.push('Ensure the PDF contains embedded XML data', 'Check if the PDF is a valid PDF/A-3 document', 'Try using a different extraction method', 'Verify the PDF is not corrupted');
106
+ break;
107
+ case 'embed':
108
+ suggestions.push('Ensure the source PDF is valid', 'Check that the XML data is well-formed', 'Verify sufficient memory is available', 'Try with a smaller XML payload');
109
+ break;
110
+ case 'create':
111
+ suggestions.push('Verify all required invoice data is provided', 'Check that the template PDF exists', 'Ensure write permissions for output directory');
112
+ break;
113
+ case 'validate':
114
+ suggestions.push('Check PDF/A-3 compliance', 'Verify XML attachment structure', 'Ensure proper PDF metadata');
115
+ break;
116
+ }
117
+ return suggestions;
118
+ }
119
+ }
120
+ /**
121
+ * Error thrown for format-specific issues
122
+ */
123
+ export class EInvoiceFormatError extends EInvoiceError {
124
+ constructor(message, details, cause) {
125
+ super(message, 'FORMAT_ERROR', details, cause);
126
+ this.name = 'EInvoiceFormatError';
127
+ this.sourceFormat = details.sourceFormat;
128
+ this.targetFormat = details.targetFormat;
129
+ this.unsupportedFeatures = details.unsupportedFeatures;
130
+ }
131
+ /**
132
+ * Returns a compatibility report
133
+ */
134
+ getCompatibilityReport() {
135
+ let report = this.message;
136
+ if (this.sourceFormat && this.targetFormat) {
137
+ report += `\n\nConversion: ${this.sourceFormat} → ${this.targetFormat}`;
138
+ }
139
+ if (this.unsupportedFeatures && this.unsupportedFeatures.length > 0) {
140
+ report += '\n\nUnsupported features:';
141
+ for (const feature of this.unsupportedFeatures) {
142
+ report += `\n- ${feature}`;
143
+ }
144
+ }
145
+ return report;
146
+ }
147
+ }
148
+ /**
149
+ * Error recovery helper class
150
+ */
151
+ export class ErrorRecovery {
152
+ /**
153
+ * Attempts to recover from a parsing error by cleaning the XML
154
+ */
155
+ static async attemptXMLRecovery(xmlString, error) {
156
+ try {
157
+ let cleanedXml = xmlString;
158
+ // Remove BOM if present
159
+ if (cleanedXml.charCodeAt(0) === 0xFEFF) {
160
+ cleanedXml = cleanedXml.slice(1);
161
+ }
162
+ // Fix common encoding issues
163
+ cleanedXml = cleanedXml
164
+ .replace(/&(?!(amp|lt|gt|apos|quot);)/g, '&')
165
+ .replace(/</g, (match, offset) => {
166
+ // Don't replace if it's part of <![CDATA[
167
+ const before = cleanedXml.substring(Math.max(0, offset - 10), offset);
168
+ if (before.includes('CDATA['))
169
+ return match;
170
+ return '&lt;';
171
+ });
172
+ // Try to fix unclosed tags if we have location info
173
+ if (error.line && error.xmlSnippet) {
174
+ // This is a simplified approach - real implementation would be more sophisticated
175
+ const lines = cleanedXml.split('\n');
176
+ if (lines[error.line - 1]) {
177
+ // Attempt basic fixes based on the error
178
+ // This is just a placeholder for more sophisticated recovery
179
+ }
180
+ }
181
+ return {
182
+ success: true,
183
+ cleanedXml,
184
+ message: 'Applied basic XML cleaning and encoding fixes'
185
+ };
186
+ }
187
+ catch (recoveryError) {
188
+ return {
189
+ success: false,
190
+ message: `Recovery failed: ${recoveryError instanceof Error ? recoveryError.message : String(recoveryError)}`
191
+ };
192
+ }
193
+ }
194
+ /**
195
+ * Provides partial data extraction on validation failure
196
+ */
197
+ static extractPartialData(xmlString, format) {
198
+ try {
199
+ // This would implement format-specific partial extraction
200
+ // For now, returning a placeholder
201
+ return {
202
+ success: false,
203
+ message: 'Partial data extraction not yet implemented'
204
+ };
205
+ }
206
+ catch (error) {
207
+ return {
208
+ success: false,
209
+ message: `Partial extraction failed: ${error instanceof Error ? error.message : String(error)}`
210
+ };
211
+ }
212
+ }
213
+ }
214
+ /**
215
+ * Error context builder for detailed error information
216
+ */
217
+ export class ErrorContext {
218
+ constructor() {
219
+ this.context = new Map();
220
+ }
221
+ add(key, value) {
222
+ this.context.set(key, value);
223
+ return this;
224
+ }
225
+ addTimestamp() {
226
+ this.context.set('timestamp', new Date().toISOString());
227
+ return this;
228
+ }
229
+ addEnvironment() {
230
+ this.context.set('environment', {
231
+ nodeVersion: process.version,
232
+ platform: process.platform,
233
+ arch: process.arch
234
+ });
235
+ return this;
236
+ }
237
+ build() {
238
+ return Object.fromEntries(this.context);
239
+ }
240
+ }
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxLQUFLO0lBS3RDLFlBQVksT0FBZSxFQUFFLElBQVksRUFBRSxPQUFhLEVBQUUsS0FBYTtRQUNyRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixxRkFBcUY7UUFDckYsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCO1FBQ3ZCLElBQUksT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksY0FBYyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztB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
@@ -0,0 +1,32 @@
1
+ import type { TInvoice } from '../../interfaces/common.js';
2
+ /**
3
+ * Base decoder class that defines common decoding functionality
4
+ * for all invoice format decoders
5
+ */
6
+ export declare abstract class BaseDecoder {
7
+ protected xml: string;
8
+ protected skipValidation: boolean;
9
+ constructor(xml: string, skipValidation?: boolean);
10
+ /**
11
+ * Decodes XML into a TInvoice object
12
+ * @returns Promise resolving to a TInvoice object
13
+ */
14
+ abstract decode(): Promise<TInvoice>;
15
+ /**
16
+ * Gets letter data in the standard format
17
+ * @returns Promise resolving to a TInvoice object
18
+ */
19
+ getLetterData(): Promise<TInvoice>;
20
+ /**
21
+ * Gets the raw XML content
22
+ * @returns XML string
23
+ */
24
+ getXml(): string;
25
+ /**
26
+ * Parses a CII date string based on format code
27
+ * @param dateStr Date string
28
+ * @param format Format code (e.g., '102' for YYYYMMDD)
29
+ * @returns Timestamp in milliseconds
30
+ */
31
+ protected parseCIIDate(dateStr: string, format?: string): number;
32
+ }
@@ -0,0 +1,52 @@
1
+ import { ValidationLevel } from '../../interfaces/common.js';
2
+ /**
3
+ * Base decoder class that defines common decoding functionality
4
+ * for all invoice format decoders
5
+ */
6
+ export class BaseDecoder {
7
+ constructor(xml, skipValidation = false) {
8
+ this.xml = xml;
9
+ this.skipValidation = skipValidation;
10
+ }
11
+ /**
12
+ * Gets letter data in the standard format
13
+ * @returns Promise resolving to a TInvoice object
14
+ */
15
+ async getLetterData() {
16
+ return this.decode();
17
+ }
18
+ /**
19
+ * Gets the raw XML content
20
+ * @returns XML string
21
+ */
22
+ getXml() {
23
+ return this.xml;
24
+ }
25
+ /**
26
+ * Parses a CII date string based on format code
27
+ * @param dateStr Date string
28
+ * @param format Format code (e.g., '102' for YYYYMMDD)
29
+ * @returns Timestamp in milliseconds
30
+ */
31
+ parseCIIDate(dateStr, format) {
32
+ if (!dateStr)
33
+ return Date.now();
34
+ // Format 102 is YYYYMMDD
35
+ if (format === '102' && dateStr.length === 8) {
36
+ const year = parseInt(dateStr.substring(0, 4));
37
+ const month = parseInt(dateStr.substring(4, 6)) - 1; // Month is 0-indexed in JS
38
+ const day = parseInt(dateStr.substring(6, 8));
39
+ return new Date(year, month, day).getTime();
40
+ }
41
+ // Format 610 is YYYYMM
42
+ if (format === '610' && dateStr.length === 6) {
43
+ const year = parseInt(dateStr.substring(0, 4));
44
+ const month = parseInt(dateStr.substring(4, 6)) - 1;
45
+ return new Date(year, month, 1).getTime();
46
+ }
47
+ // Try to parse as ISO date or other standard formats
48
+ const parsed = Date.parse(dateStr);
49
+ return isNaN(parsed) ? Date.now() : parsed;
50
+ }
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5kZWNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy9iYXNlL2Jhc2UuZGVjb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixXQUFXO0lBSS9CLFlBQVksR0FBVyxFQUFFLGlCQUEwQixLQUFLO1FBQ3RELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQVFEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLFlBQVksQ0FBQyxPQUFlLEVBQUUsTUFBZTtRQUNyRCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWhDLHlCQUF5QjtRQUN6QixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7WUFDaEYsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQscURBQXFEO1FBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLENBQUM7Q0FDRiJ9
@@ -0,0 +1,13 @@
1
+ import type { TInvoice } from '../../interfaces/common.js';
2
+ /**
3
+ * Base encoder class that defines common encoding functionality
4
+ * for all invoice format encoders
5
+ */
6
+ export declare abstract class BaseEncoder {
7
+ /**
8
+ * Encodes a TInvoice object into XML
9
+ * @param invoice TInvoice object to encode
10
+ * @returns XML string
11
+ */
12
+ abstract encode(invoice: TInvoice): Promise<string>;
13
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Base encoder class that defines common encoding functionality
3
+ * for all invoice format encoders
4
+ */
5
+ export class BaseEncoder {
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5lbmNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy9iYXNlL2Jhc2UuZW5jb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLFdBQVc7Q0FPaEMifQ==
@@ -0,0 +1,44 @@
1
+ import { ValidationLevel } from '../../interfaces/common.js';
2
+ import type { ValidationResult, ValidationError } from '../../interfaces/common.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
+ }
@@ -0,0 +1,39 @@
1
+ import { ValidationLevel } from '../../interfaces/common.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL2Jhc2UvYmFzZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzdEOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsYUFBYTtJQUlqQyxZQUFZLEdBQVc7UUFGYixXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUd2QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBU0Q7OztPQUdHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFjRDs7Ozs7T0FLRztJQUNPLFFBQVEsQ0FBQyxJQUFZLEVBQUUsT0FBZSxFQUFFLFdBQW1CLEVBQUU7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJO1lBQ0osT0FBTztZQUNQLFFBQVE7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,19 @@
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
+ }
@@ -0,0 +1,130 @@
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==
@@ -0,0 +1,44 @@
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
+ }