@uncefact/untp-utils 0.2.0 → 0.3.0

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 (238) hide show
  1. package/README.md +40 -12
  2. package/artefacts/context/untp/0.6.0/dcc.json +1241 -0
  3. package/artefacts/context/untp/0.6.0/dfr.json +619 -0
  4. package/artefacts/context/untp/0.6.0/dia.json +162 -0
  5. package/artefacts/context/untp/0.6.0/dpp.json +1078 -0
  6. package/artefacts/context/untp/0.6.0/dte.json +1285 -0
  7. package/artefacts/context/untp/0.6.1/dcc.json +1388 -0
  8. package/artefacts/context/untp/0.6.1/dfr.json +690 -0
  9. package/artefacts/context/untp/0.6.1/dia.json +196 -0
  10. package/artefacts/context/untp/0.6.1/dpp.json +1164 -0
  11. package/artefacts/context/untp/0.6.1/dte.json +1340 -0
  12. package/artefacts/context/untp/0.7.0/untp.json +3493 -0
  13. package/artefacts/context/vcdm/2/credentials.json +301 -0
  14. package/artefacts/manifest.json +214 -0
  15. package/artefacts/schema/untp/0.6.0/dcc.json +1131 -0
  16. package/artefacts/schema/untp/0.6.0/dfr.json +1028 -0
  17. package/artefacts/schema/untp/0.6.0/dia.json +236 -0
  18. package/artefacts/schema/untp/0.6.0/dpp.json +1219 -0
  19. package/artefacts/schema/untp/0.6.0/dte.json +845 -0
  20. package/artefacts/schema/untp/0.6.1/dcc.json +1196 -0
  21. package/artefacts/schema/untp/0.6.1/dfr.json +1037 -0
  22. package/artefacts/schema/untp/0.6.1/dia.json +236 -0
  23. package/artefacts/schema/untp/0.6.1/dpp.json +1229 -0
  24. package/artefacts/schema/untp/0.6.1/dte.json +845 -0
  25. package/artefacts/schema/untp/0.7.0/cvc.json +701 -0
  26. package/artefacts/schema/untp/0.7.0/dcc.json +1133 -0
  27. package/artefacts/schema/untp/0.7.0/dfr.json +1245 -0
  28. package/artefacts/schema/untp/0.7.0/dia.json +443 -0
  29. package/artefacts/schema/untp/0.7.0/dpp.json +1300 -0
  30. package/artefacts/schema/untp/0.7.0/dte.json +1226 -0
  31. package/artefacts/schema/untp/0.7.0/linkset.json +119 -0
  32. package/artefacts/schema/vcdm/2/verifiable-credential.json +318 -0
  33. package/build/artefacts/urls.d.ts +6 -0
  34. package/build/artefacts/urls.js +8 -0
  35. package/build/artefacts/urls.js.map +1 -1
  36. package/build/artefacts/urls.test.js +9 -1
  37. package/build/artefacts/urls.test.js.map +1 -1
  38. package/build/bundle/artefacts/context/untp/0.6.0/dcc.d.ts +2 -0
  39. package/build/bundle/artefacts/context/untp/0.6.0/dcc.js +1244 -0
  40. package/build/bundle/artefacts/context/untp/0.6.0/dcc.js.map +1 -0
  41. package/build/bundle/artefacts/context/untp/0.6.0/dfr.d.ts +2 -0
  42. package/build/bundle/artefacts/context/untp/0.6.0/dfr.js +622 -0
  43. package/build/bundle/artefacts/context/untp/0.6.0/dfr.js.map +1 -0
  44. package/build/bundle/artefacts/context/untp/0.6.0/dia.d.ts +2 -0
  45. package/build/bundle/artefacts/context/untp/0.6.0/dia.js +165 -0
  46. package/build/bundle/artefacts/context/untp/0.6.0/dia.js.map +1 -0
  47. package/build/bundle/artefacts/context/untp/0.6.0/dpp.d.ts +2 -0
  48. package/build/bundle/artefacts/context/untp/0.6.0/dpp.js +1081 -0
  49. package/build/bundle/artefacts/context/untp/0.6.0/dpp.js.map +1 -0
  50. package/build/bundle/artefacts/context/untp/0.6.0/dte.d.ts +2 -0
  51. package/build/bundle/artefacts/context/untp/0.6.0/dte.js +1288 -0
  52. package/build/bundle/artefacts/context/untp/0.6.0/dte.js.map +1 -0
  53. package/build/bundle/artefacts/context/untp/0.6.1/dcc.d.ts +2 -0
  54. package/build/bundle/artefacts/context/untp/0.6.1/dcc.js +1391 -0
  55. package/build/bundle/artefacts/context/untp/0.6.1/dcc.js.map +1 -0
  56. package/build/bundle/artefacts/context/untp/0.6.1/dfr.d.ts +2 -0
  57. package/build/bundle/artefacts/context/untp/0.6.1/dfr.js +693 -0
  58. package/build/bundle/artefacts/context/untp/0.6.1/dfr.js.map +1 -0
  59. package/build/bundle/artefacts/context/untp/0.6.1/dia.d.ts +2 -0
  60. package/build/bundle/artefacts/context/untp/0.6.1/dia.js +199 -0
  61. package/build/bundle/artefacts/context/untp/0.6.1/dia.js.map +1 -0
  62. package/build/bundle/artefacts/context/untp/0.6.1/dpp.d.ts +2 -0
  63. package/build/bundle/artefacts/context/untp/0.6.1/dpp.js +1167 -0
  64. package/build/bundle/artefacts/context/untp/0.6.1/dpp.js.map +1 -0
  65. package/build/bundle/artefacts/context/untp/0.6.1/dte.d.ts +2 -0
  66. package/build/bundle/artefacts/context/untp/0.6.1/dte.js +1343 -0
  67. package/build/bundle/artefacts/context/untp/0.6.1/dte.js.map +1 -0
  68. package/build/bundle/artefacts/context/untp/0.7.0/untp.d.ts +2 -0
  69. package/build/bundle/artefacts/context/untp/0.7.0/untp.js +3496 -0
  70. package/build/bundle/artefacts/context/untp/0.7.0/untp.js.map +1 -0
  71. package/build/bundle/artefacts/context/vcdm/2/credentials.d.ts +2 -0
  72. package/build/bundle/artefacts/context/vcdm/2/credentials.js +304 -0
  73. package/build/bundle/artefacts/context/vcdm/2/credentials.js.map +1 -0
  74. package/build/bundle/artefacts/schema/untp/0.6.0/dcc.d.ts +2 -0
  75. package/build/bundle/artefacts/schema/untp/0.6.0/dcc.js +1134 -0
  76. package/build/bundle/artefacts/schema/untp/0.6.0/dcc.js.map +1 -0
  77. package/build/bundle/artefacts/schema/untp/0.6.0/dfr.d.ts +2 -0
  78. package/build/bundle/artefacts/schema/untp/0.6.0/dfr.js +1031 -0
  79. package/build/bundle/artefacts/schema/untp/0.6.0/dfr.js.map +1 -0
  80. package/build/bundle/artefacts/schema/untp/0.6.0/dia.d.ts +2 -0
  81. package/build/bundle/artefacts/schema/untp/0.6.0/dia.js +239 -0
  82. package/build/bundle/artefacts/schema/untp/0.6.0/dia.js.map +1 -0
  83. package/build/bundle/artefacts/schema/untp/0.6.0/dpp.d.ts +2 -0
  84. package/build/bundle/artefacts/schema/untp/0.6.0/dpp.js +1222 -0
  85. package/build/bundle/artefacts/schema/untp/0.6.0/dpp.js.map +1 -0
  86. package/build/bundle/artefacts/schema/untp/0.6.0/dte.d.ts +2 -0
  87. package/build/bundle/artefacts/schema/untp/0.6.0/dte.js +848 -0
  88. package/build/bundle/artefacts/schema/untp/0.6.0/dte.js.map +1 -0
  89. package/build/bundle/artefacts/schema/untp/0.6.1/dcc.d.ts +2 -0
  90. package/build/bundle/artefacts/schema/untp/0.6.1/dcc.js +1199 -0
  91. package/build/bundle/artefacts/schema/untp/0.6.1/dcc.js.map +1 -0
  92. package/build/bundle/artefacts/schema/untp/0.6.1/dfr.d.ts +2 -0
  93. package/build/bundle/artefacts/schema/untp/0.6.1/dfr.js +1040 -0
  94. package/build/bundle/artefacts/schema/untp/0.6.1/dfr.js.map +1 -0
  95. package/build/bundle/artefacts/schema/untp/0.6.1/dia.d.ts +2 -0
  96. package/build/bundle/artefacts/schema/untp/0.6.1/dia.js +239 -0
  97. package/build/bundle/artefacts/schema/untp/0.6.1/dia.js.map +1 -0
  98. package/build/bundle/artefacts/schema/untp/0.6.1/dpp.d.ts +2 -0
  99. package/build/bundle/artefacts/schema/untp/0.6.1/dpp.js +1232 -0
  100. package/build/bundle/artefacts/schema/untp/0.6.1/dpp.js.map +1 -0
  101. package/build/bundle/artefacts/schema/untp/0.6.1/dte.d.ts +2 -0
  102. package/build/bundle/artefacts/schema/untp/0.6.1/dte.js +848 -0
  103. package/build/bundle/artefacts/schema/untp/0.6.1/dte.js.map +1 -0
  104. package/build/bundle/artefacts/schema/untp/0.7.0/cvc.d.ts +2 -0
  105. package/build/bundle/artefacts/schema/untp/0.7.0/cvc.js +704 -0
  106. package/build/bundle/artefacts/schema/untp/0.7.0/cvc.js.map +1 -0
  107. package/build/bundle/artefacts/schema/untp/0.7.0/dcc.d.ts +2 -0
  108. package/build/bundle/artefacts/schema/untp/0.7.0/dcc.js +1136 -0
  109. package/build/bundle/artefacts/schema/untp/0.7.0/dcc.js.map +1 -0
  110. package/build/bundle/artefacts/schema/untp/0.7.0/dfr.d.ts +2 -0
  111. package/build/bundle/artefacts/schema/untp/0.7.0/dfr.js +1248 -0
  112. package/build/bundle/artefacts/schema/untp/0.7.0/dfr.js.map +1 -0
  113. package/build/bundle/artefacts/schema/untp/0.7.0/dia.d.ts +2 -0
  114. package/build/bundle/artefacts/schema/untp/0.7.0/dia.js +446 -0
  115. package/build/bundle/artefacts/schema/untp/0.7.0/dia.js.map +1 -0
  116. package/build/bundle/artefacts/schema/untp/0.7.0/dpp.d.ts +2 -0
  117. package/build/bundle/artefacts/schema/untp/0.7.0/dpp.js +1303 -0
  118. package/build/bundle/artefacts/schema/untp/0.7.0/dpp.js.map +1 -0
  119. package/build/bundle/artefacts/schema/untp/0.7.0/dte.d.ts +2 -0
  120. package/build/bundle/artefacts/schema/untp/0.7.0/dte.js +1229 -0
  121. package/build/bundle/artefacts/schema/untp/0.7.0/dte.js.map +1 -0
  122. package/build/bundle/artefacts/schema/untp/0.7.0/linkset.d.ts +2 -0
  123. package/build/bundle/artefacts/schema/untp/0.7.0/linkset.js +122 -0
  124. package/build/bundle/artefacts/schema/untp/0.7.0/linkset.js.map +1 -0
  125. package/build/bundle/artefacts/schema/vcdm/2/verifiable-credential.d.ts +2 -0
  126. package/build/bundle/artefacts/schema/vcdm/2/verifiable-credential.js +321 -0
  127. package/build/bundle/artefacts/schema/vcdm/2/verifiable-credential.js.map +1 -0
  128. package/build/bundle/fallback.d.ts +41 -0
  129. package/build/bundle/fallback.js +62 -0
  130. package/build/bundle/fallback.js.map +1 -0
  131. package/build/bundle/fallback.test.d.ts +1 -0
  132. package/build/bundle/fallback.test.js +124 -0
  133. package/build/bundle/fallback.test.js.map +1 -0
  134. package/build/bundle/index.d.ts +4 -0
  135. package/build/bundle/index.js +77 -0
  136. package/build/bundle/index.js.map +1 -0
  137. package/build/bundle/lookup.d.ts +14 -0
  138. package/build/bundle/lookup.js +40 -0
  139. package/build/bundle/lookup.js.map +1 -0
  140. package/build/bundle/lookup.test.d.ts +1 -0
  141. package/build/bundle/lookup.test.js +70 -0
  142. package/build/bundle/lookup.test.js.map +1 -0
  143. package/build/bundle/public.d.ts +25 -0
  144. package/build/bundle/public.js +56 -0
  145. package/build/bundle/public.js.map +1 -0
  146. package/build/bundle/public.test.d.ts +1 -0
  147. package/build/bundle/public.test.js +35 -0
  148. package/build/bundle/public.test.js.map +1 -0
  149. package/build/bundle/refresh-classify.test.d.ts +1 -0
  150. package/build/bundle/refresh-classify.test.js +20 -0
  151. package/build/bundle/refresh-classify.test.js.map +1 -0
  152. package/build/bundle/refresh-main.test.d.ts +1 -0
  153. package/build/bundle/refresh-main.test.js +98 -0
  154. package/build/bundle/refresh-main.test.js.map +1 -0
  155. package/build/common/as-date-time.d.ts +13 -0
  156. package/build/common/as-date-time.js +44 -0
  157. package/build/common/as-date-time.js.map +1 -0
  158. package/build/common/as-date-time.test.d.ts +1 -0
  159. package/build/common/as-date-time.test.js +42 -0
  160. package/build/common/as-date-time.test.js.map +1 -0
  161. package/build/common/as-non-empty-string.d.ts +11 -4
  162. package/build/common/as-non-empty-string.js +15 -5
  163. package/build/common/as-non-empty-string.js.map +1 -1
  164. package/build/common/as-non-empty-string.test.js +7 -2
  165. package/build/common/as-non-empty-string.test.js.map +1 -1
  166. package/build/common/index.d.ts +4 -0
  167. package/build/common/index.js +5 -0
  168. package/build/common/index.js.map +1 -0
  169. package/build/common/validity-window.d.ts +45 -0
  170. package/build/common/validity-window.js +68 -0
  171. package/build/common/validity-window.js.map +1 -0
  172. package/build/common/validity-window.test.d.ts +1 -0
  173. package/build/common/validity-window.test.js +67 -0
  174. package/build/common/validity-window.test.js.map +1 -0
  175. package/build/loaders/index.d.ts +2 -0
  176. package/build/loaders/index.js +1 -0
  177. package/build/loaders/index.js.map +1 -1
  178. package/build/loaders/jsonld-document-loader.d.ts +7 -5
  179. package/build/loaders/jsonld-document-loader.js +11 -2
  180. package/build/loaders/jsonld-document-loader.js.map +1 -1
  181. package/build/loaders/jsonld-document-loader.test.js +41 -1
  182. package/build/loaders/jsonld-document-loader.test.js.map +1 -1
  183. package/build/loaders/schema-loader.d.ts +13 -3
  184. package/build/loaders/schema-loader.js +24 -8
  185. package/build/loaders/schema-loader.js.map +1 -1
  186. package/build/loaders/schema-loader.test.js +56 -1
  187. package/build/loaders/schema-loader.test.js.map +1 -1
  188. package/build/node/errors.d.ts +9 -3
  189. package/build/node/errors.js +9 -3
  190. package/build/node/errors.js.map +1 -1
  191. package/build/node/index.d.ts +1 -1
  192. package/build/node/index.js +1 -1
  193. package/build/node/index.js.map +1 -1
  194. package/build/node/is-private-ip.d.ts +8 -4
  195. package/build/node/is-private-ip.fail-closed.test.d.ts +1 -0
  196. package/build/node/is-private-ip.fail-closed.test.js +36 -0
  197. package/build/node/is-private-ip.fail-closed.test.js.map +1 -0
  198. package/build/node/is-private-ip.js +77 -12
  199. package/build/node/is-private-ip.js.map +1 -1
  200. package/build/node/is-private-ip.test.js +28 -0
  201. package/build/node/is-private-ip.test.js.map +1 -1
  202. package/build/node/validate-public-url.d.ts +43 -11
  203. package/build/node/validate-public-url.js +68 -34
  204. package/build/node/validate-public-url.js.map +1 -1
  205. package/build/node/validate-public-url.test.js +161 -14
  206. package/build/node/validate-public-url.test.js.map +1 -1
  207. package/build/resolvers/errors.d.ts +36 -6
  208. package/build/resolvers/errors.js +41 -7
  209. package/build/resolvers/errors.js.map +1 -1
  210. package/build/resolvers/resolve-document-if-changed.test.js +7 -0
  211. package/build/resolvers/resolve-document-if-changed.test.js.map +1 -1
  212. package/build/resolvers/resolve-document.d.ts +29 -9
  213. package/build/resolvers/resolve-document.integration.test.d.ts +1 -0
  214. package/build/resolvers/resolve-document.integration.test.js +108 -0
  215. package/build/resolvers/resolve-document.integration.test.js.map +1 -0
  216. package/build/resolvers/resolve-document.js +129 -49
  217. package/build/resolvers/resolve-document.js.map +1 -1
  218. package/build/resolvers/resolve-document.test.js +462 -12
  219. package/build/resolvers/resolve-document.test.js.map +1 -1
  220. package/build/resolvers/resolve-json-document.d.ts +11 -8
  221. package/build/resolvers/resolve-json-document.js +7 -6
  222. package/build/resolvers/resolve-json-document.js.map +1 -1
  223. package/build/resolvers/resolve-json-document.test.js +21 -4
  224. package/build/resolvers/resolve-json-document.test.js.map +1 -1
  225. package/build/validation/describe-jsonld-failure.d.ts +48 -8
  226. package/build/validation/describe-jsonld-failure.js +94 -27
  227. package/build/validation/describe-jsonld-failure.js.map +1 -1
  228. package/build/validation/describe-jsonld-failure.test.js +98 -13
  229. package/build/validation/describe-jsonld-failure.test.js.map +1 -1
  230. package/build/validation/index.d.ts +3 -2
  231. package/build/validation/index.js +2 -2
  232. package/build/validation/index.js.map +1 -1
  233. package/build/validation/validate-jsonld.d.ts +29 -3
  234. package/build/validation/validate-jsonld.js +49 -22
  235. package/build/validation/validate-jsonld.js.map +1 -1
  236. package/build/validation/validate-jsonld.test.js +62 -5
  237. package/build/validation/validate-jsonld.test.js.map +1 -1
  238. package/package.json +23 -3
@@ -0,0 +1,1219 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": true,
5
+ "properties": {
6
+ "type": {
7
+ "type": "array",
8
+ "readOnly": true,
9
+ "default": ["DigitalProductPassport", "VerifiableCredential"],
10
+ "items": {
11
+ "type": "string"
12
+ },
13
+ "allOf": [
14
+ {
15
+ "contains": {
16
+ "const": "DigitalProductPassport",
17
+ "minContains": 1
18
+ }
19
+ },
20
+ {
21
+ "contains": {
22
+ "const": "VerifiableCredential",
23
+ "minContains": 1
24
+ }
25
+ }
26
+ ]
27
+ },
28
+ "@context": {
29
+ "example": ["https://www.w3.org/ns/credentials/v2", "https://test.uncefact.org/vocabulary/untp/dpp/0.6.0/"],
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string"
33
+ },
34
+ "description": "A list of JSON-LD context URIs that define the semantic meaning of properties within the credential. ",
35
+ "readOnly": true,
36
+ "prefixItems": [
37
+ {
38
+ "const": "https://www.w3.org/ns/credentials/v2",
39
+ "type": "string"
40
+ },
41
+ {
42
+ "const": "https://test.uncefact.org/vocabulary/untp/dpp/0.6.0/",
43
+ "type": "string"
44
+ }
45
+ ],
46
+ "default": ["https://www.w3.org/ns/credentials/v2", "https://test.uncefact.org/vocabulary/untp/dpp/0.6.0/"],
47
+ "minItems": 2,
48
+ "uniqueItems": true
49
+ },
50
+ "id": {
51
+ "example": "https://example-company.com/credentials/2a423366-a0d6-4855-ba65-2e0c926d09b0",
52
+ "type": "string",
53
+ "format": "uri",
54
+ "description": "A unique identifier (URI) assigned to the product passport. May be a UUID"
55
+ },
56
+ "issuer": {
57
+ "$ref": "#/$defs/CredentialIssuer",
58
+ "description": "The organisation that is the issuer of this VC. Note that the \"id\" property MUST be a W3C DID. Other identifiers such as tax registration numbers can be listed in the \"otherIdentifiers\" property."
59
+ },
60
+ "validFrom": {
61
+ "pattern": "^-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$",
62
+ "example": "2024-03-15T12:00:00Z",
63
+ "type": "string",
64
+ "format": "date-time",
65
+ "description": "The date and time from which the credential is valid."
66
+ },
67
+ "validUntil": {
68
+ "pattern": "^-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$",
69
+ "example": "2034-03-15T12:00:00Z",
70
+ "type": "string",
71
+ "format": "date-time",
72
+ "description": "The expiry date (if applicable) of this verifiable credential."
73
+ },
74
+ "credentialSubject": {
75
+ "$ref": "#/$defs/ProductPassport",
76
+ "description": "The subject of a digital product passport credential is the identified product."
77
+ }
78
+ },
79
+ "description": "The Product Passport is a comprehensive data structure that encapsulates various details pertaining to a product, including its identification details, who issued it, batch information, provenance information, circularity information and a set of verifiable product conformity & sustainability claims. ",
80
+ "required": ["@context", "id", "issuer"],
81
+ "$defs": {
82
+ "CredentialIssuer": {
83
+ "type": "object",
84
+ "additionalProperties": false,
85
+ "properties": {
86
+ "type": {
87
+ "type": "array",
88
+ "readOnly": true,
89
+ "default": ["CredentialIssuer"],
90
+ "items": {
91
+ "type": "string"
92
+ },
93
+ "allOf": [
94
+ {
95
+ "contains": {
96
+ "const": "CredentialIssuer",
97
+ "minContains": 1
98
+ }
99
+ }
100
+ ]
101
+ },
102
+ "id": {
103
+ "example": "did:web:identifiers.example-company.com:12345",
104
+ "type": "string",
105
+ "format": "uri",
106
+ "description": "The W3C DID of the issuer - should be a did:web or did:webvh"
107
+ },
108
+ "name": {
109
+ "example": "Example Company Pty Ltd",
110
+ "type": "string",
111
+ "description": "The name of the issuer person or organisation"
112
+ },
113
+ "issuerAlsoKnownAs": {
114
+ "type": "array",
115
+ "items": {
116
+ "type": "object",
117
+ "properties": {
118
+ "id": {
119
+ "example": "https://abr.business.gov.au/ABN/View?abn=90664869327",
120
+ "type": "string",
121
+ "format": "uri",
122
+ "description": "The globally unique ID of the party as a URI, ideally as a resolvable ID. "
123
+ },
124
+ "name": {
125
+ "example": "Sample Company Pty Ltd.",
126
+ "type": "string",
127
+ "description": "The registered name of the party within the identifier scheme."
128
+ },
129
+ "registeredId": {
130
+ "example": 90664869327,
131
+ "type": "string",
132
+ "description": "The registration number (alphanumeric) of the Party within the register. Unique within the register."
133
+ }
134
+ },
135
+ "required": ["id", "name"]
136
+ },
137
+ "description": "An optional list of other registered identifiers for this credential issuer "
138
+ }
139
+ },
140
+ "description": "The issuer party (person or organisation) of a verifiable credential.",
141
+ "required": ["id", "name"]
142
+ },
143
+ "ProductPassport": {
144
+ "type": "object",
145
+ "additionalProperties": true,
146
+ "properties": {
147
+ "type": {
148
+ "type": "array",
149
+ "readOnly": true,
150
+ "default": ["ProductPassport"],
151
+ "items": {
152
+ "type": "string"
153
+ },
154
+ "allOf": [
155
+ {
156
+ "contains": {
157
+ "const": "ProductPassport",
158
+ "minContains": 1
159
+ }
160
+ }
161
+ ]
162
+ },
163
+ "id": {
164
+ "example": "example:product/1234",
165
+ "type": "string",
166
+ "format": "uri",
167
+ "description": "An id is not required in the data but jargon requires for blue class which won't redefine credentialSubject"
168
+ },
169
+ "product": {
170
+ "$ref": "#/$defs/Product",
171
+ "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details."
172
+ },
173
+ "granularityLevel": {
174
+ "type": "string",
175
+ "enum": ["item", "batch", "model"],
176
+ "example": "item",
177
+ "description": "Code to indicate the granularity of this digital product passport - item level, batch level or product class level."
178
+ },
179
+ "conformityClaim": {
180
+ "type": "array",
181
+ "items": {
182
+ "$ref": "#/$defs/Claim"
183
+ },
184
+ "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list."
185
+ },
186
+ "emissionsScorecard": {
187
+ "$ref": "#/$defs/EmissionsPerformance",
188
+ "description": "An emissions performance scorecard"
189
+ },
190
+ "traceabilityInformation": {
191
+ "type": "array",
192
+ "items": {
193
+ "$ref": "#/$defs/TraceabilityPerformance"
194
+ },
195
+ "description": "An array of traceability events grouped by value chain process. Where actual traceability events are unavailable or carry sensitive information, passport publishers may specify the extent to which the traceability information has been independently verified. "
196
+ },
197
+ "circularityScorecard": {
198
+ "$ref": "#/$defs/CircularityPerformance",
199
+ "description": "A circularity performance scorecard"
200
+ },
201
+ "dueDiligenceDeclaration": {
202
+ "$ref": "#/$defs/Link",
203
+ "description": "The due diligence declaration that conforms with the regulations of the market into which the product is sold."
204
+ },
205
+ "materialsProvenance": {
206
+ "type": "array",
207
+ "items": {
208
+ "$ref": "#/$defs/Material"
209
+ },
210
+ "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch. "
211
+ }
212
+ },
213
+ "description": "The ProductClaim class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details, as well as information about the claims being made about the product. "
214
+ },
215
+ "Product": {
216
+ "type": "object",
217
+ "additionalProperties": true,
218
+ "properties": {
219
+ "type": {
220
+ "type": "array",
221
+ "readOnly": true,
222
+ "default": ["Product"],
223
+ "items": {
224
+ "type": "string"
225
+ },
226
+ "allOf": [
227
+ {
228
+ "contains": {
229
+ "const": "Product",
230
+ "minContains": 1
231
+ }
232
+ }
233
+ ]
234
+ },
235
+ "id": {
236
+ "example": "https://id.gs1.org/01/09520123456788/21/12345",
237
+ "type": "string",
238
+ "format": "uri",
239
+ "description": "The globally unique ID of the product as a URI. Ideally as a resolvable URL according to ISO 18975. "
240
+ },
241
+ "name": {
242
+ "example": "EV battery 300Ah.",
243
+ "type": "string",
244
+ "description": "The registered name of the product within the identifier scheme. "
245
+ },
246
+ "registeredId": {
247
+ "example": "09520123456788.21.12345",
248
+ "type": "string",
249
+ "description": "The registration number (alphanumeric) of the entity within the register. Unique within the register."
250
+ },
251
+ "idScheme": {
252
+ "$ref": "#/$defs/IdentifierScheme",
253
+ "description": "The identifier scheme for this product. Eg a GS1 GTIN or an AU Livestock NLIS, or similar. If self issued then use the party ID of the issuer. "
254
+ },
255
+ "batchNumber": {
256
+ "example": 6789,
257
+ "type": "string",
258
+ "description": "Identifier of the specific production batch of the product. Unique within the product class."
259
+ },
260
+ "productImage": {
261
+ "$ref": "#/$defs/Link",
262
+ "description": "Reference information (location, type, name) of an image of the product."
263
+ },
264
+ "description": {
265
+ "example": "400Ah 24v LiFePO4 battery",
266
+ "type": "string",
267
+ "description": "A textual description providing details about the product."
268
+ },
269
+ "characteristics": {
270
+ "$ref": "#/$defs/Characteristics",
271
+ "description": "A placeholder for indusutry / product category specific information. "
272
+ },
273
+ "productCategory": {
274
+ "type": "array",
275
+ "items": {
276
+ "$ref": "#/$defs/Classification"
277
+ },
278
+ "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc"
279
+ },
280
+ "furtherInformation": {
281
+ "type": "array",
282
+ "items": {
283
+ "$ref": "#/$defs/Link"
284
+ },
285
+ "description": "A URL pointing to further human readable information about the product."
286
+ },
287
+ "producedByParty": {
288
+ "type": "object",
289
+ "properties": {
290
+ "id": {
291
+ "example": "https://abr.business.gov.au/ABN/View?abn=90664869327",
292
+ "type": "string",
293
+ "format": "uri",
294
+ "description": "The globally unique ID of the party as a URI, ideally as a resolvable ID. "
295
+ },
296
+ "name": {
297
+ "example": "Sample Company Pty Ltd.",
298
+ "type": "string",
299
+ "description": "The registered name of the party within the identifier scheme."
300
+ },
301
+ "registeredId": {
302
+ "example": 90664869327,
303
+ "type": "string",
304
+ "description": "The registration number (alphanumeric) of the Party within the register. Unique within the register."
305
+ }
306
+ },
307
+ "required": ["id", "name"],
308
+ "description": "The Party entity that manufactured the product."
309
+ },
310
+ "producedAtFacility": {
311
+ "type": "object",
312
+ "properties": {
313
+ "id": {
314
+ "example": "https://sample-facility-register.com/1234567",
315
+ "type": "string",
316
+ "format": "uri",
317
+ "description": "The globally unique ID of the facility as URI, ideally as a resolvable URL."
318
+ },
319
+ "name": {
320
+ "example": "Greenacres battery factory",
321
+ "type": "string",
322
+ "description": "The registered name of the facility within the identifier scheme. "
323
+ },
324
+ "registeredId": {
325
+ "example": 1234567,
326
+ "type": "string",
327
+ "description": "The registration number (alphanumeric) of the facility within the identifier scheme. Unique within the register."
328
+ }
329
+ },
330
+ "required": ["id", "name"],
331
+ "description": "The Facility where the product batch was produced / manufactured."
332
+ },
333
+ "productionDate": {
334
+ "example": "2024-04-25",
335
+ "type": "string",
336
+ "format": "date",
337
+ "description": "The ISO 8601 date on which the product batch or individual serialised item was manufactured."
338
+ },
339
+ "countryOfProduction": {
340
+ "type": "string",
341
+ "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId#",
342
+ "description": "The country in which this item was produced / manufactured.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId#\n "
343
+ },
344
+ "serialNumber": {
345
+ "example": 12345678,
346
+ "type": "string",
347
+ "description": "A number or code representing a specific serialised item of the product. Unique within product class."
348
+ },
349
+ "dimensions": {
350
+ "$ref": "#/$defs/Dimension",
351
+ "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have weight and volume but not length, with, or height.\"weight\":{\"value\":10, \"unit\":\"KGM\"}"
352
+ }
353
+ },
354
+ "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.",
355
+ "required": ["id", "name"]
356
+ },
357
+ "IdentifierScheme": {
358
+ "type": "object",
359
+ "additionalProperties": false,
360
+ "properties": {
361
+ "type": {
362
+ "type": "array",
363
+ "readOnly": true,
364
+ "default": ["IdentifierScheme"],
365
+ "items": {
366
+ "type": "string"
367
+ },
368
+ "allOf": [
369
+ {
370
+ "contains": {
371
+ "const": "IdentifierScheme",
372
+ "minContains": 1
373
+ }
374
+ }
375
+ ]
376
+ },
377
+ "id": {
378
+ "example": "https://id.gs1.org/01/",
379
+ "type": "string",
380
+ "format": "uri",
381
+ "description": "The globally unique identifier of the registration scheme. The scheme should be registered and discoverable from vocabulary.uncefact.org/identifierSchemes"
382
+ },
383
+ "name": {
384
+ "example": "Global Trade Identification Number (GTIN)",
385
+ "type": "string",
386
+ "description": "The name of the identifier scheme. "
387
+ }
388
+ },
389
+ "description": "An identifier registration scheme for products, facilities, or organisations. Typically operated by a state, national or global authority."
390
+ },
391
+ "Link": {
392
+ "type": "object",
393
+ "additionalProperties": false,
394
+ "properties": {
395
+ "type": {
396
+ "type": "array",
397
+ "readOnly": true,
398
+ "default": ["Link"],
399
+ "items": {
400
+ "type": "string"
401
+ },
402
+ "allOf": [
403
+ {
404
+ "contains": {
405
+ "const": "Link",
406
+ "minContains": 1
407
+ }
408
+ }
409
+ ]
410
+ },
411
+ "linkURL": {
412
+ "example": "https://files.example-certifier.com/1234567.json",
413
+ "type": "string",
414
+ "format": "uri",
415
+ "description": "The URL of the target resource. "
416
+ },
417
+ "linkName": {
418
+ "example": "GBA rule book conformity certificate",
419
+ "type": "string",
420
+ "description": "A display name for the target resource "
421
+ },
422
+ "linkType": {
423
+ "example": "https://test.uncefact.org/vocabulary/linkTypes/dcc",
424
+ "type": "string",
425
+ "description": "The type of the target resource - drawn from a controlled vocabulary "
426
+ }
427
+ },
428
+ "description": "A structure to provide a URL link plus metadata associated with the link."
429
+ },
430
+ "Characteristics": {
431
+ "type": "object",
432
+ "additionalProperties": true,
433
+ "properties": {
434
+ "type": {
435
+ "type": "array",
436
+ "readOnly": true,
437
+ "default": ["Characteristics"],
438
+ "items": {
439
+ "type": "string"
440
+ },
441
+ "allOf": [
442
+ {
443
+ "contains": {
444
+ "const": "Characteristics",
445
+ "minContains": 1
446
+ }
447
+ }
448
+ ]
449
+ }
450
+ },
451
+ "description": "Extension point for commodity specific characteristics like battery capacity, clothing size, etc."
452
+ },
453
+ "Classification": {
454
+ "type": "object",
455
+ "additionalProperties": false,
456
+ "properties": {
457
+ "type": {
458
+ "type": "array",
459
+ "readOnly": true,
460
+ "default": ["Classification"],
461
+ "items": {
462
+ "type": "string"
463
+ },
464
+ "allOf": [
465
+ {
466
+ "contains": {
467
+ "const": "Classification",
468
+ "minContains": 1
469
+ }
470
+ }
471
+ ]
472
+ },
473
+ "id": {
474
+ "example": "https://unstats.un.org/unsd/classifications/Econ/cpc/46410",
475
+ "type": "string",
476
+ "format": "uri",
477
+ "description": "The globally unique URI representing the specific classifier value"
478
+ },
479
+ "code": {
480
+ "example": 46410,
481
+ "type": "string",
482
+ "description": "classification code within the scheme"
483
+ },
484
+ "name": {
485
+ "example": "Primary cells and primary batteries",
486
+ "type": "string",
487
+ "description": "Name of the classification represented by the code"
488
+ },
489
+ "schemeID": {
490
+ "example": "https://unstats.un.org/unsd/classifications/Econ/cpc/",
491
+ "type": "string",
492
+ "format": "uri",
493
+ "description": "Classification scheme ID"
494
+ },
495
+ "schemeName": {
496
+ "example": "UN Central Product Classification (CPC)",
497
+ "type": "string",
498
+ "description": "The name of the classification scheme"
499
+ }
500
+ },
501
+ "description": "A classification scheme and code / name representing a category value for a product, entity, or facility.",
502
+ "required": ["id", "name"]
503
+ },
504
+ "Dimension": {
505
+ "type": "object",
506
+ "additionalProperties": true,
507
+ "properties": {
508
+ "type": {
509
+ "type": "array",
510
+ "readOnly": true,
511
+ "default": ["Dimension"],
512
+ "items": {
513
+ "type": "string"
514
+ },
515
+ "allOf": [
516
+ {
517
+ "contains": {
518
+ "const": "Dimension",
519
+ "minContains": 1
520
+ }
521
+ }
522
+ ]
523
+ },
524
+ "weight": {
525
+ "$ref": "#/$defs/Measure",
526
+ "description": "the weight of the product. EG {\"value\":10, \"unit\":\"KGM\"}"
527
+ },
528
+ "length": {
529
+ "$ref": "#/$defs/Measure",
530
+ "description": "The length of the product or packaging eg {\"value\":840, \"unit\":\"MMT\"}"
531
+ },
532
+ "width": {
533
+ "$ref": "#/$defs/Measure",
534
+ "description": "The width of the product or packaging. eg {\"value\":150, \"unit\":\"MMT\"}"
535
+ },
536
+ "height": {
537
+ "$ref": "#/$defs/Measure",
538
+ "description": "The height of the product or packaging. eg {\"value\":220, \"unit\":\"MMT\"}"
539
+ },
540
+ "volume": {
541
+ "$ref": "#/$defs/Measure",
542
+ "description": "The displacement volume of the product. eg {\"value\":7.5, \"unit\":\"LTR\"}"
543
+ }
544
+ },
545
+ "description": "Overall (length, width, height) dimensions and weight/volume of an item."
546
+ },
547
+ "Measure": {
548
+ "type": "object",
549
+ "additionalProperties": false,
550
+ "properties": {
551
+ "type": {
552
+ "type": "array",
553
+ "readOnly": true,
554
+ "default": ["Measure"],
555
+ "items": {
556
+ "type": "string"
557
+ },
558
+ "allOf": [
559
+ {
560
+ "contains": {
561
+ "const": "Measure",
562
+ "minContains": 1
563
+ }
564
+ }
565
+ ]
566
+ },
567
+ "value": {
568
+ "example": 10,
569
+ "type": "number",
570
+ "description": "The numeric value of the measure"
571
+ },
572
+ "unit": {
573
+ "type": "string",
574
+ "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode#",
575
+ "description": "Unit of measure drawn from the UNECE Rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode#\n "
576
+ }
577
+ },
578
+ "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG).",
579
+ "required": ["value", "unit"]
580
+ },
581
+ "Claim": {
582
+ "type": "object",
583
+ "additionalProperties": true,
584
+ "properties": {
585
+ "type": {
586
+ "type": "array",
587
+ "readOnly": true,
588
+ "default": ["Claim", "Declaration"],
589
+ "items": {
590
+ "type": "string"
591
+ },
592
+ "allOf": [
593
+ {
594
+ "contains": {
595
+ "const": "Claim",
596
+ "minContains": 1
597
+ }
598
+ },
599
+ {
600
+ "contains": {
601
+ "const": "Declaration",
602
+ "minContains": 1
603
+ }
604
+ }
605
+ ]
606
+ },
607
+ "id": {
608
+ "example": "https://products.example-company.com/09520123456788/declarations/12345",
609
+ "type": "string",
610
+ "format": "uri",
611
+ "description": "A unique identifier for the declaration. Often this will be an extension of the product.id or attestation.id. But could be a UUID."
612
+ },
613
+ "description": {
614
+ "example": "A standardised disclosure of the battery's greenhouse gas emissions intensity, calculated in accordance with the Global Battery Alliance Battery Passport Greenhouse Gas Rulebook V.2.0.",
615
+ "type": "string",
616
+ "description": "A textual description of the declaration being made."
617
+ },
618
+ "referenceStandard": {
619
+ "$ref": "#/$defs/Standard",
620
+ "description": "The reference to the standard that defines the specification / criteria"
621
+ },
622
+ "referenceRegulation": {
623
+ "$ref": "#/$defs/Regulation",
624
+ "description": "The reference to the regulation that defines the assessment criteria"
625
+ },
626
+ "assessmentCriteria": {
627
+ "type": "array",
628
+ "items": {
629
+ "$ref": "#/$defs/Criterion"
630
+ },
631
+ "description": "The specification against which the assessment is made."
632
+ },
633
+ "assessmentDate": {
634
+ "example": "2024-03-15",
635
+ "type": "string",
636
+ "format": "date",
637
+ "description": "The date on which this assessment was made. "
638
+ },
639
+ "declaredValue": {
640
+ "type": "array",
641
+ "items": {
642
+ "$ref": "#/$defs/Metric"
643
+ },
644
+ "description": "The list of specific values measured as part of this assessment (eg tensile strength)"
645
+ },
646
+ "conformance": {
647
+ "example": true,
648
+ "type": "boolean",
649
+ "description": "An indicator of whether or not the claim or assesment conforms to the regulatory or standard criteria."
650
+ },
651
+ "conformityTopic": {
652
+ "type": "string",
653
+ "enum": [
654
+ "environment.energy",
655
+ "environment.emissions",
656
+ "environment.water",
657
+ "environment.waste",
658
+ "environment.deforestation",
659
+ "environment.biodiversity",
660
+ "circularity.content",
661
+ "circularity.design",
662
+ "social.labour",
663
+ "social.rights",
664
+ "social.community",
665
+ "social.safety",
666
+ "governance.ethics",
667
+ "governance.compliance",
668
+ "governance.transparency"
669
+ ],
670
+ "example": "environment.energy",
671
+ "description": "The conformity topic category for this assessment (eg vocabulary.uncefact.org/sustainability/emissions)"
672
+ },
673
+ "conformityEvidence": {
674
+ "$ref": "#/$defs/SecureLink",
675
+ "description": "A URI pointing to the evidence supporting the claim. SHOULD be a URL to a UNTP Digital Conformity Credential (DCC)"
676
+ }
677
+ },
678
+ "description": "A declaration of conformance with one or more criteria from a specific standard or regulation. ",
679
+ "required": ["id", "conformance", "conformityTopic"]
680
+ },
681
+ "Standard": {
682
+ "type": "object",
683
+ "additionalProperties": false,
684
+ "properties": {
685
+ "type": {
686
+ "type": "array",
687
+ "readOnly": true,
688
+ "default": ["Standard"],
689
+ "items": {
690
+ "type": "string"
691
+ },
692
+ "allOf": [
693
+ {
694
+ "contains": {
695
+ "const": "Standard",
696
+ "minContains": 1
697
+ }
698
+ }
699
+ ]
700
+ },
701
+ "id": {
702
+ "example": "https://www.globalbattery.org/media/publications/gba-rulebook-v2.0-master.pdf",
703
+ "type": "string",
704
+ "format": "uri",
705
+ "description": "A unique identifier for the standard (eg https://www.iso.org/standard/60857.html)."
706
+ },
707
+ "name": {
708
+ "example": "GBA Battery Passport Greenhouse Gas Rulebook - V.2.0",
709
+ "type": "string",
710
+ "description": "The name of the standard"
711
+ },
712
+ "issuingParty": {
713
+ "type": "object",
714
+ "properties": {
715
+ "id": {
716
+ "example": "https://abr.business.gov.au/ABN/View?abn=90664869327",
717
+ "type": "string",
718
+ "format": "uri",
719
+ "description": "The globally unique ID of the party as a URI, ideally as a resolvable ID. "
720
+ },
721
+ "name": {
722
+ "example": "Sample Company Pty Ltd.",
723
+ "type": "string",
724
+ "description": "The registered name of the party within the identifier scheme."
725
+ },
726
+ "registeredId": {
727
+ "example": 90664869327,
728
+ "type": "string",
729
+ "description": "The registration number (alphanumeric) of the Party within the register. Unique within the register."
730
+ }
731
+ },
732
+ "required": ["id", "name"],
733
+ "description": "The party that issued the standard "
734
+ },
735
+ "issueDate": {
736
+ "example": "2023-12-05",
737
+ "type": "string",
738
+ "format": "date",
739
+ "description": "The date when the standard was issued."
740
+ }
741
+ },
742
+ "description": "A standard (eg ISO 14000) that specifies the criteria for conformance.",
743
+ "required": ["issuingParty"]
744
+ },
745
+ "Regulation": {
746
+ "type": "object",
747
+ "additionalProperties": false,
748
+ "properties": {
749
+ "type": {
750
+ "type": "array",
751
+ "readOnly": true,
752
+ "default": ["Regulation"],
753
+ "items": {
754
+ "type": "string"
755
+ },
756
+ "allOf": [
757
+ {
758
+ "contains": {
759
+ "const": "Regulation",
760
+ "minContains": 1
761
+ }
762
+ }
763
+ ]
764
+ },
765
+ "id": {
766
+ "example": "https://www.legislation.gov.au/F2008L02309/latest/versions",
767
+ "type": "string",
768
+ "format": "uri",
769
+ "description": "The globally unique identifier of this regulation. "
770
+ },
771
+ "name": {
772
+ "example": "NNational Greenhouse and Energy Reporting (Measurement) Determination",
773
+ "type": "string",
774
+ "description": "The name of the regulation or act."
775
+ },
776
+ "jurisdictionCountry": {
777
+ "type": "string",
778
+ "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId#",
779
+ "description": "The legal jurisdiction (country) under which the regulation is issued.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId#\n "
780
+ },
781
+ "administeredBy": {
782
+ "type": "object",
783
+ "properties": {
784
+ "id": {
785
+ "example": "https://abr.business.gov.au/ABN/View?abn=90664869327",
786
+ "type": "string",
787
+ "format": "uri",
788
+ "description": "The globally unique ID of the party as a URI, ideally as a resolvable ID. "
789
+ },
790
+ "name": {
791
+ "example": "Sample Company Pty Ltd.",
792
+ "type": "string",
793
+ "description": "The registered name of the party within the identifier scheme."
794
+ },
795
+ "registeredId": {
796
+ "example": 90664869327,
797
+ "type": "string",
798
+ "description": "The registration number (alphanumeric) of the Party within the register. Unique within the register."
799
+ }
800
+ },
801
+ "required": ["id", "name"],
802
+ "description": "the issuing body of the regulation. For example Australian Government Department of Climate Change, Energy, the Environment and Water"
803
+ },
804
+ "effectiveDate": {
805
+ "example": "2024-03-20",
806
+ "type": "string",
807
+ "format": "date",
808
+ "description": "the date at which the regulation came into effect."
809
+ }
810
+ },
811
+ "description": "A regulation (eg EU deforestation regulation) that defines the criteria for assessment.",
812
+ "required": ["administeredBy"]
813
+ },
814
+ "Criterion": {
815
+ "type": "object",
816
+ "additionalProperties": false,
817
+ "properties": {
818
+ "type": {
819
+ "type": "array",
820
+ "readOnly": true,
821
+ "default": ["Criterion"],
822
+ "items": {
823
+ "type": "string"
824
+ },
825
+ "allOf": [
826
+ {
827
+ "contains": {
828
+ "const": "Criterion",
829
+ "minContains": 1
830
+ }
831
+ }
832
+ ]
833
+ },
834
+ "id": {
835
+ "example": "https://www.globalbattery.org/media/publications/gba-rulebook-v2.0-master.pdf#BatteryAssembly",
836
+ "type": "string",
837
+ "format": "uri",
838
+ "description": "A unique identifier for the criterion within the scheme, standard or regulation. For example CO2 emissions calculations for liquid fuel combustion."
839
+ },
840
+ "name": {
841
+ "example": "GBA Battery rule book v2.0 battery assembly guidelines.",
842
+ "type": "string",
843
+ "description": "A name that describes this criteria."
844
+ },
845
+ "description": {
846
+ "example": "Battery is designed for easy disassembly and recycling at end-of-life.",
847
+ "type": "string",
848
+ "description": "A full text description of the criterion that clearly specifies how compliance is achieved and measured. "
849
+ },
850
+ "conformityTopic": {
851
+ "type": "string",
852
+ "enum": [
853
+ "environment.energy",
854
+ "environment.emissions",
855
+ "environment.water",
856
+ "environment.waste",
857
+ "environment.deforestation",
858
+ "environment.biodiversity",
859
+ "circularity.content",
860
+ "circularity.design",
861
+ "social.labour",
862
+ "social.rights",
863
+ "social.community",
864
+ "social.safety",
865
+ "governance.ethics",
866
+ "governance.compliance",
867
+ "governance.transparency"
868
+ ],
869
+ "example": "environment.energy",
870
+ "description": "A gloabl UN/CEFACT standard sustainability toipic code. "
871
+ },
872
+ "status": {
873
+ "type": "string",
874
+ "enum": ["proposed", "active", "deprecated"],
875
+ "example": "proposed",
876
+ "description": "The lifecycle status of this criterion. "
877
+ },
878
+ "subCriterion": {
879
+ "type": "array",
880
+ "items": {
881
+ "$ref": "#/$defs/Criterion"
882
+ },
883
+ "description": "List of criterion that are subordinate to this criterion in the hierarchy."
884
+ },
885
+ "thresholdValue": {
886
+ "$ref": "#/$defs/Metric",
887
+ "description": "A threshold value that defines the minimum compliance level. "
888
+ },
889
+ "performanceLevel": {
890
+ "example": "\"Category 3 recyclable with 73% recyclability\"",
891
+ "type": "string",
892
+ "description": "A performance category code to group criterion in a given hierarchyLevel according to pareformance"
893
+ },
894
+ "tags": {
895
+ "type": "string",
896
+ "description": "a category code to represent target stakeholder types or commodity types to which this criteron applies. "
897
+ }
898
+ },
899
+ "description": "A specific rule or criterion within a standard or regulation. eg a carbon intensity calculation rule within an emissions standard.",
900
+ "required": ["id", "name", "description", "conformityTopic", "status"]
901
+ },
902
+ "Metric": {
903
+ "type": "object",
904
+ "additionalProperties": false,
905
+ "properties": {
906
+ "type": {
907
+ "type": "array",
908
+ "readOnly": true,
909
+ "default": ["Metric"],
910
+ "items": {
911
+ "type": "string"
912
+ },
913
+ "allOf": [
914
+ {
915
+ "contains": {
916
+ "const": "Metric",
917
+ "minContains": 1
918
+ }
919
+ }
920
+ ]
921
+ },
922
+ "metricName": {
923
+ "example": "GHG emissions intensity",
924
+ "type": "string",
925
+ "description": "A human readable name for this metric (for example \"Tensile strength\")"
926
+ },
927
+ "metricValue": {
928
+ "$ref": "#/$defs/Measure",
929
+ "description": "A numeric value and unit of measure for this metric. Could be a measured value or a specified threshold. Eg {\"value\":400, \"unit\":\"MPA\"} as tensile strength of structural steel"
930
+ },
931
+ "score": {
932
+ "example": "BB",
933
+ "type": "string",
934
+ "description": "A score or rank associated with this measured metric."
935
+ },
936
+ "accuracy": {
937
+ "example": 0.05,
938
+ "type": "number",
939
+ "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)"
940
+ }
941
+ },
942
+ "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of measure) / value (ie the actual numeric value) pairs. ",
943
+ "required": ["metricName", "metricValue"]
944
+ },
945
+ "SecureLink": {
946
+ "type": "object",
947
+ "additionalProperties": false,
948
+ "properties": {
949
+ "type": {
950
+ "type": "array",
951
+ "readOnly": true,
952
+ "default": ["SecureLink", "Link"],
953
+ "items": {
954
+ "type": "string"
955
+ },
956
+ "allOf": [
957
+ {
958
+ "contains": {
959
+ "const": "SecureLink",
960
+ "minContains": 1
961
+ }
962
+ },
963
+ {
964
+ "contains": {
965
+ "const": "Link",
966
+ "minContains": 1
967
+ }
968
+ }
969
+ ]
970
+ },
971
+ "linkURL": {
972
+ "example": "https://files.example-certifier.com/1234567.json",
973
+ "type": "string",
974
+ "format": "uri",
975
+ "description": "The URL of the target resource. "
976
+ },
977
+ "linkName": {
978
+ "example": "GBA rule book conformity certificate",
979
+ "type": "string",
980
+ "description": "A display name for the target resource "
981
+ },
982
+ "linkType": {
983
+ "example": "https://test.uncefact.org/vocabulary/linkTypes/dcc",
984
+ "type": "string",
985
+ "description": "The type of the target resource - drawn from a controlled vocabulary "
986
+ },
987
+ "hashDigest": {
988
+ "example": "6239119dda5bd4c8a6ffb832fe16feaa5c27b7dba154d24c53d4470a2c69adc2",
989
+ "type": "string",
990
+ "description": "The hash of the file."
991
+ },
992
+ "hashMethod": {
993
+ "type": "string",
994
+ "enum": ["SHA-256", "SHA-1"],
995
+ "example": "SHA-256",
996
+ "description": "The hashing algorithm used to create the target hash. SHA-265 is the recommended standard"
997
+ },
998
+ "encryptionMethod": {
999
+ "type": "string",
1000
+ "enum": ["none", "AES"],
1001
+ "example": "none",
1002
+ "description": "The symmetric encryption algorithm used to encrypt the link target. AES is the recommended standard. Decryption keys are expected to be passed out of bounds."
1003
+ }
1004
+ },
1005
+ "description": "A binary file that is hashed ()for tamper evidence) and optionally encrypted (for confidentiality)."
1006
+ },
1007
+ "EmissionsPerformance": {
1008
+ "type": "object",
1009
+ "additionalProperties": true,
1010
+ "properties": {
1011
+ "type": {
1012
+ "type": "array",
1013
+ "readOnly": true,
1014
+ "default": ["EmissionsPerformance"],
1015
+ "items": {
1016
+ "type": "string"
1017
+ },
1018
+ "allOf": [
1019
+ {
1020
+ "contains": {
1021
+ "const": "EmissionsPerformance",
1022
+ "minContains": 1
1023
+ }
1024
+ }
1025
+ ]
1026
+ },
1027
+ "carbonFootprint": {
1028
+ "example": 1.8,
1029
+ "type": "number",
1030
+ "format": "float",
1031
+ "description": "The carbon footprint of the product in KgCO2e per declared unit."
1032
+ },
1033
+ "declaredUnit": {
1034
+ "type": "string",
1035
+ "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode#",
1036
+ "description": "The unit of product (EA, KGM, LTR, etc) that is the basis for carbon footprint.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode#\n "
1037
+ },
1038
+ "operationalScope": {
1039
+ "type": "string",
1040
+ "enum": ["None", "CradleToGate", "CradleToGrave"],
1041
+ "example": "None",
1042
+ "description": "The operational scope of the emissions performance. Only scope 1 & 2, or including upstream scope 3 (cradle to gate) or upstream and downstream scope 3 (cradle to grave)."
1043
+ },
1044
+ "primarySourcedRatio": {
1045
+ "example": 0.3,
1046
+ "type": "number",
1047
+ "format": "float",
1048
+ "description": "The ratio of emissions data from primary sources (ie from supplier / product specific information rather than secondary / industry averages)."
1049
+ },
1050
+ "reportingStandard": {
1051
+ "$ref": "#/$defs/Standard",
1052
+ "description": "The reporting standard (eg GHG Protocol, IFRS S2, ESRS, etc) against which this product emissions performance is assessed."
1053
+ }
1054
+ },
1055
+ "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity.",
1056
+ "required": ["carbonFootprint", "declaredUnit", "operationalScope", "primarySourcedRatio"]
1057
+ },
1058
+ "TraceabilityPerformance": {
1059
+ "type": "object",
1060
+ "additionalProperties": true,
1061
+ "properties": {
1062
+ "type": {
1063
+ "type": "array",
1064
+ "readOnly": true,
1065
+ "default": ["TraceabilityPerformance"],
1066
+ "items": {
1067
+ "type": "string"
1068
+ },
1069
+ "allOf": [
1070
+ {
1071
+ "contains": {
1072
+ "const": "TraceabilityPerformance",
1073
+ "minContains": 1
1074
+ }
1075
+ }
1076
+ ]
1077
+ },
1078
+ "valueChainProcess": {
1079
+ "example": "Spinning",
1080
+ "type": "string",
1081
+ "description": "Human readable name for the industry specific value chain process representing this traceability data set."
1082
+ },
1083
+ "verifiedRatio": {
1084
+ "example": 0.5,
1085
+ "type": "number",
1086
+ "description": "The proportion (0 to 1) of materials in this value chain process that have been traced using verifiable traceability event."
1087
+ },
1088
+ "traceabilityEvent": {
1089
+ "type": "array",
1090
+ "items": {
1091
+ "$ref": "#/$defs/SecureLink"
1092
+ },
1093
+ "description": "A list of secure links to digital traceability events that support this traceability performance statement. May be encrypted for confidentiality purposes. "
1094
+ }
1095
+ },
1096
+ "description": "An array of secure links to TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch. Events are grouped by value chain process (eg \"Weaving\" in textiles supply chain)."
1097
+ },
1098
+ "CircularityPerformance": {
1099
+ "type": "object",
1100
+ "additionalProperties": true,
1101
+ "properties": {
1102
+ "type": {
1103
+ "type": "array",
1104
+ "readOnly": true,
1105
+ "default": ["CircularityPerformance"],
1106
+ "items": {
1107
+ "type": "string"
1108
+ },
1109
+ "allOf": [
1110
+ {
1111
+ "contains": {
1112
+ "const": "CircularityPerformance",
1113
+ "minContains": 1
1114
+ }
1115
+ }
1116
+ ]
1117
+ },
1118
+ "recyclingInformation": {
1119
+ "$ref": "#/$defs/Link",
1120
+ "description": "A URI pointing to recycling information for the product."
1121
+ },
1122
+ "repairInformation": {
1123
+ "$ref": "#/$defs/Link",
1124
+ "description": "A URI pointing to repair instructions for this product."
1125
+ },
1126
+ "recyclableContent": {
1127
+ "example": 0.5,
1128
+ "type": "number",
1129
+ "format": "float",
1130
+ "description": "The fraction of the this product (my mass) that has been designed to be recyclable / re-usable. This will be be the total fraction that can avoid waste / landfill."
1131
+ },
1132
+ "recycledContent": {
1133
+ "example": 0.3,
1134
+ "type": "number",
1135
+ "format": "float",
1136
+ "description": "The fraction (by mass) of recycled / repurposed, repaired content in this product. This will be the total virgin content fraction."
1137
+ },
1138
+ "utilityFactor": {
1139
+ "example": 1.2,
1140
+ "type": "number",
1141
+ "format": "float",
1142
+ "description": "An indicator of durability defined as the lifetime (typically measures as usage cycles) for this product divided by the industry average. For example a battery with a 10,000 cycle lifetime where industry average is 5,000 cycles will have a durability factor of 2. If unknown set to 1 or omit. "
1143
+ },
1144
+ "materialCircularityIndicator": {
1145
+ "example": 0.67,
1146
+ "type": "number",
1147
+ "format": "float",
1148
+ "description": "The overall circularity performance indicator for this product. Calculated as 1 - (V+W)/2D where - V = Virgin material proportion by mass (will be 1- recycled content) - W = Waste leakage proportion by mass (will be 1 - recyclableContent) - D = Utility factor (set to 1 if unknown). "
1149
+ }
1150
+ },
1151
+ "description": "High level circularity information about this product. Note that this does not substitute for detailed product circularity data sheet (PCDS) criteria which would be represented as a self-issued UNTP Digital Conformity Credential as a set of assessments against individual ISO PCDS criteria."
1152
+ },
1153
+ "Material": {
1154
+ "type": "object",
1155
+ "additionalProperties": true,
1156
+ "properties": {
1157
+ "type": {
1158
+ "type": "array",
1159
+ "readOnly": true,
1160
+ "default": ["Material"],
1161
+ "items": {
1162
+ "type": "string"
1163
+ },
1164
+ "allOf": [
1165
+ {
1166
+ "contains": {
1167
+ "const": "Material",
1168
+ "minContains": 1
1169
+ }
1170
+ }
1171
+ ]
1172
+ },
1173
+ "name": {
1174
+ "example": "Lithium Spodumene",
1175
+ "type": "string",
1176
+ "description": "Name of this material (eg \"Egyptian Cotton\")"
1177
+ },
1178
+ "originCountry": {
1179
+ "type": "string",
1180
+ "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId#",
1181
+ "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId#\n "
1182
+ },
1183
+ "materialType": {
1184
+ "$ref": "#/$defs/Classification",
1185
+ "description": "The type of this material - as a value drawn from a controlled vocabulary eg from UN Framework Classification for Resources (UNFC)."
1186
+ },
1187
+ "massFraction": {
1188
+ "example": 0.2,
1189
+ "type": "number",
1190
+ "description": "The mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 1."
1191
+ },
1192
+ "mass": {
1193
+ "$ref": "#/$defs/Measure",
1194
+ "description": "The mass of the material component."
1195
+ },
1196
+ "recycledMassFraction": {
1197
+ "example": 0.5,
1198
+ "type": "number",
1199
+ "description": "Mass fraction of this material that is recycled (eg 50% recycled Lithium)"
1200
+ },
1201
+ "hazardous": {
1202
+ "type": "boolean",
1203
+ "description": "Indicates whether this material is hazardous. If true then the materialSafetyInformation property must be present"
1204
+ },
1205
+ "symbol": {
1206
+ "type": "string",
1207
+ "format": "binary",
1208
+ "description": "Based 64 encoded binary used to represent a visual symbol for a given material. "
1209
+ },
1210
+ "materialSafetyInformation": {
1211
+ "$ref": "#/$defs/Link",
1212
+ "description": "Reference to further information about safe handling of this hazardous material (for example a link to a material safety data sheet)"
1213
+ }
1214
+ },
1215
+ "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction.",
1216
+ "required": ["name"]
1217
+ }
1218
+ }
1219
+ }