@endevops/peppol-schema 0.1.2 → 0.1.4

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 (174) 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-CILtZytZ.d.ts} +1710 -669
  7. package/dist/index-CILtZytZ.d.ts.map +1 -0
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.js +1234 -187
  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 +453 -2
  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 +3 -2
  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/invoice-response-codes/invoice-response-code-needs-schema.ts +9 -0
  55. package/src/invoice-response-codes/invoice-response-code-not-needs-schema.ts +9 -0
  56. package/src/invoice-response-codes/invoice-response-codes-order.ts +10 -0
  57. package/src/peppol-validations/add-piva.ts +12 -0
  58. package/src/peppol-validations/check-cf.ts +11 -0
  59. package/src/peppol-validations/check-cf16.ts +12 -0
  60. package/src/peppol-validations/check-piva-se-it.ts +11 -0
  61. package/src/peppol-validations/check-piva.ts +11 -0
  62. package/src/peppol-validations/check-se-orgnr.ts +9 -0
  63. package/src/peppol-validations/greek-tin-verification.ts +9 -0
  64. package/src/peppol-validations/is-valid-abn.ts +9 -0
  65. package/src/peppol-validations/is-valid-gln.ts +10 -0
  66. package/src/peppol-validations/is-valid-iban.ts +10 -0
  67. package/src/peppol-validations/is-valid-mod11.ts +9 -0
  68. package/src/peppol-validations/is-valid-mod97-0208.ts +10 -0
  69. package/src/peppol-validations/luhn-check.ts +9 -0
  70. package/src/schemas/fields/default-customization-id.ts +9 -0
  71. package/src/schemas/fields/default-profile-id.ts +9 -0
  72. package/src/schemas/fields/peppol-additional-document-reference-schema.ts +41 -2
  73. package/src/schemas/fields/peppol-address-schema.ts +25 -2
  74. package/src/schemas/fields/peppol-allowance-charge-schema.ts +65 -9
  75. package/src/schemas/fields/peppol-amount-schema.ts +15 -2
  76. package/src/schemas/fields/peppol-base-line-schema.ts +12 -2
  77. package/src/schemas/fields/peppol-billing-reference-schema.ts +13 -0
  78. package/src/schemas/fields/peppol-binary-object-schema.ts +12 -4
  79. package/src/schemas/fields/peppol-contact-schema.ts +11 -0
  80. package/src/schemas/fields/peppol-credit-note-line-schema.ts +7 -2
  81. package/src/schemas/fields/peppol-delivery-schema.ts +44 -2
  82. package/src/schemas/fields/peppol-identifier-schema.ts +8 -0
  83. package/src/schemas/fields/peppol-invoice-line-period-schema.ts +11 -0
  84. package/src/schemas/fields/peppol-invoice-line-schema.ts +9 -2
  85. package/src/schemas/fields/peppol-invoice-period-schema.ts +2 -2
  86. package/src/schemas/fields/peppol-item-classification-schema.ts +2 -2
  87. package/src/schemas/fields/peppol-line-allowance-charge-schema.ts +57 -9
  88. package/src/schemas/fields/peppol-line-item-schema.ts +69 -4
  89. package/src/schemas/fields/peppol-line-price-allowance-charge-schema.ts +20 -0
  90. package/src/schemas/fields/peppol-line-price-schema.ts +2 -0
  91. package/src/schemas/fields/peppol-order-reference-schema.ts +2 -0
  92. package/src/schemas/fields/peppol-party-base-schema.ts +36 -4
  93. package/src/schemas/fields/peppol-party-legal-entity-schema.ts +13 -0
  94. package/src/schemas/fields/peppol-party-tax-scheme-schema.ts +5 -0
  95. package/src/schemas/fields/peppol-payee-party-schema.ts +2 -2
  96. package/src/schemas/fields/peppol-payment-means-schema.ts +62 -2
  97. package/src/schemas/fields/peppol-payment-terms-schema.ts +2 -0
  98. package/src/schemas/fields/peppol-quantity-schema.ts +4 -2
  99. package/src/schemas/fields/peppol-reference-schema.ts +20 -1
  100. package/src/schemas/fields/peppol-tax-category-schema.ts +12 -2
  101. package/src/schemas/fields/peppol-tax-representative-schema.ts +5 -0
  102. package/src/schemas/fields/peppol-tax-subtotal-category-schema.ts +3 -0
  103. package/src/schemas/fields/peppol-tax-subtotal-schema.ts +2 -0
  104. package/src/schemas/fields/peppol-tax-totals-base-schema.ts +5 -0
  105. package/src/schemas/peppol-billing-base-schema.ts +47 -7
  106. package/src/schemas/peppol-credit-note-schema.ts +2 -2
  107. package/src/schemas/peppol-document-response-document-reference-schema.ts +15 -2
  108. package/src/schemas/peppol-document-response-document-schema.ts +8 -3
  109. package/src/schemas/peppol-document-response-line-response-content-schema.ts +22 -2
  110. package/src/schemas/peppol-document-response-line-response-schema.ts +26 -0
  111. package/src/schemas/peppol-document-schema.ts +74 -9
  112. package/src/schemas/peppol-invoice-response-document-actual-response-schema.ts +58 -5
  113. package/src/schemas/peppol-invoice-response-document-actual-response-status-schema.ts +25 -2
  114. package/src/schemas/peppol-invoice-response-schema.ts +57 -4
  115. package/src/schemas/peppol-invoice-response-status-reason-code-schema.ts +37 -10
  116. package/src/schemas/peppol-invoice-schema.ts +30 -2
  117. package/src/schemas/peppol-message-level-response-document-response-schema.ts +10 -0
  118. package/src/schemas/peppol-message-level-response-party-schema.ts +10 -0
  119. package/src/schemas/peppol-message-level-response-schema.ts +18 -0
  120. package/src/schemas/utils/format-quantity-with-unit.ts +19 -0
  121. package/src/schemas/utils/get-credit-note-type-code-description.ts +12 -0
  122. package/src/schemas/utils/get-invoice-type-code-description.ts +12 -0
  123. package/src/schemas/utils/is-valid-credit-note-type-code.ts +13 -0
  124. package/src/schemas/utils/is-valid-invoice-type-code.ts +13 -0
  125. package/src/schemas/utils/is-valid-process.ts +13 -0
  126. package/src/schemas/utils/peppol-base-64-schema.ts +14 -4
  127. package/src/schemas/utils/peppol-vat-regex-schema.ts +38 -30
  128. package/src/schemas/utils/peppol-xsd-time-schema.ts +12 -2
  129. package/src/schemas/utils/quantity-unit-code-to-intl-unit.ts +34 -0
  130. package/src/schemas/values/additional-document-reference-code-schema.ts +9 -15
  131. package/src/schemas/values/allowance-charge-reason-code-schema.ts +12 -14
  132. package/src/schemas/values/application-response-type-code-schema.ts +10 -14
  133. package/src/schemas/values/charge-reason-code-schema.ts +12 -14
  134. package/src/schemas/values/credit-note-type-code-schema.ts +8 -14
  135. package/src/schemas/values/currency-code-schema.ts +13 -16
  136. package/src/schemas/values/document-type-schemes-schema.ts +9 -5
  137. package/src/schemas/values/document-type-values-schema.ts +5 -6
  138. package/src/schemas/values/duty-tax-fee-category-schema.ts +15 -13
  139. package/src/schemas/values/electronic-codes-schema.ts +10 -12
  140. package/src/schemas/values/icd-codes-schema.ts +8 -12
  141. package/src/schemas/values/invoice-status-code-schema.ts +10 -12
  142. package/src/schemas/values/invoice-type-code-schema.ts +10 -12
  143. package/src/schemas/values/item-classification-codes-schema.ts +10 -12
  144. package/src/schemas/values/mime-codes-schema.ts +12 -14
  145. package/src/schemas/values/op-status-action-schema.ts +10 -12
  146. package/src/schemas/values/op-status-reason-schema.ts +10 -12
  147. package/src/schemas/values/participant-identifier-code-schema.ts +10 -13
  148. package/src/schemas/values/payment-means-code-schema.ts +10 -12
  149. package/src/schemas/values/peppol-country-code-schema.ts +10 -9
  150. package/src/schemas/values/peppol-document-type-code-schema.ts +10 -12
  151. package/src/schemas/values/peppol-document-type-schema.ts +12 -21
  152. package/src/schemas/values/peppol-process-schema.ts +19 -15
  153. package/src/schemas/values/process-from-document-type-schema.ts +3 -3
  154. package/src/schemas/values/quantity-unit-codes-schema.ts +10 -12
  155. package/src/schemas/values/vat-date-code-schema.ts +12 -5
  156. package/src/schemas/values/vatex-code-schema.ts +8 -12
  157. package/src/schematron/errors.ts +14 -0
  158. package/src/schematron/helpers.ts +451 -0
  159. package/src/schematron/run-all-rules.ts +10 -0
  160. package/src/schematron/schematron.ts +25 -0
  161. package/src/xml/builder-options.ts +9 -0
  162. package/src/xml/common-xml-options.ts +9 -0
  163. package/src/xml/nodable-parser.ts +12 -0
  164. package/src/xml/parser-options.ts +9 -0
  165. package/dist/index-BBzPjq7o.d.ts.map +0 -1
  166. package/dist/invoice-response-code-not-needs-schema-p_RKKNLc.js +0 -18
  167. package/dist/invoice-response-code-not-needs-schema-p_RKKNLc.js.map +0 -1
  168. package/dist/is-valid-abn-160i38PG.js.map +0 -1
  169. package/dist/is-valid-mod97-0208-CzMOXMO-.js.map +0 -1
  170. package/dist/message-level-response-profile-id-DBpOW91B.js +0 -9
  171. package/dist/message-level-response-profile-id-DBpOW91B.js.map +0 -1
  172. package/dist/nodable-parser-CyDZtLCK.js.map +0 -1
  173. package/dist/vat-dates.generated-CxFvt7m3.d.ts +0 -68
  174. package/dist/vat-dates.generated-CxFvt7m3.d.ts.map +0 -1
@@ -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({
64
- message: 'unable to decode line allowance charge',
65
- });
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 opaque<PeppolLineAllowanceCharge>()(
108
+ Schema.Union([PeppolLineAllowance, PeppolLineCharge]).annotate({ message: 'unable to decode line allowance charge' })
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>;
@@ -4,9 +4,19 @@ import { PeppolIdentifier } from '#/schemas/fields/peppol-identifier-schema.ts';
4
4
  import { PeppolItemClassification } from '#/schemas/fields/peppol-item-classification-schema.ts';
5
5
  import { PeppolTaxCategory } from '#/schemas/fields/peppol-tax-category-schema.ts';
6
6
  import { opaque } from '#/schemas/utils/opaque.ts';
7
- import { icdCodesSchema } from '#/schemas/values/icd-codes-schema.ts';
8
- import { peppolCountryCodeSchema } from '#/schemas/values/peppol-country-code-schema.ts';
7
+ import { PeppolIcdCode } from '#/schemas/values/icd-codes-schema.ts';
8
+ import { PeppolCountryCodeValue } from '#/schemas/values/peppol-country-code-schema.ts';
9
9
 
10
+ /**
11
+ * @description An additional property of the item, expressed as an attribute name and value pair.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * { name: 'Colour', value: 'Blue' }
16
+ * ```;
17
+ *
18
+ * @see {@link PeppolLineItem}
19
+ */
10
20
  export class PeppolAdditionalItemProperties extends opaque<PeppolAdditionalItemProperties>()(
11
21
  Schema.Struct({
12
22
  /**
@@ -28,6 +38,16 @@ export class PeppolAdditionalItemProperties extends opaque<PeppolAdditionalItemP
28
38
  })
29
39
  ) {}
30
40
 
41
+ /**
42
+ * @description A code classifying the item by its type or nature, identified by a scheme such as CPV.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * { itemClassification: { id: '09348023', listId: 'STI' } }
47
+ * ```;
48
+ *
49
+ * @see {@link PeppolItemClassification}
50
+ */
31
51
  export class PeppolCommodityClassifications extends opaque<PeppolCommodityClassifications>()(
32
52
  Schema.Struct({
33
53
  /**
@@ -44,6 +64,16 @@ export class PeppolCommodityClassifications extends opaque<PeppolCommodityClassi
44
64
  })
45
65
  ) {}
46
66
 
67
+ /**
68
+ * @description The country from which the item originates, identified by an ISO 3166-1 country code.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * { identificationCode: 'NO' }
73
+ * ```;
74
+ *
75
+ * @see {@link PeppolLineItem}
76
+ */
47
77
  export class PeppolOriginCountryCode extends opaque<PeppolOriginCountryCode>()(
48
78
  Schema.Struct({
49
79
  /**
@@ -53,10 +83,20 @@ export class PeppolOriginCountryCode extends opaque<PeppolOriginCountryCode>()(
53
83
  *
54
84
  * @name `cbc:IdentificationCode`
55
85
  */
56
- identificationCode: peppolCountryCodeSchema,
86
+ identificationCode: PeppolCountryCodeValue,
57
87
  })
58
88
  ) {}
59
89
 
90
+ /**
91
+ * @description An item identifier based on a registered scheme, such as a GTIN or EAN.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * { id: { id: '21382183120983', schemeId: '0088' } }
96
+ * ```;
97
+ *
98
+ * @see {@link PeppolIdentifier}
99
+ */
60
100
  export class PeppolStandardItemIdentification extends opaque<PeppolStandardItemIdentification>()(
61
101
  Schema.Struct({
62
102
  /**
@@ -83,12 +123,22 @@ export class PeppolStandardItemIdentification extends opaque<PeppolStandardItemI
83
123
  *
84
124
  * @name `@schemeID`
85
125
  */
86
- schemeId: icdCodesSchema,
126
+ schemeId: PeppolIcdCode,
87
127
  })
88
128
  ),
89
129
  })
90
130
  ) {}
91
131
 
132
+ /**
133
+ * @description An identifier assigned by the Seller for the item.
134
+ *
135
+ * @example
136
+ * ```ts
137
+ * { id: '987323' }
138
+ * ```;
139
+ *
140
+ * @see {@link PeppolLineItem}
141
+ */
92
142
  export class PeppolSellersItemIdentification extends opaque<PeppolSellersItemIdentification>()(
93
143
  Schema.Struct({
94
144
  /**
@@ -105,6 +155,16 @@ export class PeppolSellersItemIdentification extends opaque<PeppolSellersItemIde
105
155
  })
106
156
  ) {}
107
157
 
158
+ /**
159
+ * @description An identifier assigned by the Buyer for the item.
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * { id: '12345' }
164
+ * ```;
165
+ *
166
+ * @see {@link PeppolLineItem}
167
+ */
108
168
  export class PeppolBuyersItemIdentification extends opaque<PeppolBuyersItemIdentification>()(
109
169
  Schema.Struct({
110
170
  /**
@@ -122,6 +182,8 @@ export class PeppolBuyersItemIdentification extends opaque<PeppolBuyersItemIdent
122
182
  ) {}
123
183
 
124
184
  /**
185
+ * @description The item details for an invoice or credit note line, including its name, identifiers, classification, and line VAT category.
186
+ *
125
187
  * @summary Item details on invoice/credit-note line
126
188
  *
127
189
  * @name cac:Item
@@ -193,4 +255,7 @@ export class PeppolLineItem extends opaque<PeppolLineItem>()(
193
255
  })
194
256
  ) {}
195
257
 
258
+ /**
259
+ * @description Alias for {@link PeppolLineItem}.
260
+ */
196
261
  export type PeppolItem = PeppolLineItem;
@@ -3,6 +3,16 @@ import { Schema } from 'effect';
3
3
  import { PeppolAmount } from '#/schemas/fields/peppol-amount-schema.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
5
 
6
+ /**
7
+ * @description A price level allowance or charge applied to the item price, expressed as an amount and a charge indicator.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * { amount: { value: 200, currencyId: 'EUR' }, chargeIndicator: false }
12
+ * ```;
13
+ *
14
+ * @see {@link PeppolLinePriceAllowanceCharge}
15
+ */
6
16
  class PriceAllowanceCharge extends opaque<PriceAllowanceCharge>()(
7
17
  Schema.Struct({
8
18
  /**
@@ -28,6 +38,16 @@ class PriceAllowanceCharge extends opaque<PriceAllowanceCharge>()(
28
38
  })
29
39
  ) {}
30
40
 
41
+ /**
42
+ * @description A price level allowance on the item price. Only allowances are allowed at price level, so the charge indicator is fixed to false.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * { amount: { value: 200, currencyId: 'EUR' }, chargeIndicator: false }
47
+ * ```;
48
+ *
49
+ * @see {@link PeppolLinePrice}
50
+ */
31
51
  export class PeppolLinePriceAllowanceCharge extends opaque<PeppolLinePriceAllowanceCharge>()(
32
52
  PriceAllowanceCharge.pipe(
33
53
  Schema.fieldsAssign({
@@ -6,6 +6,8 @@ import { PeppolQuantity } from '#/schemas/fields/peppol-quantity-schema.ts';
6
6
  import { opaque } from '#/schemas/utils/opaque.ts';
7
7
 
8
8
  /**
9
+ * @description The price details of an invoice or credit note line, including the price amount and any price level allowance.
10
+ *
9
11
  * @summary Price details on invoice line
10
12
  *
11
13
  * @name cac:Price
@@ -3,6 +3,8 @@ import { Schema } from 'effect';
3
3
  import { opaque } from '#/schemas/utils/opaque.ts';
4
4
 
5
5
  /**
6
+ * @description A reference to the purchase order or sales order that the invoice relates to.
7
+ *
6
8
  * @summary ORDER AND SALES ORDER REFERENCE
7
9
  *
8
10
  * @name cac:OrderReference
@@ -6,9 +6,19 @@ import { PeppolIdentifier } from '#/schemas/fields/peppol-identifier-schema.ts';
6
6
  import { PeppolPartyLegalEntity } from '#/schemas/fields/peppol-party-legal-entity-schema.ts';
7
7
  import { PeppolPartyTaxScheme } from '#/schemas/fields/peppol-party-tax-scheme-schema.ts';
8
8
  import { opaque } from '#/schemas/utils/opaque.ts';
9
- import { electronicCodesSchema } from '#/schemas/values/electronic-codes-schema.ts';
10
- import { icdCodesSchema } from '#/schemas/values/icd-codes-schema.ts';
9
+ import { PeppolElectronicAddressCode } from '#/schemas/values/electronic-codes-schema.ts';
10
+ import { PeppolIcdCode } from '#/schemas/values/icd-codes-schema.ts';
11
11
 
12
+ /**
13
+ * @description A name by which the Buyer or Seller is known, other than its registered name.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * { name: 'SupplierTradingName Ltd.' }
18
+ * ```;
19
+ *
20
+ * @see {@link PeppolPartySchema}
21
+ */
12
22
  export class PeppolPartyName extends opaque<PeppolPartyName>()(
13
23
  Schema.Struct({
14
24
  /**
@@ -23,6 +33,16 @@ export class PeppolPartyName extends opaque<PeppolPartyName>()(
23
33
  })
24
34
  ) {}
25
35
 
36
+ /**
37
+ * @description An identifier of the Buyer or Seller, with an optional identification scheme.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * { id: { id: '99887766', schemeId: '0088' } }
42
+ * ```;
43
+ *
44
+ * @see {@link PeppolPartySchema}
45
+ */
26
46
  export class PeppolPartyIdentification extends opaque<PeppolPartyIdentification>()(
27
47
  Schema.Struct({
28
48
  /**
@@ -52,12 +72,22 @@ export class PeppolPartyIdentification extends opaque<PeppolPartyIdentification>
52
72
  *
53
73
  * @name `@schemeID`
54
74
  */
55
- schemeId: Schema.optional(icdCodesSchema),
75
+ schemeId: Schema.optional(PeppolIcdCode),
56
76
  })
57
77
  ),
58
78
  })
59
79
  ) {}
60
80
 
81
+ /**
82
+ * @description The Buyer or Seller electronic address to which the application level response to the invoice may be delivered.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * { id: '9482348239847239874', schemeId: '0088' }
87
+ * ```;
88
+ *
89
+ * @see {@link PeppolPartySchema}
90
+ */
61
91
  export class PeppolPartyEndpointId extends opaque<PeppolPartyEndpointId>()(
62
92
  PeppolIdentifier.pipe(
63
93
  Schema.fieldsAssign({
@@ -79,12 +109,14 @@ export class PeppolPartyEndpointId extends opaque<PeppolPartyEndpointId>()(
79
109
  *
80
110
  * @name `@schemeID`
81
111
  */
82
- schemeId: electronicCodesSchema,
112
+ schemeId: PeppolElectronicAddressCode,
83
113
  })
84
114
  )
85
115
  ) {}
86
116
 
87
117
  /**
118
+ * @description The common party substructure shared by the supplier, customer, and other party roles.
119
+ *
88
120
  * @summary Party common substructure
89
121
  *
90
122
  * @name cac:Party
@@ -3,6 +3,16 @@ import { Schema } from 'effect';
3
3
  import { PeppolIdentifier } from '#/schemas/fields/peppol-identifier-schema.ts';
4
4
  import { opaque } from '#/schemas/utils/opaque.ts';
5
5
 
6
+ /**
7
+ * @description The legal entity details of a party, including the registered name and optional company identifiers.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * { registrationName: 'SupplierOfficialName Ltd', companyId: { id: 'GB983294' } }
12
+ * ```;
13
+ *
14
+ * @see {@link PeppolPartySchema}
15
+ */
6
16
  export class PeppolPartyLegalEntity extends opaque<PeppolPartyLegalEntity>()(
7
17
  Schema.Struct({
8
18
  /**
@@ -29,4 +39,7 @@ export class PeppolPartyLegalEntity extends opaque<PeppolPartyLegalEntity>()(
29
39
  })
30
40
  ) {}
31
41
 
42
+ /**
43
+ * @description Alias for {@link PeppolPartyLegalEntity}.
44
+ */
32
45
  export type PeppolPartyLegalEntitySchema = PeppolPartyLegalEntity;