@bsv/dpp-profiles 0.3.0-beta.1

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 (96) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +64 -0
  3. package/dist/applicability.d.ts +96 -0
  4. package/dist/applicability.d.ts.map +1 -0
  5. package/dist/applicability.js +181 -0
  6. package/dist/applicability.js.map +1 -0
  7. package/dist/combinations.d.ts +30 -0
  8. package/dist/combinations.d.ts.map +1 -0
  9. package/dist/combinations.js +103 -0
  10. package/dist/combinations.js.map +1 -0
  11. package/dist/evidence-shapes.d.ts +198 -0
  12. package/dist/evidence-shapes.d.ts.map +1 -0
  13. package/dist/evidence-shapes.js +123 -0
  14. package/dist/evidence-shapes.js.map +1 -0
  15. package/dist/gs1-epc-binary.d.ts +81 -0
  16. package/dist/gs1-epc-binary.d.ts.map +1 -0
  17. package/dist/gs1-epc-binary.js +252 -0
  18. package/dist/gs1-epc-binary.js.map +1 -0
  19. package/dist/gs1-resolution.d.ts +392 -0
  20. package/dist/gs1-resolution.d.ts.map +1 -0
  21. package/dist/gs1-resolution.js +696 -0
  22. package/dist/gs1-resolution.js.map +1 -0
  23. package/dist/identifiers.d.ts +57 -0
  24. package/dist/identifiers.d.ts.map +1 -0
  25. package/dist/identifiers.js +117 -0
  26. package/dist/identifiers.js.map +1 -0
  27. package/dist/index.d.ts +235 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +124 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/manifest-v2.d.ts +87 -0
  32. package/dist/manifest-v2.d.ts.map +1 -0
  33. package/dist/manifest-v2.js +31 -0
  34. package/dist/manifest-v2.js.map +1 -0
  35. package/dist/mapping.d.ts +84 -0
  36. package/dist/mapping.d.ts.map +1 -0
  37. package/dist/mapping.js +88 -0
  38. package/dist/mapping.js.map +1 -0
  39. package/dist/projections.d.ts +233 -0
  40. package/dist/projections.d.ts.map +1 -0
  41. package/dist/projections.js +466 -0
  42. package/dist/projections.js.map +1 -0
  43. package/frozen.json +42 -0
  44. package/generated/consumer/battery-v2.json +2248 -0
  45. package/generated/consumer/battery-v3.json +4354 -0
  46. package/generated/consumer/general-v1.json +9 -0
  47. package/generated/consumer/general-v2.json +714 -0
  48. package/generated/consumer/textile-v1.json +101 -0
  49. package/generated/consumer/textile-v2.json +1033 -0
  50. package/generated/consumer/textile-v3.json +2011 -0
  51. package/generated/index.json +86 -0
  52. package/generated/mapping/battery@2.md +116 -0
  53. package/generated/mapping/battery@3.md +130 -0
  54. package/generated/mapping/general@2.md +50 -0
  55. package/generated/mapping/textile@2.md +61 -0
  56. package/generated/mapping/textile@3.md +73 -0
  57. package/generated/payload-schema/battery@2.public.schema.json +609 -0
  58. package/generated/payload-schema/battery@2.restricted.schema.json +377 -0
  59. package/generated/payload-schema/battery@3.public.schema.json +1364 -0
  60. package/generated/payload-schema/battery@3.restricted.schema.json +1097 -0
  61. package/generated/payload-schema/general@1.public.schema.json +37 -0
  62. package/generated/payload-schema/general@1.restricted.schema.json +9 -0
  63. package/generated/payload-schema/general@2.public.schema.json +352 -0
  64. package/generated/payload-schema/general@2.restricted.schema.json +52 -0
  65. package/generated/payload-schema/textile@1.public.schema.json +82 -0
  66. package/generated/payload-schema/textile@1.restricted.schema.json +22 -0
  67. package/generated/payload-schema/textile@2.public.schema.json +464 -0
  68. package/generated/payload-schema/textile@2.restricted.schema.json +78 -0
  69. package/generated/payload-schema/textile@3.public.schema.json +1299 -0
  70. package/generated/payload-schema/textile@3.restricted.schema.json +78 -0
  71. package/manifests/battery@2.json +4047 -0
  72. package/manifests/battery@3.json +6164 -0
  73. package/manifests/exchange/untp-0.7.0-jose@1.json +191 -0
  74. package/manifests/exchange/vc-di-ecdsa-rdfc-2019@1.json +74 -0
  75. package/manifests/exchange/vsc-draft-compat@0.1.0.json +64 -0
  76. package/manifests/general@1.json +148 -0
  77. package/manifests/general@2.json +1266 -0
  78. package/manifests/interoperability/epcis-json@1.json +69 -0
  79. package/manifests/interoperability/epcis-vsc@1.json +64 -0
  80. package/manifests/interoperability/gs1-digital-link@1.json +71 -0
  81. package/manifests/operator/federated-operators@1.json +54 -0
  82. package/manifests/operator/single-operator@1.json +52 -0
  83. package/manifests/textile@1.json +383 -0
  84. package/manifests/textile@2.json +1682 -0
  85. package/manifests/textile@3.json +2763 -0
  86. package/package.json +59 -0
  87. package/schemas/exchange-profile.schema.json +134 -0
  88. package/schemas/gs1/NOTICE.md +11 -0
  89. package/schemas/gs1/resolver-description-file-schema-1.2.0.json +124 -0
  90. package/schemas/gs1/resolver-linkset-context-1.2.1.jsonld +39 -0
  91. package/schemas/gs1/resolver-linkset-schema-1.2.1.json +96 -0
  92. package/schemas/interoperability-profile.schema.json +347 -0
  93. package/schemas/operator-profile.schema.json +108 -0
  94. package/schemas/product-identity.schema.json +45 -0
  95. package/schemas/profile-manifest-v2.schema.json +1087 -0
  96. package/schemas/profile-manifest.schema.json +291 -0
@@ -0,0 +1,4047 @@
1
+ {
2
+ "manifestVersion": "1",
3
+ "kind": "industry",
4
+ "baseline": "native-baseline@1",
5
+ "roles": [
6
+ "passport-writer",
7
+ "attestation-issuer",
8
+ "registry",
9
+ "passport-reader"
10
+ ],
11
+ "schemaDialect": "https://json-schema.org/draft/2020-12/schema",
12
+ "accessPolicyRef": "spec/record-model.md#7-the-owner-tier-binding",
13
+ "accessTiers": [
14
+ {
15
+ "id": "public",
16
+ "description": "Anyone with the identifier.",
17
+ "storage": "on-chain public payload"
18
+ },
19
+ {
20
+ "id": "owner",
21
+ "description": "The current holder, travelling with possession rather than with an authorisation.",
22
+ "storage": "off-chain encrypted"
23
+ },
24
+ {
25
+ "id": "legitimate",
26
+ "description": "Persons with a legitimate interest, the Batteries Regulation Article 77(2) group generalised.",
27
+ "storage": "off-chain encrypted"
28
+ },
29
+ {
30
+ "id": "authority",
31
+ "description": "Notified bodies, market surveillance and other authorities.",
32
+ "storage": "off-chain encrypted"
33
+ }
34
+ ],
35
+ "extends": null,
36
+ "id": "battery",
37
+ "version": 2,
38
+ "profile": "battery@2",
39
+ "status": "current",
40
+ "title": "Battery passport",
41
+ "regulatoryLine": "Mapped to Regulation (EU) 2023/1542 Annex XIII and the Battery Pass content guidance, ready ahead of the 18 February 2027 battery passport mandate.",
42
+ "applicability": {
43
+ "categories": [
44
+ {
45
+ "value": "lmt",
46
+ "label": "Light transport"
47
+ },
48
+ {
49
+ "value": "ev",
50
+ "label": "Vehicle"
51
+ },
52
+ {
53
+ "value": "industrial",
54
+ "label": "Industrial"
55
+ },
56
+ {
57
+ "value": "stationary",
58
+ "label": "Stationary storage"
59
+ }
60
+ ],
61
+ "categoryKey": "category",
62
+ "jurisdictions": [
63
+ "EU"
64
+ ],
65
+ "statements": [
66
+ {
67
+ "text": "Regulation (EU) 2023/1542 is in force; its battery passport obligations apply from 18 February 2027 to the battery categories it covers.",
68
+ "status": "enacted",
69
+ "source": "eu-batteries-regulation",
70
+ "effectiveDate": "2027-02-18"
71
+ },
72
+ {
73
+ "text": "This profile's field-level mapping to Annex XIII, its category applicability and its clause citations are under review against the primary text and the licensed specification.",
74
+ "status": "needs-review",
75
+ "source": "eu-batteries-regulation"
76
+ }
77
+ ]
78
+ },
79
+ "schemaUri": "generated/payload-schema/battery@2.public.schema.json",
80
+ "schemaDigest": "4821b02554856db8bb3be9c8cc77c4e6222314ea623d0aec25898c4aba3a9e77",
81
+ "restrictedSchemaUri": "generated/payload-schema/battery@2.restricted.schema.json",
82
+ "restrictedSchemaDigest": "cc47f831e4b71f686c0623d961bb6a868b6e4dd117204983792d7af8dfb91ac8",
83
+ "contextRefs": [
84
+ {
85
+ "id": "bpdm-1.2.0",
86
+ "name": "Battery Pass Data Model 1.2.0",
87
+ "version": "1.2.0",
88
+ "repository": "https://github.com/batterypass/BatteryPassDataModel",
89
+ "licence": "CC-BY-4.0, declared in the repository README; no LICENCE file present",
90
+ "retrieved": "2026-07-25",
91
+ "urnPattern": "urn:samm:io.BatteryPass.{subModel}:{version}#{property}",
92
+ "use": "Vocabulary alignment only. No file from that repository is redistributed here, and its generated JSON Schema is deliberately not used for validation: every property is required by SAMM generation, so no tiered payload can validate."
93
+ }
94
+ ],
95
+ "stamps": [
96
+ {
97
+ "key": "notice",
98
+ "description": "The sample marker a demonstration record carries first; never product data.",
99
+ "valueType": "text"
100
+ },
101
+ {
102
+ "key": "profile",
103
+ "description": "The profile identifier the payload declares.",
104
+ "valueType": "id",
105
+ "const": "battery"
106
+ },
107
+ {
108
+ "key": "profile_version",
109
+ "description": "The profile version the payload declares; a reader decodes under it and never under a newer one.",
110
+ "valueType": "integer",
111
+ "const": 2
112
+ },
113
+ {
114
+ "key": "object_did",
115
+ "description": "An optional physical-object DID carried in the public payload; carrying it does not implement physical binding.",
116
+ "valueType": "id"
117
+ },
118
+ {
119
+ "key": "dataCarrier",
120
+ "description": "The data-carrier identifier (chip UID) the lookup service indexes beside the passport identifier.",
121
+ "valueType": "id"
122
+ }
123
+ ],
124
+ "fields": [
125
+ {
126
+ "key": "passportId",
127
+ "pointer": "/passportId",
128
+ "label": "Passport reference",
129
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryPassportIdentifier",
130
+ "valueType": "id",
131
+ "cardinality": "one",
132
+ "granularity": "item",
133
+ "provenance": {
134
+ "capture": "platform"
135
+ },
136
+ "accessTier": "public",
137
+ "obligation": "recommended",
138
+ "legalBasis": "none (spec recommendation)",
139
+ "applicability": {
140
+ "rule": "always"
141
+ },
142
+ "sourceRefs": [
143
+ {
144
+ "source": "din-dke-spec-99100",
145
+ "clause": "6.1.2.1",
146
+ "name": "Battery passport identifier"
147
+ },
148
+ {
149
+ "source": "bpdm-1.2.0",
150
+ "property": "batteryPassportIdentifier"
151
+ }
152
+ ],
153
+ "note": "Distinct from the battery identifier: 6.1.2.1(a) expects several passports over one physical battery, because 5.2.1(d) requires a new passport on remanufacture, repurpose or preparation for re-use."
154
+ },
155
+ {
156
+ "key": "serial",
157
+ "pointer": "/serial",
158
+ "label": "Serial number",
159
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#productIdentifier",
160
+ "valueType": "id",
161
+ "cardinality": "one",
162
+ "granularity": "item",
163
+ "provenance": {
164
+ "capture": "form",
165
+ "onLabel": true
166
+ },
167
+ "accessTier": "public",
168
+ "obligation": "required",
169
+ "legalBasis": "Annex XIII (1a); Art. 38(6); Art. 77(3)",
170
+ "applicability": {
171
+ "rule": "always"
172
+ },
173
+ "sourceRefs": [
174
+ {
175
+ "source": "din-dke-spec-99100",
176
+ "clause": "6.1.2.2",
177
+ "name": "Battery identifier"
178
+ },
179
+ {
180
+ "source": "bpdm-1.2.0",
181
+ "property": "productIdentifier"
182
+ }
183
+ ],
184
+ "supersedes": "serial",
185
+ "note": "Must comply with ISO/IEC 15459 or equivalent, and should be serialised. The spec deviates from BattReg here deliberately: the regulation attaches the identifier to the model, 6.1.2.2(e) attaches it to the item."
186
+ },
187
+ {
188
+ "key": "modelName",
189
+ "pointer": "/modelName",
190
+ "label": "Model name",
191
+ "valueType": "text",
192
+ "constraints": {
193
+ "maxLength": 200
194
+ },
195
+ "cardinality": "one",
196
+ "granularity": "model",
197
+ "provenance": {
198
+ "capture": "form",
199
+ "prose": true,
200
+ "onLabel": true
201
+ },
202
+ "accessTier": "public",
203
+ "obligation": "required",
204
+ "legalBasis": "Annex VI Part A(2)",
205
+ "applicability": {
206
+ "rule": "always"
207
+ },
208
+ "sourceRefs": [
209
+ {
210
+ "source": "din-dke-spec-99100",
211
+ "clause": "6.1.2.2",
212
+ "name": "Model identification"
213
+ }
214
+ ],
215
+ "supersedes": "name",
216
+ "note": "Prose by nature: it is whatever the maker calls the model. Length is capped so it fits a label and a passport heading."
217
+ },
218
+ {
219
+ "key": "operator",
220
+ "pointer": "/operator",
221
+ "label": "Responsible operator",
222
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#operatorInformation",
223
+ "valueType": "id",
224
+ "cardinality": "one",
225
+ "granularity": "item",
226
+ "provenance": {
227
+ "capture": "brand"
228
+ },
229
+ "accessTier": "public",
230
+ "obligation": "recommended",
231
+ "legalBasis": "ESPR Annex III(h)",
232
+ "applicability": {
233
+ "rule": "always"
234
+ },
235
+ "sourceRefs": [
236
+ {
237
+ "source": "din-dke-spec-99100",
238
+ "clause": "6.1.2.3",
239
+ "name": "Operator identifier and information"
240
+ },
241
+ {
242
+ "source": "bpdm-1.2.0",
243
+ "property": "operatorInformation"
244
+ }
245
+ ],
246
+ "note": "The operator answering for the passport, which need not be the manufacturer and can change over life."
247
+ },
248
+ {
249
+ "key": "manufacturer",
250
+ "pointer": "/manufacturer",
251
+ "label": "Brand name",
252
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#manufacturerInformation",
253
+ "valueType": "text",
254
+ "cardinality": "one",
255
+ "granularity": "model",
256
+ "provenance": {
257
+ "capture": "brand",
258
+ "onLabel": true
259
+ },
260
+ "accessTier": "public",
261
+ "obligation": "required",
262
+ "legalBasis": "Annex VI Part A(1); Art. 38(7)",
263
+ "applicability": {
264
+ "rule": "always"
265
+ },
266
+ "sourceRefs": [
267
+ {
268
+ "source": "din-dke-spec-99100",
269
+ "clause": "6.1.2.4",
270
+ "name": "Manufacturer identifier and information"
271
+ },
272
+ {
273
+ "source": "bpdm-1.2.0",
274
+ "property": "manufacturerInformation"
275
+ }
276
+ ],
277
+ "supersedes": "manufacturer"
278
+ },
279
+ {
280
+ "key": "manufacturerContact",
281
+ "pointer": "/manufacturerContact",
282
+ "label": "Brand contact",
283
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#manufacturerInformation",
284
+ "valueType": "text",
285
+ "cardinality": "one",
286
+ "granularity": "model",
287
+ "provenance": {
288
+ "capture": "brand",
289
+ "onLabel": true
290
+ },
291
+ "accessTier": "public",
292
+ "obligation": "required",
293
+ "legalBasis": "Annex VI Part A(1)",
294
+ "applicability": {
295
+ "rule": "always"
296
+ },
297
+ "sourceRefs": [
298
+ {
299
+ "source": "din-dke-spec-99100",
300
+ "clause": "6.1.2.4",
301
+ "name": "Manufacturer information (contact point)"
302
+ },
303
+ {
304
+ "source": "bpdm-1.2.0",
305
+ "property": "manufacturerInformation.emailAddress"
306
+ }
307
+ ],
308
+ "supersedes": "manufacturerContact",
309
+ "note": "6.1.2.4(c) wants five parts: name, registered trade name or trademark, postal address with a single contact point, web address, e-mail. Our brand record holds one contact string."
310
+ },
311
+ {
312
+ "key": "manufacturingPlace",
313
+ "pointer": "/manufacturingPlace",
314
+ "label": "Place of manufacture",
315
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#manufacturingPlace",
316
+ "valueType": "record",
317
+ "cardinality": "one",
318
+ "granularity": "model",
319
+ "provenance": {
320
+ "capture": "form",
321
+ "onLabel": true
322
+ },
323
+ "accessTier": "public",
324
+ "obligation": "required",
325
+ "legalBasis": "Annex VI Part A(3)",
326
+ "applicability": {
327
+ "rule": "always"
328
+ },
329
+ "sourceRefs": [
330
+ {
331
+ "source": "din-dke-spec-99100",
332
+ "clause": "6.1.3.1",
333
+ "name": "Manufacturing place"
334
+ },
335
+ {
336
+ "source": "bpdm-1.2.0",
337
+ "property": "manufacturingPlace"
338
+ }
339
+ ],
340
+ "supersedes": "made",
341
+ "parts": [
342
+ {
343
+ "key": "site",
344
+ "label": "Plant or city",
345
+ "valueType": "text"
346
+ },
347
+ {
348
+ "key": "country",
349
+ "label": "Country",
350
+ "valueType": "country",
351
+ "constraints": {
352
+ "pattern": "^[A-Z]{2}$",
353
+ "patternHint": "A two-letter country code"
354
+ },
355
+ "required": true
356
+ }
357
+ ],
358
+ "note": "Model level, not unit: it is the plant. A record rather than a sentence, so the country is a code a consumer can group and compare on while the plant stays human-readable. `battery@1` put it on the unit and joined it to the date in one free-text string."
359
+ },
360
+ {
361
+ "key": "manufacturingDate",
362
+ "pointer": "/manufacturingDate",
363
+ "label": "Made",
364
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#manufacturingDate",
365
+ "valueType": "date",
366
+ "cardinality": "one",
367
+ "granularity": "item",
368
+ "provenance": {
369
+ "capture": "form",
370
+ "onLabel": true
371
+ },
372
+ "accessTier": "public",
373
+ "obligation": "required",
374
+ "legalBasis": "Annex VI Part A(4)",
375
+ "applicability": {
376
+ "rule": "always"
377
+ },
378
+ "sourceRefs": [
379
+ {
380
+ "source": "din-dke-spec-99100",
381
+ "clause": "6.1.3.2",
382
+ "name": "Manufacturing date"
383
+ },
384
+ {
385
+ "source": "bpdm-1.2.0",
386
+ "property": "manufacturingDate"
387
+ }
388
+ ],
389
+ "supersedes": "made",
390
+ "note": "The spec caps this at month; the product owner asked for the day (2026-07-27). Day precision truncates to month, so a reader expecting 6.1.3.2 loses nothing. Item level, unlike the place."
391
+ },
392
+ {
393
+ "key": "serviceDate",
394
+ "pointer": "/serviceDate",
395
+ "label": "Put into service",
396
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#puttingIntoService",
397
+ "valueType": "date",
398
+ "cardinality": "one",
399
+ "granularity": "item",
400
+ "provenance": {
401
+ "capture": "event",
402
+ "needsBms": true
403
+ },
404
+ "accessTier": "legitimate",
405
+ "obligation": "required",
406
+ "legalBasis": "Annex XIII (4)",
407
+ "applicability": {
408
+ "rule": "category-in",
409
+ "categories": [
410
+ "stationary",
411
+ "lmt"
412
+ ]
413
+ },
414
+ "sourceRefs": [
415
+ {
416
+ "source": "din-dke-spec-99100",
417
+ "clause": "6.1.3.3",
418
+ "name": "Date of putting the battery into service"
419
+ },
420
+ {
421
+ "source": "bpdm-1.2.0",
422
+ "property": "puttingIntoService"
423
+ }
424
+ ],
425
+ "note": "Restricted, not public, which is counter-intuitive."
426
+ },
427
+ {
428
+ "key": "warrantyUntil",
429
+ "pointer": "/warrantyUntil",
430
+ "label": "Guarantee until",
431
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#warrentyPeriod",
432
+ "valueType": "date",
433
+ "cardinality": "one",
434
+ "granularity": "model",
435
+ "provenance": {
436
+ "capture": "form"
437
+ },
438
+ "accessTier": "public",
439
+ "obligation": "required",
440
+ "legalBasis": "Annex XIII (1m)",
441
+ "applicability": {
442
+ "rule": "always"
443
+ },
444
+ "sourceRefs": [
445
+ {
446
+ "source": "din-dke-spec-99100",
447
+ "clause": "6.1.3.4",
448
+ "name": "Warranty period of the battery"
449
+ },
450
+ {
451
+ "source": "bpdm-1.2.0",
452
+ "property": "warrentyPeriod"
453
+ }
454
+ ],
455
+ "note": "Legal warranty period, or the manufacturer guarantee where longer, from the purchase date. Absent from battery@1."
456
+ },
457
+ {
458
+ "key": "category",
459
+ "pointer": "/category",
460
+ "label": "Category",
461
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryCategory",
462
+ "valueType": "enum",
463
+ "codeList": {
464
+ "closed": true,
465
+ "options": [
466
+ {
467
+ "value": "lmt",
468
+ "label": "Light transport"
469
+ },
470
+ {
471
+ "value": "ev",
472
+ "label": "Vehicle"
473
+ },
474
+ {
475
+ "value": "industrial",
476
+ "label": "Industrial"
477
+ },
478
+ {
479
+ "value": "stationary",
480
+ "label": "Stationary storage"
481
+ }
482
+ ]
483
+ },
484
+ "cardinality": "one",
485
+ "granularity": "model",
486
+ "provenance": {
487
+ "capture": "form",
488
+ "onLabel": true
489
+ },
490
+ "accessTier": "public",
491
+ "obligation": "required",
492
+ "legalBasis": "Annex VI Part A(2); Art. 3",
493
+ "applicability": {
494
+ "rule": "always"
495
+ },
496
+ "sourceRefs": [
497
+ {
498
+ "source": "din-dke-spec-99100",
499
+ "clause": "6.1.3.5",
500
+ "name": "Battery category"
501
+ },
502
+ {
503
+ "source": "bpdm-1.2.0",
504
+ "property": "batteryCategory"
505
+ }
506
+ ],
507
+ "supersedes": "kind",
508
+ "note": "May change when a new passport is issued, for instance an EV battery repurposed into stationary storage. Consumer wording (\"e-bike\") stays in the UI; the payload carries the category."
509
+ },
510
+ {
511
+ "key": "massKg",
512
+ "pointer": "/massKg",
513
+ "label": "Mass",
514
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryMass",
515
+ "valueType": "decimal",
516
+ "unit": "kg",
517
+ "constraints": {
518
+ "minimum": 0
519
+ },
520
+ "cardinality": "one",
521
+ "granularity": "model",
522
+ "provenance": {
523
+ "capture": "form",
524
+ "onLabel": true
525
+ },
526
+ "accessTier": "public",
527
+ "obligation": "required",
528
+ "legalBasis": "Annex VI Part A(5)",
529
+ "applicability": {
530
+ "rule": "always"
531
+ },
532
+ "sourceRefs": [
533
+ {
534
+ "source": "din-dke-spec-99100",
535
+ "clause": "6.1.3.6",
536
+ "name": "Battery mass"
537
+ },
538
+ {
539
+ "source": "bpdm-1.2.0",
540
+ "property": "batteryMass"
541
+ }
542
+ ],
543
+ "supersedes": "weight",
544
+ "note": "The spec says mass, not weight: BattReg says weight, the physically correct quantity is mass (footnote 5, DIN EN ISO 80000-4). Module and cell mass should also be given, for recycling efficiency."
545
+ },
546
+ {
547
+ "key": "status",
548
+ "pointer": "/status",
549
+ "label": "Status",
550
+ "semanticUri": "urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryStatus",
551
+ "valueType": "enum",
552
+ "codeList": {
553
+ "closed": true,
554
+ "options": [
555
+ {
556
+ "value": "Original",
557
+ "label": "As made"
558
+ },
559
+ {
560
+ "value": "Reused",
561
+ "label": "Re-used"
562
+ },
563
+ {
564
+ "value": "Repurposed",
565
+ "label": "Repurposed"
566
+ },
567
+ {
568
+ "value": "Remanufactured",
569
+ "label": "Remanufactured"
570
+ },
571
+ {
572
+ "value": "Waste",
573
+ "label": "Waste"
574
+ }
575
+ ]
576
+ },
577
+ "cardinality": "one",
578
+ "granularity": "item",
579
+ "provenance": {
580
+ "capture": "event",
581
+ "dynamic": true
582
+ },
583
+ "accessTier": "legitimate",
584
+ "obligation": "required",
585
+ "legalBasis": "Annex XIII 4(c); Art. 77(7)",
586
+ "applicability": {
587
+ "rule": "always"
588
+ },
589
+ "sourceRefs": [
590
+ {
591
+ "source": "din-dke-spec-99100",
592
+ "clause": "6.1.3.7",
593
+ "name": "Battery status"
594
+ },
595
+ {
596
+ "source": "bpdm-1.2.0",
597
+ "property": "batteryStatus"
598
+ }
599
+ ],
600
+ "note": "Our lifecycle already produces this. The spec warns the five words are undefined at source and must travel with a description of the treatments applied."
601
+ },
602
+ {
603
+ "key": "separateCollectionSymbol",
604
+ "pointer": "/separateCollectionSymbol",
605
+ "label": "Separate collection symbol",
606
+ "semanticUri": "urn:samm:io.BatteryPass.Labels:1.2.0#labels",
607
+ "valueType": "graphic",
608
+ "cardinality": "one",
609
+ "granularity": "model",
610
+ "provenance": {
611
+ "capture": "platform",
612
+ "onLabel": true
613
+ },
614
+ "accessTier": "public",
615
+ "obligation": "required",
616
+ "legalBasis": "Art. 13(4); Annex VI Part B; Annex XIII (1q)",
617
+ "applicability": {
618
+ "rule": "always"
619
+ },
620
+ "sourceRefs": [
621
+ {
622
+ "source": "din-dke-spec-99100",
623
+ "clause": "6.2.2",
624
+ "name": "Separate collection symbol"
625
+ },
626
+ {
627
+ "source": "bpdm-1.2.0",
628
+ "property": "labels"
629
+ }
630
+ ],
631
+ "note": "Mandatory on every battery since 18 August 2025. We draw it, nobody types it."
632
+ },
633
+ {
634
+ "key": "elementSymbols",
635
+ "pointer": "/elementSymbols",
636
+ "label": "Element symbols",
637
+ "semanticUri": "urn:samm:io.BatteryPass.Labels:1.2.0#labels",
638
+ "valueType": "graphic",
639
+ "cardinality": "one",
640
+ "granularity": "model",
641
+ "provenance": {
642
+ "capture": "derived",
643
+ "onLabel": true,
644
+ "kind": "calculation"
645
+ },
646
+ "accessTier": "public",
647
+ "obligation": "required",
648
+ "legalBasis": "Art. 13(5); Art. 74(1e); Annex XIII (1s)",
649
+ "applicability": {
650
+ "rule": "always"
651
+ },
652
+ "sourceRefs": [
653
+ {
654
+ "source": "din-dke-spec-99100",
655
+ "clause": "6.2.3",
656
+ "name": "Symbols for cadmium and lead"
657
+ },
658
+ {
659
+ "source": "bpdm-1.2.0",
660
+ "property": "labels"
661
+ }
662
+ ],
663
+ "note": "Required above 0.002% cadmium or 0.004% lead, so derived from the substance figures."
664
+ },
665
+ {
666
+ "key": "carbonFootprintLabel",
667
+ "pointer": "/carbonFootprintLabel",
668
+ "label": "Carbon footprint label",
669
+ "semanticUri": "urn:samm:io.BatteryPass.Labels:1.2.0#labels",
670
+ "valueType": "graphic",
671
+ "cardinality": "one",
672
+ "granularity": "model",
673
+ "provenance": {
674
+ "capture": "derived",
675
+ "onLabel": true,
676
+ "kind": "calculation"
677
+ },
678
+ "accessTier": "public",
679
+ "obligation": "required",
680
+ "legalBasis": "Art. 7(2); Annex XIII (1c)",
681
+ "applicability": {
682
+ "rule": "always"
683
+ },
684
+ "sourceRefs": [
685
+ {
686
+ "source": "din-dke-spec-99100",
687
+ "clause": "6.2.4",
688
+ "name": "Carbon footprint label"
689
+ },
690
+ {
691
+ "source": "bpdm-1.2.0",
692
+ "property": "labels"
693
+ }
694
+ ]
695
+ },
696
+ {
697
+ "key": "extinguishingAgent",
698
+ "pointer": "/extinguishingAgent",
699
+ "label": "Usable extinguishing agent",
700
+ "valueType": "multi",
701
+ "codeList": {
702
+ "closed": false,
703
+ "options": [
704
+ {
705
+ "value": "water",
706
+ "label": "Water"
707
+ },
708
+ {
709
+ "value": "water-mist",
710
+ "label": "Water mist"
711
+ },
712
+ {
713
+ "value": "foam",
714
+ "label": "Foam"
715
+ },
716
+ {
717
+ "value": "co2",
718
+ "label": "Carbon dioxide"
719
+ },
720
+ {
721
+ "value": "dry-powder-abc",
722
+ "label": "Dry powder, ABC"
723
+ },
724
+ {
725
+ "value": "dry-powder-bc",
726
+ "label": "Dry powder, BC"
727
+ },
728
+ {
729
+ "value": "metal-fire-powder",
730
+ "label": "Class D metal-fire powder"
731
+ },
732
+ {
733
+ "value": "sand",
734
+ "label": "Dry sand"
735
+ },
736
+ {
737
+ "value": "vermiculite",
738
+ "label": "Vermiculite"
739
+ },
740
+ {
741
+ "value": "encapsulator",
742
+ "label": "Encapsulating agent"
743
+ }
744
+ ]
745
+ },
746
+ "cardinality": "one",
747
+ "granularity": "model",
748
+ "provenance": {
749
+ "capture": "form",
750
+ "onLabel": true
751
+ },
752
+ "accessTier": "public",
753
+ "obligation": "required",
754
+ "legalBasis": "Annex VI Part A(9)",
755
+ "applicability": {
756
+ "rule": "always"
757
+ },
758
+ "sourceRefs": [
759
+ {
760
+ "source": "din-dke-spec-99100",
761
+ "clause": "6.2.5",
762
+ "name": "Extinguishing agent"
763
+ }
764
+ ],
765
+ "note": "Several agents may be usable, so this takes more than one. Open: the Annex requires the agent to be stated but names no vocabulary, and proprietary agents appear faster than a list is revised."
766
+ },
767
+ {
768
+ "key": "labelMeaning",
769
+ "pointer": "/labelMeaning",
770
+ "label": "What the symbols mean",
771
+ "valueType": "text",
772
+ "cardinality": "one",
773
+ "granularity": "model",
774
+ "provenance": {
775
+ "capture": "platform",
776
+ "onLabel": true
777
+ },
778
+ "accessTier": "public",
779
+ "obligation": "required",
780
+ "legalBasis": "Art. 74(1e); Annex XIII (1s)",
781
+ "applicability": {
782
+ "rule": "always"
783
+ },
784
+ "sourceRefs": [
785
+ {
786
+ "source": "din-dke-spec-99100",
787
+ "clause": "6.2.6",
788
+ "name": "Meaning of labels and symbols"
789
+ }
790
+ ],
791
+ "note": "Standard explanatory copy, the same for every brand. Ours to write once."
792
+ },
793
+ {
794
+ "key": "declarationOfConformity",
795
+ "pointer": "/declarationOfConformity",
796
+ "label": "Declaration of conformity",
797
+ "semanticUri": "urn:samm:io.BatteryPass.Labels:1.2.0#declarationOfConformity",
798
+ "valueType": "document",
799
+ "cardinality": "one",
800
+ "granularity": "model",
801
+ "provenance": {
802
+ "capture": "deferred",
803
+ "onLabel": true
804
+ },
805
+ "accessTier": "public",
806
+ "obligation": "required",
807
+ "legalBasis": "Art. 18; Annex XIII (1r)",
808
+ "applicability": {
809
+ "rule": "always"
810
+ },
811
+ "sourceRefs": [
812
+ {
813
+ "source": "din-dke-spec-99100",
814
+ "clause": "6.2.7",
815
+ "name": "EU declaration of conformity"
816
+ },
817
+ {
818
+ "source": "bpdm-1.2.0",
819
+ "property": "declarationOfConformity"
820
+ }
821
+ ],
822
+ "note": "Public document. Needs the attachment seam we do not have yet."
823
+ },
824
+ {
825
+ "key": "testReports",
826
+ "pointer": "/testReports",
827
+ "label": "Test reports",
828
+ "semanticUri": "urn:samm:io.BatteryPass.Labels:1.2.0#resultOfTestReport",
829
+ "valueType": "document",
830
+ "cardinality": "one",
831
+ "granularity": "model",
832
+ "provenance": {
833
+ "capture": "deferred"
834
+ },
835
+ "accessTier": "authority",
836
+ "obligation": "required",
837
+ "legalBasis": "Annex XIII (3)",
838
+ "applicability": {
839
+ "rule": "always"
840
+ },
841
+ "sourceRefs": [
842
+ {
843
+ "source": "din-dke-spec-99100",
844
+ "clause": "6.2.8",
845
+ "name": "Results of test reports proving compliance"
846
+ },
847
+ {
848
+ "source": "bpdm-1.2.0",
849
+ "property": "resultOfTestReport"
850
+ }
851
+ ],
852
+ "note": "The whole reason the authority tier exists: notified bodies, market surveillance authorities and the Commission, nobody else."
853
+ },
854
+ {
855
+ "key": "carbonFootprint",
856
+ "pointer": "/carbonFootprint",
857
+ "label": "Declared footprint",
858
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint",
859
+ "valueType": "decimal",
860
+ "unit": "kg CO₂e/kWh",
861
+ "constraints": {
862
+ "minimum": 0
863
+ },
864
+ "cardinality": "one",
865
+ "granularity": "model",
866
+ "provenance": {
867
+ "capture": "form",
868
+ "onLabel": true
869
+ },
870
+ "accessTier": "public",
871
+ "obligation": "required",
872
+ "legalBasis": "Art. 7(1); Annex XIII",
873
+ "applicability": {
874
+ "rule": "always"
875
+ },
876
+ "sourceRefs": [
877
+ {
878
+ "source": "din-dke-spec-99100",
879
+ "clause": "6.3.2",
880
+ "name": "Battery carbon footprint per functional unit"
881
+ },
882
+ {
883
+ "source": "bpdm-1.2.0",
884
+ "property": "batteryCarbonFootprint"
885
+ }
886
+ ],
887
+ "supersedes": "carbonDeclared"
888
+ },
889
+ {
890
+ "key": "carbonRawMaterials",
891
+ "pointer": "/carbonRawMaterials",
892
+ "label": "Footprint: raw materials",
893
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage",
894
+ "valueType": "decimal",
895
+ "unit": "kg CO₂e/kWh",
896
+ "constraints": {
897
+ "minimum": 0
898
+ },
899
+ "cardinality": "one",
900
+ "granularity": "model",
901
+ "provenance": {
902
+ "capture": "form"
903
+ },
904
+ "accessTier": "public",
905
+ "obligation": "required",
906
+ "legalBasis": "Art. 7(1)",
907
+ "applicability": {
908
+ "rule": "always"
909
+ },
910
+ "sourceRefs": [
911
+ {
912
+ "source": "din-dke-spec-99100",
913
+ "clause": "6.3.3",
914
+ "name": "Contribution of raw material acquisition and pre-processing lifecycle stage"
915
+ },
916
+ {
917
+ "source": "bpdm-1.2.0",
918
+ "property": "carbonFootprintPerLifecycleStage"
919
+ }
920
+ ]
921
+ },
922
+ {
923
+ "key": "carbonProduction",
924
+ "pointer": "/carbonProduction",
925
+ "label": "Footprint: production",
926
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage",
927
+ "valueType": "decimal",
928
+ "unit": "kg CO₂e/kWh",
929
+ "constraints": {
930
+ "minimum": 0
931
+ },
932
+ "cardinality": "one",
933
+ "granularity": "model",
934
+ "provenance": {
935
+ "capture": "form"
936
+ },
937
+ "accessTier": "public",
938
+ "obligation": "required",
939
+ "legalBasis": "Art. 7(1)",
940
+ "applicability": {
941
+ "rule": "always"
942
+ },
943
+ "sourceRefs": [
944
+ {
945
+ "source": "din-dke-spec-99100",
946
+ "clause": "6.3.4",
947
+ "name": "Contribution of main product production/manufacturing lifecycle stage"
948
+ },
949
+ {
950
+ "source": "bpdm-1.2.0",
951
+ "property": "carbonFootprintPerLifecycleStage"
952
+ }
953
+ ]
954
+ },
955
+ {
956
+ "key": "carbonDistribution",
957
+ "pointer": "/carbonDistribution",
958
+ "label": "Footprint: distribution",
959
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage",
960
+ "valueType": "decimal",
961
+ "unit": "kg CO₂e/kWh",
962
+ "constraints": {
963
+ "minimum": 0
964
+ },
965
+ "cardinality": "one",
966
+ "granularity": "model",
967
+ "provenance": {
968
+ "capture": "form"
969
+ },
970
+ "accessTier": "public",
971
+ "obligation": "required",
972
+ "legalBasis": "Art. 7(1)",
973
+ "applicability": {
974
+ "rule": "always"
975
+ },
976
+ "sourceRefs": [
977
+ {
978
+ "source": "din-dke-spec-99100",
979
+ "clause": "6.3.5",
980
+ "name": "Contribution of distribution lifecycle stage"
981
+ },
982
+ {
983
+ "source": "bpdm-1.2.0",
984
+ "property": "carbonFootprintPerLifecycleStage"
985
+ }
986
+ ]
987
+ },
988
+ {
989
+ "key": "carbonEndOfLife",
990
+ "pointer": "/carbonEndOfLife",
991
+ "label": "Footprint: end of life",
992
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage",
993
+ "valueType": "decimal",
994
+ "unit": "kg CO₂e/kWh",
995
+ "constraints": {
996
+ "minimum": 0
997
+ },
998
+ "cardinality": "one",
999
+ "granularity": "model",
1000
+ "provenance": {
1001
+ "capture": "form"
1002
+ },
1003
+ "accessTier": "public",
1004
+ "obligation": "required",
1005
+ "legalBasis": "Art. 7(1)",
1006
+ "applicability": {
1007
+ "rule": "always"
1008
+ },
1009
+ "sourceRefs": [
1010
+ {
1011
+ "source": "din-dke-spec-99100",
1012
+ "clause": "6.3.6",
1013
+ "name": "Contribution of end of life and recycling lifecycle stage"
1014
+ },
1015
+ {
1016
+ "source": "bpdm-1.2.0",
1017
+ "property": "carbonFootprintPerLifecycleStage"
1018
+ }
1019
+ ]
1020
+ },
1021
+ {
1022
+ "key": "carbonClass",
1023
+ "pointer": "/carbonClass",
1024
+ "label": "Carbon class",
1025
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerformanceClass",
1026
+ "valueType": "text",
1027
+ "constraints": {
1028
+ "maxLength": 32
1029
+ },
1030
+ "cardinality": "one",
1031
+ "granularity": "model",
1032
+ "provenance": {
1033
+ "capture": "form",
1034
+ "onLabel": true
1035
+ },
1036
+ "accessTier": "public",
1037
+ "obligation": "required",
1038
+ "legalBasis": "Art. 7(2); Annex XIII (1c)",
1039
+ "applicability": {
1040
+ "rule": "always"
1041
+ },
1042
+ "sourceRefs": [
1043
+ {
1044
+ "source": "din-dke-spec-99100",
1045
+ "clause": "6.3.7",
1046
+ "name": "Carbon footprint performance class"
1047
+ },
1048
+ {
1049
+ "source": "bpdm-1.2.0",
1050
+ "property": "carbonFootprintPerformanceClass"
1051
+ }
1052
+ ],
1053
+ "awaitingAct": "Art. 7(2) delegated and implementing acts, not yet adopted",
1054
+ "supersedes": "carbonClass",
1055
+ "note": "The one field that cannot be constrained yet, and the reason is stated rather than worked around: both the class set and the declaration format come from acts under Art. 7(2) that have not been adopted. Offering a guessed A-to-G list would publish our invention as the class scheme. The surface says the format is pending instead of presenting an open box as a free choice. Becomes a closed enum the day the act lands."
1056
+ },
1057
+ {
1058
+ "key": "carbonStudyUrl",
1059
+ "pointer": "/carbonStudyUrl",
1060
+ "label": "Footprint study",
1061
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintStudy",
1062
+ "valueType": "url",
1063
+ "cardinality": "one",
1064
+ "granularity": "model",
1065
+ "provenance": {
1066
+ "capture": "form"
1067
+ },
1068
+ "accessTier": "public",
1069
+ "obligation": "required",
1070
+ "legalBasis": "Art. 7(1)",
1071
+ "applicability": {
1072
+ "rule": "always"
1073
+ },
1074
+ "sourceRefs": [
1075
+ {
1076
+ "source": "din-dke-spec-99100",
1077
+ "clause": "6.3.8",
1078
+ "name": "Web link to public carbon footprint study"
1079
+ },
1080
+ {
1081
+ "source": "bpdm-1.2.0",
1082
+ "property": "carbonFootprintStudy"
1083
+ }
1084
+ ],
1085
+ "note": "The declaration alone does not discharge the duty; the study has to be reachable."
1086
+ },
1087
+ {
1088
+ "key": "carbonGeneralInfo",
1089
+ "pointer": "/carbonGeneralInfo",
1090
+ "label": "Battery and brand information",
1091
+ "valueType": "text",
1092
+ "cardinality": "one",
1093
+ "granularity": "model",
1094
+ "provenance": {
1095
+ "capture": "derived",
1096
+ "kind": "calculation"
1097
+ },
1098
+ "accessTier": "public",
1099
+ "obligation": "required",
1100
+ "legalBasis": "Art. 7(1)",
1101
+ "applicability": {
1102
+ "rule": "always"
1103
+ },
1104
+ "sourceRefs": [
1105
+ {
1106
+ "source": "din-dke-spec-99100",
1107
+ "clause": "6.3.9",
1108
+ "name": "General battery and manufacturer information"
1109
+ }
1110
+ ],
1111
+ "note": "The spec points back at 6.1 and 6.2 rather than adding fields."
1112
+ },
1113
+ {
1114
+ "key": "carbonAbsolute",
1115
+ "pointer": "/carbonAbsolute",
1116
+ "label": "Total footprint",
1117
+ "semanticUri": "urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint",
1118
+ "valueType": "decimal",
1119
+ "unit": "t CO₂e",
1120
+ "constraints": {
1121
+ "minimum": 0
1122
+ },
1123
+ "cardinality": "one",
1124
+ "granularity": "model",
1125
+ "provenance": {
1126
+ "capture": "form"
1127
+ },
1128
+ "accessTier": "public",
1129
+ "obligation": "recommended",
1130
+ "legalBasis": "none (spec recommendation)",
1131
+ "applicability": {
1132
+ "rule": "always"
1133
+ },
1134
+ "sourceRefs": [
1135
+ {
1136
+ "source": "din-dke-spec-99100",
1137
+ "clause": "6.3.10",
1138
+ "name": "Absolute battery carbon footprint"
1139
+ },
1140
+ {
1141
+ "source": "bpdm-1.2.0",
1142
+ "property": "absoluteCarbonFootprint"
1143
+ }
1144
+ ]
1145
+ },
1146
+ {
1147
+ "key": "dueDiligenceReport",
1148
+ "pointer": "/dueDiligenceReport",
1149
+ "label": "Due diligence report",
1150
+ "semanticUri": "urn:samm:io.BatteryPass.SupplyChainDueDiligence:1.2.0#supplyChainDueDiligenceReport",
1151
+ "valueType": "document",
1152
+ "cardinality": "one",
1153
+ "granularity": "model",
1154
+ "provenance": {
1155
+ "capture": "form"
1156
+ },
1157
+ "accessTier": "public",
1158
+ "obligation": "required",
1159
+ "legalBasis": "Annex XIII (1d); Art. 52(3)",
1160
+ "applicability": {
1161
+ "rule": "always"
1162
+ },
1163
+ "sourceRefs": [
1164
+ {
1165
+ "source": "din-dke-spec-99100",
1166
+ "clause": "6.4.2",
1167
+ "name": "Information of due diligence report in the battery passport"
1168
+ },
1169
+ {
1170
+ "source": "bpdm-1.2.0",
1171
+ "property": "supplyChainDueDiligenceReport"
1172
+ }
1173
+ ],
1174
+ "supersedes": "dueDiligence",
1175
+ "note": "battery@1 takes a reference string. The duty is a published report, so a link is the honest minimum."
1176
+ },
1177
+ {
1178
+ "key": "dueDiligenceAssurances",
1179
+ "pointer": "/dueDiligenceAssurances",
1180
+ "label": "Third-party assurance",
1181
+ "semanticUri": "urn:samm:io.BatteryPass.SupplyChainDueDiligence:1.2.0#thirdPartyAussurances",
1182
+ "valueType": "record",
1183
+ "cardinality": "many",
1184
+ "granularity": "model",
1185
+ "provenance": {
1186
+ "capture": "form"
1187
+ },
1188
+ "accessTier": "public",
1189
+ "obligation": "recommended",
1190
+ "legalBasis": "Art. 53",
1191
+ "applicability": {
1192
+ "rule": "always"
1193
+ },
1194
+ "sourceRefs": [
1195
+ {
1196
+ "source": "din-dke-spec-99100",
1197
+ "clause": "6.4.3",
1198
+ "name": "Third-party assurances of recognised schemes"
1199
+ },
1200
+ {
1201
+ "source": "bpdm-1.2.0",
1202
+ "property": "thirdPartyAussurances"
1203
+ }
1204
+ ],
1205
+ "parts": [
1206
+ {
1207
+ "key": "scheme",
1208
+ "label": "Scheme",
1209
+ "valueType": "text",
1210
+ "required": true
1211
+ },
1212
+ {
1213
+ "key": "assurer",
1214
+ "label": "Who verified it",
1215
+ "valueType": "text",
1216
+ "required": true
1217
+ },
1218
+ {
1219
+ "key": "reference",
1220
+ "label": "Certificate reference",
1221
+ "valueType": "text"
1222
+ }
1223
+ ],
1224
+ "note": "A record, because an assurance is only worth what the verifier is worth: naming the scheme without the body that certified against it is unfalsifiable. The scheme name stays open text rather than a list, since recognition itself arrives by implementing and delegated acts under Art. 53."
1225
+ },
1226
+ {
1227
+ "key": "supplyChainIndices",
1228
+ "pointer": "/supplyChainIndices",
1229
+ "label": "Supply chain indices",
1230
+ "semanticUri": "urn:samm:io.BatteryPass.SupplyChainDueDiligence:1.2.0#supplyChainIndicies",
1231
+ "valueType": "text",
1232
+ "cardinality": "one",
1233
+ "granularity": "model",
1234
+ "provenance": {
1235
+ "capture": "deferred"
1236
+ },
1237
+ "accessTier": "public",
1238
+ "obligation": "recommended",
1239
+ "legalBasis": "none (spec recommendation)",
1240
+ "applicability": {
1241
+ "rule": "always"
1242
+ },
1243
+ "sourceRefs": [
1244
+ {
1245
+ "source": "din-dke-spec-99100",
1246
+ "clause": "6.4.4",
1247
+ "name": "Supply chain indices"
1248
+ },
1249
+ {
1250
+ "source": "bpdm-1.2.0",
1251
+ "property": "supplyChainIndicies"
1252
+ }
1253
+ ]
1254
+ },
1255
+ {
1256
+ "key": "chemistry",
1257
+ "pointer": "/chemistry",
1258
+ "label": "Chemistry",
1259
+ "semanticUri": "urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryChemistry",
1260
+ "valueType": "enum",
1261
+ "codeList": {
1262
+ "closed": false,
1263
+ "options": [
1264
+ {
1265
+ "value": "LFP",
1266
+ "label": "LFP, lithium iron phosphate"
1267
+ },
1268
+ {
1269
+ "value": "LMFP",
1270
+ "label": "LMFP, lithium manganese iron phosphate"
1271
+ },
1272
+ {
1273
+ "value": "NMC",
1274
+ "label": "NMC, nickel manganese cobalt"
1275
+ },
1276
+ {
1277
+ "value": "NCA",
1278
+ "label": "NCA, nickel cobalt aluminium"
1279
+ },
1280
+ {
1281
+ "value": "LCO",
1282
+ "label": "LCO, lithium cobalt oxide"
1283
+ },
1284
+ {
1285
+ "value": "LMO",
1286
+ "label": "LMO, lithium manganese oxide"
1287
+ },
1288
+ {
1289
+ "value": "LTO",
1290
+ "label": "LTO, lithium titanate"
1291
+ },
1292
+ {
1293
+ "value": "NA-ION",
1294
+ "label": "Sodium-ion"
1295
+ },
1296
+ {
1297
+ "value": "LI-METAL",
1298
+ "label": "Lithium metal"
1299
+ },
1300
+ {
1301
+ "value": "SOLID-STATE",
1302
+ "label": "Solid state"
1303
+ },
1304
+ {
1305
+ "value": "PB-ACID",
1306
+ "label": "Lead-acid"
1307
+ },
1308
+ {
1309
+ "value": "NIMH",
1310
+ "label": "Nickel metal hydride"
1311
+ },
1312
+ {
1313
+ "value": "NICD",
1314
+ "label": "Nickel cadmium"
1315
+ }
1316
+ ]
1317
+ },
1318
+ "cardinality": "one",
1319
+ "granularity": "model",
1320
+ "provenance": {
1321
+ "capture": "form",
1322
+ "onLabel": true
1323
+ },
1324
+ "accessTier": "public",
1325
+ "obligation": "required",
1326
+ "legalBasis": "Annex XIII (1b)",
1327
+ "applicability": {
1328
+ "rule": "always"
1329
+ },
1330
+ "sourceRefs": [
1331
+ {
1332
+ "source": "din-dke-spec-99100",
1333
+ "clause": "6.5.2",
1334
+ "name": "Battery chemistry"
1335
+ },
1336
+ {
1337
+ "source": "bpdm-1.2.0",
1338
+ "property": "batteryChemistry"
1339
+ }
1340
+ ],
1341
+ "supersedes": "chemistry",
1342
+ "note": "An open list, not a closed one: 6.5.2 NOTE records that no unambiguous nomenclature exists yet, so the familiar abbreviations are offered and a value outside them stays valid. The fuller cathode, anode and electrolyte description belongs to electrodeMaterials."
1343
+ },
1344
+ {
1345
+ "key": "criticalRawMaterials",
1346
+ "pointer": "/criticalRawMaterials",
1347
+ "label": "Critical raw materials",
1348
+ "valueType": "multi",
1349
+ "codeList": {
1350
+ "closed": true,
1351
+ "options": [
1352
+ {
1353
+ "value": "aluminium",
1354
+ "label": "Aluminium / bauxite / alumina"
1355
+ },
1356
+ {
1357
+ "value": "antimony",
1358
+ "label": "Antimony"
1359
+ },
1360
+ {
1361
+ "value": "arsenic",
1362
+ "label": "Arsenic"
1363
+ },
1364
+ {
1365
+ "value": "baryte",
1366
+ "label": "Baryte"
1367
+ },
1368
+ {
1369
+ "value": "beryllium",
1370
+ "label": "Beryllium"
1371
+ },
1372
+ {
1373
+ "value": "bismuth",
1374
+ "label": "Bismuth"
1375
+ },
1376
+ {
1377
+ "value": "boron",
1378
+ "label": "Boron"
1379
+ },
1380
+ {
1381
+ "value": "cobalt",
1382
+ "label": "Cobalt"
1383
+ },
1384
+ {
1385
+ "value": "coking-coal",
1386
+ "label": "Coking coal"
1387
+ },
1388
+ {
1389
+ "value": "copper",
1390
+ "label": "Copper"
1391
+ },
1392
+ {
1393
+ "value": "feldspar",
1394
+ "label": "Feldspar"
1395
+ },
1396
+ {
1397
+ "value": "fluorspar",
1398
+ "label": "Fluorspar"
1399
+ },
1400
+ {
1401
+ "value": "gallium",
1402
+ "label": "Gallium"
1403
+ },
1404
+ {
1405
+ "value": "germanium",
1406
+ "label": "Germanium"
1407
+ },
1408
+ {
1409
+ "value": "hafnium",
1410
+ "label": "Hafnium"
1411
+ },
1412
+ {
1413
+ "value": "helium",
1414
+ "label": "Helium"
1415
+ },
1416
+ {
1417
+ "value": "heavy-ree",
1418
+ "label": "Rare earths, heavy"
1419
+ },
1420
+ {
1421
+ "value": "light-ree",
1422
+ "label": "Rare earths, light"
1423
+ },
1424
+ {
1425
+ "value": "lithium",
1426
+ "label": "Lithium"
1427
+ },
1428
+ {
1429
+ "value": "magnesium",
1430
+ "label": "Magnesium"
1431
+ },
1432
+ {
1433
+ "value": "manganese",
1434
+ "label": "Manganese"
1435
+ },
1436
+ {
1437
+ "value": "natural-graphite",
1438
+ "label": "Graphite, natural"
1439
+ },
1440
+ {
1441
+ "value": "nickel",
1442
+ "label": "Nickel, battery grade"
1443
+ },
1444
+ {
1445
+ "value": "niobium",
1446
+ "label": "Niobium"
1447
+ },
1448
+ {
1449
+ "value": "pgm",
1450
+ "label": "Platinum group metals"
1451
+ },
1452
+ {
1453
+ "value": "phosphate-rock",
1454
+ "label": "Phosphate rock"
1455
+ },
1456
+ {
1457
+ "value": "phosphorus",
1458
+ "label": "Phosphorus"
1459
+ },
1460
+ {
1461
+ "value": "scandium",
1462
+ "label": "Scandium"
1463
+ },
1464
+ {
1465
+ "value": "silicon-metal",
1466
+ "label": "Silicon metal"
1467
+ },
1468
+ {
1469
+ "value": "strontium",
1470
+ "label": "Strontium"
1471
+ },
1472
+ {
1473
+ "value": "tantalum",
1474
+ "label": "Tantalum"
1475
+ },
1476
+ {
1477
+ "value": "titanium-metal",
1478
+ "label": "Titanium metal"
1479
+ },
1480
+ {
1481
+ "value": "tungsten",
1482
+ "label": "Tungsten"
1483
+ },
1484
+ {
1485
+ "value": "vanadium",
1486
+ "label": "Vanadium"
1487
+ }
1488
+ ]
1489
+ },
1490
+ "cardinality": "one",
1491
+ "granularity": "model",
1492
+ "provenance": {
1493
+ "capture": "form",
1494
+ "onLabel": true
1495
+ },
1496
+ "accessTier": "public",
1497
+ "obligation": "required",
1498
+ "legalBasis": "Annex XIII (1b); Annex VI Part A(10)",
1499
+ "applicability": {
1500
+ "rule": "always"
1501
+ },
1502
+ "sourceRefs": [
1503
+ {
1504
+ "source": "din-dke-spec-99100",
1505
+ "clause": "6.5.3",
1506
+ "name": "Critical raw materials"
1507
+ }
1508
+ ],
1509
+ "note": "Those present above 0.1% by weight, selected from Reg. (EU) 2024/1252 Annex II. Closed, because that register is exhaustive by law; it is revised at least every three years, so the mirrored list carries that review duty with it."
1510
+ },
1511
+ {
1512
+ "key": "electrodeMaterials",
1513
+ "pointer": "/electrodeMaterials",
1514
+ "label": "Cathode, anode and electrolyte materials",
1515
+ "semanticUri": "urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryMaterials",
1516
+ "valueType": "record",
1517
+ "cardinality": "many",
1518
+ "granularity": "model",
1519
+ "provenance": {
1520
+ "capture": "form"
1521
+ },
1522
+ "accessTier": "legitimate",
1523
+ "obligation": "required",
1524
+ "legalBasis": "Annex XIII (2a)",
1525
+ "applicability": {
1526
+ "rule": "always"
1527
+ },
1528
+ "sourceRefs": [
1529
+ {
1530
+ "source": "din-dke-spec-99100",
1531
+ "clause": "6.5.4",
1532
+ "name": "Materials used in cathode, anode and electrolyte"
1533
+ },
1534
+ {
1535
+ "source": "bpdm-1.2.0",
1536
+ "property": "batteryMaterials"
1537
+ }
1538
+ ],
1539
+ "parts": [
1540
+ {
1541
+ "key": "component",
1542
+ "label": "Component",
1543
+ "valueType": "enum",
1544
+ "codeList": {
1545
+ "closed": true,
1546
+ "options": [
1547
+ {
1548
+ "value": "cathode",
1549
+ "label": "Cathode"
1550
+ },
1551
+ {
1552
+ "value": "anode",
1553
+ "label": "Anode"
1554
+ },
1555
+ {
1556
+ "value": "electrolyte",
1557
+ "label": "Electrolyte"
1558
+ },
1559
+ {
1560
+ "value": "separator",
1561
+ "label": "Separator"
1562
+ },
1563
+ {
1564
+ "value": "casing",
1565
+ "label": "Casing"
1566
+ }
1567
+ ]
1568
+ },
1569
+ "required": true
1570
+ },
1571
+ {
1572
+ "key": "material",
1573
+ "label": "Material",
1574
+ "valueType": "text",
1575
+ "required": true
1576
+ },
1577
+ {
1578
+ "key": "share",
1579
+ "label": "Share by weight",
1580
+ "valueType": "percent",
1581
+ "unit": "%",
1582
+ "constraints": {
1583
+ "minimum": 0,
1584
+ "maximum": 100
1585
+ }
1586
+ }
1587
+ ],
1588
+ "note": "The spec names three components, so the component is a closed list while the material stays open: chemistry nomenclature is unsettled (6.5.2 NOTE) but which part of a cell you are describing is not. Separator and casing are included because a dismantler needs them and the Annex says \"used in\", not \"used in only these three\"."
1589
+ },
1590
+ {
1591
+ "key": "hazardousSubstances",
1592
+ "pointer": "/hazardousSubstances",
1593
+ "label": "Hazardous substances",
1594
+ "semanticUri": "urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstances",
1595
+ "valueType": "record",
1596
+ "cardinality": "many",
1597
+ "granularity": "model",
1598
+ "provenance": {
1599
+ "capture": "form",
1600
+ "onLabel": true
1601
+ },
1602
+ "accessTier": "public",
1603
+ "obligation": "required",
1604
+ "legalBasis": "Annex XIII (1b); Annex VI Part A(8)",
1605
+ "applicability": {
1606
+ "rule": "always"
1607
+ },
1608
+ "sourceRefs": [
1609
+ {
1610
+ "source": "din-dke-spec-99100",
1611
+ "clause": "6.5.5",
1612
+ "name": "Hazardous substances"
1613
+ },
1614
+ {
1615
+ "source": "bpdm-1.2.0",
1616
+ "property": "hazardousSubstances"
1617
+ }
1618
+ ],
1619
+ "parts": [
1620
+ {
1621
+ "key": "name",
1622
+ "label": "Substance",
1623
+ "valueType": "text",
1624
+ "required": true
1625
+ },
1626
+ {
1627
+ "key": "cas",
1628
+ "label": "CAS number",
1629
+ "valueType": "text",
1630
+ "constraints": {
1631
+ "pattern": "^\\d{2,7}-\\d{2}-\\d$",
1632
+ "patternHint": "Two to seven digits, two digits, then a check digit, as in 7439-92-1"
1633
+ },
1634
+ "required": true
1635
+ },
1636
+ {
1637
+ "key": "concentration",
1638
+ "label": "Concentration",
1639
+ "valueType": "percent",
1640
+ "unit": "%",
1641
+ "constraints": {
1642
+ "minimum": 0,
1643
+ "maximum": 100
1644
+ }
1645
+ }
1646
+ ],
1647
+ "note": "Those other than mercury, cadmium and lead. A repeated record rather than a sentence, because each substance needs its own name and CAS number to be machine-checkable. The CAS check digit is computable, so a consumer can verify the number as well as its shape. No closed substance list: the ECHA candidate list runs to hundreds of entries and is revised twice a year, so mirroring it here would go stale between releases."
1648
+ },
1649
+ {
1650
+ "key": "substanceImpact",
1651
+ "pointer": "/substanceImpact",
1652
+ "label": "Effects of those substances",
1653
+ "valueType": "text",
1654
+ "constraints": {
1655
+ "maxLength": 2000
1656
+ },
1657
+ "cardinality": "one",
1658
+ "granularity": "model",
1659
+ "provenance": {
1660
+ "capture": "form",
1661
+ "prose": true
1662
+ },
1663
+ "accessTier": "public",
1664
+ "obligation": "required",
1665
+ "legalBasis": "Art. 74(1f)",
1666
+ "applicability": {
1667
+ "rule": "always"
1668
+ },
1669
+ "sourceRefs": [
1670
+ {
1671
+ "source": "din-dke-spec-99100",
1672
+ "clause": "6.5.6",
1673
+ "name": "Impact of substances on environment, human health, safety, persons"
1674
+ }
1675
+ ],
1676
+ "note": "Prose by nature, and by duty: Art. 74(1f) requires an explanation of impacts on the environment, human health and safety written for a person to act on. A code list would defeat the purpose of the article."
1677
+ },
1678
+ {
1679
+ "key": "dismantlingManual",
1680
+ "pointer": "/dismantlingManual",
1681
+ "label": "Dismantling manual",
1682
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#dismantlingAndRemovalInformation",
1683
+ "valueType": "document",
1684
+ "cardinality": "one",
1685
+ "granularity": "model",
1686
+ "provenance": {
1687
+ "capture": "form"
1688
+ },
1689
+ "accessTier": "legitimate",
1690
+ "obligation": "required",
1691
+ "legalBasis": "Annex XIII (2c)",
1692
+ "applicability": {
1693
+ "rule": "always"
1694
+ },
1695
+ "sourceRefs": [
1696
+ {
1697
+ "source": "din-dke-spec-99100",
1698
+ "clause": "6.6.1.2",
1699
+ "name": "Dismantling information: manuals for the removal and the disassembly of the battery pack"
1700
+ },
1701
+ {
1702
+ "source": "bpdm-1.2.0",
1703
+ "property": "dismantlingAndRemovalInformation"
1704
+ }
1705
+ ],
1706
+ "supersedes": "dismantling",
1707
+ "note": "The duty is the manual, not a reference to one. battery@1 stores a document number."
1708
+ },
1709
+ {
1710
+ "key": "partNumbersUrl",
1711
+ "pointer": "/partNumbersUrl",
1712
+ "label": "Part numbers",
1713
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#sparePartSources",
1714
+ "valueType": "url",
1715
+ "cardinality": "one",
1716
+ "granularity": "model",
1717
+ "provenance": {
1718
+ "capture": "form"
1719
+ },
1720
+ "accessTier": "legitimate",
1721
+ "obligation": "required",
1722
+ "legalBasis": "Annex XIII (2b)",
1723
+ "applicability": {
1724
+ "rule": "always"
1725
+ },
1726
+ "sourceRefs": [
1727
+ {
1728
+ "source": "din-dke-spec-99100",
1729
+ "clause": "6.6.1.3",
1730
+ "name": "Part numbers for components"
1731
+ },
1732
+ {
1733
+ "source": "bpdm-1.2.0",
1734
+ "property": "sparePartSources.components.partNumber"
1735
+ }
1736
+ ]
1737
+ },
1738
+ {
1739
+ "key": "sparePartsAddress",
1740
+ "pointer": "/sparePartsAddress",
1741
+ "label": "Spare parts: postal address",
1742
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#sparePartSources",
1743
+ "valueType": "record",
1744
+ "cardinality": "one",
1745
+ "granularity": "model",
1746
+ "provenance": {
1747
+ "capture": "form"
1748
+ },
1749
+ "accessTier": "legitimate",
1750
+ "obligation": "required",
1751
+ "legalBasis": "Annex XIII (2b)",
1752
+ "applicability": {
1753
+ "rule": "always"
1754
+ },
1755
+ "sourceRefs": [
1756
+ {
1757
+ "source": "din-dke-spec-99100",
1758
+ "clause": "6.6.1.4",
1759
+ "name": "Postal address of sources of spare parts"
1760
+ },
1761
+ {
1762
+ "source": "bpdm-1.2.0",
1763
+ "property": "sparePartSources.addressOfSupplier"
1764
+ }
1765
+ ],
1766
+ "parts": [
1767
+ {
1768
+ "key": "street",
1769
+ "label": "Street",
1770
+ "valueType": "text",
1771
+ "required": true
1772
+ },
1773
+ {
1774
+ "key": "locality",
1775
+ "label": "Town or city",
1776
+ "valueType": "text",
1777
+ "required": true
1778
+ },
1779
+ {
1780
+ "key": "postcode",
1781
+ "label": "Postcode",
1782
+ "valueType": "text"
1783
+ },
1784
+ {
1785
+ "key": "region",
1786
+ "label": "State or region",
1787
+ "valueType": "text"
1788
+ },
1789
+ {
1790
+ "key": "country",
1791
+ "label": "Country",
1792
+ "valueType": "country",
1793
+ "constraints": {
1794
+ "pattern": "^[A-Z]{2}$",
1795
+ "patternHint": "A two-letter country code"
1796
+ },
1797
+ "required": true
1798
+ }
1799
+ ],
1800
+ "note": "A record rather than one box, so the country is a code and the rest stays as postal services expect. Postcode is optional because several countries have none."
1801
+ },
1802
+ {
1803
+ "key": "sparePartsEmail",
1804
+ "pointer": "/sparePartsEmail",
1805
+ "label": "Spare parts: e-mail",
1806
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#sparePartSources",
1807
+ "valueType": "text",
1808
+ "constraints": {
1809
+ "pattern": "^[^@\\s]+@[^@\\s.]+(\\.[^@\\s.]+)+$",
1810
+ "patternHint": "An e-mail address",
1811
+ "maxLength": 254
1812
+ },
1813
+ "cardinality": "one",
1814
+ "granularity": "model",
1815
+ "provenance": {
1816
+ "capture": "form"
1817
+ },
1818
+ "accessTier": "legitimate",
1819
+ "obligation": "required",
1820
+ "legalBasis": "Annex XIII (2b)",
1821
+ "applicability": {
1822
+ "rule": "always"
1823
+ },
1824
+ "sourceRefs": [
1825
+ {
1826
+ "source": "din-dke-spec-99100",
1827
+ "clause": "6.6.1.4",
1828
+ "name": "E-mail address of sources of spare parts"
1829
+ },
1830
+ {
1831
+ "source": "bpdm-1.2.0",
1832
+ "property": "sparePartSources.emailAddressOfSupplier"
1833
+ }
1834
+ ],
1835
+ "note": "Deliberately a permissive shape check, not RFC 5322: the aim is to catch a typo before publication, and a pattern strict enough to be correct rejects addresses that work. 254 is the practical maximum length."
1836
+ },
1837
+ {
1838
+ "key": "sparePartsUrl",
1839
+ "pointer": "/sparePartsUrl",
1840
+ "label": "Spare parts: web address",
1841
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#sparePartSources",
1842
+ "valueType": "url",
1843
+ "cardinality": "one",
1844
+ "granularity": "model",
1845
+ "provenance": {
1846
+ "capture": "form"
1847
+ },
1848
+ "accessTier": "legitimate",
1849
+ "obligation": "required",
1850
+ "legalBasis": "Annex XIII (2b)",
1851
+ "applicability": {
1852
+ "rule": "always"
1853
+ },
1854
+ "sourceRefs": [
1855
+ {
1856
+ "source": "din-dke-spec-99100",
1857
+ "clause": "6.6.1.4",
1858
+ "name": "Web address of sources of spare parts"
1859
+ },
1860
+ {
1861
+ "source": "bpdm-1.2.0",
1862
+ "property": "sparePartSources.supplierWebAddress"
1863
+ }
1864
+ ]
1865
+ },
1866
+ {
1867
+ "key": "safetyMeasures",
1868
+ "pointer": "/safetyMeasures",
1869
+ "label": "Safety measures",
1870
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#safetyMeasures",
1871
+ "valueType": "document",
1872
+ "cardinality": "one",
1873
+ "granularity": "model",
1874
+ "provenance": {
1875
+ "capture": "form"
1876
+ },
1877
+ "accessTier": "legitimate",
1878
+ "obligation": "required",
1879
+ "legalBasis": "Annex XIII (2d)",
1880
+ "applicability": {
1881
+ "rule": "always"
1882
+ },
1883
+ "sourceRefs": [
1884
+ {
1885
+ "source": "din-dke-spec-99100",
1886
+ "clause": "6.6.1.5",
1887
+ "name": "Safety measures"
1888
+ },
1889
+ {
1890
+ "source": "bpdm-1.2.0",
1891
+ "property": "safetyMeasures"
1892
+ }
1893
+ ],
1894
+ "note": "Restricted and detailed. Distinct from the public consumer safety line battery@1 carries as `safety`."
1895
+ },
1896
+ {
1897
+ "key": "recycledShareTotal",
1898
+ "pointer": "/recycledShareTotal",
1899
+ "label": "Recycled content",
1900
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
1901
+ "valueType": "percent",
1902
+ "unit": "%",
1903
+ "constraints": {
1904
+ "minimum": 0,
1905
+ "maximum": 100
1906
+ },
1907
+ "cardinality": "one",
1908
+ "granularity": "model",
1909
+ "provenance": {
1910
+ "capture": "derived",
1911
+ "kind": "calculation"
1912
+ },
1913
+ "accessTier": "public",
1914
+ "obligation": "required",
1915
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
1916
+ "applicability": {
1917
+ "rule": "always"
1918
+ },
1919
+ "sourceRefs": [
1920
+ {
1921
+ "source": "din-dke-spec-99100",
1922
+ "clause": "6.6.2.2",
1923
+ "name": "Pre-consumer and post-consumer recycled cobalt, lithium, nickel and lead share"
1924
+ },
1925
+ {
1926
+ "source": "bpdm-1.2.0",
1927
+ "property": "recycledContent"
1928
+ }
1929
+ ],
1930
+ "supersedes": "recycledContent",
1931
+ "note": "The umbrella figure over the eight splits below. Scoped per model per year per manufacturing plant, which is finer than model level alone. Annex C carries the mandatory targets."
1932
+ },
1933
+ {
1934
+ "key": "recycledNickelPre",
1935
+ "pointer": "/recycledNickelPre",
1936
+ "label": "Nickel, pre-consumer",
1937
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
1938
+ "valueType": "percent",
1939
+ "unit": "%",
1940
+ "constraints": {
1941
+ "minimum": 0,
1942
+ "maximum": 100
1943
+ },
1944
+ "cardinality": "one",
1945
+ "granularity": "model",
1946
+ "provenance": {
1947
+ "capture": "form"
1948
+ },
1949
+ "accessTier": "public",
1950
+ "obligation": "required",
1951
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
1952
+ "applicability": {
1953
+ "rule": "always"
1954
+ },
1955
+ "sourceRefs": [
1956
+ {
1957
+ "source": "din-dke-spec-99100",
1958
+ "clause": "6.6.2.3",
1959
+ "name": "Pre-consumer recycled nickel share"
1960
+ },
1961
+ {
1962
+ "source": "bpdm-1.2.0",
1963
+ "property": "recycledContent.preConsumerShare"
1964
+ }
1965
+ ]
1966
+ },
1967
+ {
1968
+ "key": "recycledCobaltPre",
1969
+ "pointer": "/recycledCobaltPre",
1970
+ "label": "Cobalt, pre-consumer",
1971
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
1972
+ "valueType": "percent",
1973
+ "unit": "%",
1974
+ "constraints": {
1975
+ "minimum": 0,
1976
+ "maximum": 100
1977
+ },
1978
+ "cardinality": "one",
1979
+ "granularity": "model",
1980
+ "provenance": {
1981
+ "capture": "form"
1982
+ },
1983
+ "accessTier": "public",
1984
+ "obligation": "required",
1985
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
1986
+ "applicability": {
1987
+ "rule": "always"
1988
+ },
1989
+ "sourceRefs": [
1990
+ {
1991
+ "source": "din-dke-spec-99100",
1992
+ "clause": "6.6.2.4",
1993
+ "name": "Pre-consumer recycled cobalt share"
1994
+ },
1995
+ {
1996
+ "source": "bpdm-1.2.0",
1997
+ "property": "recycledContent.preConsumerShare"
1998
+ }
1999
+ ]
2000
+ },
2001
+ {
2002
+ "key": "recycledLithiumPre",
2003
+ "pointer": "/recycledLithiumPre",
2004
+ "label": "Lithium, pre-consumer",
2005
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
2006
+ "valueType": "percent",
2007
+ "unit": "%",
2008
+ "constraints": {
2009
+ "minimum": 0,
2010
+ "maximum": 100
2011
+ },
2012
+ "cardinality": "one",
2013
+ "granularity": "model",
2014
+ "provenance": {
2015
+ "capture": "form"
2016
+ },
2017
+ "accessTier": "public",
2018
+ "obligation": "required",
2019
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
2020
+ "applicability": {
2021
+ "rule": "always"
2022
+ },
2023
+ "sourceRefs": [
2024
+ {
2025
+ "source": "din-dke-spec-99100",
2026
+ "clause": "6.6.2.5",
2027
+ "name": "Pre-consumer recycled lithium share"
2028
+ },
2029
+ {
2030
+ "source": "bpdm-1.2.0",
2031
+ "property": "recycledContent.preConsumerShare"
2032
+ }
2033
+ ]
2034
+ },
2035
+ {
2036
+ "key": "recycledLeadPre",
2037
+ "pointer": "/recycledLeadPre",
2038
+ "label": "Lead, pre-consumer",
2039
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
2040
+ "valueType": "percent",
2041
+ "unit": "%",
2042
+ "constraints": {
2043
+ "minimum": 0,
2044
+ "maximum": 100
2045
+ },
2046
+ "cardinality": "one",
2047
+ "granularity": "model",
2048
+ "provenance": {
2049
+ "capture": "form"
2050
+ },
2051
+ "accessTier": "public",
2052
+ "obligation": "required",
2053
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
2054
+ "applicability": {
2055
+ "rule": "always"
2056
+ },
2057
+ "sourceRefs": [
2058
+ {
2059
+ "source": "din-dke-spec-99100",
2060
+ "clause": "6.6.2.6",
2061
+ "name": "Pre-consumer recycled lead share"
2062
+ },
2063
+ {
2064
+ "source": "bpdm-1.2.0",
2065
+ "property": "recycledContent.preConsumerShare"
2066
+ }
2067
+ ]
2068
+ },
2069
+ {
2070
+ "key": "recycledNickelPost",
2071
+ "pointer": "/recycledNickelPost",
2072
+ "label": "Nickel, post-consumer",
2073
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
2074
+ "valueType": "percent",
2075
+ "unit": "%",
2076
+ "constraints": {
2077
+ "minimum": 0,
2078
+ "maximum": 100
2079
+ },
2080
+ "cardinality": "one",
2081
+ "granularity": "model",
2082
+ "provenance": {
2083
+ "capture": "form"
2084
+ },
2085
+ "accessTier": "public",
2086
+ "obligation": "required",
2087
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
2088
+ "applicability": {
2089
+ "rule": "always"
2090
+ },
2091
+ "sourceRefs": [
2092
+ {
2093
+ "source": "din-dke-spec-99100",
2094
+ "clause": "6.6.2.7",
2095
+ "name": "Post-consumer recycled nickel share"
2096
+ },
2097
+ {
2098
+ "source": "bpdm-1.2.0",
2099
+ "property": "recycledContent.postConsumerShare"
2100
+ }
2101
+ ]
2102
+ },
2103
+ {
2104
+ "key": "recycledCobaltPost",
2105
+ "pointer": "/recycledCobaltPost",
2106
+ "label": "Cobalt, post-consumer",
2107
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
2108
+ "valueType": "percent",
2109
+ "unit": "%",
2110
+ "constraints": {
2111
+ "minimum": 0,
2112
+ "maximum": 100
2113
+ },
2114
+ "cardinality": "one",
2115
+ "granularity": "model",
2116
+ "provenance": {
2117
+ "capture": "form"
2118
+ },
2119
+ "accessTier": "public",
2120
+ "obligation": "required",
2121
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
2122
+ "applicability": {
2123
+ "rule": "always"
2124
+ },
2125
+ "sourceRefs": [
2126
+ {
2127
+ "source": "din-dke-spec-99100",
2128
+ "clause": "6.6.2.8",
2129
+ "name": "Post-consumer recycled cobalt share"
2130
+ },
2131
+ {
2132
+ "source": "bpdm-1.2.0",
2133
+ "property": "recycledContent.postConsumerShare"
2134
+ }
2135
+ ]
2136
+ },
2137
+ {
2138
+ "key": "recycledLithiumPost",
2139
+ "pointer": "/recycledLithiumPost",
2140
+ "label": "Lithium, post-consumer",
2141
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
2142
+ "valueType": "percent",
2143
+ "unit": "%",
2144
+ "constraints": {
2145
+ "minimum": 0,
2146
+ "maximum": 100
2147
+ },
2148
+ "cardinality": "one",
2149
+ "granularity": "model",
2150
+ "provenance": {
2151
+ "capture": "form"
2152
+ },
2153
+ "accessTier": "public",
2154
+ "obligation": "required",
2155
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
2156
+ "applicability": {
2157
+ "rule": "always"
2158
+ },
2159
+ "sourceRefs": [
2160
+ {
2161
+ "source": "din-dke-spec-99100",
2162
+ "clause": "6.6.2.9",
2163
+ "name": "Post-consumer recycled lithium share"
2164
+ },
2165
+ {
2166
+ "source": "bpdm-1.2.0",
2167
+ "property": "recycledContent.postConsumerShare"
2168
+ }
2169
+ ]
2170
+ },
2171
+ {
2172
+ "key": "recycledLeadPost",
2173
+ "pointer": "/recycledLeadPost",
2174
+ "label": "Lead, post-consumer",
2175
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent",
2176
+ "valueType": "percent",
2177
+ "unit": "%",
2178
+ "constraints": {
2179
+ "minimum": 0,
2180
+ "maximum": 100
2181
+ },
2182
+ "cardinality": "one",
2183
+ "granularity": "model",
2184
+ "provenance": {
2185
+ "capture": "form"
2186
+ },
2187
+ "accessTier": "public",
2188
+ "obligation": "required",
2189
+ "legalBasis": "Annex XIII (1e); Art. 8(1)",
2190
+ "applicability": {
2191
+ "rule": "always"
2192
+ },
2193
+ "sourceRefs": [
2194
+ {
2195
+ "source": "din-dke-spec-99100",
2196
+ "clause": "6.6.2.10",
2197
+ "name": "Post-consumer recycled lead share"
2198
+ },
2199
+ {
2200
+ "source": "bpdm-1.2.0",
2201
+ "property": "recycledContent.postConsumerShare"
2202
+ }
2203
+ ]
2204
+ },
2205
+ {
2206
+ "key": "renewableShare",
2207
+ "pointer": "/renewableShare",
2208
+ "label": "Renewable content",
2209
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#renewableContent",
2210
+ "valueType": "percent",
2211
+ "unit": "%",
2212
+ "constraints": {
2213
+ "minimum": 0,
2214
+ "maximum": 100
2215
+ },
2216
+ "cardinality": "one",
2217
+ "granularity": "model",
2218
+ "provenance": {
2219
+ "capture": "form"
2220
+ },
2221
+ "accessTier": "public",
2222
+ "obligation": "required",
2223
+ "legalBasis": "Annex XIII (1f)",
2224
+ "applicability": {
2225
+ "rule": "always"
2226
+ },
2227
+ "sourceRefs": [
2228
+ {
2229
+ "source": "din-dke-spec-99100",
2230
+ "clause": "6.6.2.11",
2231
+ "name": "Renewable content share"
2232
+ },
2233
+ {
2234
+ "source": "bpdm-1.2.0",
2235
+ "property": "renewableContent"
2236
+ }
2237
+ ]
2238
+ },
2239
+ {
2240
+ "key": "endUserWastePrevention",
2241
+ "pointer": "/endUserWastePrevention",
2242
+ "label": "Making it last",
2243
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#endOfLifeInformation",
2244
+ "valueType": "text",
2245
+ "constraints": {
2246
+ "maxLength": 500
2247
+ },
2248
+ "cardinality": "one",
2249
+ "granularity": "model",
2250
+ "provenance": {
2251
+ "capture": "form",
2252
+ "prose": true
2253
+ },
2254
+ "accessTier": "public",
2255
+ "obligation": "required",
2256
+ "legalBasis": "Annex XIII (1s); Art. 74(1a)",
2257
+ "applicability": {
2258
+ "rule": "always"
2259
+ },
2260
+ "sourceRefs": [
2261
+ {
2262
+ "source": "din-dke-spec-99100",
2263
+ "clause": "6.6.3.2",
2264
+ "name": "Information on the role of end-users in contributing to waste prevention"
2265
+ },
2266
+ {
2267
+ "source": "bpdm-1.2.0",
2268
+ "property": "endOfLifeInformation"
2269
+ }
2270
+ ],
2271
+ "note": "Information, not a document. The clause asks what the end user should do; a sentence on the passport answers that where a linked PDF defers it. Typed as a document until 2026-07-28, which is why the consumer page carried three labels with nothing behind them: the attachment seam is G16, so a document can only be a link, and a sample can only ever declare a reserved host. A brand holding a real document declares its URL here and the surface links it, because the care block sorts on the value rather than the type."
2272
+ },
2273
+ {
2274
+ "key": "endUserCollection",
2275
+ "pointer": "/endUserCollection",
2276
+ "label": "Where to return it",
2277
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#endOfLifeInformation",
2278
+ "valueType": "text",
2279
+ "constraints": {
2280
+ "maxLength": 500
2281
+ },
2282
+ "cardinality": "one",
2283
+ "granularity": "model",
2284
+ "provenance": {
2285
+ "capture": "form",
2286
+ "prose": true
2287
+ },
2288
+ "accessTier": "public",
2289
+ "obligation": "required",
2290
+ "legalBasis": "Annex XIII (1s); Art. 74",
2291
+ "applicability": {
2292
+ "rule": "always"
2293
+ },
2294
+ "sourceRefs": [
2295
+ {
2296
+ "source": "din-dke-spec-99100",
2297
+ "clause": "6.6.3.3",
2298
+ "name": "Information on the role of end-users in contributing to the separate collection of waste batteries"
2299
+ },
2300
+ {
2301
+ "source": "bpdm-1.2.0",
2302
+ "property": "endOfLifeInformation"
2303
+ }
2304
+ ],
2305
+ "supersedes": "collection",
2306
+ "note": "battery@1 carried this as a sentence, which reads better on a consumer page than a linked PDF. Retyped from document to text on 2026-07-28 to do what that note asked for, matching the textile registry, which answers the same question in prose and reads the better for it."
2307
+ },
2308
+ {
2309
+ "key": "endOfLifeTreatment",
2310
+ "pointer": "/endOfLifeTreatment",
2311
+ "label": "End of life",
2312
+ "semanticUri": "urn:samm:io.BatteryPass.Circularity:1.2.0#endOfLifeInformation",
2313
+ "valueType": "text",
2314
+ "constraints": {
2315
+ "maxLength": 500
2316
+ },
2317
+ "cardinality": "one",
2318
+ "granularity": "model",
2319
+ "provenance": {
2320
+ "capture": "form",
2321
+ "prose": true
2322
+ },
2323
+ "accessTier": "public",
2324
+ "obligation": "required",
2325
+ "legalBasis": "Annex XIII (1s); Art. 74",
2326
+ "applicability": {
2327
+ "rule": "always"
2328
+ },
2329
+ "sourceRefs": [
2330
+ {
2331
+ "source": "din-dke-spec-99100",
2332
+ "clause": "6.6.3.4",
2333
+ "name": "Information on battery collection, preparation for second life and on treatment at end of life"
2334
+ },
2335
+ {
2336
+ "source": "bpdm-1.2.0",
2337
+ "property": "endOfLifeInformation"
2338
+ }
2339
+ ],
2340
+ "note": "Retyped with the other two end-user clauses on 2026-07-28. What actually happens to the battery is a thing a reader can be told in three sentences, and a document reference tells them nothing at all until they open it."
2341
+ },
2342
+ {
2343
+ "key": "ratedCapacityAh",
2344
+ "pointer": "/ratedCapacityAh",
2345
+ "label": "Rated capacity",
2346
+ "valueType": "decimal",
2347
+ "unit": "Ah",
2348
+ "constraints": {
2349
+ "minimum": 0
2350
+ },
2351
+ "cardinality": "one",
2352
+ "granularity": "model",
2353
+ "provenance": {
2354
+ "capture": "form",
2355
+ "onLabel": true
2356
+ },
2357
+ "accessTier": "public",
2358
+ "obligation": "required",
2359
+ "legalBasis": "Annex IV Part A(1); Annex VI Part A(6)",
2360
+ "applicability": {
2361
+ "rule": "always"
2362
+ },
2363
+ "sourceRefs": [
2364
+ {
2365
+ "source": "din-dke-spec-99100",
2366
+ "clause": "6.7.2.2",
2367
+ "name": "Rated capacity"
2368
+ }
2369
+ ],
2370
+ "supersedes": "ratedCapacity",
2371
+ "note": "Ampere-hours. battery@1 held a free string and the sample filled it with 630 Wh, which is energy: a different attribute (6.7.2.5)."
2372
+ },
2373
+ {
2374
+ "key": "remainingCapacityAh",
2375
+ "pointer": "/remainingCapacityAh",
2376
+ "label": "Remaining capacity",
2377
+ "valueType": "decimal",
2378
+ "unit": "Ah",
2379
+ "constraints": {
2380
+ "minimum": 0
2381
+ },
2382
+ "cardinality": "one",
2383
+ "granularity": "item",
2384
+ "provenance": {
2385
+ "capture": "event",
2386
+ "dynamic": true,
2387
+ "needsBms": true
2388
+ },
2389
+ "accessTier": "legitimate",
2390
+ "obligation": "required",
2391
+ "legalBasis": "Annex VII Part A(1)",
2392
+ "applicability": {
2393
+ "rule": "category-in",
2394
+ "categories": [
2395
+ "stationary",
2396
+ "lmt"
2397
+ ]
2398
+ },
2399
+ "sourceRefs": [
2400
+ {
2401
+ "source": "din-dke-spec-99100",
2402
+ "clause": "6.7.2.3",
2403
+ "name": "Remaining capacity"
2404
+ }
2405
+ ]
2406
+ },
2407
+ {
2408
+ "key": "capacityFade",
2409
+ "pointer": "/capacityFade",
2410
+ "label": "Capacity fade",
2411
+ "valueType": "percent",
2412
+ "unit": "%",
2413
+ "constraints": {
2414
+ "minimum": 0,
2415
+ "maximum": 100
2416
+ },
2417
+ "cardinality": "one",
2418
+ "granularity": "model",
2419
+ "provenance": {
2420
+ "capture": "form"
2421
+ },
2422
+ "accessTier": "legitimate",
2423
+ "obligation": "required",
2424
+ "legalBasis": "Annex IV Part A(1)",
2425
+ "applicability": {
2426
+ "rule": "always"
2427
+ },
2428
+ "sourceRefs": [
2429
+ {
2430
+ "source": "din-dke-spec-99100",
2431
+ "clause": "6.7.2.4",
2432
+ "name": "Capacity fade"
2433
+ }
2434
+ ],
2435
+ "supersedes": "capacityFade",
2436
+ "note": "Model level and static in the spec: the declared fade characteristic, not this unit’s measured loss."
2437
+ },
2438
+ {
2439
+ "key": "certifiedEnergyKwh",
2440
+ "pointer": "/certifiedEnergyKwh",
2441
+ "label": "Usable energy",
2442
+ "valueType": "decimal",
2443
+ "unit": "kWh",
2444
+ "constraints": {
2445
+ "minimum": 0
2446
+ },
2447
+ "cardinality": "one",
2448
+ "granularity": "model",
2449
+ "provenance": {
2450
+ "capture": "form"
2451
+ },
2452
+ "accessTier": "legitimate",
2453
+ "obligation": "recommended",
2454
+ "legalBasis": "added by the consortium, based on UN GTR No 22",
2455
+ "applicability": {
2456
+ "rule": "category-in",
2457
+ "categories": [
2458
+ "ev"
2459
+ ]
2460
+ },
2461
+ "sourceRefs": [
2462
+ {
2463
+ "source": "din-dke-spec-99100",
2464
+ "clause": "6.7.2.5",
2465
+ "name": "Certified usable battery energy"
2466
+ }
2467
+ ]
2468
+ },
2469
+ {
2470
+ "key": "remainingEnergyKwh",
2471
+ "pointer": "/remainingEnergyKwh",
2472
+ "label": "Remaining usable energy",
2473
+ "valueType": "decimal",
2474
+ "unit": "kWh",
2475
+ "constraints": {
2476
+ "minimum": 0
2477
+ },
2478
+ "cardinality": "one",
2479
+ "granularity": "item",
2480
+ "provenance": {
2481
+ "capture": "event",
2482
+ "dynamic": true
2483
+ },
2484
+ "accessTier": "legitimate",
2485
+ "obligation": "recommended",
2486
+ "legalBasis": "added by the consortium, based on UN GTR No 22",
2487
+ "applicability": {
2488
+ "rule": "category-in",
2489
+ "categories": [
2490
+ "ev"
2491
+ ]
2492
+ },
2493
+ "sourceRefs": [
2494
+ {
2495
+ "source": "din-dke-spec-99100",
2496
+ "clause": "6.7.2.6",
2497
+ "name": "Remaining usable battery energy"
2498
+ }
2499
+ ]
2500
+ },
2501
+ {
2502
+ "key": "soce",
2503
+ "pointer": "/soce",
2504
+ "label": "State of certified energy",
2505
+ "valueType": "percent",
2506
+ "unit": "%",
2507
+ "constraints": {
2508
+ "minimum": 0,
2509
+ "maximum": 100
2510
+ },
2511
+ "cardinality": "one",
2512
+ "granularity": "item",
2513
+ "provenance": {
2514
+ "capture": "event",
2515
+ "dynamic": true,
2516
+ "needsBms": true
2517
+ },
2518
+ "accessTier": "legitimate",
2519
+ "obligation": "required",
2520
+ "legalBasis": "UN GTR No 22",
2521
+ "applicability": {
2522
+ "rule": "category-in",
2523
+ "categories": [
2524
+ "ev"
2525
+ ]
2526
+ },
2527
+ "sourceRefs": [
2528
+ {
2529
+ "source": "din-dke-spec-99100",
2530
+ "clause": "6.7.2.7",
2531
+ "name": "State of certified energy (SOCE)"
2532
+ }
2533
+ ]
2534
+ },
2535
+ {
2536
+ "key": "stateOfCharge",
2537
+ "pointer": "/stateOfCharge",
2538
+ "label": "State of charge",
2539
+ "valueType": "percent",
2540
+ "unit": "%",
2541
+ "constraints": {
2542
+ "minimum": 0,
2543
+ "maximum": 100
2544
+ },
2545
+ "cardinality": "one",
2546
+ "granularity": "item",
2547
+ "provenance": {
2548
+ "capture": "event",
2549
+ "dynamic": true
2550
+ },
2551
+ "accessTier": "legitimate",
2552
+ "obligation": "required",
2553
+ "legalBasis": "Annex XIII 4(d)",
2554
+ "applicability": {
2555
+ "rule": "always"
2556
+ },
2557
+ "sourceRefs": [
2558
+ {
2559
+ "source": "din-dke-spec-99100",
2560
+ "clause": "6.7.2.8",
2561
+ "name": "State of charge (SoC)"
2562
+ }
2563
+ ]
2564
+ },
2565
+ {
2566
+ "key": "voltageMin",
2567
+ "pointer": "/voltageMin",
2568
+ "label": "Minimum voltage",
2569
+ "valueType": "decimal",
2570
+ "unit": "V",
2571
+ "constraints": {
2572
+ "minimum": 0
2573
+ },
2574
+ "cardinality": "one",
2575
+ "granularity": "model",
2576
+ "provenance": {
2577
+ "capture": "form"
2578
+ },
2579
+ "accessTier": "public",
2580
+ "obligation": "required",
2581
+ "legalBasis": "Annex XIII (1h)",
2582
+ "applicability": {
2583
+ "rule": "always"
2584
+ },
2585
+ "sourceRefs": [
2586
+ {
2587
+ "source": "din-dke-spec-99100",
2588
+ "clause": "6.7.2.9",
2589
+ "name": "Minimum voltage"
2590
+ }
2591
+ ]
2592
+ },
2593
+ {
2594
+ "key": "voltageMax",
2595
+ "pointer": "/voltageMax",
2596
+ "label": "Maximum voltage",
2597
+ "valueType": "decimal",
2598
+ "unit": "V",
2599
+ "constraints": {
2600
+ "minimum": 0
2601
+ },
2602
+ "cardinality": "one",
2603
+ "granularity": "model",
2604
+ "provenance": {
2605
+ "capture": "form"
2606
+ },
2607
+ "accessTier": "public",
2608
+ "obligation": "required",
2609
+ "legalBasis": "Annex XIII (1h)",
2610
+ "applicability": {
2611
+ "rule": "always"
2612
+ },
2613
+ "sourceRefs": [
2614
+ {
2615
+ "source": "din-dke-spec-99100",
2616
+ "clause": "6.7.2.10",
2617
+ "name": "Maximum voltage"
2618
+ }
2619
+ ]
2620
+ },
2621
+ {
2622
+ "key": "voltageNominal",
2623
+ "pointer": "/voltageNominal",
2624
+ "label": "Nominal voltage",
2625
+ "valueType": "decimal",
2626
+ "unit": "V",
2627
+ "constraints": {
2628
+ "minimum": 0
2629
+ },
2630
+ "cardinality": "one",
2631
+ "granularity": "model",
2632
+ "provenance": {
2633
+ "capture": "form"
2634
+ },
2635
+ "accessTier": "public",
2636
+ "obligation": "required",
2637
+ "legalBasis": "Annex XIII (1h)",
2638
+ "applicability": {
2639
+ "rule": "always"
2640
+ },
2641
+ "sourceRefs": [
2642
+ {
2643
+ "source": "din-dke-spec-99100",
2644
+ "clause": "6.7.2.11",
2645
+ "name": "Nominal voltage"
2646
+ }
2647
+ ]
2648
+ },
2649
+ {
2650
+ "key": "powerOriginal",
2651
+ "pointer": "/powerOriginal",
2652
+ "label": "Original power",
2653
+ "valueType": "integer",
2654
+ "unit": "W",
2655
+ "constraints": {
2656
+ "minimum": 0,
2657
+ "step": 1
2658
+ },
2659
+ "cardinality": "one",
2660
+ "granularity": "model",
2661
+ "provenance": {
2662
+ "capture": "form"
2663
+ },
2664
+ "accessTier": "public",
2665
+ "obligation": "required",
2666
+ "legalBasis": "Annex XIII (1i)",
2667
+ "applicability": {
2668
+ "rule": "always"
2669
+ },
2670
+ "sourceRefs": [
2671
+ {
2672
+ "source": "din-dke-spec-99100",
2673
+ "clause": "6.7.3.2",
2674
+ "name": "Original power capability"
2675
+ }
2676
+ ]
2677
+ },
2678
+ {
2679
+ "key": "powerRemaining",
2680
+ "pointer": "/powerRemaining",
2681
+ "label": "Remaining power",
2682
+ "valueType": "integer",
2683
+ "unit": "W",
2684
+ "constraints": {
2685
+ "minimum": 0,
2686
+ "step": 1
2687
+ },
2688
+ "cardinality": "one",
2689
+ "granularity": "item",
2690
+ "provenance": {
2691
+ "capture": "event",
2692
+ "dynamic": true
2693
+ },
2694
+ "accessTier": "legitimate",
2695
+ "obligation": "required",
2696
+ "legalBasis": "Annex VII Part A(2); Annex IV",
2697
+ "applicability": {
2698
+ "rule": "category-in",
2699
+ "categories": [
2700
+ "stationary",
2701
+ "lmt"
2702
+ ]
2703
+ },
2704
+ "sourceRefs": [
2705
+ {
2706
+ "source": "din-dke-spec-99100",
2707
+ "clause": "6.7.3.3",
2708
+ "name": "Remaining power capability"
2709
+ }
2710
+ ]
2711
+ },
2712
+ {
2713
+ "key": "powerFade",
2714
+ "pointer": "/powerFade",
2715
+ "label": "Power fade",
2716
+ "valueType": "percent",
2717
+ "unit": "%",
2718
+ "constraints": {
2719
+ "minimum": 0,
2720
+ "maximum": 100
2721
+ },
2722
+ "cardinality": "one",
2723
+ "granularity": "model",
2724
+ "provenance": {
2725
+ "capture": "form"
2726
+ },
2727
+ "accessTier": "legitimate",
2728
+ "obligation": "required",
2729
+ "legalBasis": "Annex IV Part A(2)",
2730
+ "applicability": {
2731
+ "rule": "always"
2732
+ },
2733
+ "sourceRefs": [
2734
+ {
2735
+ "source": "din-dke-spec-99100",
2736
+ "clause": "6.7.3.4",
2737
+ "name": "Power fade"
2738
+ }
2739
+ ]
2740
+ },
2741
+ {
2742
+ "key": "powerMax",
2743
+ "pointer": "/powerMax",
2744
+ "label": "Maximum permitted power",
2745
+ "valueType": "integer",
2746
+ "unit": "W",
2747
+ "constraints": {
2748
+ "minimum": 0,
2749
+ "step": 1
2750
+ },
2751
+ "cardinality": "one",
2752
+ "granularity": "model",
2753
+ "provenance": {
2754
+ "capture": "form"
2755
+ },
2756
+ "accessTier": "public",
2757
+ "obligation": "required",
2758
+ "legalBasis": "Annex XIII (1i)",
2759
+ "applicability": {
2760
+ "rule": "always"
2761
+ },
2762
+ "sourceRefs": [
2763
+ {
2764
+ "source": "din-dke-spec-99100",
2765
+ "clause": "6.7.3.5",
2766
+ "name": "Maximum permitted battery power"
2767
+ }
2768
+ ]
2769
+ },
2770
+ {
2771
+ "key": "powerToEnergy",
2772
+ "pointer": "/powerToEnergy",
2773
+ "label": "Power to energy ratio",
2774
+ "valueType": "decimal",
2775
+ "unit": "W/Wh",
2776
+ "constraints": {
2777
+ "minimum": 0
2778
+ },
2779
+ "cardinality": "one",
2780
+ "granularity": "model",
2781
+ "provenance": {
2782
+ "capture": "form"
2783
+ },
2784
+ "accessTier": "legitimate",
2785
+ "obligation": "recommended",
2786
+ "legalBasis": "Annex IV Part B(2)",
2787
+ "applicability": {
2788
+ "rule": "always"
2789
+ },
2790
+ "sourceRefs": [
2791
+ {
2792
+ "source": "din-dke-spec-99100",
2793
+ "clause": "6.7.3.6",
2794
+ "name": "Ratio between nominal battery power and battery energy"
2795
+ }
2796
+ ]
2797
+ },
2798
+ {
2799
+ "key": "roundTripInitial",
2800
+ "pointer": "/roundTripInitial",
2801
+ "label": "Round trip efficiency, initial",
2802
+ "valueType": "percent",
2803
+ "unit": "%",
2804
+ "constraints": {
2805
+ "minimum": 0,
2806
+ "maximum": 100
2807
+ },
2808
+ "cardinality": "one",
2809
+ "granularity": "model",
2810
+ "provenance": {
2811
+ "capture": "form"
2812
+ },
2813
+ "accessTier": "public",
2814
+ "obligation": "required",
2815
+ "legalBasis": "Annex XIII (1n)",
2816
+ "applicability": {
2817
+ "rule": "always"
2818
+ },
2819
+ "sourceRefs": [
2820
+ {
2821
+ "source": "din-dke-spec-99100",
2822
+ "clause": "6.7.4.2",
2823
+ "name": "Initial round trip energy efficiency"
2824
+ }
2825
+ ]
2826
+ },
2827
+ {
2828
+ "key": "roundTripAtHalfLife",
2829
+ "pointer": "/roundTripAtHalfLife",
2830
+ "label": "Round trip efficiency at half life",
2831
+ "valueType": "percent",
2832
+ "unit": "%",
2833
+ "constraints": {
2834
+ "minimum": 0,
2835
+ "maximum": 100
2836
+ },
2837
+ "cardinality": "one",
2838
+ "granularity": "model",
2839
+ "provenance": {
2840
+ "capture": "form"
2841
+ },
2842
+ "accessTier": "public",
2843
+ "obligation": "required",
2844
+ "legalBasis": "Annex XIII (1n)",
2845
+ "applicability": {
2846
+ "rule": "always"
2847
+ },
2848
+ "sourceRefs": [
2849
+ {
2850
+ "source": "din-dke-spec-99100",
2851
+ "clause": "6.7.4.3",
2852
+ "name": "Round trip energy efficiency at 50% of cycle-life"
2853
+ }
2854
+ ]
2855
+ },
2856
+ {
2857
+ "key": "roundTripRemaining",
2858
+ "pointer": "/roundTripRemaining",
2859
+ "label": "Round trip efficiency, remaining",
2860
+ "valueType": "percent",
2861
+ "unit": "%",
2862
+ "constraints": {
2863
+ "minimum": 0,
2864
+ "maximum": 100
2865
+ },
2866
+ "cardinality": "one",
2867
+ "granularity": "item",
2868
+ "provenance": {
2869
+ "capture": "event",
2870
+ "dynamic": true
2871
+ },
2872
+ "accessTier": "legitimate",
2873
+ "obligation": "required",
2874
+ "legalBasis": "Annex VII Part A(3)",
2875
+ "applicability": {
2876
+ "rule": "category-in",
2877
+ "categories": [
2878
+ "stationary"
2879
+ ]
2880
+ },
2881
+ "sourceRefs": [
2882
+ {
2883
+ "source": "din-dke-spec-99100",
2884
+ "clause": "6.7.4.4",
2885
+ "name": "Remaining round trip energy efficiency"
2886
+ }
2887
+ ]
2888
+ },
2889
+ {
2890
+ "key": "roundTripFade",
2891
+ "pointer": "/roundTripFade",
2892
+ "label": "Round trip efficiency fade",
2893
+ "valueType": "percent",
2894
+ "unit": "%",
2895
+ "constraints": {
2896
+ "minimum": 0,
2897
+ "maximum": 100
2898
+ },
2899
+ "cardinality": "one",
2900
+ "granularity": "model",
2901
+ "provenance": {
2902
+ "capture": "form"
2903
+ },
2904
+ "accessTier": "legitimate",
2905
+ "obligation": "required",
2906
+ "legalBasis": "Annex IV Part A(4)",
2907
+ "applicability": {
2908
+ "rule": "always"
2909
+ },
2910
+ "sourceRefs": [
2911
+ {
2912
+ "source": "din-dke-spec-99100",
2913
+ "clause": "6.7.4.5",
2914
+ "name": "Energy round trip efficiency fade"
2915
+ }
2916
+ ]
2917
+ },
2918
+ {
2919
+ "key": "selfDischargeInitial",
2920
+ "pointer": "/selfDischargeInitial",
2921
+ "label": "Self-discharge, initial",
2922
+ "valueType": "decimal",
2923
+ "unit": "%/month",
2924
+ "constraints": {
2925
+ "minimum": 0
2926
+ },
2927
+ "cardinality": "one",
2928
+ "granularity": "model",
2929
+ "provenance": {
2930
+ "capture": "form"
2931
+ },
2932
+ "accessTier": "legitimate",
2933
+ "obligation": "recommended",
2934
+ "legalBasis": "Annex VII Part A(4)",
2935
+ "applicability": {
2936
+ "rule": "category-in",
2937
+ "categories": [
2938
+ "stationary"
2939
+ ]
2940
+ },
2941
+ "sourceRefs": [
2942
+ {
2943
+ "source": "din-dke-spec-99100",
2944
+ "clause": "6.7.4.6",
2945
+ "name": "Initial self-discharge rate"
2946
+ }
2947
+ ]
2948
+ },
2949
+ {
2950
+ "key": "selfDischargeCurrent",
2951
+ "pointer": "/selfDischargeCurrent",
2952
+ "label": "Self-discharge, current",
2953
+ "valueType": "decimal",
2954
+ "unit": "%/month",
2955
+ "constraints": {
2956
+ "minimum": 0
2957
+ },
2958
+ "cardinality": "one",
2959
+ "granularity": "item",
2960
+ "provenance": {
2961
+ "capture": "event",
2962
+ "dynamic": true
2963
+ },
2964
+ "accessTier": "legitimate",
2965
+ "obligation": "recommended",
2966
+ "legalBasis": "Annex VII Part A(4)",
2967
+ "applicability": {
2968
+ "rule": "category-in",
2969
+ "categories": [
2970
+ "stationary"
2971
+ ]
2972
+ },
2973
+ "sourceRefs": [
2974
+ {
2975
+ "source": "din-dke-spec-99100",
2976
+ "clause": "6.7.4.7",
2977
+ "name": "Current self-discharge rate"
2978
+ }
2979
+ ]
2980
+ },
2981
+ {
2982
+ "key": "selfDischargeEvolution",
2983
+ "pointer": "/selfDischargeEvolution",
2984
+ "label": "Self-discharge over time",
2985
+ "valueType": "percent",
2986
+ "unit": "%",
2987
+ "constraints": {
2988
+ "minimum": 0,
2989
+ "maximum": 100
2990
+ },
2991
+ "cardinality": "one",
2992
+ "granularity": "item",
2993
+ "provenance": {
2994
+ "capture": "event",
2995
+ "dynamic": true
2996
+ },
2997
+ "accessTier": "legitimate",
2998
+ "obligation": "required",
2999
+ "legalBasis": "Annex VII Part A(4)",
3000
+ "applicability": {
3001
+ "rule": "category-in",
3002
+ "categories": [
3003
+ "stationary"
3004
+ ]
3005
+ },
3006
+ "sourceRefs": [
3007
+ {
3008
+ "source": "din-dke-spec-99100",
3009
+ "clause": "6.7.4.8",
3010
+ "name": "Evolution of self-discharge rates"
3011
+ }
3012
+ ]
3013
+ },
3014
+ {
3015
+ "key": "resistancePack",
3016
+ "pointer": "/resistancePack",
3017
+ "label": "Internal resistance, pack",
3018
+ "valueType": "decimal",
3019
+ "unit": "Ω",
3020
+ "constraints": {
3021
+ "minimum": 0
3022
+ },
3023
+ "cardinality": "one",
3024
+ "granularity": "model",
3025
+ "provenance": {
3026
+ "capture": "form"
3027
+ },
3028
+ "accessTier": "public",
3029
+ "obligation": "required",
3030
+ "legalBasis": "Annex XIII (1o)",
3031
+ "applicability": {
3032
+ "rule": "always"
3033
+ },
3034
+ "sourceRefs": [
3035
+ {
3036
+ "source": "din-dke-spec-99100",
3037
+ "clause": "6.7.5.2",
3038
+ "name": "Initial internal resistance of battery pack"
3039
+ }
3040
+ ],
3041
+ "note": "Decimal, not an integer: an internal resistance is tens of milliohms, so whole ohms would round every honest value to nought. The unit stays as the spec declares it and the type stops discarding the quantity."
3042
+ },
3043
+ {
3044
+ "key": "resistanceCell",
3045
+ "pointer": "/resistanceCell",
3046
+ "label": "Internal resistance, cell",
3047
+ "valueType": "decimal",
3048
+ "unit": "Ω",
3049
+ "constraints": {
3050
+ "minimum": 0
3051
+ },
3052
+ "cardinality": "one",
3053
+ "granularity": "model",
3054
+ "provenance": {
3055
+ "capture": "form"
3056
+ },
3057
+ "accessTier": "public",
3058
+ "obligation": "required",
3059
+ "legalBasis": "Annex XIII (1o)",
3060
+ "applicability": {
3061
+ "rule": "always"
3062
+ },
3063
+ "sourceRefs": [
3064
+ {
3065
+ "source": "din-dke-spec-99100",
3066
+ "clause": "6.7.5.2",
3067
+ "name": "Initial internal resistance of battery cell"
3068
+ }
3069
+ ],
3070
+ "note": "Decimal, not an integer: an internal resistance is tens of milliohms, so whole ohms would round every honest value to nought. The unit stays as the spec declares it and the type stops discarding the quantity."
3071
+ },
3072
+ {
3073
+ "key": "resistanceModule",
3074
+ "pointer": "/resistanceModule",
3075
+ "label": "Internal resistance, module",
3076
+ "valueType": "decimal",
3077
+ "unit": "Ω",
3078
+ "constraints": {
3079
+ "minimum": 0
3080
+ },
3081
+ "cardinality": "one",
3082
+ "granularity": "model",
3083
+ "provenance": {
3084
+ "capture": "form"
3085
+ },
3086
+ "accessTier": "public",
3087
+ "obligation": "recommended",
3088
+ "legalBasis": "Annex XIII (1o)",
3089
+ "applicability": {
3090
+ "rule": "always"
3091
+ },
3092
+ "sourceRefs": [
3093
+ {
3094
+ "source": "din-dke-spec-99100",
3095
+ "clause": "6.7.5.2",
3096
+ "name": "Initial internal resistance of battery module"
3097
+ }
3098
+ ],
3099
+ "note": "Decimal, not an integer: an internal resistance is tens of milliohms, so whole ohms would round every honest value to nought. The unit stays as the spec declares it and the type stops discarding the quantity."
3100
+ },
3101
+ {
3102
+ "key": "resistanceIncreasePack",
3103
+ "pointer": "/resistanceIncreasePack",
3104
+ "label": "Resistance increase, pack",
3105
+ "valueType": "percent",
3106
+ "unit": "%",
3107
+ "constraints": {
3108
+ "minimum": 0,
3109
+ "maximum": 100
3110
+ },
3111
+ "cardinality": "one",
3112
+ "granularity": "model",
3113
+ "provenance": {
3114
+ "capture": "form"
3115
+ },
3116
+ "accessTier": "legitimate",
3117
+ "obligation": "required",
3118
+ "legalBasis": "Annex IV Part A(3)",
3119
+ "applicability": {
3120
+ "rule": "always"
3121
+ },
3122
+ "sourceRefs": [
3123
+ {
3124
+ "source": "din-dke-spec-99100",
3125
+ "clause": "6.7.5.3",
3126
+ "name": "Internal resistance increase of battery pack"
3127
+ }
3128
+ ]
3129
+ },
3130
+ {
3131
+ "key": "resistanceIncreaseCell",
3132
+ "pointer": "/resistanceIncreaseCell",
3133
+ "label": "Resistance increase, cell",
3134
+ "valueType": "percent",
3135
+ "unit": "%",
3136
+ "constraints": {
3137
+ "minimum": 0,
3138
+ "maximum": 100
3139
+ },
3140
+ "cardinality": "one",
3141
+ "granularity": "model",
3142
+ "provenance": {
3143
+ "capture": "form"
3144
+ },
3145
+ "accessTier": "legitimate",
3146
+ "obligation": "recommended",
3147
+ "legalBasis": "Annex IV Part A(3)",
3148
+ "applicability": {
3149
+ "rule": "always"
3150
+ },
3151
+ "sourceRefs": [
3152
+ {
3153
+ "source": "din-dke-spec-99100",
3154
+ "clause": "6.7.5.3",
3155
+ "name": "Internal resistance increase of battery cell"
3156
+ }
3157
+ ]
3158
+ },
3159
+ {
3160
+ "key": "resistanceIncreaseModule",
3161
+ "pointer": "/resistanceIncreaseModule",
3162
+ "label": "Resistance increase, module",
3163
+ "valueType": "percent",
3164
+ "unit": "%",
3165
+ "constraints": {
3166
+ "minimum": 0,
3167
+ "maximum": 100
3168
+ },
3169
+ "cardinality": "one",
3170
+ "granularity": "model",
3171
+ "provenance": {
3172
+ "capture": "form"
3173
+ },
3174
+ "accessTier": "legitimate",
3175
+ "obligation": "recommended",
3176
+ "legalBasis": "Annex IV Part A(3)",
3177
+ "applicability": {
3178
+ "rule": "always"
3179
+ },
3180
+ "sourceRefs": [
3181
+ {
3182
+ "source": "din-dke-spec-99100",
3183
+ "clause": "6.7.5.3",
3184
+ "name": "Internal resistance increase of battery module"
3185
+ }
3186
+ ]
3187
+ },
3188
+ {
3189
+ "key": "expectedYears",
3190
+ "pointer": "/expectedYears",
3191
+ "label": "Expected life in years",
3192
+ "valueType": "decimal",
3193
+ "unit": "years",
3194
+ "constraints": {
3195
+ "minimum": 0
3196
+ },
3197
+ "cardinality": "one",
3198
+ "granularity": "model",
3199
+ "provenance": {
3200
+ "capture": "form"
3201
+ },
3202
+ "accessTier": "legitimate",
3203
+ "obligation": "required",
3204
+ "legalBasis": "Annex IV Part A(5)",
3205
+ "applicability": {
3206
+ "rule": "always"
3207
+ },
3208
+ "sourceRefs": [
3209
+ {
3210
+ "source": "din-dke-spec-99100",
3211
+ "clause": "6.7.6.2",
3212
+ "name": "Expected lifetime in calendar years"
3213
+ }
3214
+ ],
3215
+ "note": "Restricted, while the cycle count below is public."
3216
+ },
3217
+ {
3218
+ "key": "expectedCycles",
3219
+ "pointer": "/expectedCycles",
3220
+ "label": "Expected life in cycles",
3221
+ "valueType": "integer",
3222
+ "constraints": {
3223
+ "minimum": 0,
3224
+ "step": 1
3225
+ },
3226
+ "cardinality": "one",
3227
+ "granularity": "model",
3228
+ "provenance": {
3229
+ "capture": "form"
3230
+ },
3231
+ "accessTier": "public",
3232
+ "obligation": "required",
3233
+ "legalBasis": "Annex XIII (1j)",
3234
+ "applicability": {
3235
+ "rule": "always"
3236
+ },
3237
+ "sourceRefs": [
3238
+ {
3239
+ "source": "din-dke-spec-99100",
3240
+ "clause": "6.7.6.3",
3241
+ "name": "Expected lifetime: number of charge-discharge cycles"
3242
+ }
3243
+ ],
3244
+ "supersedes": "expectedLife"
3245
+ },
3246
+ {
3247
+ "key": "cyclesUsed",
3248
+ "pointer": "/cyclesUsed",
3249
+ "label": "Cycles so far",
3250
+ "valueType": "integer",
3251
+ "constraints": {
3252
+ "minimum": 0,
3253
+ "step": 1
3254
+ },
3255
+ "cardinality": "one",
3256
+ "granularity": "item",
3257
+ "provenance": {
3258
+ "capture": "event",
3259
+ "dynamic": true
3260
+ },
3261
+ "accessTier": "legitimate",
3262
+ "obligation": "required",
3263
+ "legalBasis": "Annex XIII (4d)",
3264
+ "applicability": {
3265
+ "rule": "always"
3266
+ },
3267
+ "sourceRefs": [
3268
+ {
3269
+ "source": "din-dke-spec-99100",
3270
+ "clause": "6.7.6.4",
3271
+ "name": "Number of full charging and discharging cycles"
3272
+ }
3273
+ ],
3274
+ "supersedes": "chargeCycles"
3275
+ },
3276
+ {
3277
+ "key": "cycleLifeTest",
3278
+ "pointer": "/cycleLifeTest",
3279
+ "label": "Cycle life test used",
3280
+ "valueType": "enum",
3281
+ "codeList": {
3282
+ "closed": false,
3283
+ "options": [
3284
+ {
3285
+ "value": "IEC-61960-3",
3286
+ "label": "IEC 61960-3"
3287
+ },
3288
+ {
3289
+ "value": "IEC-62660-1",
3290
+ "label": "IEC 62660-1"
3291
+ },
3292
+ {
3293
+ "value": "IEC-62620",
3294
+ "label": "IEC 62620"
3295
+ },
3296
+ {
3297
+ "value": "IEC-63330",
3298
+ "label": "IEC 63330"
3299
+ },
3300
+ {
3301
+ "value": "EN-50604-1",
3302
+ "label": "EN 50604-1"
3303
+ },
3304
+ {
3305
+ "value": "UN-GTR-22",
3306
+ "label": "UN GTR No. 22"
3307
+ },
3308
+ {
3309
+ "value": "MANUFACTURER",
3310
+ "label": "The maker's own protocol"
3311
+ }
3312
+ ]
3313
+ },
3314
+ "cardinality": "one",
3315
+ "granularity": "model",
3316
+ "provenance": {
3317
+ "capture": "form"
3318
+ },
3319
+ "accessTier": "public",
3320
+ "obligation": "required",
3321
+ "legalBasis": "Annex XIII (1j)",
3322
+ "applicability": {
3323
+ "rule": "always"
3324
+ },
3325
+ "sourceRefs": [
3326
+ {
3327
+ "source": "din-dke-spec-99100",
3328
+ "clause": "6.7.6.5",
3329
+ "name": "Cycle-life reference test"
3330
+ }
3331
+ ],
3332
+ "note": "Without the test, the cycle figure is not comparable between brands. Open: the applicable standard differs by category and JTC 24 and IEC are still issuing them."
3333
+ },
3334
+ {
3335
+ "key": "cRate",
3336
+ "pointer": "/cRate",
3337
+ "label": "C-rate of that test",
3338
+ "valueType": "decimal",
3339
+ "unit": "A/Ah",
3340
+ "constraints": {
3341
+ "minimum": 0
3342
+ },
3343
+ "cardinality": "one",
3344
+ "granularity": "model",
3345
+ "provenance": {
3346
+ "capture": "form"
3347
+ },
3348
+ "accessTier": "public",
3349
+ "obligation": "required",
3350
+ "legalBasis": "Annex XIII (1p)",
3351
+ "applicability": {
3352
+ "rule": "always"
3353
+ },
3354
+ "sourceRefs": [
3355
+ {
3356
+ "source": "din-dke-spec-99100",
3357
+ "clause": "6.7.6.6",
3358
+ "name": "C-rate of relevant cycle-life test"
3359
+ }
3360
+ ]
3361
+ },
3362
+ {
3363
+ "key": "energyThroughput",
3364
+ "pointer": "/energyThroughput",
3365
+ "label": "Energy through the battery",
3366
+ "valueType": "decimal",
3367
+ "unit": "kWh",
3368
+ "constraints": {
3369
+ "minimum": 0
3370
+ },
3371
+ "cardinality": "one",
3372
+ "granularity": "item",
3373
+ "provenance": {
3374
+ "capture": "event",
3375
+ "dynamic": true
3376
+ },
3377
+ "accessTier": "legitimate",
3378
+ "obligation": "required",
3379
+ "legalBasis": "Annex VII Part B(2)",
3380
+ "applicability": {
3381
+ "rule": "category-in",
3382
+ "categories": [
3383
+ "stationary",
3384
+ "lmt"
3385
+ ]
3386
+ },
3387
+ "sourceRefs": [
3388
+ {
3389
+ "source": "din-dke-spec-99100",
3390
+ "clause": "6.7.6.7",
3391
+ "name": "Energy throughput"
3392
+ }
3393
+ ]
3394
+ },
3395
+ {
3396
+ "key": "capacityThroughput",
3397
+ "pointer": "/capacityThroughput",
3398
+ "label": "Capacity through the battery",
3399
+ "valueType": "decimal",
3400
+ "unit": "Ah",
3401
+ "constraints": {
3402
+ "minimum": 0
3403
+ },
3404
+ "cardinality": "one",
3405
+ "granularity": "item",
3406
+ "provenance": {
3407
+ "capture": "event",
3408
+ "dynamic": true
3409
+ },
3410
+ "accessTier": "legitimate",
3411
+ "obligation": "required",
3412
+ "legalBasis": "Annex VII Part B(3)",
3413
+ "applicability": {
3414
+ "rule": "category-in",
3415
+ "categories": [
3416
+ "stationary",
3417
+ "lmt"
3418
+ ]
3419
+ },
3420
+ "sourceRefs": [
3421
+ {
3422
+ "source": "din-dke-spec-99100",
3423
+ "clause": "6.7.6.8",
3424
+ "name": "Capacity throughput"
3425
+ }
3426
+ ]
3427
+ },
3428
+ {
3429
+ "key": "exhaustionThreshold",
3430
+ "pointer": "/exhaustionThreshold",
3431
+ "label": "Exhaustion threshold",
3432
+ "valueType": "percent",
3433
+ "unit": "%",
3434
+ "constraints": {
3435
+ "minimum": 0,
3436
+ "maximum": 100
3437
+ },
3438
+ "cardinality": "one",
3439
+ "granularity": "model",
3440
+ "provenance": {
3441
+ "capture": "form"
3442
+ },
3443
+ "accessTier": "public",
3444
+ "obligation": "required",
3445
+ "legalBasis": "Annex XIII (1k)",
3446
+ "applicability": {
3447
+ "rule": "category-in",
3448
+ "categories": [
3449
+ "ev"
3450
+ ]
3451
+ },
3452
+ "sourceRefs": [
3453
+ {
3454
+ "source": "din-dke-spec-99100",
3455
+ "clause": "6.7.6.9",
3456
+ "name": "Capacity threshold for exhaustion"
3457
+ }
3458
+ ]
3459
+ },
3460
+ {
3461
+ "key": "temperatureRecord",
3462
+ "pointer": "/temperatureRecord",
3463
+ "label": "Temperature record",
3464
+ "valueType": "decimal",
3465
+ "unit": "°C",
3466
+ "constraints": {
3467
+ "minimum": -60,
3468
+ "maximum": 150
3469
+ },
3470
+ "cardinality": "one",
3471
+ "granularity": "item",
3472
+ "provenance": {
3473
+ "capture": "event",
3474
+ "dynamic": true
3475
+ },
3476
+ "accessTier": "legitimate",
3477
+ "obligation": "required",
3478
+ "legalBasis": "Annex XIII (4d)",
3479
+ "applicability": {
3480
+ "rule": "always"
3481
+ },
3482
+ "sourceRefs": [
3483
+ {
3484
+ "source": "din-dke-spec-99100",
3485
+ "clause": "6.7.7.2",
3486
+ "name": "Temperature information"
3487
+ }
3488
+ ]
3489
+ },
3490
+ {
3491
+ "key": "idleTempLower",
3492
+ "pointer": "/idleTempLower",
3493
+ "label": "Idle temperature, lowest",
3494
+ "valueType": "integer",
3495
+ "unit": "°C",
3496
+ "constraints": {
3497
+ "minimum": -60,
3498
+ "maximum": 150,
3499
+ "step": 1
3500
+ },
3501
+ "cardinality": "one",
3502
+ "granularity": "model",
3503
+ "provenance": {
3504
+ "capture": "form"
3505
+ },
3506
+ "accessTier": "public",
3507
+ "obligation": "required",
3508
+ "legalBasis": "Annex XIII (1l)",
3509
+ "applicability": {
3510
+ "rule": "always"
3511
+ },
3512
+ "sourceRefs": [
3513
+ {
3514
+ "source": "din-dke-spec-99100",
3515
+ "clause": "6.7.7.3",
3516
+ "name": "Temperature range idle state, lower boundary"
3517
+ }
3518
+ ]
3519
+ },
3520
+ {
3521
+ "key": "idleTempUpper",
3522
+ "pointer": "/idleTempUpper",
3523
+ "label": "Idle temperature, highest",
3524
+ "valueType": "integer",
3525
+ "unit": "°C",
3526
+ "constraints": {
3527
+ "minimum": -60,
3528
+ "maximum": 150,
3529
+ "step": 1
3530
+ },
3531
+ "cardinality": "one",
3532
+ "granularity": "model",
3533
+ "provenance": {
3534
+ "capture": "form"
3535
+ },
3536
+ "accessTier": "public",
3537
+ "obligation": "required",
3538
+ "legalBasis": "Annex XIII (1l)",
3539
+ "applicability": {
3540
+ "rule": "always"
3541
+ },
3542
+ "sourceRefs": [
3543
+ {
3544
+ "source": "din-dke-spec-99100",
3545
+ "clause": "6.7.7.4",
3546
+ "name": "Temperature range idle state, upper boundary"
3547
+ }
3548
+ ]
3549
+ },
3550
+ {
3551
+ "key": "timeAboveRange",
3552
+ "pointer": "/timeAboveRange",
3553
+ "label": "Time above range",
3554
+ "valueType": "decimal",
3555
+ "unit": "min",
3556
+ "constraints": {
3557
+ "minimum": 0
3558
+ },
3559
+ "cardinality": "one",
3560
+ "granularity": "item",
3561
+ "provenance": {
3562
+ "capture": "event",
3563
+ "dynamic": true
3564
+ },
3565
+ "accessTier": "legitimate",
3566
+ "obligation": "required",
3567
+ "legalBasis": "Annex VII Part B(4)",
3568
+ "applicability": {
3569
+ "rule": "category-in",
3570
+ "categories": [
3571
+ "stationary",
3572
+ "lmt"
3573
+ ]
3574
+ },
3575
+ "sourceRefs": [
3576
+ {
3577
+ "source": "din-dke-spec-99100",
3578
+ "clause": "6.7.7.5",
3579
+ "name": "Time spent in extreme temperatures above boundary"
3580
+ }
3581
+ ]
3582
+ },
3583
+ {
3584
+ "key": "timeBelowRange",
3585
+ "pointer": "/timeBelowRange",
3586
+ "label": "Time below range",
3587
+ "valueType": "decimal",
3588
+ "unit": "min",
3589
+ "constraints": {
3590
+ "minimum": 0
3591
+ },
3592
+ "cardinality": "one",
3593
+ "granularity": "item",
3594
+ "provenance": {
3595
+ "capture": "event",
3596
+ "dynamic": true
3597
+ },
3598
+ "accessTier": "legitimate",
3599
+ "obligation": "required",
3600
+ "legalBasis": "Annex VII Part B(4)",
3601
+ "applicability": {
3602
+ "rule": "category-in",
3603
+ "categories": [
3604
+ "stationary",
3605
+ "lmt"
3606
+ ]
3607
+ },
3608
+ "sourceRefs": [
3609
+ {
3610
+ "source": "din-dke-spec-99100",
3611
+ "clause": "6.7.7.6",
3612
+ "name": "Time spent in extreme temperatures below boundary"
3613
+ }
3614
+ ]
3615
+ },
3616
+ {
3617
+ "key": "chargingAboveRange",
3618
+ "pointer": "/chargingAboveRange",
3619
+ "label": "Charging above range",
3620
+ "valueType": "decimal",
3621
+ "unit": "min",
3622
+ "constraints": {
3623
+ "minimum": 0
3624
+ },
3625
+ "cardinality": "one",
3626
+ "granularity": "item",
3627
+ "provenance": {
3628
+ "capture": "event",
3629
+ "dynamic": true
3630
+ },
3631
+ "accessTier": "legitimate",
3632
+ "obligation": "required",
3633
+ "legalBasis": "Annex VII Part B(4)",
3634
+ "applicability": {
3635
+ "rule": "category-in",
3636
+ "categories": [
3637
+ "stationary",
3638
+ "lmt"
3639
+ ]
3640
+ },
3641
+ "sourceRefs": [
3642
+ {
3643
+ "source": "din-dke-spec-99100",
3644
+ "clause": "6.7.7.7",
3645
+ "name": "Time spent charging during extreme temperatures above boundary"
3646
+ }
3647
+ ]
3648
+ },
3649
+ {
3650
+ "key": "chargingBelowRange",
3651
+ "pointer": "/chargingBelowRange",
3652
+ "label": "Charging below range",
3653
+ "valueType": "decimal",
3654
+ "unit": "min",
3655
+ "constraints": {
3656
+ "minimum": 0
3657
+ },
3658
+ "cardinality": "one",
3659
+ "granularity": "item",
3660
+ "provenance": {
3661
+ "capture": "event",
3662
+ "dynamic": true
3663
+ },
3664
+ "accessTier": "legitimate",
3665
+ "obligation": "required",
3666
+ "legalBasis": "Annex VII Part B(4)",
3667
+ "applicability": {
3668
+ "rule": "category-in",
3669
+ "categories": [
3670
+ "stationary",
3671
+ "lmt"
3672
+ ]
3673
+ },
3674
+ "sourceRefs": [
3675
+ {
3676
+ "source": "din-dke-spec-99100",
3677
+ "clause": "6.7.7.8",
3678
+ "name": "Time spent charging during extreme temperatures below boundary"
3679
+ }
3680
+ ]
3681
+ },
3682
+ {
3683
+ "key": "deepDischargeEvents",
3684
+ "pointer": "/deepDischargeEvents",
3685
+ "label": "Deep discharges",
3686
+ "valueType": "integer",
3687
+ "constraints": {
3688
+ "minimum": 0,
3689
+ "step": 1
3690
+ },
3691
+ "cardinality": "one",
3692
+ "granularity": "item",
3693
+ "provenance": {
3694
+ "capture": "event",
3695
+ "dynamic": true
3696
+ },
3697
+ "accessTier": "legitimate",
3698
+ "obligation": "required",
3699
+ "legalBasis": "Annex VII",
3700
+ "applicability": {
3701
+ "rule": "category-in",
3702
+ "categories": [
3703
+ "lmt"
3704
+ ]
3705
+ },
3706
+ "sourceRefs": [
3707
+ {
3708
+ "source": "din-dke-spec-99100",
3709
+ "clause": "6.7.8.2",
3710
+ "name": "Number of deep discharge events"
3711
+ }
3712
+ ]
3713
+ },
3714
+ {
3715
+ "key": "overchargeEvents",
3716
+ "pointer": "/overchargeEvents",
3717
+ "label": "Overcharges",
3718
+ "valueType": "integer",
3719
+ "constraints": {
3720
+ "minimum": 0,
3721
+ "step": 1
3722
+ },
3723
+ "cardinality": "one",
3724
+ "granularity": "item",
3725
+ "provenance": {
3726
+ "capture": "event",
3727
+ "dynamic": true
3728
+ },
3729
+ "accessTier": "legitimate",
3730
+ "obligation": "recommended",
3731
+ "legalBasis": "added by the consortium",
3732
+ "applicability": {
3733
+ "rule": "always"
3734
+ },
3735
+ "sourceRefs": [
3736
+ {
3737
+ "source": "din-dke-spec-99100",
3738
+ "clause": "6.7.8.3",
3739
+ "name": "Number of overcharge events"
3740
+ }
3741
+ ]
3742
+ },
3743
+ {
3744
+ "key": "accidents",
3745
+ "pointer": "/accidents",
3746
+ "label": "Accidents",
3747
+ "valueType": "document",
3748
+ "cardinality": "one",
3749
+ "granularity": "item",
3750
+ "provenance": {
3751
+ "capture": "event",
3752
+ "dynamic": true
3753
+ },
3754
+ "accessTier": "legitimate",
3755
+ "obligation": "required",
3756
+ "legalBasis": "Annex XIII (4d)",
3757
+ "applicability": {
3758
+ "rule": "always"
3759
+ },
3760
+ "sourceRefs": [
3761
+ {
3762
+ "source": "din-dke-spec-99100",
3763
+ "clause": "6.7.8.4",
3764
+ "name": "Information on accidents"
3765
+ }
3766
+ ]
3767
+ },
3768
+ {
3769
+ "key": "safety",
3770
+ "pointer": "/safety",
3771
+ "label": "Safety",
3772
+ "valueType": "text",
3773
+ "constraints": {
3774
+ "maxLength": 500
3775
+ },
3776
+ "cardinality": "one",
3777
+ "granularity": "model",
3778
+ "provenance": {
3779
+ "capture": "form",
3780
+ "prose": true
3781
+ },
3782
+ "accessTier": "public",
3783
+ "obligation": "recommended",
3784
+ "legalBasis": "app addition; the spec puts safety measures at 6.6.1.5, restricted",
3785
+ "applicability": {
3786
+ "rule": "always"
3787
+ },
3788
+ "sourceRefs": [
3789
+ {
3790
+ "source": "din-dke-spec-99100",
3791
+ "clause": "app",
3792
+ "name": "not in the spec: plain-language safety line"
3793
+ }
3794
+ ],
3795
+ "supersedes": "safety",
3796
+ "note": "Prose by nature: a plain-language line a consumer reads on the passport. The spec's own safety measures at 6.6.1.5 sit in the restricted tier, so this is the public summary of them, not a substitute."
3797
+ },
3798
+ {
3799
+ "key": "stateOfHealth",
3800
+ "pointer": "/stateOfHealth",
3801
+ "label": "State of health",
3802
+ "valueType": "percent",
3803
+ "unit": "%",
3804
+ "constraints": {
3805
+ "minimum": 0,
3806
+ "maximum": 100
3807
+ },
3808
+ "cardinality": "one",
3809
+ "granularity": "item",
3810
+ "provenance": {
3811
+ "capture": "event",
3812
+ "dynamic": true
3813
+ },
3814
+ "accessTier": "legitimate",
3815
+ "obligation": "recommended",
3816
+ "legalBasis": "app addition; the spec decomposes SoH into Annex VII Part A parameters",
3817
+ "applicability": {
3818
+ "rule": "always"
3819
+ },
3820
+ "sourceRefs": [
3821
+ {
3822
+ "source": "din-dke-spec-99100",
3823
+ "clause": "app",
3824
+ "name": "not in the spec: state of health as a single figure"
3825
+ }
3826
+ ],
3827
+ "supersedes": "stateOfHealth",
3828
+ "note": "Annex VII has no single SoH figure: it lists remaining capacity, remaining power, remaining round trip efficiency, self-discharge evolution and resistance. Our one number is a summary, and should be presented as one."
3829
+ },
3830
+ {
3831
+ "key": "measured",
3832
+ "pointer": "/measured",
3833
+ "label": "Measured by",
3834
+ "valueType": "enum",
3835
+ "codeList": {
3836
+ "closed": true,
3837
+ "options": [
3838
+ {
3839
+ "value": "manufacturer",
3840
+ "label": "The maker"
3841
+ },
3842
+ {
3843
+ "value": "authorised-service",
3844
+ "label": "An authorised service partner"
3845
+ },
3846
+ {
3847
+ "value": "independent-lab",
3848
+ "label": "An independent laboratory"
3849
+ },
3850
+ {
3851
+ "value": "operator",
3852
+ "label": "The operator or fleet"
3853
+ },
3854
+ {
3855
+ "value": "repurposer",
3856
+ "label": "A repurposer"
3857
+ },
3858
+ {
3859
+ "value": "recycler",
3860
+ "label": "A recycler"
3861
+ }
3862
+ ]
3863
+ },
3864
+ "cardinality": "one",
3865
+ "granularity": "item",
3866
+ "provenance": {
3867
+ "capture": "event",
3868
+ "dynamic": true
3869
+ },
3870
+ "accessTier": "legitimate",
3871
+ "obligation": "recommended",
3872
+ "legalBasis": "app addition",
3873
+ "applicability": {
3874
+ "rule": "always"
3875
+ },
3876
+ "sourceRefs": [
3877
+ {
3878
+ "source": "din-dke-spec-99100",
3879
+ "clause": "app",
3880
+ "name": "not in the spec: who measured, and when"
3881
+ }
3882
+ ],
3883
+ "supersedes": "measured",
3884
+ "note": "Closed, and closable because the attribute is ours rather than the spec's: no consumer outside the app depends on this vocabulary, so fixing it costs no interop. Who measured decides how much a reading is worth."
3885
+ }
3886
+ ],
3887
+ "eventMappings": [
3888
+ {
3889
+ "nativeOperation": "ACTIVATE",
3890
+ "eventType": "Origin",
3891
+ "externalEvent": "manufacture or commissioning",
3892
+ "requires": "manufacturing or commissioning evidence naming the facility, time and responsible party; the native ACTIVATE alone records only that a passport was opened",
3893
+ "withoutEvidence": "insufficient-data"
3894
+ },
3895
+ {
3896
+ "nativeOperation": "SOLD",
3897
+ "eventType": "Transfer",
3898
+ "externalEvent": "physical move or change of custody",
3899
+ "requires": "actual source and destination movement or custody evidence; a change of token control is not a shipment",
3900
+ "withoutEvidence": "insufficient-data"
3901
+ },
3902
+ {
3903
+ "nativeOperation": "RESOLD",
3904
+ "eventType": "Transfer",
3905
+ "externalEvent": "physical move or change of custody",
3906
+ "requires": "actual source and destination movement or custody evidence",
3907
+ "withoutEvidence": "insufficient-data"
3908
+ },
3909
+ {
3910
+ "nativeOperation": "TRANSFER",
3911
+ "eventType": "Transfer",
3912
+ "externalEvent": "change of custody",
3913
+ "requires": "custody evidence beyond the token transfer; the transfer of token control alone establishes neither physical movement nor legal title",
3914
+ "withoutEvidence": "insufficient-data"
3915
+ },
3916
+ {
3917
+ "nativeOperation": "REPAIRED",
3918
+ "eventType": "Transformation",
3919
+ "externalEvent": "modification (repair)",
3920
+ "requires": "repair evidence naming what was done, by whom and when",
3921
+ "withoutEvidence": "insufficient-data"
3922
+ },
3923
+ {
3924
+ "nativeOperation": "EDIT",
3925
+ "eventType": "Transformation",
3926
+ "externalEvent": "metadata revision",
3927
+ "requires": "nothing physical: an EDIT is a native metadata operation and maps to a record revision, not a physical transformation",
3928
+ "withoutEvidence": "transformed"
3929
+ },
3930
+ {
3931
+ "nativeOperation": "RECYCLED",
3932
+ "eventType": "Disposition",
3933
+ "externalEvent": "disposition, or a process creating new products or materials",
3934
+ "requires": "recycling evidence distinguishing disposition of this item from a process whose outputs carry new identities",
3935
+ "withoutEvidence": "insufficient-data"
3936
+ }
3937
+ ],
3938
+ "sourceRefs": [
3939
+ {
3940
+ "id": "eu-batteries-regulation",
3941
+ "name": "Regulation (EU) 2023/1542, Article 77 and Annex XIII (normative)",
3942
+ "reference": "https://eur-lex.europa.eu/eli/reg/2023/1542/2025-07-31/eng",
3943
+ "use": "The legal basis every regulated field cites."
3944
+ },
3945
+ {
3946
+ "id": "din-dke-spec-99100",
3947
+ "name": "DIN DKE SPEC 99100:2025-02, cited by clause; a licensed standard, not reproduced",
3948
+ "version": "2025-02",
3949
+ "licensedText": true,
3950
+ "use": "Clause numbers and field names only; no table or text is reproduced."
3951
+ },
3952
+ {
3953
+ "id": "bpdm-1.2.0",
3954
+ "name": "Battery Pass Data Model 1.2.0, CC-BY-4.0, vocabulary only (the \"bpdm\" key)",
3955
+ "version": "1.2.0",
3956
+ "licence": "CC-BY-4.0",
3957
+ "use": "Semantic URIs for alignment."
3958
+ },
3959
+ {
3960
+ "id": "crma-annex-ii",
3961
+ "name": "Regulation (EU) 2024/1252 Annex II, the critical raw materials register",
3962
+ "use": "The legal instrument behind the critical raw materials list."
3963
+ },
3964
+ {
3965
+ "id": "iso3166-alpha-2",
3966
+ "name": "ISO 3166-1 alpha-2, for every value typed country",
3967
+ "use": "The country code register."
3968
+ },
3969
+ {
3970
+ "id": "crma",
3971
+ "name": "Critical Raw Materials Act, Annex II Section 1",
3972
+ "reference": "Regulation (EU) 2024/1252",
3973
+ "use": "The closed option list for criticalRawMaterials. Revised at least every three years, so a consumer should check the list date rather than assume permanence.",
3974
+ "fields": [
3975
+ "criticalRawMaterials"
3976
+ ]
3977
+ },
3978
+ {
3979
+ "id": "iso3166",
3980
+ "name": "ISO 3166-1 alpha-2",
3981
+ "reference": "ISO 3166-1",
3982
+ "use": "Every value typed country. Officially assigned codes only; user-assigned and exceptionally-reserved codes are excluded so a passport cannot name a place no register resolves.",
3983
+ "fields": [
3984
+ "manufacturingPlace.country",
3985
+ "sparePartsAddress.country"
3986
+ ]
3987
+ },
3988
+ {
3989
+ "id": "cas",
3990
+ "name": "CAS Registry Number",
3991
+ "reference": "Chemical Abstracts Service",
3992
+ "use": "The pattern on hazardousSubstances.cas. The final digit is a check digit, so a consumer can verify the number arithmetically and not only its shape.",
3993
+ "fields": [
3994
+ "hazardousSubstances.cas"
3995
+ ]
3996
+ }
3997
+ ],
3998
+ "groups": [
3999
+ {
4000
+ "id": "6.1",
4001
+ "title": "Identification"
4002
+ },
4003
+ {
4004
+ "id": "6.2",
4005
+ "title": "Conformity and symbols"
4006
+ },
4007
+ {
4008
+ "id": "6.3",
4009
+ "title": "Carbon footprint"
4010
+ },
4011
+ {
4012
+ "id": "6.4",
4013
+ "title": "Supply chain"
4014
+ },
4015
+ {
4016
+ "id": "6.5",
4017
+ "title": "Materials"
4018
+ },
4019
+ {
4020
+ "id": "6.6",
4021
+ "title": "Circularity"
4022
+ },
4023
+ {
4024
+ "id": "6.7",
4025
+ "title": "Performance and durability"
4026
+ },
4027
+ {
4028
+ "id": "app",
4029
+ "title": "Beyond the standard"
4030
+ }
4031
+ ],
4032
+ "identity": {
4033
+ "passportIdentifier": "A GS1 Digital Link URI carrying the GTIN under application identifier 01 and the serial under 21 (spec/record-model.md section 3); the enduring identifier never changes across the chain.",
4034
+ "granularities": [
4035
+ "item",
4036
+ "model"
4037
+ ],
4038
+ "itemIdentifier": "serial",
4039
+ "modelIdentifier": "modelName",
4040
+ "parentRelations": [
4041
+ {
4042
+ "child": "item",
4043
+ "parent": "model"
4044
+ }
4045
+ ]
4046
+ }
4047
+ }