@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
@@ -3,10 +3,20 @@ import { Effect, Schema } from 'effect';
3
3
  import { BaseLineAllowanceCharge } from '#/schemas/fields/peppol-line-allowance-charge-schema.ts';
4
4
  import { PeppolTaxCategory } from '#/schemas/fields/peppol-tax-category-schema.ts';
5
5
  import { opaque } from '#/schemas/utils/opaque.ts';
6
- import { allowanceChargeReasonCodeSchema } from '#/schemas/values/allowance-charge-reason-code-schema.ts';
7
- import { chargeReasonCodeSchema } from '#/schemas/values/charge-reason-code-schema.ts';
8
- import { peppolDutyTaxFeeCategorySchema } from '#/schemas/values/duty-tax-fee-category-schema.ts';
6
+ import { PeppolAllowanceChargeReasonCode } from '#/schemas/values/allowance-charge-reason-code-schema.ts';
7
+ import { PeppolChargeReasonCode } from '#/schemas/values/charge-reason-code-schema.ts';
8
+ import { PeppolDutyTaxFeeCategoryCode } from '#/schemas/values/duty-tax-fee-category-schema.ts';
9
9
 
10
+ /**
11
+ * @description The identifier of the tax scheme that applies to a document level allowance or charge. Defaults to `VAT` when the value is absent.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * { id: 'VAT' }
16
+ * ```;
17
+ *
18
+ * @see {@link PeppolTaxCategory}
19
+ */
10
20
  export class PeppolTaxCategoryTaxSchemeId extends opaque<PeppolTaxCategoryTaxSchemeId>()(
11
21
  Schema.Struct({
12
22
  /**
@@ -18,6 +28,22 @@ export class PeppolTaxCategoryTaxSchemeId extends opaque<PeppolTaxCategoryTaxSch
18
28
  })
19
29
  ) {}
20
30
 
31
+ /**
32
+ * @description Shared fields for a document level allowance or charge. Combines the common line allowance and charge fields with the tax category that applies to
33
+ * the document level amount.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * {
38
+ * amount: { value: 25, currencyId: 'EUR' },
39
+ * chargeIndicator: true,
40
+ * allowanceChargeReason: 'Insurance',
41
+ * taxCategory: { id: 'S', percent: 25, taxSchemeId: { id: 'VAT' } }
42
+ * }
43
+ * ```;
44
+ *
45
+ * @see {@link PeppolAllowanceCharge}
46
+ */
21
47
  export class BaseAllowanceCharge extends opaque<BaseAllowanceCharge>()(
22
48
  Schema.Struct({
23
49
  ...BaseLineAllowanceCharge.fields,
@@ -36,7 +62,7 @@ export class BaseAllowanceCharge extends opaque<BaseAllowanceCharge>()(
36
62
  *
37
63
  * @name `cbc:ID`
38
64
  */
39
- id: peppolDutyTaxFeeCategorySchema,
65
+ id: PeppolDutyTaxFeeCategoryCode,
40
66
  /**
41
67
  * @description The VAT rate, represented as percentage that applies to the document level allowance or charge.
42
68
  *
@@ -57,13 +83,24 @@ export class BaseAllowanceCharge extends opaque<BaseAllowanceCharge>()(
57
83
  })
58
84
  ) {}
59
85
 
86
+ /**
87
+ * @description A document level allowance, marked by a `cbc:ChargeIndicator` of `false`. Adds an allowance reason code to the shared document level allowance and
88
+ * charge fields.
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * { amount: { value: 200, currencyId: 'EUR' }, chargeIndicator: false, allowanceChargeReasonCode: '95' }
93
+ * ```;
94
+ *
95
+ * @see {@link PeppolAllowanceCharge}
96
+ */
60
97
  export class PeppolAllowance extends opaque<PeppolAllowance>()(
61
98
  Schema.Struct({
62
99
  ...BaseAllowanceCharge.fields,
63
100
  /**
64
101
  * @name cbc:AllowanceChargeReasonCode
65
102
  */
66
- allowanceChargeReasonCode: Schema.optional(allowanceChargeReasonCodeSchema),
103
+ allowanceChargeReasonCode: Schema.optional(PeppolAllowanceChargeReasonCode),
67
104
  /**
68
105
  * @name cbc:ChargeIndicator
69
106
  *
@@ -75,13 +112,24 @@ export class PeppolAllowance extends opaque<PeppolAllowance>()(
75
112
  })
76
113
  ) {}
77
114
 
115
+ /**
116
+ * @description A document level charge, marked by a `cbc:ChargeIndicator` of `true`. Adds a charge reason code to the shared document level allowance and charge
117
+ * fields.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * { amount: { value: 25, currencyId: 'EUR' }, chargeIndicator: true, allowanceChargeReasonCode: 'AA' }
122
+ * ```;
123
+ *
124
+ * @see {@link PeppolAllowanceCharge}
125
+ */
78
126
  export class PeppolCharge extends opaque<PeppolCharge>()(
79
127
  Schema.Struct({
80
128
  ...BaseAllowanceCharge.fields,
81
129
  /**
82
130
  * @name cbc:AllowanceChargeReasonCode
83
131
  */
84
- allowanceChargeReasonCode: Schema.optional(chargeReasonCodeSchema),
132
+ allowanceChargeReasonCode: Schema.optional(PeppolChargeReasonCode),
85
133
  /**
86
134
  * @name cbc:ChargeIndicator
87
135
  *
@@ -94,11 +142,17 @@ export class PeppolCharge extends opaque<PeppolCharge>()(
94
142
  ) {}
95
143
 
96
144
  /**
145
+ * @description A document level allowance or charge, selected by the `cbc:ChargeIndicator` value: `false` selects an allowance, `true` selects a charge.
146
+ *
97
147
  * @summary Allowance/Charge
98
148
  *
99
149
  * @name cac:AllowanceCharge
100
150
  */
101
- export const peppolAllowanceChargeSchema = Schema.Union([PeppolAllowance, PeppolCharge]).annotate({ message: 'unable to decode allowance charge' });
151
+ export class PeppolAllowanceCharge extends Schema.Union([PeppolAllowance, PeppolCharge]).annotate({ message: 'unable to decode allowance charge' }) {}
102
152
 
103
- export type PeppolAllowanceCharge = Schema.Schema.Type<typeof peppolAllowanceChargeSchema>;
104
- export type PeppolAllowanceChargeEncoded = Schema.Codec.Encoded<typeof peppolAllowanceChargeSchema>;
153
+ /**
154
+ * @description Encoded form of {@link PeppolAllowanceCharge} produced by the Effect Schema codec.
155
+ *
156
+ * @see {@link PeppolAllowanceCharge}
157
+ */
158
+ export type PeppolAllowanceChargeEncoded = Schema.Codec.Encoded<typeof PeppolAllowanceCharge>;
@@ -1,9 +1,17 @@
1
1
  import { Schema } from 'effect';
2
2
 
3
3
  import { opaque } from '#/schemas/utils/opaque.ts';
4
- import { currencyCodeSchema } from '#/schemas/values/currency-code-schema.ts';
4
+ import { PeppolCurrencyCode } from '#/schemas/values/currency-code-schema.ts';
5
5
 
6
6
  /**
7
+ * @description A monetary amount paired with the currency it is expressed in. Wraps a `cbc:*` amount element whose `@currencyID` attribute names the currency and
8
+ * whose text is the value.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * { currencyId: 'EUR', value: 4500.0 }
13
+ * ```;
14
+ *
7
15
  * @summary Monetary amount with mandatory currency
8
16
  *
9
17
  * @name cbc:* (+ @currencyID)
@@ -13,11 +21,16 @@ export class PeppolAmount extends opaque<PeppolAmount>()(
13
21
  /**
14
22
  * @name \@currencyID
15
23
  */
16
- currencyId: currencyCodeSchema,
24
+ currencyId: PeppolCurrencyCode,
17
25
  /**
18
26
  * @name #text (value)
19
27
  */
20
28
  value: Schema.Finite,
21
29
  })
22
30
  ) {}
31
+ /**
32
+ * @description Encoded form of {@link PeppolAmount} produced by the Effect Schema codec. Fields mirror the decoded shape.
33
+ *
34
+ * @see {@link PeppolAmount}
35
+ */
23
36
  export interface PeppolAmountEncoded extends Schema.Codec.Encoded<typeof PeppolAmount> {}
@@ -3,11 +3,21 @@ import { Effect, Schema } from 'effect';
3
3
  import { PeppolAmount } from '#/schemas/fields/peppol-amount-schema.ts';
4
4
  import { PeppolIdentifier } from '#/schemas/fields/peppol-identifier-schema.ts';
5
5
  import { PeppolInvoiceLinePeriod } from '#/schemas/fields/peppol-invoice-line-period-schema.ts';
6
- import { peppolLineAllowanceChargeSchema } from '#/schemas/fields/peppol-line-allowance-charge-schema.ts';
6
+ import { PeppolLineAllowanceCharge } from '#/schemas/fields/peppol-line-allowance-charge-schema.ts';
7
7
  import { PeppolLineItem } from '#/schemas/fields/peppol-line-item-schema.ts';
8
8
  import { PeppolLinePrice } from '#/schemas/fields/peppol-line-price-schema.ts';
9
9
  import { opaque } from '#/schemas/utils/opaque.ts';
10
10
 
11
+ /**
12
+ * @description A reference to the order line that the Invoice line fulfils. Wraps the `cac:OrderLineReference` element and its `cbc:LineID`.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * { lineId: '123' }
17
+ * ```;
18
+ *
19
+ * @see {@link PeppolBaseLine}
20
+ */
11
21
  export class PeppolOrderLineReference extends opaque<PeppolOrderLineReference>()(Schema.Struct({ lineId: Schema.String })) {}
12
22
 
13
23
  /**
@@ -37,7 +47,7 @@ export class PeppolBaseLine extends opaque<PeppolBaseLine>()(
37
47
  *
38
48
  * @cardinality 0..n
39
49
  */
40
- allowanceCharges: Schema.optional(Schema.Array(peppolLineAllowanceChargeSchema)),
50
+ allowanceCharges: Schema.optional(Schema.Array(PeppolLineAllowanceCharge)),
41
51
  /**
42
52
  * @summary Line object identifier
43
53
  *
@@ -3,6 +3,17 @@ import { Schema } from 'effect';
3
3
  import { PeppolIsoDateString } from '#/schemas/peppol-iso-date-string.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
5
 
6
+ /**
7
+ * @description A reference to an Invoice that was previously sent by the Seller, carrying the preceding invoice number and, when the number is not unique, its
8
+ * issue date. Wraps the `cac:InvoiceDocumentReference` element.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * { id: 'inv123', issueDate: '2017-09-15' }
13
+ * ```;
14
+ *
15
+ * @see {@link PeppolBillingReference}
16
+ */
6
17
  export class PeppolInvoiceDocumentReference extends opaque<PeppolInvoiceDocumentReference>()(
7
18
  Schema.Struct({
8
19
  /**
@@ -33,6 +44,8 @@ export class PeppolInvoiceDocumentReference extends opaque<PeppolInvoiceDocument
33
44
  ) {}
34
45
 
35
46
  /**
47
+ * @description A reference to a preceding Invoice, used when the Invoice corrects or replaces an earlier one. Wraps the `cac:BillingReference` element.
48
+ *
36
49
  * @summary PRECEDING INVOICE REFERENCE (0..n)
37
50
  *
38
51
  * @name cac:BillingReference
@@ -1,14 +1,22 @@
1
1
  import { Schema } from 'effect';
2
2
 
3
3
  import { opaque } from '#/schemas/utils/opaque.ts';
4
- import { peppolBase64Schema } from '#/schemas/utils/peppol-base-64-schema.ts';
5
- import { mimeCodesSchema } from '#/schemas/values/mime-codes-schema.ts';
4
+ import { PeppolBase64 } from '#/schemas/utils/peppol-base-64-schema.ts';
5
+ import { PeppolMimeCode } from '#/schemas/values/mime-codes-schema.ts';
6
6
 
7
7
  // RFC 4648 §5 — Base64url Encoding: URL/file-safe alphabet (A-Z a-z 0-9 - _), optional `=` padding.
8
8
  // Effect port of `z.base64url()`: keeps the value as a plain string and only validates the shape.
9
9
  const base64UrlSchema = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9\-_]+={0,2}$/)).annotate({ message: 'Invalid base64url' });
10
10
 
11
11
  /**
12
+ * @description An attached document embedded in the Invoice as a Base64 encoded binary object, together with its MIME type and file name. Wraps the
13
+ * `cbc:EmbeddedDocumentBinaryObject` element.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * { content: 'aHR0cHM6Ly90ZXN0LXZlZmEuZGlmaS5uby9wZXBwb2xiaXM=', mimeCode: 'text/csv', filename: 'Hours - spent.csv' }
18
+ * ```;
19
+ *
12
20
  * @summary Binary object for attachments
13
21
  *
14
22
  * @name cbc:EmbeddedDocumentBinaryObject (+ @mimeCode, @filename)
@@ -25,7 +33,7 @@ export class PeppolBinaryObject extends opaque<PeppolBinaryObject>()(
25
33
  *
26
34
  * @name `#text` (Base64 content)
27
35
  */
28
- content: Schema.Union([peppolBase64Schema, base64UrlSchema]),
36
+ content: Schema.Union([PeppolBase64, base64UrlSchema]),
29
37
  /**
30
38
  * @description The mime code of the attached document.
31
39
  *
@@ -36,7 +44,7 @@ export class PeppolBinaryObject extends opaque<PeppolBinaryObject>()(
36
44
  *
37
45
  * @name `@mimeCode`
38
46
  */
39
- mimeCode: mimeCodesSchema,
47
+ mimeCode: PeppolMimeCode,
40
48
  /**
41
49
  * @description The file name of the attached document.
42
50
  *
@@ -2,6 +2,17 @@ import { Schema } from 'effect';
2
2
 
3
3
  import { opaque } from '#/schemas/utils/opaque.ts';
4
4
 
5
+ /**
6
+ * @description A contact point for a party, such as the person responsible for receiving the Invoice. Wraps the `cac:Contact` element with an optional name,
7
+ * telephone number and electronic mail address.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * { name: 'Lisa Johnson', telephone: '23434234', electronicMail: 'lj@buyer.se' }
12
+ * ```;
13
+ *
14
+ * @see {@link PeppolPartySchema}
15
+ */
5
16
  export class PeppolContact extends opaque<PeppolContact>()(
6
17
  Schema.Struct({
7
18
  /**
@@ -3,7 +3,7 @@ import { Schema } from 'effect';
3
3
  import { PeppolBaseLine } from '#/schemas/fields/peppol-base-line-schema.ts';
4
4
  import { PeppolQuantity } from '#/schemas/fields/peppol-quantity-schema.ts';
5
5
  import { opaque } from '#/schemas/utils/opaque.ts';
6
- import { quantityUnitCodesSchema } from '#/schemas/values/quantity-unit-codes-schema.ts';
6
+ import { PeppolQuantityUnitCode } from '#/schemas/values/quantity-unit-codes-schema.ts';
7
7
 
8
8
  /**
9
9
  * @description Credit note line is identical to Invoice line except the quantity element name.
@@ -35,10 +35,15 @@ export class PeppolCreditNoteLine extends opaque<PeppolCreditNoteLine>()(
35
35
  *
36
36
  * @see {@link quantityUnitCodes}
37
37
  */
38
- unitCode: quantityUnitCodesSchema,
38
+ unitCode: PeppolQuantityUnitCode,
39
39
  })
40
40
  ),
41
41
  })
42
42
  )
43
43
  ) {}
44
+ /**
45
+ * @description Encoded form of {@link PeppolCreditNoteLine} produced by the Effect Schema codec. Fields mirror the decoded structure.
46
+ *
47
+ * @see {@link PeppolCreditNoteLine}
48
+ */
44
49
  export interface PeppolCreditNoteLineEncoded extends Schema.Codec.Encoded<typeof PeppolCreditNoteLine> {}
@@ -2,11 +2,21 @@ import { Schema } from 'effect';
2
2
 
3
3
  import { PeppolIsoDateString } from '#/schemas/peppol-iso-date-string.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
- import { icdCodesSchema } from '#/schemas/values/icd-codes-schema.ts';
5
+ import { PeppolIcdCode } from '#/schemas/values/icd-codes-schema.ts';
6
6
 
7
7
  import { PeppolAddress } from './peppol-address-schema.ts';
8
8
  import { PeppolIdentifier } from './peppol-identifier-schema.ts';
9
9
 
10
+ /**
11
+ * @description The name of the party to which the goods and services are delivered. Wraps the `cac:PartyName` element of the delivery party.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * { name: 'Delivery party Name' }
16
+ * ```;
17
+ *
18
+ * @see {@link PeppolDeliveryParty}
19
+ */
10
20
  export class PeppolDeliveryPartyPartyName extends opaque<PeppolDeliveryPartyPartyName>()(
11
21
  Schema.Struct({
12
22
  /**
@@ -20,6 +30,16 @@ export class PeppolDeliveryPartyPartyName extends opaque<PeppolDeliveryPartyPart
20
30
  })
21
31
  ) {}
22
32
 
33
+ /**
34
+ * @description The party to which the goods and services are delivered, when it differs from the Buyer. Wraps the `cac:DeliveryParty` element.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * { partyName: { name: 'Delivery party Name' } }
39
+ * ```;
40
+ *
41
+ * @see {@link PeppolDelivery}
42
+ */
23
43
  export class PeppolDeliveryParty extends opaque<PeppolDeliveryParty>()(
24
44
  Schema.Struct({
25
45
  /**
@@ -31,6 +51,17 @@ export class PeppolDeliveryParty extends opaque<PeppolDeliveryParty>()(
31
51
  })
32
52
  ) {}
33
53
 
54
+ /**
55
+ * @description The location at which the goods and services are delivered, identified by an identifier and an optional address. Wraps the `cac:DeliveryLocation`
56
+ * element.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * { id: { id: '9483759475923478', schemeId: '0088' }, address: { cityName: 'Stockholm', countryCode: { identificationCode: 'SE' } } }
61
+ * ```;
62
+ *
63
+ * @see {@link PeppolDelivery}
64
+ */
34
65
  export class PeppolDeliveryLocation extends opaque<PeppolDeliveryLocation>()(
35
66
  Schema.Struct({
36
67
  /**
@@ -64,7 +95,7 @@ export class PeppolDeliveryLocation extends opaque<PeppolDeliveryLocation>()(
64
95
  *
65
96
  * @name `@schemeID`
66
97
  */
67
- schemeId: Schema.optional(icdCodesSchema),
98
+ schemeId: Schema.optional(PeppolIcdCode),
68
99
  })
69
100
  )
70
101
  ),
@@ -79,6 +110,17 @@ export class PeppolDeliveryLocation extends opaque<PeppolDeliveryLocation>()(
79
110
  })
80
111
  ) {}
81
112
 
113
+ /**
114
+ * @description Information about the delivery of the goods and services, such as the actual delivery date, the delivery location and the delivery party. Wraps the
115
+ * `cac:Delivery` element.
116
+ *
117
+ * @example
118
+ * ```ts
119
+ * { actualDeliveryDate: '2017-11-01', deliveryLocation: { id: { id: '9483759475923478' } } }
120
+ * ```;
121
+ *
122
+ * @see {@link PeppolDeliveryLocation}
123
+ */
82
124
  export class PeppolDelivery extends opaque<PeppolDelivery>()(
83
125
  Schema.Struct({
84
126
  /**
@@ -3,6 +3,14 @@ import { Schema } from 'effect';
3
3
  import { opaque } from '#/schemas/utils/opaque.ts';
4
4
 
5
5
  /**
6
+ * @description A generic identifier paired with an optional identification scheme identifier. Wraps a `cbc:ID` element and its optional `@schemeID` attribute, and
7
+ * is reused across document references.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * { id: '99887766', schemeId: '0088' }
12
+ * ```;
13
+ *
6
14
  * @summary Identifier with optional scheme
7
15
  *
8
16
  * @name `cbc:ID (+ optional @schemeID)`
@@ -3,6 +3,17 @@ import { Schema } from 'effect';
3
3
  import { PeppolIsoDateString } from '#/schemas/peppol-iso-date-string.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
5
 
6
+ /**
7
+ * @description The period relevant for an Invoice line, given by an optional start date and end date. Wraps the `cac:InvoicePeriod` element as used on a line; the
8
+ * document level period extends this shape in {@link PeppolInvoicePeriod}.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * { startDate: '2017-10-01', endDate: '2017-10-31' }
13
+ * ```;
14
+ *
15
+ * @see {@link PeppolInvoicePeriod}
16
+ */
6
17
  export class PeppolInvoiceLinePeriod extends opaque<PeppolInvoiceLinePeriod>()(
7
18
  Schema.Struct({
8
19
  /**
@@ -3,9 +3,11 @@ import { Schema } from 'effect';
3
3
  import { PeppolBaseLine } from '#/schemas/fields/peppol-base-line-schema.ts';
4
4
  import { PeppolQuantity } from '#/schemas/fields/peppol-quantity-schema.ts';
5
5
  import { opaque } from '#/schemas/utils/opaque.ts';
6
- import { quantityUnitCodesSchema } from '#/schemas/values/quantity-unit-codes-schema.ts';
6
+ import { PeppolQuantityUnitCode } from '#/schemas/values/quantity-unit-codes-schema.ts';
7
7
 
8
8
  /**
9
+ * @description A line of the Invoice, extending the common line fields with the invoiced quantity. Wraps the `cac:InvoiceLine` element.
10
+ *
9
11
  * @summary Invoice line
10
12
  *
11
13
  * @name cac:InvoiceLine
@@ -38,9 +40,14 @@ export class PeppolInvoiceLine extends opaque<PeppolInvoiceLine>()(
38
40
  *
39
41
  * @see {@link quantityUnitCodes}
40
42
  */
41
- unitCode: quantityUnitCodesSchema,
43
+ unitCode: PeppolQuantityUnitCode,
42
44
  })
43
45
  ),
44
46
  })
45
47
  ) {}
48
+ /**
49
+ * @description Encoded form of {@link PeppolInvoiceLine} produced by the Effect Schema codec. Fields mirror the decoded structure.
50
+ *
51
+ * @see {@link PeppolInvoiceLine}
52
+ */
46
53
  export interface PeppolInvoiceLineEncoded extends Schema.Codec.Encoded<typeof PeppolInvoiceLine> {}
@@ -2,7 +2,7 @@ import { Schema } from 'effect';
2
2
 
3
3
  import { PeppolInvoiceLinePeriod } from '#/schemas/fields/peppol-invoice-line-period-schema.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
- import { vatDateCodeSchema } from '#/schemas/values/vat-date-code-schema.ts';
5
+ import { PeppolVatDateCode } from '#/schemas/values/vat-date-code-schema.ts';
6
6
 
7
7
  /**
8
8
  * @description A group of business terms providing information on the invoice period. Also called delivery period. If the group is used, the invoiceing period
@@ -25,7 +25,7 @@ export class PeppolInvoicePeriod extends opaque<PeppolInvoicePeriod>()(
25
25
  *
26
26
  * @name `cbc:DescriptionCode`
27
27
  */
28
- descriptionCode: Schema.optional(vatDateCodeSchema),
28
+ descriptionCode: Schema.optional(PeppolVatDateCode),
29
29
  })
30
30
  )
31
31
  ) {}
@@ -1,7 +1,7 @@
1
1
  import { Schema } from 'effect';
2
2
 
3
3
  import { opaque } from '#/schemas/utils/opaque.ts';
4
- import { itemClassificationCodesSchema } from '#/schemas/values/item-classification-codes-schema.ts';
4
+ import { PeppolItemClassificationCode } from '#/schemas/values/item-classification-codes-schema.ts';
5
5
 
6
6
  /**
7
7
  * @description A code for classifying the item by its type or nature.
@@ -30,7 +30,7 @@ export class PeppolItemClassification extends opaque<PeppolItemClassification>()
30
30
  *
31
31
  * @name `@listID`
32
32
  */
33
- listId: itemClassificationCodesSchema,
33
+ listId: PeppolItemClassificationCode,
34
34
  /**
35
35
  * @description The identification scheme version identifier of the Item classification identifier.
36
36
  *
@@ -2,9 +2,20 @@ import { Schema } from 'effect';
2
2
 
3
3
  import { PriceAllowanceCharge } from '#/schemas/fields/peppol-line-price-allowance-charge-schema.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
- import { allowanceChargeReasonCodeSchema } from '#/schemas/values/allowance-charge-reason-code-schema.ts';
6
- import { chargeReasonCodeSchema } from '#/schemas/values/charge-reason-code-schema.ts';
5
+ import { PeppolAllowanceChargeReasonCode } from '#/schemas/values/allowance-charge-reason-code-schema.ts';
6
+ import { PeppolChargeReasonCode } from '#/schemas/values/charge-reason-code-schema.ts';
7
7
 
8
+ /**
9
+ * @description Shared fields for an allowance or charge applied to an Invoice line. Extends the price level allowance and charge fields with the reason text and
10
+ * the multiplier factor used to calculate the amount.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * { amount: { value: 200, currencyId: 'EUR' }, chargeIndicator: false, allowanceChargeReason: 'Discount' }
15
+ * ```;
16
+ *
17
+ * @see {@link PeppolLineAllowanceCharge}
18
+ */
8
19
  export class BaseLineAllowanceCharge extends opaque<BaseLineAllowanceCharge>()(
9
20
  Schema.Struct({
10
21
  ...PriceAllowanceCharge.fields /**
@@ -24,13 +35,24 @@ export class BaseLineAllowanceCharge extends opaque<BaseLineAllowanceCharge>()(
24
35
  })
25
36
  ) {}
26
37
 
38
+ /**
39
+ * @description An allowance applied to an Invoice line, marked by a `cbc:ChargeIndicator` of `false`. Adds an allowance reason code to the shared line allowance
40
+ * and charge fields.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * { amount: { value: 200, currencyId: 'EUR' }, chargeIndicator: false, allowanceChargeReasonCode: '95' }
45
+ * ```;
46
+ *
47
+ * @see {@link PeppolLineAllowanceCharge}
48
+ */
27
49
  export class PeppolLineAllowance extends opaque<PeppolLineAllowance>()(
28
50
  Schema.Struct({
29
51
  ...BaseLineAllowanceCharge.fields,
30
52
  /**
31
53
  * @name cbc:AllowanceChargeReasonCode
32
54
  */
33
- allowanceChargeReasonCode: Schema.optional(allowanceChargeReasonCodeSchema),
55
+ allowanceChargeReasonCode: Schema.optional(PeppolAllowanceChargeReasonCode),
34
56
  /**
35
57
  * @name cbc:ChargeIndicator
36
58
  *
@@ -42,13 +64,24 @@ export class PeppolLineAllowance extends opaque<PeppolLineAllowance>()(
42
64
  })
43
65
  ) {}
44
66
 
67
+ /**
68
+ * @description A charge applied to an Invoice line, marked by a `cbc:ChargeIndicator` of `true`. Adds a charge reason code to the shared line allowance and charge
69
+ * fields.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * { amount: { value: 25, currencyId: 'EUR' }, chargeIndicator: true, allowanceChargeReasonCode: 'AA' }
74
+ * ```;
75
+ *
76
+ * @see {@link PeppolLineAllowanceCharge}
77
+ */
45
78
  export class PeppolLineCharge extends opaque<PeppolLineCharge>()(
46
79
  Schema.Struct({
47
80
  ...BaseLineAllowanceCharge.fields,
48
81
  /**
49
82
  * @name cbc:AllowanceChargeReasonCode
50
83
  */
51
- allowanceChargeReasonCode: Schema.optional(chargeReasonCodeSchema),
84
+ allowanceChargeReasonCode: Schema.optional(PeppolChargeReasonCode),
52
85
  /**
53
86
  * @name cbc:ChargeIndicator
54
87
  *
@@ -60,9 +93,24 @@ export class PeppolLineCharge extends opaque<PeppolLineCharge>()(
60
93
  })
61
94
  ) {}
62
95
 
63
- export const peppolLineAllowanceChargeSchema = Schema.Union([PeppolLineAllowance, PeppolLineCharge]).annotate({
96
+ /**
97
+ * @description An allowance or charge applied to an Invoice line, selected by the `cbc:ChargeIndicator` value: `false` selects an allowance, `true` selects a
98
+ * charge.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * { amount: { value: 25, currencyId: 'EUR' }, chargeIndicator: true, allowanceChargeReasonCode: 'AA', allowanceChargeReason: 'Advertising' }
103
+ * ```;
104
+ *
105
+ * @see {@link PeppolLineAllowance}
106
+ */
107
+ export class PeppolLineAllowanceCharge extends Schema.Union([PeppolLineAllowance, PeppolLineCharge]).annotate({
64
108
  message: 'unable to decode line allowance charge',
65
- });
109
+ }) {}
66
110
 
67
- export type PeppolLineAllowanceCharge = typeof peppolLineAllowanceChargeSchema.Type;
68
- export type PeppolLineAllowanceChargeEncoded = typeof peppolLineAllowanceChargeSchema.Encoded;
111
+ /**
112
+ * @description Encoded form of {@link PeppolLineAllowanceCharge} produced by the Effect Schema codec.
113
+ *
114
+ * @see {@link PeppolLineAllowanceCharge}
115
+ */
116
+ export type PeppolLineAllowanceChargeEncoded = Schema.Codec.Encoded<typeof PeppolLineAllowanceCharge>;