@endevops/peppol-schema 0.1.3 → 0.1.5
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/README.md +5 -5
- package/dist/constants.d.ts +131 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +114 -1
- package/dist/constants.js.map +1 -1
- package/dist/{index-BBzPjq7o.d.ts → index-XG-N6PcG.d.ts} +1702 -724
- package/dist/index-XG-N6PcG.d.ts.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1247 -200
- package/dist/index.js.map +1 -1
- package/dist/invoice-response-code-not-needs-schema-DNrfKYLh.js +36 -0
- package/dist/invoice-response-code-not-needs-schema-DNrfKYLh.js.map +1 -0
- package/dist/invoice-response-codes.d.ts +28 -0
- package/dist/invoice-response-codes.d.ts.map +1 -1
- package/dist/invoice-response-codes.js +11 -1
- package/dist/invoice-response-codes.js.map +1 -1
- package/dist/{is-valid-abn-160i38PG.js → is-valid-abn-D7eSygBG.js} +115 -2
- package/dist/is-valid-abn-D7eSygBG.js.map +1 -0
- package/dist/{is-valid-mod97-0208-CzMOXMO-.js → is-valid-mod97-0208-CjR324eG.js} +11 -1
- package/dist/is-valid-mod97-0208-CjR324eG.js.map +1 -0
- package/dist/message-level-response-profile-id-B9c0A7S_.js +27 -0
- package/dist/message-level-response-profile-id-B9c0A7S_.js.map +1 -0
- package/dist/{nodable-parser-CyDZtLCK.js → nodable-parser-CupS2H55.js} +31 -1
- package/dist/nodable-parser-CupS2H55.js.map +1 -0
- package/dist/schematron.d.ts +57 -1
- package/dist/schematron.d.ts.map +1 -1
- package/dist/schematron.js +458 -7
- package/dist/schematron.js.map +1 -1
- package/dist/validations.d.ts +132 -0
- package/dist/validations.d.ts.map +1 -1
- package/dist/validations.js +11 -2
- package/dist/validations.js.map +1 -1
- package/dist/values.d.ts +67 -2
- package/dist/values.d.ts.map +1 -1
- package/dist/xml.d.ts +30 -0
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +10 -1
- package/dist/xml.js.map +1 -1
- package/package.json +1 -1
- package/src/constants/credit-note-doctype-id.ts +9 -0
- package/src/constants/credit-note-process-id.ts +9 -0
- package/src/constants/document-scheme.ts +9 -0
- package/src/constants/invoice-doctype-id.ts +9 -0
- package/src/constants/invoice-process-id.ts +10 -0
- package/src/constants/invoice-response-doctype-id.ts +10 -0
- package/src/constants/invoice-response-process-id.ts +9 -0
- package/src/constants/invoice-response-profile-id.ts +9 -0
- package/src/constants/message-level-response-doctype-id.ts +10 -0
- package/src/constants/message-level-response-process-id.ts +9 -0
- package/src/constants/message-level-response-profile-id.ts +9 -0
- package/src/constants/participant-scheme.ts +10 -0
- package/src/constants/process-scheme.ts +9 -0
- package/src/constants/transport-profile.ts +10 -0
- package/src/decoders/fields/decode-invoice-message-document-party.ts +2 -2
- package/src/decoders/fields/decode-parties-tax-scheme.ts +2 -2
- package/src/decoders/fields/decode-party-legal-entity.ts +2 -2
- package/src/decoders/fields/decode-party-tax-scheme.ts +2 -2
- package/src/decoders/fields/decode-tax-category.ts +1 -1
- package/src/decoders/fields/decode-tax-representative-party.ts +2 -2
- package/src/decoders/fields/encode-message-party.ts +2 -2
- package/src/decoders/fields/encode-parties-tax-scheme.ts +3 -3
- package/src/decoders/fields/encode-party-legal-entity.ts +1 -1
- package/src/decoders/fields/encode-party-tax-scheme.ts +2 -2
- package/src/decoders/fields/encode-tax-representative-party.ts +2 -2
- package/src/invoice-response-codes/invoice-response-code-needs-schema.ts +9 -0
- package/src/invoice-response-codes/invoice-response-code-not-needs-schema.ts +9 -0
- package/src/invoice-response-codes/invoice-response-codes-order.ts +10 -0
- package/src/peppol-validations/add-piva.ts +12 -0
- package/src/peppol-validations/check-cf.ts +11 -0
- package/src/peppol-validations/check-cf16.ts +12 -0
- package/src/peppol-validations/check-piva-se-it.ts +11 -0
- package/src/peppol-validations/check-piva.ts +11 -0
- package/src/peppol-validations/check-se-orgnr.ts +9 -0
- package/src/peppol-validations/greek-tin-verification.ts +9 -0
- package/src/peppol-validations/is-valid-abn.ts +9 -0
- package/src/peppol-validations/is-valid-gln.ts +10 -0
- package/src/peppol-validations/is-valid-iban.ts +10 -0
- package/src/peppol-validations/is-valid-mod11.ts +9 -0
- package/src/peppol-validations/is-valid-mod97-0208.ts +10 -0
- package/src/peppol-validations/luhn-check.ts +9 -0
- package/src/schemas/fields/default-customization-id.ts +9 -0
- package/src/schemas/fields/default-profile-id.ts +9 -0
- package/src/schemas/fields/peppol-additional-document-reference-schema.ts +61 -20
- package/src/schemas/fields/peppol-address-schema.ts +25 -2
- package/src/schemas/fields/peppol-allowance-charge-schema.ts +63 -9
- package/src/schemas/fields/peppol-amount-schema.ts +15 -2
- package/src/schemas/fields/peppol-base-line-schema.ts +12 -2
- package/src/schemas/fields/peppol-billing-reference-schema.ts +13 -0
- package/src/schemas/fields/peppol-binary-object-schema.ts +12 -4
- package/src/schemas/fields/peppol-contact-schema.ts +11 -0
- package/src/schemas/fields/peppol-credit-note-line-schema.ts +7 -2
- package/src/schemas/fields/peppol-delivery-schema.ts +44 -2
- package/src/schemas/fields/peppol-identifier-schema.ts +8 -0
- package/src/schemas/fields/peppol-invoice-line-period-schema.ts +11 -0
- package/src/schemas/fields/peppol-invoice-line-schema.ts +9 -2
- package/src/schemas/fields/peppol-invoice-period-schema.ts +2 -2
- package/src/schemas/fields/peppol-item-classification-schema.ts +2 -2
- package/src/schemas/fields/peppol-line-allowance-charge-schema.ts +56 -8
- package/src/schemas/fields/peppol-line-item-schema.ts +66 -6
- package/src/schemas/fields/peppol-line-price-allowance-charge-schema.ts +20 -0
- package/src/schemas/fields/peppol-line-price-schema.ts +2 -0
- package/src/schemas/fields/peppol-order-reference-schema.ts +2 -0
- package/src/schemas/fields/peppol-party-base-schema.ts +36 -4
- package/src/schemas/fields/peppol-party-legal-entity-schema.ts +10 -2
- package/src/schemas/fields/peppol-party-tax-scheme-schema.ts +4 -4
- package/src/schemas/fields/peppol-payee-party-schema.ts +8 -8
- package/src/schemas/fields/peppol-payment-means-schema.ts +62 -2
- package/src/schemas/fields/peppol-payment-terms-schema.ts +2 -0
- package/src/schemas/fields/peppol-quantity-schema.ts +4 -2
- package/src/schemas/fields/peppol-reference-schema.ts +20 -1
- package/src/schemas/fields/peppol-tax-category-schema.ts +12 -2
- package/src/schemas/fields/peppol-tax-representative-schema.ts +2 -2
- package/src/schemas/fields/peppol-tax-subtotal-category-schema.ts +3 -0
- package/src/schemas/fields/peppol-tax-subtotal-schema.ts +2 -0
- package/src/schemas/fields/peppol-tax-totals-base-schema.ts +3 -3
- package/src/schemas/peppol-billing-base-schema.ts +49 -9
- package/src/schemas/peppol-credit-note-schema.ts +2 -2
- package/src/schemas/peppol-document-response-document-reference-schema.ts +12 -4
- package/src/schemas/peppol-document-response-document-schema.ts +5 -5
- package/src/schemas/peppol-document-response-line-response-content-schema.ts +22 -2
- package/src/schemas/peppol-document-response-line-response-schema.ts +23 -2
- package/src/schemas/peppol-document-schema.ts +69 -6
- package/src/schemas/peppol-invoice-response-document-actual-response-schema.ts +53 -4
- package/src/schemas/peppol-invoice-response-document-actual-response-status-schema.ts +22 -4
- package/src/schemas/peppol-invoice-response-schema.ts +54 -6
- package/src/schemas/peppol-invoice-response-status-reason-code-schema.ts +36 -8
- package/src/schemas/peppol-invoice-schema.ts +30 -2
- package/src/schemas/peppol-message-level-response-document-response-schema.ts +10 -0
- package/src/schemas/peppol-message-level-response-party-schema.ts +10 -0
- package/src/schemas/peppol-message-level-response-schema.ts +18 -0
- package/src/schemas/utils/format-quantity-with-unit.ts +19 -0
- package/src/schemas/utils/get-credit-note-type-code-description.ts +12 -0
- package/src/schemas/utils/get-invoice-type-code-description.ts +12 -0
- package/src/schemas/utils/is-valid-credit-note-type-code.ts +13 -0
- package/src/schemas/utils/is-valid-invoice-type-code.ts +13 -0
- package/src/schemas/utils/is-valid-process.ts +13 -0
- package/src/schemas/utils/peppol-base-64-schema.ts +7 -4
- package/src/schemas/utils/peppol-vat-regex-schema.ts +38 -30
- package/src/schemas/utils/peppol-xsd-time-schema.ts +12 -2
- package/src/schemas/utils/quantity-unit-code-to-intl-unit.ts +34 -0
- package/src/schemas/values/additional-document-reference-code-schema.ts +9 -15
- package/src/schemas/values/allowance-charge-reason-code-schema.ts +12 -14
- package/src/schemas/values/application-response-type-code-schema.ts +10 -14
- package/src/schemas/values/charge-reason-code-schema.ts +12 -14
- package/src/schemas/values/credit-note-type-code-schema.ts +8 -14
- package/src/schemas/values/currency-code-schema.ts +13 -16
- package/src/schemas/values/document-type-schemes-schema.ts +9 -5
- package/src/schemas/values/document-type-values-schema.ts +5 -6
- package/src/schemas/values/duty-tax-fee-category-schema.ts +15 -13
- package/src/schemas/values/electronic-codes-schema.ts +10 -12
- package/src/schemas/values/icd-codes-schema.ts +8 -12
- package/src/schemas/values/invoice-status-code-schema.ts +10 -12
- package/src/schemas/values/invoice-type-code-schema.ts +10 -12
- package/src/schemas/values/item-classification-codes-schema.ts +10 -12
- package/src/schemas/values/mime-codes-schema.ts +12 -14
- package/src/schemas/values/op-status-action-schema.ts +10 -12
- package/src/schemas/values/op-status-reason-schema.ts +10 -12
- package/src/schemas/values/participant-identifier-code-schema.ts +10 -13
- package/src/schemas/values/payment-means-code-schema.ts +10 -12
- package/src/schemas/values/peppol-country-code-schema.ts +7 -9
- package/src/schemas/values/peppol-document-type-code-schema.ts +10 -12
- package/src/schemas/values/peppol-document-type-schema.ts +12 -21
- package/src/schemas/values/peppol-process-schema.ts +19 -15
- package/src/schemas/values/process-from-document-type-schema.ts +3 -3
- package/src/schemas/values/quantity-unit-codes-schema.ts +10 -12
- package/src/schemas/values/vat-date-code-schema.ts +12 -5
- package/src/schemas/values/vatex-code-schema.ts +8 -12
- package/src/schematron/errors.ts +14 -0
- package/src/schematron/helpers.ts +457 -11
- package/src/schematron/run-all-rules.ts +10 -0
- package/src/schematron/schematron.ts +25 -0
- package/src/xml/builder-options.ts +9 -0
- package/src/xml/common-xml-options.ts +9 -0
- package/src/xml/nodable-parser.ts +12 -0
- package/src/xml/parser-options.ts +9 -0
- package/dist/index-BBzPjq7o.d.ts.map +0 -1
- package/dist/invoice-response-code-not-needs-schema-p_RKKNLc.js +0 -18
- package/dist/invoice-response-code-not-needs-schema-p_RKKNLc.js.map +0 -1
- package/dist/is-valid-abn-160i38PG.js.map +0 -1
- package/dist/is-valid-mod97-0208-CzMOXMO-.js.map +0 -1
- package/dist/message-level-response-profile-id-DBpOW91B.js +0 -9
- package/dist/message-level-response-profile-id-DBpOW91B.js.map +0 -1
- package/dist/nodable-parser-CyDZtLCK.js.map +0 -1
- package/dist/vat-dates.generated-CxFvt7m3.d.ts +0 -68
- package/dist/vat-dates.generated-CxFvt7m3.d.ts.map +0 -1
|
@@ -2,29 +2,33 @@ import { Schema } from 'effect';
|
|
|
2
2
|
|
|
3
3
|
import type { ProcessesKeys } from '#/values/processes.generated';
|
|
4
4
|
|
|
5
|
+
import { opaque } from '#/schemas/utils/opaque.ts';
|
|
5
6
|
import { processes, processesKeys } from '#/values/processes.generated';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
|
-
* @description A PEPPOL business process identifier
|
|
9
|
+
* @description A full PEPPOL business process identifier in `<scheme>::<value>` form from the known processes table.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* 'cenbii-procid-ubl::urn:fdc:peppol.eu:2017:poacc:billing:01:1.0';
|
|
14
|
+
* ```;
|
|
9
15
|
*
|
|
10
16
|
* @see {@link processes}
|
|
11
17
|
*/
|
|
12
|
-
export
|
|
18
|
+
export class PeppolProcess extends opaque<PeppolProcess>()(
|
|
19
|
+
Schema.TemplateLiteral([Schema.Literals(processesKeys), Schema.Literal('::'), Schema.String]).check(
|
|
20
|
+
Schema.makeFilter((val: string) => {
|
|
21
|
+
const [prefix, suffix] = val.split('::');
|
|
22
|
+
if (prefix === undefined || suffix === undefined) return false;
|
|
23
|
+
const info = processes[prefix as ProcessesKeys];
|
|
24
|
+
return info !== undefined && info.some(v => v === suffix);
|
|
25
|
+
})
|
|
26
|
+
)
|
|
27
|
+
) {}
|
|
13
28
|
|
|
14
29
|
/**
|
|
15
|
-
* @description
|
|
16
|
-
*
|
|
17
|
-
* @param error - The custom error message to use when validation fails. Defaults to `'invalid peppol process identifier'`.
|
|
18
|
-
*
|
|
19
|
-
* @returns An Effect schema that matches a valid `scheme::value` process identifier.
|
|
30
|
+
* @description A PEPPOL business process identifier key as defined by the processes codelist.
|
|
20
31
|
*
|
|
21
32
|
* @see {@link processes}
|
|
22
33
|
*/
|
|
23
|
-
export
|
|
24
|
-
Schema.makeFilter((val: string) => {
|
|
25
|
-
const [prefix, suffix] = val.split('::');
|
|
26
|
-
if (prefix === undefined || suffix === undefined) return false;
|
|
27
|
-
const info = processes[prefix as ProcessesKeys];
|
|
28
|
-
return info !== undefined && info.some(v => v === suffix);
|
|
29
|
-
})
|
|
30
|
-
);
|
|
34
|
+
export type PeppolProcesses = Schema.Codec.Encoded<typeof PeppolProcess>;
|
|
@@ -2,7 +2,7 @@ import { Schema } from 'effect';
|
|
|
2
2
|
|
|
3
3
|
import type { PeppolDocumentType } from '#/schemas/values/peppol-document-type-schema.ts';
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { PeppolProcess } from '#/schemas/values/peppol-process-schema.ts';
|
|
6
6
|
import { documentTypesProcessIds } from '#/values/document-type.generated';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -13,13 +13,13 @@ import { documentTypesProcessIds } from '#/values/document-type.generated';
|
|
|
13
13
|
*
|
|
14
14
|
* @returns An Effect schema that matches only processes allowed for the given document type.
|
|
15
15
|
*
|
|
16
|
-
* @see {@link
|
|
16
|
+
* @see {@link PeppolProcess}
|
|
17
17
|
* @see {@link documentTypesProcessIds}
|
|
18
18
|
*/
|
|
19
19
|
export function processFromDocumentTypeSchema(documentType: PeppolDocumentType, error = 'invalid process type for document type') {
|
|
20
20
|
const allowed = documentTypesProcessIds[documentType as keyof typeof documentTypesProcessIds];
|
|
21
21
|
if (allowed === undefined) {
|
|
22
|
-
return
|
|
22
|
+
return PeppolProcess;
|
|
23
23
|
}
|
|
24
24
|
const values = allowed.map(p => `${p.scheme}::${p.value}`);
|
|
25
25
|
return Schema.String.check(Schema.makeFilter((val: string) => values.includes(val as never))).annotate({ message: error });
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import { Schema } from 'effect';
|
|
2
2
|
|
|
3
|
+
import { opaque } from '#/schemas/utils/opaque.ts';
|
|
3
4
|
import { quantityUnitCodesKeys } from '#/values/quantity-unit-codes.generated';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
|
-
* @description A unit of measure code
|
|
7
|
+
* @description A unit of measure code from the PEPPOL subset of UN/ECE Recommendation 20.
|
|
7
8
|
*
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @description Validates a unit of measure code against the PEPPOL subset of UN/ECE Recommendation 20.
|
|
14
|
-
*
|
|
15
|
-
* @param error - The custom error message to use when validation fails.
|
|
16
|
-
*
|
|
17
|
-
* @returns An Effect schema that accepts only valid quantity unit codes.
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* '10';
|
|
12
|
+
* ```;
|
|
18
13
|
*
|
|
19
14
|
* @validations
|
|
20
15
|
* - BR-CL-23: Unit of measure code MUST be a valid UN/ECE Rec 20 code.
|
|
21
16
|
*
|
|
22
17
|
* @see https://docs.peppol.eu/poacc/billing/3.0/codelist/UNECERec20/
|
|
18
|
+
* @see {@link quantityUnitCodesKeys}
|
|
23
19
|
*/
|
|
24
|
-
export
|
|
20
|
+
export class PeppolQuantityUnitCode extends opaque<PeppolQuantityUnitCode>()(
|
|
21
|
+
Schema.Literals(quantityUnitCodesKeys).pipe(Schema.brand('PeppolQuantityUnitCode'))
|
|
22
|
+
) {}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { Schema } from 'effect';
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import { opaque } from '#/schemas/utils/opaque.ts';
|
|
5
4
|
import { vatDateCodesKeys } from '#/values/vat-dates.generated';
|
|
6
5
|
|
|
7
|
-
export type PeppolVatDateCode = VatDateCodesKeys;
|
|
8
|
-
|
|
9
6
|
/**
|
|
7
|
+
* @description A VAT date code from the PEPPOL subset of UNCL 2005 (invoice period description code).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* '3';
|
|
12
|
+
* ```;
|
|
13
|
+
*
|
|
10
14
|
* @validations
|
|
11
15
|
* - PEPPOL-EN16931-CL006: Invoice period description code must be according to UNCL 2005 D.16B.
|
|
16
|
+
*
|
|
17
|
+
* @see https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL2005/
|
|
18
|
+
* @see {@link vatDateCodesKeys}
|
|
12
19
|
*/
|
|
13
|
-
export
|
|
20
|
+
export class PeppolVatDateCode extends opaque<PeppolVatDateCode>()(Schema.Literals(vatDateCodesKeys)) {}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
import { Schema } from 'effect';
|
|
2
2
|
|
|
3
|
+
import { opaque } from '#/schemas/utils/opaque.ts';
|
|
3
4
|
import { vatexCodesKeys } from '#/values/vatex-codes.generated';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
|
-
* @description A VAT exemption reason code
|
|
7
|
+
* @description A VAT exemption reason code from the CEF VATEX codelist.
|
|
7
8
|
*
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @description Validates a VAT exemption reason code against the CEF VATEX codelist.
|
|
14
|
-
*
|
|
15
|
-
* @param error - The custom error message to use when validation fails.
|
|
16
|
-
*
|
|
17
|
-
* @returns An Effect schema that accepts only valid VAT exemption reason codes.
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* 'VATEX-EU-79-C';
|
|
12
|
+
* ```;
|
|
18
13
|
*
|
|
19
14
|
* @validations
|
|
20
15
|
* - BR-CL-22: VAT exemption reason code MUST be a valid CEF VATEX code.
|
|
21
16
|
*
|
|
22
17
|
* @see https://docs.peppol.eu/poacc/billing/3.0/codelist/vatex/
|
|
18
|
+
* @see {@link vatexCodesKeys}
|
|
23
19
|
*/
|
|
24
|
-
export
|
|
20
|
+
export class PeppolVatexCode extends opaque<PeppolVatexCode>()(Schema.Literals(vatexCodesKeys).pipe(Schema.brand('PeppolVatexCode'))) {}
|
package/src/schematron/errors.ts
CHANGED
|
@@ -2,6 +2,13 @@ import { Schema } from 'effect';
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @description Failure of a single schematron rule against a document.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* new SchematronRuleError({ id: 'PEPPOL-EN16931-R001', level: 'fatal', message: 'The document must carry a number.' });
|
|
9
|
+
* ```;
|
|
10
|
+
*
|
|
11
|
+
* @see {@link SchematronValidationError}
|
|
5
12
|
*/
|
|
6
13
|
export class SchematronRuleError extends Schema.TaggedError<SchematronRuleError>()('SchematronRuleError', {
|
|
7
14
|
id: Schema.String,
|
|
@@ -11,6 +18,13 @@ export class SchematronRuleError extends Schema.TaggedError<SchematronRuleError>
|
|
|
11
18
|
|
|
12
19
|
/**
|
|
13
20
|
* @description Failure of a schematron validation run, wrapping every rule that failed.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* new SchematronValidationError({ errors: [ruleError] });
|
|
25
|
+
* ```;
|
|
26
|
+
*
|
|
27
|
+
* @see {@link SchematronRuleError}
|
|
14
28
|
*/
|
|
15
29
|
export class SchematronValidationError extends Schema.TaggedError<SchematronValidationError>()('SchematronValidationError', {
|
|
16
30
|
errors: Schema.Array(SchematronRuleError),
|