@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.
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.decoder.d.ts +40 -0
- package/dist_ts/classes.decoder.js +320 -0
- package/dist_ts/classes.encoder.d.ts +51 -0
- package/dist_ts/classes.encoder.js +293 -0
- package/dist_ts/classes.xinvoice.d.ts +136 -0
- package/dist_ts/classes.xinvoice.js +352 -0
- package/dist_ts/einvoice.d.ts +217 -0
- package/dist_ts/einvoice.js +505 -0
- package/dist_ts/errors.d.ts +121 -0
- package/dist_ts/errors.js +241 -0
- package/dist_ts/formats/base/base.decoder.d.ts +32 -0
- package/dist_ts/formats/base/base.decoder.js +52 -0
- package/dist_ts/formats/base/base.encoder.d.ts +13 -0
- package/dist_ts/formats/base/base.encoder.js +7 -0
- package/dist_ts/formats/base/base.validator.d.ts +44 -0
- package/dist_ts/formats/base/base.validator.js +39 -0
- package/dist_ts/formats/base.decoder.d.ts +19 -0
- package/dist_ts/formats/base.decoder.js +130 -0
- package/dist_ts/formats/base.validator.d.ts +44 -0
- package/dist_ts/formats/base.validator.js +39 -0
- package/dist_ts/formats/cii/cii.decoder.d.ts +61 -0
- package/dist_ts/formats/cii/cii.decoder.js +111 -0
- package/dist_ts/formats/cii/cii.encoder.d.ts +43 -0
- package/dist_ts/formats/cii/cii.encoder.js +48 -0
- package/dist_ts/formats/cii/cii.types.d.ts +31 -0
- package/dist_ts/formats/cii/cii.types.js +40 -0
- package/dist_ts/formats/cii/cii.validator.d.ts +56 -0
- package/dist_ts/formats/cii/cii.validator.js +146 -0
- package/dist_ts/formats/cii/facturx/facturx.decoder.d.ts +43 -0
- package/dist_ts/formats/cii/facturx/facturx.decoder.js +207 -0
- package/dist_ts/formats/cii/facturx/facturx.encoder.d.ts +82 -0
- package/dist_ts/formats/cii/facturx/facturx.encoder.js +400 -0
- package/dist_ts/formats/cii/facturx/facturx.types.d.ts +10 -0
- package/dist_ts/formats/cii/facturx/facturx.types.js +15 -0
- package/dist_ts/formats/cii/facturx/facturx.validator.d.ts +32 -0
- package/dist_ts/formats/cii/facturx/facturx.validator.js +138 -0
- package/dist_ts/formats/cii/zugferd/zugferd.decoder.d.ts +43 -0
- package/dist_ts/formats/cii/zugferd/zugferd.decoder.js +218 -0
- package/dist_ts/formats/cii/zugferd/zugferd.encoder.d.ts +97 -0
- package/dist_ts/formats/cii/zugferd/zugferd.encoder.js +550 -0
- package/dist_ts/formats/cii/zugferd/zugferd.types.d.ts +10 -0
- package/dist_ts/formats/cii/zugferd/zugferd.types.js +15 -0
- package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.d.ts +49 -0
- package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.js +229 -0
- package/dist_ts/formats/cii/zugferd/zugferd.validator.d.ts +16 -0
- package/dist_ts/formats/cii/zugferd/zugferd.validator.js +29 -0
- package/dist_ts/formats/decoder.factory.d.ts +15 -0
- package/dist_ts/formats/decoder.factory.js +46 -0
- package/dist_ts/formats/factories/decoder.factory.d.ts +13 -0
- package/dist_ts/formats/factories/decoder.factory.js +56 -0
- package/dist_ts/formats/factories/encoder.factory.d.ts +14 -0
- package/dist_ts/formats/factories/encoder.factory.js +40 -0
- package/dist_ts/formats/factories/validator.factory.d.ts +12 -0
- package/dist_ts/formats/factories/validator.factory.js +110 -0
- package/dist_ts/formats/factorx.decoder.d.ts +18 -0
- package/dist_ts/formats/factorx.decoder.js +178 -0
- package/dist_ts/formats/factorx.encoder.d.ts +51 -0
- package/dist_ts/formats/factorx.encoder.js +293 -0
- package/dist_ts/formats/facturx.decoder.d.ts +18 -0
- package/dist_ts/formats/facturx.decoder.js +210 -0
- package/dist_ts/formats/facturx.encoder.d.ts +51 -0
- package/dist_ts/formats/facturx.encoder.js +293 -0
- package/dist_ts/formats/facturx.validator.d.ts +67 -0
- package/dist_ts/formats/facturx.validator.js +266 -0
- package/dist_ts/formats/pdf/extractors/associated.extractor.d.ts +14 -0
- package/dist_ts/formats/pdf/extractors/associated.extractor.js +68 -0
- package/dist_ts/formats/pdf/extractors/base.extractor.d.ts +92 -0
- package/dist_ts/formats/pdf/extractors/base.extractor.js +319 -0
- package/dist_ts/formats/pdf/extractors/index.d.ts +4 -0
- package/dist_ts/formats/pdf/extractors/index.js +5 -0
- package/dist_ts/formats/pdf/extractors/standard.extractor.d.ts +13 -0
- package/dist_ts/formats/pdf/extractors/standard.extractor.js +74 -0
- package/dist_ts/formats/pdf/extractors/text.extractor.d.ts +45 -0
- package/dist_ts/formats/pdf/extractors/text.extractor.js +151 -0
- package/dist_ts/formats/pdf/pdf.embedder.d.ts +69 -0
- package/dist_ts/formats/pdf/pdf.embedder.js +183 -0
- package/dist_ts/formats/pdf/pdf.extractor.d.ts +49 -0
- package/dist_ts/formats/pdf/pdf.extractor.js +98 -0
- package/dist_ts/formats/pdf/robust-pdf.extractor.d.ts +40 -0
- package/dist_ts/formats/pdf/robust-pdf.extractor.js +324 -0
- package/dist_ts/formats/ubl/en16931.ubl.validator.d.ts +18 -0
- package/dist_ts/formats/ubl/en16931.ubl.validator.js +169 -0
- package/dist_ts/formats/ubl/generic/ubl.encoder.d.ts +151 -0
- package/dist_ts/formats/ubl/generic/ubl.encoder.js +892 -0
- package/dist_ts/formats/ubl/ubl.decoder.d.ts +61 -0
- package/dist_ts/formats/ubl/ubl.decoder.js +95 -0
- package/dist_ts/formats/ubl/ubl.encoder.d.ts +38 -0
- package/dist_ts/formats/ubl/ubl.encoder.js +46 -0
- package/dist_ts/formats/ubl/ubl.types.d.ts +16 -0
- package/dist_ts/formats/ubl/ubl.types.js +21 -0
- package/dist_ts/formats/ubl/ubl.validator.d.ts +50 -0
- package/dist_ts/formats/ubl/ubl.validator.js +112 -0
- package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.d.ts +34 -0
- package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.js +424 -0
- package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.d.ts +75 -0
- package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.js +555 -0
- package/dist_ts/formats/ubl/xrechnung.validator.d.ts +15 -0
- package/dist_ts/formats/ubl/xrechnung.validator.js +107 -0
- package/dist_ts/formats/ubl.validator.d.ts +82 -0
- package/dist_ts/formats/ubl.validator.js +306 -0
- package/dist_ts/formats/utils/format.detector.d.ts +62 -0
- package/dist_ts/formats/utils/format.detector.js +249 -0
- package/dist_ts/formats/validation/en16931.validator.d.ts +23 -0
- package/dist_ts/formats/validation/en16931.validator.js +119 -0
- package/dist_ts/formats/validator.factory.d.ts +18 -0
- package/dist_ts/formats/validator.factory.js +78 -0
- package/dist_ts/formats/xinvoice.decoder.d.ts +28 -0
- package/dist_ts/formats/xinvoice.decoder.js +332 -0
- package/dist_ts/formats/xinvoice.encoder.d.ts +19 -0
- package/dist_ts/formats/xinvoice.encoder.js +282 -0
- package/dist_ts/index.d.ts +51 -0
- package/dist_ts/index.js +90 -0
- package/dist_ts/interfaces/common.d.ts +79 -0
- package/dist_ts/interfaces/common.js +24 -0
- package/dist_ts/interfaces.d.ts +87 -0
- package/dist_ts/interfaces.js +23 -0
- package/dist_ts/plugins.d.ts +14 -0
- package/dist_ts/plugins.js +31 -0
- package/npmextra.json +35 -0
- package/package.json +71 -0
- package/readme.hints.md +1107 -0
- package/readme.howtofixtests.md +38 -0
- package/readme.literature.md +1 -0
- package/readme.md +998 -0
- package/readme.plan.md +481 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/einvoice.ts +603 -0
- package/ts/errors.ts +341 -0
- package/ts/formats/base/base.decoder.ts +68 -0
- package/ts/formats/base/base.encoder.ts +14 -0
- package/ts/formats/base/base.validator.ts +64 -0
- package/ts/formats/cii/cii.decoder.ts +139 -0
- package/ts/formats/cii/cii.encoder.ts +64 -0
- package/ts/formats/cii/cii.types.ts +44 -0
- package/ts/formats/cii/cii.validator.ts +171 -0
- package/ts/formats/cii/facturx/facturx.decoder.ts +243 -0
- package/ts/formats/cii/facturx/facturx.encoder.ts +483 -0
- package/ts/formats/cii/facturx/facturx.types.ts +18 -0
- package/ts/formats/cii/facturx/facturx.validator.ts +180 -0
- package/ts/formats/cii/zugferd/zugferd.decoder.ts +256 -0
- package/ts/formats/cii/zugferd/zugferd.encoder.ts +661 -0
- package/ts/formats/cii/zugferd/zugferd.types.ts +18 -0
- package/ts/formats/cii/zugferd/zugferd.v1.decoder.ts +267 -0
- package/ts/formats/cii/zugferd/zugferd.validator.ts +31 -0
- package/ts/formats/factories/decoder.factory.ts +62 -0
- package/ts/formats/factories/encoder.factory.ts +47 -0
- package/ts/formats/factories/validator.factory.ts +134 -0
- package/ts/formats/pdf/extractors/associated.extractor.ts +78 -0
- package/ts/formats/pdf/extractors/base.extractor.ts +355 -0
- package/ts/formats/pdf/extractors/index.ts +4 -0
- package/ts/formats/pdf/extractors/standard.extractor.ts +86 -0
- package/ts/formats/pdf/extractors/text.extractor.ts +162 -0
- package/ts/formats/pdf/pdf.embedder.ts +242 -0
- package/ts/formats/pdf/pdf.extractor.ts +141 -0
- package/ts/formats/ubl/en16931.ubl.validator.ts +216 -0
- package/ts/formats/ubl/generic/ubl.encoder.ts +1041 -0
- package/ts/formats/ubl/ubl.decoder.ts +121 -0
- package/ts/formats/ubl/ubl.encoder.ts +63 -0
- package/ts/formats/ubl/ubl.types.ts +22 -0
- package/ts/formats/ubl/ubl.validator.ts +133 -0
- package/ts/formats/ubl/xrechnung/xrechnung.decoder.ts +471 -0
- package/ts/formats/ubl/xrechnung/xrechnung.encoder.ts +619 -0
- package/ts/formats/ubl/xrechnung.validator.ts +185 -0
- package/ts/formats/utils/format.detector.ts +306 -0
- package/ts/formats/validation/en16931.validator.ts +135 -0
- package/ts/index.ts +164 -0
- package/ts/interfaces/common.ts +90 -0
- package/ts/interfaces.ts +98 -0
- 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 '<';
|
|
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
|
+
}
|