@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.
Files changed (185) hide show
  1. package/README.md +5 -5
  2. package/dist/constants.d.ts +131 -0
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +114 -1
  5. package/dist/constants.js.map +1 -1
  6. package/dist/{index-BBzPjq7o.d.ts → index-XG-N6PcG.d.ts} +1702 -724
  7. package/dist/index-XG-N6PcG.d.ts.map +1 -0
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.js +1247 -200
  10. package/dist/index.js.map +1 -1
  11. package/dist/invoice-response-code-not-needs-schema-DNrfKYLh.js +36 -0
  12. package/dist/invoice-response-code-not-needs-schema-DNrfKYLh.js.map +1 -0
  13. package/dist/invoice-response-codes.d.ts +28 -0
  14. package/dist/invoice-response-codes.d.ts.map +1 -1
  15. package/dist/invoice-response-codes.js +11 -1
  16. package/dist/invoice-response-codes.js.map +1 -1
  17. package/dist/{is-valid-abn-160i38PG.js → is-valid-abn-D7eSygBG.js} +115 -2
  18. package/dist/is-valid-abn-D7eSygBG.js.map +1 -0
  19. package/dist/{is-valid-mod97-0208-CzMOXMO-.js → is-valid-mod97-0208-CjR324eG.js} +11 -1
  20. package/dist/is-valid-mod97-0208-CjR324eG.js.map +1 -0
  21. package/dist/message-level-response-profile-id-B9c0A7S_.js +27 -0
  22. package/dist/message-level-response-profile-id-B9c0A7S_.js.map +1 -0
  23. package/dist/{nodable-parser-CyDZtLCK.js → nodable-parser-CupS2H55.js} +31 -1
  24. package/dist/nodable-parser-CupS2H55.js.map +1 -0
  25. package/dist/schematron.d.ts +57 -1
  26. package/dist/schematron.d.ts.map +1 -1
  27. package/dist/schematron.js +458 -7
  28. package/dist/schematron.js.map +1 -1
  29. package/dist/validations.d.ts +132 -0
  30. package/dist/validations.d.ts.map +1 -1
  31. package/dist/validations.js +11 -2
  32. package/dist/validations.js.map +1 -1
  33. package/dist/values.d.ts +67 -2
  34. package/dist/values.d.ts.map +1 -1
  35. package/dist/xml.d.ts +30 -0
  36. package/dist/xml.d.ts.map +1 -1
  37. package/dist/xml.js +10 -1
  38. package/dist/xml.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/constants/credit-note-doctype-id.ts +9 -0
  41. package/src/constants/credit-note-process-id.ts +9 -0
  42. package/src/constants/document-scheme.ts +9 -0
  43. package/src/constants/invoice-doctype-id.ts +9 -0
  44. package/src/constants/invoice-process-id.ts +10 -0
  45. package/src/constants/invoice-response-doctype-id.ts +10 -0
  46. package/src/constants/invoice-response-process-id.ts +9 -0
  47. package/src/constants/invoice-response-profile-id.ts +9 -0
  48. package/src/constants/message-level-response-doctype-id.ts +10 -0
  49. package/src/constants/message-level-response-process-id.ts +9 -0
  50. package/src/constants/message-level-response-profile-id.ts +9 -0
  51. package/src/constants/participant-scheme.ts +10 -0
  52. package/src/constants/process-scheme.ts +9 -0
  53. package/src/constants/transport-profile.ts +10 -0
  54. package/src/decoders/fields/decode-invoice-message-document-party.ts +2 -2
  55. package/src/decoders/fields/decode-parties-tax-scheme.ts +2 -2
  56. package/src/decoders/fields/decode-party-legal-entity.ts +2 -2
  57. package/src/decoders/fields/decode-party-tax-scheme.ts +2 -2
  58. package/src/decoders/fields/decode-tax-category.ts +1 -1
  59. package/src/decoders/fields/decode-tax-representative-party.ts +2 -2
  60. package/src/decoders/fields/encode-message-party.ts +2 -2
  61. package/src/decoders/fields/encode-parties-tax-scheme.ts +3 -3
  62. package/src/decoders/fields/encode-party-legal-entity.ts +1 -1
  63. package/src/decoders/fields/encode-party-tax-scheme.ts +2 -2
  64. package/src/decoders/fields/encode-tax-representative-party.ts +2 -2
  65. package/src/invoice-response-codes/invoice-response-code-needs-schema.ts +9 -0
  66. package/src/invoice-response-codes/invoice-response-code-not-needs-schema.ts +9 -0
  67. package/src/invoice-response-codes/invoice-response-codes-order.ts +10 -0
  68. package/src/peppol-validations/add-piva.ts +12 -0
  69. package/src/peppol-validations/check-cf.ts +11 -0
  70. package/src/peppol-validations/check-cf16.ts +12 -0
  71. package/src/peppol-validations/check-piva-se-it.ts +11 -0
  72. package/src/peppol-validations/check-piva.ts +11 -0
  73. package/src/peppol-validations/check-se-orgnr.ts +9 -0
  74. package/src/peppol-validations/greek-tin-verification.ts +9 -0
  75. package/src/peppol-validations/is-valid-abn.ts +9 -0
  76. package/src/peppol-validations/is-valid-gln.ts +10 -0
  77. package/src/peppol-validations/is-valid-iban.ts +10 -0
  78. package/src/peppol-validations/is-valid-mod11.ts +9 -0
  79. package/src/peppol-validations/is-valid-mod97-0208.ts +10 -0
  80. package/src/peppol-validations/luhn-check.ts +9 -0
  81. package/src/schemas/fields/default-customization-id.ts +9 -0
  82. package/src/schemas/fields/default-profile-id.ts +9 -0
  83. package/src/schemas/fields/peppol-additional-document-reference-schema.ts +61 -20
  84. package/src/schemas/fields/peppol-address-schema.ts +25 -2
  85. package/src/schemas/fields/peppol-allowance-charge-schema.ts +63 -9
  86. package/src/schemas/fields/peppol-amount-schema.ts +15 -2
  87. package/src/schemas/fields/peppol-base-line-schema.ts +12 -2
  88. package/src/schemas/fields/peppol-billing-reference-schema.ts +13 -0
  89. package/src/schemas/fields/peppol-binary-object-schema.ts +12 -4
  90. package/src/schemas/fields/peppol-contact-schema.ts +11 -0
  91. package/src/schemas/fields/peppol-credit-note-line-schema.ts +7 -2
  92. package/src/schemas/fields/peppol-delivery-schema.ts +44 -2
  93. package/src/schemas/fields/peppol-identifier-schema.ts +8 -0
  94. package/src/schemas/fields/peppol-invoice-line-period-schema.ts +11 -0
  95. package/src/schemas/fields/peppol-invoice-line-schema.ts +9 -2
  96. package/src/schemas/fields/peppol-invoice-period-schema.ts +2 -2
  97. package/src/schemas/fields/peppol-item-classification-schema.ts +2 -2
  98. package/src/schemas/fields/peppol-line-allowance-charge-schema.ts +56 -8
  99. package/src/schemas/fields/peppol-line-item-schema.ts +66 -6
  100. package/src/schemas/fields/peppol-line-price-allowance-charge-schema.ts +20 -0
  101. package/src/schemas/fields/peppol-line-price-schema.ts +2 -0
  102. package/src/schemas/fields/peppol-order-reference-schema.ts +2 -0
  103. package/src/schemas/fields/peppol-party-base-schema.ts +36 -4
  104. package/src/schemas/fields/peppol-party-legal-entity-schema.ts +10 -2
  105. package/src/schemas/fields/peppol-party-tax-scheme-schema.ts +4 -4
  106. package/src/schemas/fields/peppol-payee-party-schema.ts +8 -8
  107. package/src/schemas/fields/peppol-payment-means-schema.ts +62 -2
  108. package/src/schemas/fields/peppol-payment-terms-schema.ts +2 -0
  109. package/src/schemas/fields/peppol-quantity-schema.ts +4 -2
  110. package/src/schemas/fields/peppol-reference-schema.ts +20 -1
  111. package/src/schemas/fields/peppol-tax-category-schema.ts +12 -2
  112. package/src/schemas/fields/peppol-tax-representative-schema.ts +2 -2
  113. package/src/schemas/fields/peppol-tax-subtotal-category-schema.ts +3 -0
  114. package/src/schemas/fields/peppol-tax-subtotal-schema.ts +2 -0
  115. package/src/schemas/fields/peppol-tax-totals-base-schema.ts +3 -3
  116. package/src/schemas/peppol-billing-base-schema.ts +49 -9
  117. package/src/schemas/peppol-credit-note-schema.ts +2 -2
  118. package/src/schemas/peppol-document-response-document-reference-schema.ts +12 -4
  119. package/src/schemas/peppol-document-response-document-schema.ts +5 -5
  120. package/src/schemas/peppol-document-response-line-response-content-schema.ts +22 -2
  121. package/src/schemas/peppol-document-response-line-response-schema.ts +23 -2
  122. package/src/schemas/peppol-document-schema.ts +69 -6
  123. package/src/schemas/peppol-invoice-response-document-actual-response-schema.ts +53 -4
  124. package/src/schemas/peppol-invoice-response-document-actual-response-status-schema.ts +22 -4
  125. package/src/schemas/peppol-invoice-response-schema.ts +54 -6
  126. package/src/schemas/peppol-invoice-response-status-reason-code-schema.ts +36 -8
  127. package/src/schemas/peppol-invoice-schema.ts +30 -2
  128. package/src/schemas/peppol-message-level-response-document-response-schema.ts +10 -0
  129. package/src/schemas/peppol-message-level-response-party-schema.ts +10 -0
  130. package/src/schemas/peppol-message-level-response-schema.ts +18 -0
  131. package/src/schemas/utils/format-quantity-with-unit.ts +19 -0
  132. package/src/schemas/utils/get-credit-note-type-code-description.ts +12 -0
  133. package/src/schemas/utils/get-invoice-type-code-description.ts +12 -0
  134. package/src/schemas/utils/is-valid-credit-note-type-code.ts +13 -0
  135. package/src/schemas/utils/is-valid-invoice-type-code.ts +13 -0
  136. package/src/schemas/utils/is-valid-process.ts +13 -0
  137. package/src/schemas/utils/peppol-base-64-schema.ts +7 -4
  138. package/src/schemas/utils/peppol-vat-regex-schema.ts +38 -30
  139. package/src/schemas/utils/peppol-xsd-time-schema.ts +12 -2
  140. package/src/schemas/utils/quantity-unit-code-to-intl-unit.ts +34 -0
  141. package/src/schemas/values/additional-document-reference-code-schema.ts +9 -15
  142. package/src/schemas/values/allowance-charge-reason-code-schema.ts +12 -14
  143. package/src/schemas/values/application-response-type-code-schema.ts +10 -14
  144. package/src/schemas/values/charge-reason-code-schema.ts +12 -14
  145. package/src/schemas/values/credit-note-type-code-schema.ts +8 -14
  146. package/src/schemas/values/currency-code-schema.ts +13 -16
  147. package/src/schemas/values/document-type-schemes-schema.ts +9 -5
  148. package/src/schemas/values/document-type-values-schema.ts +5 -6
  149. package/src/schemas/values/duty-tax-fee-category-schema.ts +15 -13
  150. package/src/schemas/values/electronic-codes-schema.ts +10 -12
  151. package/src/schemas/values/icd-codes-schema.ts +8 -12
  152. package/src/schemas/values/invoice-status-code-schema.ts +10 -12
  153. package/src/schemas/values/invoice-type-code-schema.ts +10 -12
  154. package/src/schemas/values/item-classification-codes-schema.ts +10 -12
  155. package/src/schemas/values/mime-codes-schema.ts +12 -14
  156. package/src/schemas/values/op-status-action-schema.ts +10 -12
  157. package/src/schemas/values/op-status-reason-schema.ts +10 -12
  158. package/src/schemas/values/participant-identifier-code-schema.ts +10 -13
  159. package/src/schemas/values/payment-means-code-schema.ts +10 -12
  160. package/src/schemas/values/peppol-country-code-schema.ts +7 -9
  161. package/src/schemas/values/peppol-document-type-code-schema.ts +10 -12
  162. package/src/schemas/values/peppol-document-type-schema.ts +12 -21
  163. package/src/schemas/values/peppol-process-schema.ts +19 -15
  164. package/src/schemas/values/process-from-document-type-schema.ts +3 -3
  165. package/src/schemas/values/quantity-unit-codes-schema.ts +10 -12
  166. package/src/schemas/values/vat-date-code-schema.ts +12 -5
  167. package/src/schemas/values/vatex-code-schema.ts +8 -12
  168. package/src/schematron/errors.ts +14 -0
  169. package/src/schematron/helpers.ts +457 -11
  170. package/src/schematron/run-all-rules.ts +10 -0
  171. package/src/schematron/schematron.ts +25 -0
  172. package/src/xml/builder-options.ts +9 -0
  173. package/src/xml/common-xml-options.ts +9 -0
  174. package/src/xml/nodable-parser.ts +12 -0
  175. package/src/xml/parser-options.ts +9 -0
  176. package/dist/index-BBzPjq7o.d.ts.map +0 -1
  177. package/dist/invoice-response-code-not-needs-schema-p_RKKNLc.js +0 -18
  178. package/dist/invoice-response-code-not-needs-schema-p_RKKNLc.js.map +0 -1
  179. package/dist/is-valid-abn-160i38PG.js.map +0 -1
  180. package/dist/is-valid-mod97-0208-CzMOXMO-.js.map +0 -1
  181. package/dist/message-level-response-profile-id-DBpOW91B.js +0 -9
  182. package/dist/message-level-response-profile-id-DBpOW91B.js.map +0 -1
  183. package/dist/nodable-parser-CyDZtLCK.js.map +0 -1
  184. package/dist/vat-dates.generated-CxFvt7m3.d.ts +0 -68
  185. 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 key as defined by the processes codelist.
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 type PeppolProcesses = typeof peppolProcessSchema.Encoded;
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 Validates a full PEPPOL business process identifier (`<scheme>::<value>`) against the known processes.
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 const peppolProcessSchema = Schema.TemplateLiteral([Schema.Literals(processesKeys), Schema.Literal('::'), Schema.String]).check(
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 { peppolProcessSchema } from '#/schemas/values/peppol-process-schema.ts';
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 peppolProcessSchema}
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 peppolProcessSchema;
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 as defined by the PEPPOL subset of UN/ECE Recommendation 20.
7
+ * @description A unit of measure code from the PEPPOL subset of UN/ECE Recommendation 20.
7
8
  *
8
- * @see https://docs.peppol.eu/poacc/billing/3.0/codelist/UNECERec20/
9
- */
10
- export type PeppolQuantityUnitCode = typeof quantityUnitCodesSchema.Type;
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 const quantityUnitCodesSchema = Schema.Literals(quantityUnitCodesKeys).pipe(Schema.brand('PeppolQuantityUnitCode'));
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 type { VatDateCodesKeys } from '#/values/vat-dates.generated';
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 const vatDateCodeSchema = Schema.Literals(vatDateCodesKeys);
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 as defined by the CEF VATEX codelist.
7
+ * @description A VAT exemption reason code from the CEF VATEX codelist.
7
8
  *
8
- * @see https://docs.peppol.eu/poacc/billing/3.0/codelist/vatex/
9
- */
10
- export type PeppolVatexCode = typeof vatexCodeSchema.Type;
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 const vatexCodeSchema = Schema.Literals(vatexCodesKeys).pipe(Schema.brand('PeppolVatexCode'));
20
+ export class PeppolVatexCode extends opaque<PeppolVatexCode>()(Schema.Literals(vatexCodesKeys).pipe(Schema.brand('PeppolVatexCode'))) {}
@@ -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),