@fin.cx/einvoice 5.0.2 → 5.1.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.js +1 -1
- package/dist_ts/einvoice.d.ts +4 -8
- package/dist_ts/einvoice.js +46 -7
- package/dist_ts/formats/converters/xml-to-einvoice.converter.d.ts +21 -0
- package/dist_ts/formats/converters/xml-to-einvoice.converter.js +127 -0
- package/dist_ts/formats/semantic/bt-bg.model.d.ts +445 -0
- package/dist_ts/formats/semantic/bt-bg.model.js +12 -0
- package/dist_ts/formats/semantic/semantic.adapter.d.ts +87 -0
- package/dist_ts/formats/semantic/semantic.adapter.js +538 -0
- package/dist_ts/formats/semantic/semantic.validator.d.ts +48 -0
- package/dist_ts/formats/semantic/semantic.validator.js +596 -0
- package/dist_ts/formats/utils/currency.calculator.decimal.d.ts +98 -0
- package/dist_ts/formats/utils/currency.calculator.decimal.js +212 -0
- package/dist_ts/formats/utils/currency.utils.d.ts +99 -0
- package/dist_ts/formats/utils/currency.utils.js +250 -0
- package/dist_ts/formats/utils/decimal.d.ts +151 -0
- package/dist_ts/formats/utils/decimal.js +435 -0
- package/dist_ts/formats/validation/codelist.validator.d.ts +49 -0
- package/dist_ts/formats/validation/codelist.validator.js +188 -0
- package/dist_ts/formats/validation/conformance.harness.d.ts +99 -0
- package/dist_ts/formats/validation/conformance.harness.js +471 -0
- package/dist_ts/formats/validation/en16931.business-rules.validator.d.ts +58 -0
- package/dist_ts/formats/validation/en16931.business-rules.validator.js +459 -0
- package/dist_ts/formats/validation/facturx.validator.d.ts +75 -0
- package/dist_ts/formats/validation/facturx.validator.js +522 -0
- package/dist_ts/formats/validation/integrated.validator.d.ts +82 -0
- package/dist_ts/formats/validation/integrated.validator.js +311 -0
- package/dist_ts/formats/validation/peppol.validator.d.ts +77 -0
- package/dist_ts/formats/validation/peppol.validator.js +529 -0
- package/dist_ts/formats/validation/schematron.downloader.d.ts +71 -0
- package/dist_ts/formats/validation/schematron.downloader.js +254 -0
- package/dist_ts/formats/validation/schematron.integration.d.ts +60 -0
- package/dist_ts/formats/validation/schematron.integration.js +230 -0
- package/dist_ts/formats/validation/schematron.validator.d.ts +79 -0
- package/dist_ts/formats/validation/schematron.validator.js +288 -0
- package/dist_ts/formats/validation/schematron.worker.d.ts +50 -0
- package/dist_ts/formats/validation/schematron.worker.js +185 -0
- package/dist_ts/formats/validation/validation.types.d.ts +163 -0
- package/dist_ts/formats/validation/validation.types.js +181 -0
- package/dist_ts/formats/validation/vat-categories.validator.d.ts +87 -0
- package/dist_ts/formats/validation/vat-categories.validator.js +497 -0
- package/dist_ts/formats/validation/xrechnung.validator.d.ts +92 -0
- package/dist_ts/formats/validation/xrechnung.validator.js +417 -0
- package/dist_ts/interfaces/common.d.ts +1 -0
- package/dist_ts/interfaces/en16931-metadata.d.ts +83 -0
- package/dist_ts/interfaces/en16931-metadata.js +6 -0
- package/dist_ts/plugins.d.ts +3 -1
- package/dist_ts/plugins.js +7 -2
- package/dist_ts_install/download-schematron.d.ts +6 -0
- package/dist_ts_install/download-schematron.js +62 -0
- package/dist_ts_install/download-test-samples.d.ts +19 -0
- package/dist_ts_install/download-test-samples.js +169 -0
- package/dist_ts_install/download-xrechnung-rules.d.ts +7 -0
- package/dist_ts_install/download-xrechnung-rules.js +146 -0
- package/dist_ts_install/index.d.ts +8 -0
- package/dist_ts_install/index.js +246 -0
- package/package.json +13 -8
- package/readme.md +255 -810
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +63 -14
- package/ts/formats/converters/xml-to-einvoice.converter.ts +142 -0
- package/ts/formats/semantic/bt-bg.model.ts +524 -0
- package/ts/formats/semantic/semantic.adapter.ts +600 -0
- package/ts/formats/semantic/semantic.validator.ts +654 -0
- package/ts/formats/utils/currency.calculator.decimal.ts +323 -0
- package/ts/formats/utils/currency.utils.ts +299 -0
- package/ts/formats/utils/decimal.ts +509 -0
- package/ts/formats/validation/codelist.validator.ts +317 -0
- package/ts/formats/validation/conformance.harness.ts +591 -0
- package/ts/formats/validation/en16931.business-rules.validator.ts +694 -0
- package/ts/formats/validation/facturx.validator.ts +579 -0
- package/ts/formats/validation/integrated.validator.ts +405 -0
- package/ts/formats/validation/peppol.validator.ts +589 -0
- package/ts/formats/validation/schematron.downloader.ts +304 -0
- package/ts/formats/validation/schematron.integration.ts +285 -0
- package/ts/formats/validation/schematron.validator.ts +348 -0
- package/ts/formats/validation/schematron.worker.ts +221 -0
- package/ts/formats/validation/validation.types.ts +274 -0
- package/ts/formats/validation/vat-categories.validator.ts +845 -0
- package/ts/formats/validation/xrechnung.validator.ts +494 -0
- package/ts/interfaces/common.ts +1 -0
- package/ts/interfaces/en16931-metadata.ts +104 -0
- package/ts/plugins.ts +8 -0
- package/ts/tspublish.json +3 -0
- package/dist_ts/classes.decoder.d.ts +0 -40
- package/dist_ts/classes.decoder.js +0 -320
- package/dist_ts/classes.encoder.d.ts +0 -51
- package/dist_ts/classes.encoder.js +0 -293
- package/dist_ts/classes.xinvoice.d.ts +0 -136
- package/dist_ts/classes.xinvoice.js +0 -352
- package/dist_ts/formats/base.decoder.d.ts +0 -19
- package/dist_ts/formats/base.decoder.js +0 -130
- package/dist_ts/formats/base.validator.d.ts +0 -44
- package/dist_ts/formats/base.validator.js +0 -39
- package/dist_ts/formats/decoder.factory.d.ts +0 -15
- package/dist_ts/formats/decoder.factory.js +0 -46
- package/dist_ts/formats/factorx.decoder.d.ts +0 -18
- package/dist_ts/formats/factorx.decoder.js +0 -178
- package/dist_ts/formats/factorx.encoder.d.ts +0 -51
- package/dist_ts/formats/factorx.encoder.js +0 -293
- package/dist_ts/formats/facturx.decoder.d.ts +0 -18
- package/dist_ts/formats/facturx.decoder.js +0 -210
- package/dist_ts/formats/facturx.encoder.d.ts +0 -51
- package/dist_ts/formats/facturx.encoder.js +0 -293
- package/dist_ts/formats/facturx.validator.d.ts +0 -67
- package/dist_ts/formats/facturx.validator.js +0 -266
- package/dist_ts/formats/pdf/robust-pdf.extractor.d.ts +0 -40
- package/dist_ts/formats/pdf/robust-pdf.extractor.js +0 -324
- package/dist_ts/formats/ubl.validator.d.ts +0 -82
- package/dist_ts/formats/ubl.validator.js +0 -306
- package/dist_ts/formats/validator.factory.d.ts +0 -18
- package/dist_ts/formats/validator.factory.js +0 -78
- package/dist_ts/formats/xinvoice.decoder.d.ts +0 -28
- package/dist_ts/formats/xinvoice.decoder.js +0 -332
- package/dist_ts/formats/xinvoice.encoder.d.ts +0 -19
- package/dist_ts/formats/xinvoice.encoder.js +0 -282
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decimal Arithmetic Library for EN16931 Compliance
|
|
3
|
+
* Provides arbitrary precision decimal arithmetic to avoid floating-point errors
|
|
4
|
+
*
|
|
5
|
+
* Based on EN16931 requirements for financial calculations:
|
|
6
|
+
* - All monetary amounts must be calculated with sufficient precision
|
|
7
|
+
* - Rounding must be consistent and predictable
|
|
8
|
+
* - No loss of precision in intermediate calculations
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Decimal class for arbitrary precision arithmetic
|
|
12
|
+
* Internally stores the value as an integer with a scale factor
|
|
13
|
+
*/
|
|
14
|
+
export class Decimal {
|
|
15
|
+
static get ZERO() {
|
|
16
|
+
if (!this._ZERO)
|
|
17
|
+
this._ZERO = new Decimal(0);
|
|
18
|
+
return this._ZERO;
|
|
19
|
+
}
|
|
20
|
+
static get ONE() {
|
|
21
|
+
if (!this._ONE)
|
|
22
|
+
this._ONE = new Decimal(1);
|
|
23
|
+
return this._ONE;
|
|
24
|
+
}
|
|
25
|
+
static get TEN() {
|
|
26
|
+
if (!this._TEN)
|
|
27
|
+
this._TEN = new Decimal(10);
|
|
28
|
+
return this._TEN;
|
|
29
|
+
}
|
|
30
|
+
static get HUNDRED() {
|
|
31
|
+
if (!this._HUNDRED)
|
|
32
|
+
this._HUNDRED = new Decimal(100);
|
|
33
|
+
return this._HUNDRED;
|
|
34
|
+
}
|
|
35
|
+
// Default scale for monetary calculations (4 decimal places for intermediate calculations)
|
|
36
|
+
static { this.DEFAULT_SCALE = 4; }
|
|
37
|
+
/**
|
|
38
|
+
* Create a new Decimal from various input types
|
|
39
|
+
*/
|
|
40
|
+
constructor(value, scale) {
|
|
41
|
+
if (value instanceof Decimal) {
|
|
42
|
+
this.value = value.value;
|
|
43
|
+
this.scale = value.scale;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Special handling for direct bigint with scale (internal use)
|
|
47
|
+
if (typeof value === 'bigint' && scale !== undefined) {
|
|
48
|
+
this.value = value;
|
|
49
|
+
this.scale = scale;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Determine scale if not provided
|
|
53
|
+
if (scale === undefined) {
|
|
54
|
+
if (typeof value === 'string') {
|
|
55
|
+
const parts = value.split('.');
|
|
56
|
+
scale = parts.length > 1 ? parts[1].length : 0;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
scale = Decimal.DEFAULT_SCALE;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
this.scale = scale;
|
|
63
|
+
// Convert to scaled integer
|
|
64
|
+
if (typeof value === 'string') {
|
|
65
|
+
// Remove any formatting
|
|
66
|
+
value = value.replace(/[^\d.-]/g, '');
|
|
67
|
+
const parts = value.split('.');
|
|
68
|
+
const integerPart = parts[0] || '0';
|
|
69
|
+
const decimalPart = (parts[1] || '').padEnd(scale, '0').slice(0, scale);
|
|
70
|
+
this.value = BigInt(integerPart + decimalPart);
|
|
71
|
+
}
|
|
72
|
+
else if (typeof value === 'number') {
|
|
73
|
+
// Handle floating point numbers
|
|
74
|
+
if (!isFinite(value)) {
|
|
75
|
+
throw new Error(`Invalid number value: ${value}`);
|
|
76
|
+
}
|
|
77
|
+
const multiplier = Math.pow(10, scale);
|
|
78
|
+
this.value = BigInt(Math.round(value * multiplier));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// bigint
|
|
82
|
+
this.value = value * BigInt(Math.pow(10, scale));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Convert to string representation
|
|
87
|
+
*/
|
|
88
|
+
toString(decimalPlaces) {
|
|
89
|
+
const absValue = this.value < 0n ? -this.value : this.value;
|
|
90
|
+
const str = absValue.toString().padStart(this.scale + 1, '0');
|
|
91
|
+
const integerPart = this.scale > 0 ? (str.slice(0, -this.scale) || '0') : str;
|
|
92
|
+
let decimalPart = this.scale > 0 ? str.slice(-this.scale) : '';
|
|
93
|
+
// Apply decimal places if specified
|
|
94
|
+
if (decimalPlaces !== undefined) {
|
|
95
|
+
if (decimalPlaces === 0) {
|
|
96
|
+
return (this.value < 0n ? '-' : '') + integerPart;
|
|
97
|
+
}
|
|
98
|
+
decimalPart = decimalPart.padEnd(decimalPlaces, '0').slice(0, decimalPlaces);
|
|
99
|
+
}
|
|
100
|
+
// Remove trailing zeros if no specific decimal places requested
|
|
101
|
+
if (decimalPlaces === undefined) {
|
|
102
|
+
decimalPart = decimalPart.replace(/0+$/, '');
|
|
103
|
+
}
|
|
104
|
+
const result = decimalPart ? `${integerPart}.${decimalPart}` : integerPart;
|
|
105
|
+
return this.value < 0n ? '-' + result : result;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Convert to number (may lose precision)
|
|
109
|
+
*/
|
|
110
|
+
toNumber() {
|
|
111
|
+
return Number(this.value) / Math.pow(10, this.scale);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Convert to fixed decimal places string
|
|
115
|
+
*/
|
|
116
|
+
toFixed(decimalPlaces) {
|
|
117
|
+
return this.round(decimalPlaces).toString(decimalPlaces);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Add two decimals
|
|
121
|
+
*/
|
|
122
|
+
add(other) {
|
|
123
|
+
const otherDecimal = other instanceof Decimal ? other : new Decimal(other);
|
|
124
|
+
// Align scales
|
|
125
|
+
if (this.scale === otherDecimal.scale) {
|
|
126
|
+
return new Decimal(this.value + otherDecimal.value, this.scale);
|
|
127
|
+
}
|
|
128
|
+
const maxScale = Math.max(this.scale, otherDecimal.scale);
|
|
129
|
+
const thisScaled = this.rescale(maxScale);
|
|
130
|
+
const otherScaled = otherDecimal.rescale(maxScale);
|
|
131
|
+
return new Decimal(thisScaled.value + otherScaled.value, maxScale);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Subtract another decimal
|
|
135
|
+
*/
|
|
136
|
+
subtract(other) {
|
|
137
|
+
const otherDecimal = other instanceof Decimal ? other : new Decimal(other);
|
|
138
|
+
// Align scales
|
|
139
|
+
if (this.scale === otherDecimal.scale) {
|
|
140
|
+
return new Decimal(this.value - otherDecimal.value, this.scale);
|
|
141
|
+
}
|
|
142
|
+
const maxScale = Math.max(this.scale, otherDecimal.scale);
|
|
143
|
+
const thisScaled = this.rescale(maxScale);
|
|
144
|
+
const otherScaled = otherDecimal.rescale(maxScale);
|
|
145
|
+
return new Decimal(thisScaled.value - otherScaled.value, maxScale);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Multiply by another decimal
|
|
149
|
+
*/
|
|
150
|
+
multiply(other) {
|
|
151
|
+
const otherDecimal = other instanceof Decimal ? other : new Decimal(other);
|
|
152
|
+
// Multiply values and add scales
|
|
153
|
+
const newValue = this.value * otherDecimal.value;
|
|
154
|
+
const newScale = this.scale + otherDecimal.scale;
|
|
155
|
+
// Reduce scale if possible to avoid overflow
|
|
156
|
+
const result = new Decimal(newValue, newScale);
|
|
157
|
+
return result.normalize();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Divide by another decimal
|
|
161
|
+
*/
|
|
162
|
+
divide(other, precision = 10) {
|
|
163
|
+
const otherDecimal = other instanceof Decimal ? other : new Decimal(other);
|
|
164
|
+
if (otherDecimal.value === 0n) {
|
|
165
|
+
throw new Error('Division by zero');
|
|
166
|
+
}
|
|
167
|
+
// Scale up the dividend to maintain precision
|
|
168
|
+
const scaledDividend = this.value * BigInt(Math.pow(10, precision));
|
|
169
|
+
const quotient = scaledDividend / otherDecimal.value;
|
|
170
|
+
return new Decimal(quotient, this.scale + precision - otherDecimal.scale).normalize();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Calculate percentage (this * rate / 100)
|
|
174
|
+
*/
|
|
175
|
+
percentage(rate) {
|
|
176
|
+
const rateDecimal = rate instanceof Decimal ? rate : new Decimal(rate);
|
|
177
|
+
return this.multiply(rateDecimal).divide(100);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Round to specified decimal places using a specific rounding mode
|
|
181
|
+
*/
|
|
182
|
+
round(decimalPlaces, mode = 'HALF_UP') {
|
|
183
|
+
if (decimalPlaces === this.scale) {
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
if (decimalPlaces > this.scale) {
|
|
187
|
+
// Just add zeros
|
|
188
|
+
return this.rescale(decimalPlaces);
|
|
189
|
+
}
|
|
190
|
+
// Need to round
|
|
191
|
+
const factor = BigInt(Math.pow(10, this.scale - decimalPlaces));
|
|
192
|
+
const halfFactor = factor / 2n;
|
|
193
|
+
let rounded;
|
|
194
|
+
const isNegative = this.value < 0n;
|
|
195
|
+
const absValue = isNegative ? -this.value : this.value;
|
|
196
|
+
switch (mode) {
|
|
197
|
+
case 'HALF_UP':
|
|
198
|
+
// Round half away from zero
|
|
199
|
+
rounded = (absValue + halfFactor) / factor;
|
|
200
|
+
break;
|
|
201
|
+
case 'HALF_DOWN':
|
|
202
|
+
// Round half toward zero
|
|
203
|
+
rounded = (absValue + halfFactor - 1n) / factor;
|
|
204
|
+
break;
|
|
205
|
+
case 'HALF_EVEN':
|
|
206
|
+
// Banker's rounding
|
|
207
|
+
const quotient = absValue / factor;
|
|
208
|
+
const remainder = absValue % factor;
|
|
209
|
+
if (remainder > halfFactor || (remainder === halfFactor && quotient % 2n === 1n)) {
|
|
210
|
+
rounded = quotient + 1n;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
rounded = quotient;
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
case 'UP':
|
|
217
|
+
// Round away from zero
|
|
218
|
+
rounded = (absValue + factor - 1n) / factor;
|
|
219
|
+
break;
|
|
220
|
+
case 'DOWN':
|
|
221
|
+
// Round toward zero
|
|
222
|
+
rounded = absValue / factor;
|
|
223
|
+
break;
|
|
224
|
+
case 'CEILING':
|
|
225
|
+
// Round toward positive infinity
|
|
226
|
+
if (isNegative) {
|
|
227
|
+
rounded = absValue / factor;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
rounded = (absValue + factor - 1n) / factor;
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
case 'FLOOR':
|
|
234
|
+
// Round toward negative infinity
|
|
235
|
+
if (isNegative) {
|
|
236
|
+
rounded = (absValue + factor - 1n) / factor;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
rounded = absValue / factor;
|
|
240
|
+
}
|
|
241
|
+
break;
|
|
242
|
+
default:
|
|
243
|
+
throw new Error(`Unknown rounding mode: ${mode}`);
|
|
244
|
+
}
|
|
245
|
+
const finalValue = isNegative ? -rounded : rounded;
|
|
246
|
+
return new Decimal(finalValue, decimalPlaces);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Compare with another decimal
|
|
250
|
+
*/
|
|
251
|
+
compareTo(other) {
|
|
252
|
+
const otherDecimal = other instanceof Decimal ? other : new Decimal(other);
|
|
253
|
+
// Align scales for comparison
|
|
254
|
+
if (this.scale === otherDecimal.scale) {
|
|
255
|
+
if (this.value < otherDecimal.value)
|
|
256
|
+
return -1;
|
|
257
|
+
if (this.value > otherDecimal.value)
|
|
258
|
+
return 1;
|
|
259
|
+
return 0;
|
|
260
|
+
}
|
|
261
|
+
const maxScale = Math.max(this.scale, otherDecimal.scale);
|
|
262
|
+
const thisScaled = this.rescale(maxScale);
|
|
263
|
+
const otherScaled = otherDecimal.rescale(maxScale);
|
|
264
|
+
if (thisScaled.value < otherScaled.value)
|
|
265
|
+
return -1;
|
|
266
|
+
if (thisScaled.value > otherScaled.value)
|
|
267
|
+
return 1;
|
|
268
|
+
return 0;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Check equality
|
|
272
|
+
*/
|
|
273
|
+
equals(other, tolerance) {
|
|
274
|
+
if (tolerance) {
|
|
275
|
+
const toleranceDecimal = tolerance instanceof Decimal ? tolerance : new Decimal(tolerance);
|
|
276
|
+
const diff = this.subtract(other);
|
|
277
|
+
const absDiff = diff.abs();
|
|
278
|
+
return absDiff.compareTo(toleranceDecimal) <= 0;
|
|
279
|
+
}
|
|
280
|
+
return this.compareTo(other) === 0;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Check if less than
|
|
284
|
+
*/
|
|
285
|
+
lessThan(other) {
|
|
286
|
+
return this.compareTo(other) < 0;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Check if less than or equal
|
|
290
|
+
*/
|
|
291
|
+
lessThanOrEqual(other) {
|
|
292
|
+
return this.compareTo(other) <= 0;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Check if greater than
|
|
296
|
+
*/
|
|
297
|
+
greaterThan(other) {
|
|
298
|
+
return this.compareTo(other) > 0;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Check if greater than or equal
|
|
302
|
+
*/
|
|
303
|
+
greaterThanOrEqual(other) {
|
|
304
|
+
return this.compareTo(other) >= 0;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Get absolute value
|
|
308
|
+
*/
|
|
309
|
+
abs() {
|
|
310
|
+
return this.value < 0n ? new Decimal(-this.value, this.scale) : this;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Negate the value
|
|
314
|
+
*/
|
|
315
|
+
negate() {
|
|
316
|
+
return new Decimal(-this.value, this.scale);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Check if zero
|
|
320
|
+
*/
|
|
321
|
+
isZero() {
|
|
322
|
+
return this.value === 0n;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Check if negative
|
|
326
|
+
*/
|
|
327
|
+
isNegative() {
|
|
328
|
+
return this.value < 0n;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Check if positive
|
|
332
|
+
*/
|
|
333
|
+
isPositive() {
|
|
334
|
+
return this.value > 0n;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Rescale to a different number of decimal places
|
|
338
|
+
*/
|
|
339
|
+
rescale(newScale) {
|
|
340
|
+
if (newScale === this.scale) {
|
|
341
|
+
return this;
|
|
342
|
+
}
|
|
343
|
+
if (newScale > this.scale) {
|
|
344
|
+
// Add zeros
|
|
345
|
+
const factor = BigInt(Math.pow(10, newScale - this.scale));
|
|
346
|
+
return new Decimal(this.value * factor, newScale);
|
|
347
|
+
}
|
|
348
|
+
// This would lose precision, use round() instead
|
|
349
|
+
throw new Error('Use round() to reduce scale');
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Normalize by removing trailing zeros
|
|
353
|
+
*/
|
|
354
|
+
normalize() {
|
|
355
|
+
if (this.value === 0n) {
|
|
356
|
+
return new Decimal(0n, 0);
|
|
357
|
+
}
|
|
358
|
+
let value = this.value;
|
|
359
|
+
let scale = this.scale;
|
|
360
|
+
while (scale > 0 && value % 10n === 0n) {
|
|
361
|
+
value = value / 10n;
|
|
362
|
+
scale--;
|
|
363
|
+
}
|
|
364
|
+
return new Decimal(value, scale);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Create a Decimal from a percentage string (e.g., "19%" -> 0.19)
|
|
368
|
+
*/
|
|
369
|
+
static fromPercentage(value) {
|
|
370
|
+
const cleaned = value.replace('%', '').trim();
|
|
371
|
+
return new Decimal(cleaned).divide(100);
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Sum an array of decimals
|
|
375
|
+
*/
|
|
376
|
+
static sum(values) {
|
|
377
|
+
return values.reduce((acc, val) => {
|
|
378
|
+
const decimal = val instanceof Decimal ? val : new Decimal(val);
|
|
379
|
+
return acc.add(decimal);
|
|
380
|
+
}, Decimal.ZERO);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Get the minimum value
|
|
384
|
+
*/
|
|
385
|
+
static min(...values) {
|
|
386
|
+
if (values.length === 0) {
|
|
387
|
+
throw new Error('No values provided');
|
|
388
|
+
}
|
|
389
|
+
let min = values[0] instanceof Decimal ? values[0] : new Decimal(values[0]);
|
|
390
|
+
for (let i = 1; i < values.length; i++) {
|
|
391
|
+
const current = values[i] instanceof Decimal ? values[i] : new Decimal(values[i]);
|
|
392
|
+
const currentDecimal = current instanceof Decimal ? current : new Decimal(current);
|
|
393
|
+
if (currentDecimal.lessThan(min)) {
|
|
394
|
+
min = currentDecimal;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return min;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get the maximum value
|
|
401
|
+
*/
|
|
402
|
+
static max(...values) {
|
|
403
|
+
if (values.length === 0) {
|
|
404
|
+
throw new Error('No values provided');
|
|
405
|
+
}
|
|
406
|
+
let max = values[0] instanceof Decimal ? values[0] : new Decimal(values[0]);
|
|
407
|
+
for (let i = 1; i < values.length; i++) {
|
|
408
|
+
const current = values[i] instanceof Decimal ? values[i] : new Decimal(values[i]);
|
|
409
|
+
const currentDecimal = current instanceof Decimal ? current : new Decimal(current);
|
|
410
|
+
if (currentDecimal.greaterThan(max)) {
|
|
411
|
+
max = currentDecimal;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return max;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Helper function to create a Decimal
|
|
419
|
+
*/
|
|
420
|
+
export function decimal(value) {
|
|
421
|
+
return new Decimal(value);
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Export commonly used rounding modes
|
|
425
|
+
*/
|
|
426
|
+
export const RoundingMode = {
|
|
427
|
+
HALF_UP: 'HALF_UP',
|
|
428
|
+
HALF_DOWN: 'HALF_DOWN',
|
|
429
|
+
HALF_EVEN: 'HALF_EVEN',
|
|
430
|
+
UP: 'UP',
|
|
431
|
+
DOWN: 'DOWN',
|
|
432
|
+
CEILING: 'CEILING',
|
|
433
|
+
FLOOR: 'FLOOR'
|
|
434
|
+
};
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvdXRpbHMvZGVjaW1hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVIOzs7R0FHRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBVWxCLE1BQU0sS0FBSyxJQUFJO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sS0FBSyxPQUFPO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwyRkFBMkY7YUFDbkUsa0JBQWEsR0FBRyxDQUFDLENBQUM7SUFFMUM7O09BRUc7SUFDSCxZQUFZLEtBQXlDLEVBQUUsS0FBYztRQUNuRSxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFH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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ValidationResult } from './validation.types.js';
|
|
2
|
+
import type { EInvoice } from '../../einvoice.js';
|
|
3
|
+
/**
|
|
4
|
+
* Code List Validator for EN16931 compliance
|
|
5
|
+
* Validates against standard code lists (ISO, UNCL, UNECE)
|
|
6
|
+
*/
|
|
7
|
+
export declare class CodeListValidator {
|
|
8
|
+
private results;
|
|
9
|
+
/**
|
|
10
|
+
* Validate all code lists in an invoice
|
|
11
|
+
*/
|
|
12
|
+
validate(invoice: EInvoice): ValidationResult[];
|
|
13
|
+
/**
|
|
14
|
+
* Validate currency codes (ISO 4217)
|
|
15
|
+
*/
|
|
16
|
+
private validateCurrency;
|
|
17
|
+
/**
|
|
18
|
+
* Validate country codes (ISO 3166-1 alpha-2)
|
|
19
|
+
*/
|
|
20
|
+
private validateCountryCodes;
|
|
21
|
+
/**
|
|
22
|
+
* Validate document type code (UNCL1001)
|
|
23
|
+
*/
|
|
24
|
+
private validateDocumentType;
|
|
25
|
+
/**
|
|
26
|
+
* Validate tax category codes (UNCL5305)
|
|
27
|
+
*/
|
|
28
|
+
private validateTaxCategories;
|
|
29
|
+
/**
|
|
30
|
+
* Validate payment means codes (UNCL4461)
|
|
31
|
+
*/
|
|
32
|
+
private validatePaymentMeans;
|
|
33
|
+
/**
|
|
34
|
+
* Validate unit codes (UNECE Rec 20)
|
|
35
|
+
*/
|
|
36
|
+
private validateUnitCodes;
|
|
37
|
+
/**
|
|
38
|
+
* Add validation error
|
|
39
|
+
*/
|
|
40
|
+
private addError;
|
|
41
|
+
/**
|
|
42
|
+
* Add validation warning
|
|
43
|
+
*/
|
|
44
|
+
private addWarning;
|
|
45
|
+
/**
|
|
46
|
+
* Get code list metadata for a rule
|
|
47
|
+
*/
|
|
48
|
+
private getCodeListForRule;
|
|
49
|
+
}
|