@fin.cx/einvoice 8.2.1 → 8.2.3

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 (48) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/einvoice.js +12 -23
  3. package/dist_ts/formats/cii/cii.decoder.d.ts +6 -0
  4. package/dist_ts/formats/cii/cii.decoder.js +11 -1
  5. package/dist_ts/formats/cii/cii.encoder.js +4 -1
  6. package/dist_ts/formats/cii/facturx/facturx.decoder.js +8 -4
  7. package/dist_ts/formats/cii/facturx/facturx.encoder.js +57 -57
  8. package/dist_ts/formats/cii/zugferd/zugferd.decoder.js +8 -4
  9. package/dist_ts/formats/cii/zugferd/zugferd.encoder.js +55 -67
  10. package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.d.ts +5 -0
  11. package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.js +18 -5
  12. package/dist_ts/formats/semantic/semantic.validator.js +20 -1
  13. package/dist_ts/formats/ubl/generic/ubl.encoder.js +31 -57
  14. package/dist_ts/formats/ubl/ubl.encoder.js +4 -1
  15. package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.d.ts +4 -0
  16. package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.js +12 -2
  17. package/dist_ts/formats/utils/currency.calculator.decimal.d.ts +9 -1
  18. package/dist_ts/formats/utils/currency.calculator.decimal.js +10 -3
  19. package/dist_ts/formats/utils/document.totals.d.ts +89 -0
  20. package/dist_ts/formats/utils/document.totals.js +108 -0
  21. package/dist_ts/formats/utils/vat.category.d.ts +50 -0
  22. package/dist_ts/formats/utils/vat.category.js +64 -0
  23. package/dist_ts/formats/validation/codelist.validator.js +3 -11
  24. package/dist_ts/formats/validation/en16931.business-rules.validator.js +38 -44
  25. package/dist_ts/formats/validation/facturx.validator.js +19 -5
  26. package/dist_ts/formats/validation/vat-categories.validator.js +9 -1
  27. package/package.json +2 -2
  28. package/readme.md +25 -0
  29. package/ts/00_commitinfo_data.ts +1 -1
  30. package/ts/einvoice.ts +11 -25
  31. package/ts/formats/cii/cii.decoder.ts +14 -0
  32. package/ts/formats/cii/cii.encoder.ts +3 -0
  33. package/ts/formats/cii/facturx/facturx.decoder.ts +8 -3
  34. package/ts/formats/cii/facturx/facturx.encoder.ts +59 -65
  35. package/ts/formats/cii/zugferd/zugferd.decoder.ts +8 -3
  36. package/ts/formats/cii/zugferd/zugferd.encoder.ts +58 -77
  37. package/ts/formats/cii/zugferd/zugferd.v1.decoder.ts +22 -4
  38. package/ts/formats/semantic/semantic.validator.ts +20 -0
  39. package/ts/formats/ubl/generic/ubl.encoder.ts +36 -69
  40. package/ts/formats/ubl/ubl.encoder.ts +3 -0
  41. package/ts/formats/ubl/xrechnung/xrechnung.decoder.ts +15 -1
  42. package/ts/formats/utils/currency.calculator.decimal.ts +10 -2
  43. package/ts/formats/utils/document.totals.ts +167 -0
  44. package/ts/formats/utils/vat.category.ts +89 -0
  45. package/ts/formats/validation/codelist.validator.ts +3 -12
  46. package/ts/formats/validation/en16931.business-rules.validator.ts +44 -51
  47. package/ts/formats/validation/facturx.validator.ts +19 -4
  48. package/ts/formats/validation/vat-categories.validator.ts +9 -0
@@ -11,9 +11,16 @@ export class DecimalCurrencyCalculator {
11
11
  currency;
12
12
  minorUnits;
13
13
  roundingMode;
14
- constructor(currency, roundingMode = 'HALF_UP') {
14
+ /**
15
+ * @param currency The currency, whose minor unit sets the rounding scale
16
+ * @param roundingMode How values are rounded
17
+ * @param options.maxDecimals The most decimals an amount may have, when fewer than the
18
+ * currency's minor unit (EN 16931 allows two, BR-DEC-*)
19
+ */
20
+ constructor(currency, roundingMode = 'HALF_UP', options = {}) {
15
21
  this.currency = currency;
16
- this.minorUnits = getCurrencyMinorUnits(currency);
22
+ const minorUnits = getCurrencyMinorUnits(currency);
23
+ this.minorUnits = options.maxDecimals === undefined ? minorUnits : Math.min(minorUnits, options.maxDecimals);
17
24
  this.roundingMode = roundingMode;
18
25
  }
19
26
  /**
@@ -212,4 +219,4 @@ export class DecimalCurrencyCalculator {
212
219
  export function createDecimalCalculator(currency, roundingMode) {
213
220
  return new DecimalCurrencyCalculator(currency, roundingMode);
214
221
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuY2FsY3VsYXRvci5kZWNpbWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy91dGlscy9jdXJyZW5jeS5jYWxjdWxhdG9yLmRlY2ltYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHlCQUF5QjtJQUNuQixRQUFRLENBQVk7SUFDcEIsVUFBVSxDQUFTO0lBQ25CLFlBQVksQ0FBZTtJQUU1QyxZQUNFLFFBQW1CLEVBQ25CLGVBQTZCLFNBQVM7UUFFdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBZ0M7UUFDcEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRSxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQ2QsUUFBbUMsRUFDbkMsU0FBb0MsRUFDcEMsV0FBc0MsR0FBRztRQUV6QyxNQUFNLEdBQUcsR0FBRyxRQUFRLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFD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
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuY2FsY3VsYXRvci5kZWNpbWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy91dGlscy9jdXJyZW5jeS5jYWxjdWxhdG9yLmRlY2ltYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHlCQUF5QjtJQUNuQixRQUFRLENBQVk7SUFDcEIsVUFBVSxDQUFTO0lBQ25CLFlBQVksQ0FBZTtJQUU1Qzs7Ozs7T0FLRztJQUNILFlBQ0UsUUFBbUIsRUFDbkIsZUFBNkIsU0FBUyxFQUN0QyxVQUFvQyxFQUFFO1FBRXRDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxLQUFnQztRQUNwQyxNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENB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
@@ -0,0 +1,89 @@
1
+ import type { TAccountingDoc } from '../../interfaces/common.js';
2
+ import { Decimal } from './decimal.js';
3
+ import { DecimalCurrencyCalculator } from './currency.calculator.decimal.js';
4
+ import type { ValidationResult } from '../validation/validation.types.js';
5
+ import { type IVatExemption, type TVatCategoryCode } from './vat.category.js';
6
+ /** An item amount that is no finite number, so no total can be computed from it */
7
+ export interface IInvalidItemAmount {
8
+ index: number;
9
+ field: 'unitQuantity' | 'unitNetPrice' | 'vatPercentage';
10
+ value: unknown;
11
+ }
12
+ /**
13
+ * The item amounts of a document that are no finite number. The totals cannot
14
+ * be computed while there is one: the encoders and the total getters refuse
15
+ * the document, and a validator reports the lines and skips the rules that
16
+ * need the totals.
17
+ * @param items The document's items
18
+ */
19
+ export declare const findInvalidItemAmounts: (items: TAccountingDoc["items"] | undefined) => IInvalidItemAmount[];
20
+ /**
21
+ * The result a validator adds when it skips the rules that need the totals,
22
+ * because a line amount is no number (the line rules report the lines)
23
+ * @param invalid The invalid item amounts
24
+ * @param source The validator's source
25
+ */
26
+ export declare const getTotalsSkippedResult: (invalid: IInvalidItemAmount[], source: string) => ValidationResult;
27
+ /** The most decimals an amount may have in EN 16931 (BR-DEC-09 to BR-DEC-23) */
28
+ export declare const EN16931_MAX_AMOUNT_DECIMALS = 2;
29
+ /**
30
+ * The calculator every document amount is computed with: rounding half up to
31
+ * the currency's minor unit, at most two decimals as EN 16931 allows. A
32
+ * currency without minor unit (JPY) keeps 0 decimals; one with three (BHD,
33
+ * KWD, ...) is rounded to two.
34
+ * @param currency The document currency
35
+ */
36
+ export declare const getDocumentCalculator: (currency: TAccountingDoc["currency"]) => DecimalCurrencyCalculator;
37
+ /**
38
+ * The VAT breakdown of one VAT category and rate (BG-23): the category
39
+ * (BT-118), the rate (BT-119), the taxable amount (BT-116), the tax on it
40
+ * (BT-117) and, for a category that states one, the exemption reason
41
+ * (BT-121, BT-120).
42
+ */
43
+ export interface IDocumentVatGroup {
44
+ category: TVatCategoryCode;
45
+ rate: number;
46
+ taxableAmount: Decimal;
47
+ taxAmount: Decimal;
48
+ exemption?: IVatExemption;
49
+ }
50
+ /**
51
+ * The totals of a document as EN 16931 computes them, in decimal arithmetic.
52
+ * Every amount is rounded to the minor unit of the currency; all encoders
53
+ * write these values, so the XML is consistent in every syntax.
54
+ */
55
+ export interface IDocumentTotals {
56
+ /** decimals the amounts are rounded to and written with: the currency's minor unit, at most two */
57
+ minorUnits: number;
58
+ /** the Invoice line net amount (BT-131) of each item, in item order: quantity × net price, rounded */
59
+ lineNetAmounts: Decimal[];
60
+ /** the VAT category (BT-151) of each item, in item order */
61
+ lineVatCategories: TVatCategoryCode[];
62
+ /** Sum of Invoice line net amount (BT-106) */
63
+ lineTotal: Decimal;
64
+ /** Invoice total amount without VAT (BT-109): BT-106, as the envelope has no document level allowances or charges */
65
+ taxBasisTotal: Decimal;
66
+ /** VAT breakdown (BG-23), one per VAT category and rate, in the order they first appear */
67
+ vatGroups: IDocumentVatGroup[];
68
+ /** Invoice total VAT amount (BT-110): the sum of the rounded VAT category tax amounts */
69
+ taxTotal: Decimal;
70
+ /** Invoice total amount with VAT (BT-112): BT-109 + BT-110 */
71
+ grandTotal: Decimal;
72
+ /** Amount due for payment (BT-115): BT-112, as the envelope states no paid amount yet */
73
+ duePayable: Decimal;
74
+ }
75
+ /**
76
+ * Computes the totals of a document the way the EN 16931 business rules check
77
+ * them, every amount rounded half up to the currency's minor unit, at most two
78
+ * decimals (BR-DEC-*): each line net amount (BT-131) is quantity × net price
79
+ * rounded; the sum of line net amounts (BT-106) is their sum (BR-CO-10);
80
+ * each VAT category taxable amount (BT-116) is the sum of the line net amounts
81
+ * of that category and rate, and its tax amount (BT-117) is BT-116 × rate / 100
82
+ * rounded (BR-CO-17), 0 for reverse charge (BR-AE-09); the total VAT (BT-110) is the sum of the category tax amounts
83
+ * (BR-CO-14); the total with VAT (BT-112) is BT-109 + BT-110 (BR-CO-15).
84
+ * @param accountingDoc The document
85
+ */
86
+ export declare const computeDocumentTotals: (accountingDoc: Pick<TAccountingDoc, "currency" | "items"> & {
87
+ reverseCharge?: boolean;
88
+ language?: string;
89
+ }) => IDocumentTotals;
@@ -0,0 +1,108 @@
1
+ import { Decimal } from './decimal.js';
2
+ import { DecimalCurrencyCalculator } from './currency.calculator.decimal.js';
3
+ import { EInvoiceFormatError } from '../../errors.js';
4
+ import { getVatCategory, getVatExemption } from './vat.category.js';
5
+ /**
6
+ * The item amounts of a document that are no finite number. The totals cannot
7
+ * be computed while there is one: the encoders and the total getters refuse
8
+ * the document, and a validator reports the lines and skips the rules that
9
+ * need the totals.
10
+ * @param items The document's items
11
+ */
12
+ export const findInvalidItemAmounts = (items) => {
13
+ const invalid = [];
14
+ for (const [index, item] of (items ?? []).entries()) {
15
+ for (const field of ['unitQuantity', 'unitNetPrice', 'vatPercentage']) {
16
+ const value = item[field];
17
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
18
+ invalid.push({ index, field, value });
19
+ }
20
+ }
21
+ }
22
+ return invalid;
23
+ };
24
+ /**
25
+ * The result a validator adds when it skips the rules that need the totals,
26
+ * because a line amount is no number (the line rules report the lines)
27
+ * @param invalid The invalid item amounts
28
+ * @param source The validator's source
29
+ */
30
+ export const getTotalsSkippedResult = (invalid, source) => ({
31
+ ruleId: 'TOTALS-NOT-CHECKED',
32
+ source,
33
+ severity: 'info',
34
+ message: `The rules on totals and the VAT breakdown were not checked: ${invalid
35
+ .map((entry) => `items[${entry.index}].${entry.field} is no number`)
36
+ .join(', ')}`,
37
+ field: invalid.map((entry) => `items[${entry.index}].${entry.field}`).join(', '),
38
+ });
39
+ /** The most decimals an amount may have in EN 16931 (BR-DEC-09 to BR-DEC-23) */
40
+ export const EN16931_MAX_AMOUNT_DECIMALS = 2;
41
+ /**
42
+ * The calculator every document amount is computed with: rounding half up to
43
+ * the currency's minor unit, at most two decimals as EN 16931 allows. A
44
+ * currency without minor unit (JPY) keeps 0 decimals; one with three (BHD,
45
+ * KWD, ...) is rounded to two.
46
+ * @param currency The document currency
47
+ */
48
+ export const getDocumentCalculator = (currency) => new DecimalCurrencyCalculator(currency, 'HALF_UP', { maxDecimals: EN16931_MAX_AMOUNT_DECIMALS });
49
+ /**
50
+ * Computes the totals of a document the way the EN 16931 business rules check
51
+ * them, every amount rounded half up to the currency's minor unit, at most two
52
+ * decimals (BR-DEC-*): each line net amount (BT-131) is quantity × net price
53
+ * rounded; the sum of line net amounts (BT-106) is their sum (BR-CO-10);
54
+ * each VAT category taxable amount (BT-116) is the sum of the line net amounts
55
+ * of that category and rate, and its tax amount (BT-117) is BT-116 × rate / 100
56
+ * rounded (BR-CO-17), 0 for reverse charge (BR-AE-09); the total VAT (BT-110) is the sum of the category tax amounts
57
+ * (BR-CO-14); the total with VAT (BT-112) is BT-109 + BT-110 (BR-CO-15).
58
+ * @param accountingDoc The document
59
+ */
60
+ export const computeDocumentTotals = (accountingDoc) => {
61
+ const calculator = getDocumentCalculator(accountingDoc.currency);
62
+ const minorUnits = calculator.getCurrencyInfo().minorUnits;
63
+ const category = getVatCategory(accountingDoc);
64
+ const lineNetAmounts = [];
65
+ const lineVatCategories = [];
66
+ const taxableByGroup = new Map();
67
+ // an amount that is no number cannot be computed with; it is refused, not treated as 0
68
+ const [firstInvalid] = findInvalidItemAmounts(accountingDoc.items);
69
+ if (firstInvalid) {
70
+ throw new EInvoiceFormatError(`items[${firstInvalid.index}].${firstInvalid.field} is no number: ${String(firstInvalid.value)}`, { unsupportedFeatures: [`items[${firstInvalid.index}].${firstInvalid.field}`] });
71
+ }
72
+ for (const item of accountingDoc.items ?? []) {
73
+ const lineNet = calculator.calculateLineNet(item.unitQuantity, item.unitNetPrice);
74
+ lineNetAmounts.push(lineNet);
75
+ lineVatCategories.push(category);
76
+ // grouped by VAT category and rate: the same rate under two categories is two groups
77
+ const key = `${category}|${item.vatPercentage}`;
78
+ const group = taxableByGroup.get(key) ?? { category, rate: item.vatPercentage, taxable: Decimal.ZERO };
79
+ group.taxable = group.taxable.add(lineNet);
80
+ taxableByGroup.set(key, group);
81
+ }
82
+ const vatGroups = [...taxableByGroup.values()].map((group) => {
83
+ const exemption = getVatExemption(group.category, accountingDoc.language);
84
+ return {
85
+ category: group.category,
86
+ rate: group.rate,
87
+ taxableAmount: calculator.round(group.taxable),
88
+ // reverse charge states no tax: the recipient owes it (BR-AE-09)
89
+ taxAmount: group.category === 'AE' ? calculator.round(Decimal.ZERO) : calculator.calculateVAT(group.taxable, group.rate),
90
+ ...(exemption ? { exemption } : {}),
91
+ };
92
+ });
93
+ const lineTotal = calculator.round(Decimal.sum(lineNetAmounts));
94
+ const taxTotal = calculator.round(Decimal.sum(vatGroups.map((group) => group.taxAmount)));
95
+ const grandTotal = calculator.round(lineTotal.add(taxTotal));
96
+ return {
97
+ minorUnits,
98
+ lineNetAmounts,
99
+ lineVatCategories,
100
+ lineTotal,
101
+ taxBasisTotal: lineTotal,
102
+ vatGroups,
103
+ taxTotal,
104
+ grandTotal,
105
+ duePayable: grandTotal,
106
+ };
107
+ };
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQudG90YWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy91dGlscy9kb2N1bWVudC50b3RhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBNkMsTUFBTSxtQkFBbUIsQ0FBQztBQVMvRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQTBDLEVBQXdCLEVBQUU7SUFDekcsTUFBTSxPQUFPLEdBQXlCLEVBQUUsQ0FBQztJQUN6QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNwRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQVUsRUFBRSxDQUFDO1lBQy9FLE1BQU0sS0FBSyxHQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixH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
@@ -0,0 +1,50 @@
1
+ import type { TAccountingDoc } from '../../interfaces/common.js';
2
+ /**
3
+ * The VAT category codes (UNTDID 5305, EN 16931 BT-118/BT-151) the encoders
4
+ * write: standard rated, or reverse charge. The envelope states reverse charge
5
+ * for the whole document (`reverseCharge`); an item carries no category of its
6
+ * own, so a document cannot mix reverse charge lines with standard rated ones.
7
+ */
8
+ export type TVatCategoryCode = 'S' | 'AE';
9
+ /** The VAT exemption reason (BT-121 code, BT-120 text) a VAT category states */
10
+ export interface IVatExemption {
11
+ code: string;
12
+ reason: string;
13
+ }
14
+ /**
15
+ * The VAT category of every line of a document: reverse charge (`AE`) when the
16
+ * document states it, standard rated (`S`) otherwise.
17
+ * @param accountingDoc The document
18
+ */
19
+ export declare const getVatCategory: (accountingDoc: {
20
+ reverseCharge?: boolean;
21
+ }) => TVatCategoryCode;
22
+ /**
23
+ * The exemption reason a reverse charge VAT breakdown states (BR-AE-10): the
24
+ * code `VATEX-EU-AE` and the wording the law prescribes, "Steuerschuldnerschaft
25
+ * des Leistungsempfängers" (§ 14a Abs. 1 and 5 UStG). A document in another
26
+ * language may use the wording of Article 226 Nr. 11a of the VAT Directive in
27
+ * that language, "Reverse charge" in English (Abschnitt 14a.1 Abs. 6 Satz 2
28
+ * UStAE). Other categories state none.
29
+ * @param category The VAT category
30
+ * @param language The document language
31
+ */
32
+ export declare const getVatExemption: (category: TVatCategoryCode, language: string | undefined) => IVatExemption | undefined;
33
+ /**
34
+ * Refuses a reverse charge document that lacks what EN 16931 requires of one,
35
+ * naming the rule; no value is put in place of a missing one.
36
+ * - BR-AE-05: every line of a reverse charge document has the VAT rate 0; the
37
+ * recipient owes the tax, and the invoice states none (§ 14a Abs. 5 Satz 2
38
+ * UStG; a stated amount would be owed under § 14c Abs. 1 UStG).
39
+ * - BR-AE-02: the seller states a VAT identifier (BT-31) and the buyer a VAT
40
+ * identifier (BT-48) or a legal registration identifier (BT-47). The rule
41
+ * also accepts the seller's tax registration identifier (BT-32, e.g. the
42
+ * Steuernummer) or a tax representative's VAT identifier (BT-63) instead of
43
+ * BT-31; the envelope can state neither, so a seller without a VAT
44
+ * identifier is refused. A domestic § 13b issuer that states only a
45
+ * Steuernummer, which § 14 Abs. 4 Satz 1 Nr. 2 UStG allows, is therefore
46
+ * refused until the envelope carries a tax number.
47
+ * @param accountingDoc The document
48
+ * @param targetFormat The format being written
49
+ */
50
+ export declare const assertVatCategoryWritable: (accountingDoc: TAccountingDoc, targetFormat: string) => void;
@@ -0,0 +1,64 @@
1
+ import { EInvoiceFormatError } from '../../errors.js';
2
+ /**
3
+ * The VAT category of every line of a document: reverse charge (`AE`) when the
4
+ * document states it, standard rated (`S`) otherwise.
5
+ * @param accountingDoc The document
6
+ */
7
+ export const getVatCategory = (accountingDoc) => accountingDoc.reverseCharge ? 'AE' : 'S';
8
+ /**
9
+ * The exemption reason a reverse charge VAT breakdown states (BR-AE-10): the
10
+ * code `VATEX-EU-AE` and the wording the law prescribes, "Steuerschuldnerschaft
11
+ * des Leistungsempfängers" (§ 14a Abs. 1 and 5 UStG). A document in another
12
+ * language may use the wording of Article 226 Nr. 11a of the VAT Directive in
13
+ * that language, "Reverse charge" in English (Abschnitt 14a.1 Abs. 6 Satz 2
14
+ * UStAE). Other categories state none.
15
+ * @param category The VAT category
16
+ * @param language The document language
17
+ */
18
+ export const getVatExemption = (category, language) => category === 'AE'
19
+ ? {
20
+ code: 'VATEX-EU-AE',
21
+ reason: (language ?? '').toLowerCase().startsWith('de')
22
+ ? 'Steuerschuldnerschaft des Leistungsempfängers'
23
+ : 'Reverse charge',
24
+ }
25
+ : undefined;
26
+ /**
27
+ * Refuses a reverse charge document that lacks what EN 16931 requires of one,
28
+ * naming the rule; no value is put in place of a missing one.
29
+ * - BR-AE-05: every line of a reverse charge document has the VAT rate 0; the
30
+ * recipient owes the tax, and the invoice states none (§ 14a Abs. 5 Satz 2
31
+ * UStG; a stated amount would be owed under § 14c Abs. 1 UStG).
32
+ * - BR-AE-02: the seller states a VAT identifier (BT-31) and the buyer a VAT
33
+ * identifier (BT-48) or a legal registration identifier (BT-47). The rule
34
+ * also accepts the seller's tax registration identifier (BT-32, e.g. the
35
+ * Steuernummer) or a tax representative's VAT identifier (BT-63) instead of
36
+ * BT-31; the envelope can state neither, so a seller without a VAT
37
+ * identifier is refused. A domestic § 13b issuer that states only a
38
+ * Steuernummer, which § 14 Abs. 4 Satz 1 Nr. 2 UStG allows, is therefore
39
+ * refused until the envelope carries a tax number.
40
+ * @param accountingDoc The document
41
+ * @param targetFormat The format being written
42
+ */
43
+ export const assertVatCategoryWritable = (accountingDoc, targetFormat) => {
44
+ if (!accountingDoc.reverseCharge) {
45
+ return;
46
+ }
47
+ const refuse = (rule, message) => {
48
+ throw new EInvoiceFormatError(`${rule}: ${message}`, { targetFormat, unsupportedFeatures: [rule] });
49
+ };
50
+ for (const [index, item] of (accountingDoc.items ?? []).entries()) {
51
+ if (item.vatPercentage !== 0) {
52
+ refuse('BR-AE-05', `a reverse charge line has the VAT rate 0, items[${index}].vatPercentage is ${String(item.vatPercentage)}`);
53
+ }
54
+ }
55
+ const seller = accountingDoc.from?.registrationDetails;
56
+ if (!seller?.vatId) {
57
+ refuse('BR-AE-02', 'a reverse charge document states the seller VAT identifier (BT-31), from.registrationDetails.vatId is missing; the rule would also accept a tax registration identifier (BT-32) or a tax representative (BT-63), which the envelope cannot state');
58
+ }
59
+ const buyer = accountingDoc.to?.registrationDetails;
60
+ if (!buyer?.vatId && !buyer?.registrationId) {
61
+ refuse('BR-AE-02', 'a reverse charge document states the buyer VAT identifier (BT-48) or legal registration identifier (BT-47), to.registrationDetails.vatId and .registrationId are missing');
62
+ }
63
+ };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmF0LmNhdGVnb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy91dGlscy92YXQuY2F0ZWdvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQnREOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUEwQyxFQUFvQixFQUFFLENBQzdGLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBRTNDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQTBCLEVBQUUsUUFBNEIsRUFBNkIsRUFBRSxDQUNySCxRQUFRLEtBQUssSUFBSTtJQUNmLENBQUMsQ0FBQztRQUNFLElBQUksRUFBRSxhQUFhO1FBQ25CLE1BQU0sRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3JELENBQUMsQ0FBQywrQ0FBK0M7WUFDakQsQ0FBQyxDQUFDLGdCQUFnQjtLQUNyQjtJQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFaEI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLGFBQTZCLEVBQUUsWUFBb0IsRUFBUSxFQUFFO0lBQ3JHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVksRUFBRSxPQUFlLEVBQVMsRUFBRTtRQUN0RCxNQUFNLElBQUksbUJBQW1CLENBQUMsR0FBRyxJQUFJLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEcsQ0FBQyxDQUFDO0lBQ0YsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2xFLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsVUFBVSxFQUFFLG1EQUFtRCxLQUFLLHNCQUFzQixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqSSxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUM7SUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQ0osVUFBVSxFQUNWLGtQQUFrUCxDQUNuUCxDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUM7SUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUNKLFVBQVUsRUFDViwwS0FBMEssQ0FDM0ssQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
@@ -77,16 +77,8 @@ export class CodeListValidator {
77
77
  * Validate tax category codes (UNCL5305)
78
78
  */
79
79
  validateTaxCategories(invoice) {
80
- // Document level tax breakdown
81
- // Note: taxBreakdown is a computed property that doesn't have metadata
82
- // We would need to access the raw tax breakdown data from metadata if it exists
83
- invoice.taxBreakdown?.forEach((breakdown, index) => {
84
- // Since the computed taxBreakdown doesn't have metadata,
85
- // we'll skip the tax category code validation for now
86
- // This would need to be implemented differently to access the raw data
87
- // TODO: Access raw tax breakdown data with metadata from invoice.metadata.taxBreakdown
88
- // when that structure is implemented
89
- });
80
+ // The document level VAT breakdown is computed from the lines (`taxBreakdown`) and
81
+ // carries no category code of its own, so only the lines' codes are checked here.
90
82
  // Line level tax categories
91
83
  invoice.items?.forEach((item, index) => {
92
84
  // Cast to extended type to access metadata
@@ -181,4 +173,4 @@ export class CodeListValidator {
181
173
  return undefined;
182
174
  }
183
175
  }
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWxpc3QudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy92YWxpZGF0aW9uL2NvZGVsaXN0LnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixPQUFPLEdBQXVCLEVBQUUsQ0FBQztJQUV6Qzs7T0FFRztJQUNJLFFBQVEsQ0FBQyxPQUFpQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVsQixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsYUFBYTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsT0FBaUI7UUFDeEMsMkJBQTJCO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JC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
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWxpc3QudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy92YWxpZGF0aW9uL2NvZGVsaXN0LnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixPQUFPLEdBQXVCLEVBQUUsQ0FBQztJQUV6Qzs7T0FFRztJQUNJLFFBQVEsQ0FBQyxPQUFpQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVsQixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsYUFBYTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsT0FBaUI7UUFDeEMsMkJBQTJCO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JC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