@tracepass/dpp-schemas 1.1.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -9
- package/index.json +30 -17
- package/package.json +2 -2
- package/schema.json +9 -0
- package/templates/battery.json +418 -95
- package/templates/construction.json +2 -1
- package/templates/detergents.json +2 -1
- package/templates/electronics.json +2 -1
- package/templates/fmcg.json +2 -1
- package/templates/furniture.json +2 -1
- package/templates/jewelry.json +2 -1
- package/templates/packaging.json +2 -1
- package/templates/paints-coatings.json +2 -1
- package/templates/steel.json +2 -1
- package/templates/textile.json +2 -1
- package/templates/toys.json +2 -1
- package/templates/tyres.json +2 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
[](./LICENSE)
|
|
12
12
|
[](https://www.npmjs.com/package/@tracepass/dpp-schemas)
|
|
13
|
-
[](#whats-in-here)
|
|
14
14
|
[](#whats-in-here)
|
|
15
15
|
[](#no-build-step)
|
|
16
16
|
[](./schema.json)
|
|
@@ -39,12 +39,12 @@ this repository contains.
|
|
|
39
39
|
|
|
40
40
|
## What's in here
|
|
41
41
|
|
|
42
|
-
Thirteen JSON files, one per product category. **1,
|
|
42
|
+
Thirteen JSON files, one per product category. **1,005 fields in total. 189 are required by
|
|
43
43
|
an instrument in force; 215 are anticipated under a rule that has not yet been adopted.**
|
|
44
44
|
|
|
45
45
|
| Category | Fields | Required | Instrument |
|
|
46
46
|
|---|---:|---:|---|
|
|
47
|
-
| `battery` |
|
|
47
|
+
| `battery` | 120 | 55 | Regulation (EU) 2023/1542 |
|
|
48
48
|
| `construction` | 49 | 4 | CPR (EU) 2024/3110 |
|
|
49
49
|
| `detergents` | 87 | 28 | Regulation (EU) 2026/405 |
|
|
50
50
|
| `electronics` | 167 | 4 | ESPR (EU) 2024/1781 |
|
|
@@ -59,9 +59,11 @@ an instrument in force; 215 are anticipated under a rule that has not yet been a
|
|
|
59
59
|
| `tyres` | 95 | 2 | ESPR (EU) 2024/1781 |
|
|
60
60
|
|
|
61
61
|
Battery carries the most required fields because Regulation (EU) 2023/1542 Art. 77 sets a
|
|
62
|
-
real statutory date — 18 February 2027 — rather than awaiting a delegated act. The
|
|
63
|
-
categories
|
|
64
|
-
|
|
62
|
+
real statutory date — 18 February 2027 — rather than awaiting a delegated act. The only
|
|
63
|
+
other categories whose passport duty rests on an adopted instrument are `detergents` and
|
|
64
|
+
`toys` (`dateBasis: "statutory"`); the remaining ten are `"indicative"` — either awaiting
|
|
65
|
+
an ESPR delegated act, or citing an instrument that creates no passport duty at all
|
|
66
|
+
(`paints-coatings`, `packaging`, `construction`).
|
|
65
67
|
|
|
66
68
|
It is not the case that every battery field is required: the template also carries fields that are
|
|
67
69
|
`anticipated` (pending the carbon-footprint and due-diligence implementing acts) and
|
|
@@ -122,9 +124,22 @@ are `"day"` or `"year"`; absent means `"day"`:
|
|
|
122
124
|
2023/1542 Article 77.
|
|
123
125
|
- **`"year"`** — only the year is known, because the governing delegated or implementing
|
|
124
126
|
act is not yet adopted. The day and month are filler. **Do not render these as a
|
|
125
|
-
deadline.** Nine of the thirteen categories are currently `"year"
|
|
126
|
-
|
|
127
|
-
|
|
127
|
+
deadline.** Nine of the thirteen categories are currently `"year"`; the other four
|
|
128
|
+
carry an exact date.
|
|
129
|
+
|
|
130
|
+
**`datePrecision` is not the same question as `dateBasis`, and you usually want the
|
|
131
|
+
latter.** Precision asks *how exact is this date*; basis asks *does an adopted
|
|
132
|
+
instrument set it at all*. `dateBasis: "statutory"` means a provision in force fixes
|
|
133
|
+
the date and it can be cited — exactly three categories: `battery` (2027-02-18,
|
|
134
|
+
Reg (EU) 2023/1542 Art. 77(1)), `detergents` (2029-09-23) and `toys` (2030-08-01).
|
|
135
|
+
The other ten are `"indicative"`: no adopted act sets the date, so it is a planning
|
|
136
|
+
target with no legal force.
|
|
137
|
+
|
|
138
|
+
The two are independent, and `paints-coatings` is why the distinction matters — it has
|
|
139
|
+
`datePrecision: "day"` (2010-01-01 is exact) but `dateBasis: "indicative"`, because the
|
|
140
|
+
Decopaint Directive creates no passport duty at all. An exact date for an obligation
|
|
141
|
+
that does not exist. Filter on `dateBasis`, not on precision, when you need to know
|
|
142
|
+
what is actually mandated.
|
|
128
143
|
|
|
129
144
|
```python
|
|
130
145
|
r = template["regulation"]
|
package/index.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
},
|
|
8
8
|
"totals": {
|
|
9
9
|
"categories": 13,
|
|
10
|
-
"fields":
|
|
11
|
-
"requiredFields":
|
|
10
|
+
"fields": 1005,
|
|
11
|
+
"requiredFields": 189,
|
|
12
12
|
"anticipatedFields": 215
|
|
13
13
|
},
|
|
14
14
|
"categories": [
|
|
@@ -17,14 +17,15 @@
|
|
|
17
17
|
"label": "Battery",
|
|
18
18
|
"file": "templates/battery.json",
|
|
19
19
|
"version": 4,
|
|
20
|
-
"fieldCount":
|
|
21
|
-
"requiredFieldCount":
|
|
20
|
+
"fieldCount": 120,
|
|
21
|
+
"requiredFieldCount": 55,
|
|
22
22
|
"anticipatedFieldCount": 11,
|
|
23
23
|
"regulation": {
|
|
24
24
|
"name": "EU Battery Regulation",
|
|
25
25
|
"number": "(EU) 2023/1542",
|
|
26
26
|
"effectiveDate": "2027-02-18",
|
|
27
|
-
"mandatoryDate": "2027-02-18"
|
|
27
|
+
"mandatoryDate": "2027-02-18",
|
|
28
|
+
"dateBasis": "statutory"
|
|
28
29
|
}
|
|
29
30
|
},
|
|
30
31
|
{
|
|
@@ -41,7 +42,8 @@
|
|
|
41
42
|
"effectiveDate": "2029-01-01",
|
|
42
43
|
"datePrecision": "year",
|
|
43
44
|
"mandatoryDate": "2029-01-01",
|
|
44
|
-
"mandatoryDatePrecision": "year"
|
|
45
|
+
"mandatoryDatePrecision": "year",
|
|
46
|
+
"dateBasis": "indicative"
|
|
45
47
|
}
|
|
46
48
|
},
|
|
47
49
|
{
|
|
@@ -56,7 +58,8 @@
|
|
|
56
58
|
"name": "Detergents Regulation",
|
|
57
59
|
"number": "(EU) 2026/405",
|
|
58
60
|
"effectiveDate": "2029-09-23",
|
|
59
|
-
"mandatoryDate": "2029-09-23"
|
|
61
|
+
"mandatoryDate": "2029-09-23",
|
|
62
|
+
"dateBasis": "statutory"
|
|
60
63
|
}
|
|
61
64
|
},
|
|
62
65
|
{
|
|
@@ -73,7 +76,8 @@
|
|
|
73
76
|
"effectiveDate": "2028-01-01",
|
|
74
77
|
"datePrecision": "year",
|
|
75
78
|
"mandatoryDate": "2029-01-01",
|
|
76
|
-
"mandatoryDatePrecision": "year"
|
|
79
|
+
"mandatoryDatePrecision": "year",
|
|
80
|
+
"dateBasis": "indicative"
|
|
77
81
|
}
|
|
78
82
|
},
|
|
79
83
|
{
|
|
@@ -90,7 +94,8 @@
|
|
|
90
94
|
"effectiveDate": "2028-01-01",
|
|
91
95
|
"datePrecision": "year",
|
|
92
96
|
"mandatoryDate": "2030-01-01",
|
|
93
|
-
"mandatoryDatePrecision": "year"
|
|
97
|
+
"mandatoryDatePrecision": "year",
|
|
98
|
+
"dateBasis": "indicative"
|
|
94
99
|
}
|
|
95
100
|
},
|
|
96
101
|
{
|
|
@@ -107,7 +112,8 @@
|
|
|
107
112
|
"effectiveDate": "2029-01-01",
|
|
108
113
|
"datePrecision": "year",
|
|
109
114
|
"mandatoryDate": "2030-01-01",
|
|
110
|
-
"mandatoryDatePrecision": "year"
|
|
115
|
+
"mandatoryDatePrecision": "year",
|
|
116
|
+
"dateBasis": "indicative"
|
|
111
117
|
}
|
|
112
118
|
},
|
|
113
119
|
{
|
|
@@ -124,7 +130,8 @@
|
|
|
124
130
|
"effectiveDate": "2030-01-01",
|
|
125
131
|
"datePrecision": "year",
|
|
126
132
|
"mandatoryDate": "2030-01-01",
|
|
127
|
-
"mandatoryDatePrecision": "year"
|
|
133
|
+
"mandatoryDatePrecision": "year",
|
|
134
|
+
"dateBasis": "indicative"
|
|
128
135
|
}
|
|
129
136
|
},
|
|
130
137
|
{
|
|
@@ -141,7 +148,8 @@
|
|
|
141
148
|
"effectiveDate": "2027-01-01",
|
|
142
149
|
"datePrecision": "year",
|
|
143
150
|
"mandatoryDate": "2030-01-01",
|
|
144
|
-
"mandatoryDatePrecision": "year"
|
|
151
|
+
"mandatoryDatePrecision": "year",
|
|
152
|
+
"dateBasis": "indicative"
|
|
145
153
|
}
|
|
146
154
|
},
|
|
147
155
|
{
|
|
@@ -156,7 +164,8 @@
|
|
|
156
164
|
"name": "Decopaint Directive",
|
|
157
165
|
"number": "2004/42/EC",
|
|
158
166
|
"effectiveDate": "2010-01-01",
|
|
159
|
-
"mandatoryDate": "2010-01-01"
|
|
167
|
+
"mandatoryDate": "2010-01-01",
|
|
168
|
+
"dateBasis": "indicative"
|
|
160
169
|
}
|
|
161
170
|
},
|
|
162
171
|
{
|
|
@@ -173,7 +182,8 @@
|
|
|
173
182
|
"effectiveDate": "2027-01-01",
|
|
174
183
|
"datePrecision": "year",
|
|
175
184
|
"mandatoryDate": "2028-01-01",
|
|
176
|
-
"mandatoryDatePrecision": "year"
|
|
185
|
+
"mandatoryDatePrecision": "year",
|
|
186
|
+
"dateBasis": "indicative"
|
|
177
187
|
}
|
|
178
188
|
},
|
|
179
189
|
{
|
|
@@ -190,7 +200,8 @@
|
|
|
190
200
|
"effectiveDate": "2028-01-01",
|
|
191
201
|
"datePrecision": "year",
|
|
192
202
|
"mandatoryDate": "2029-01-01",
|
|
193
|
-
"mandatoryDatePrecision": "year"
|
|
203
|
+
"mandatoryDatePrecision": "year",
|
|
204
|
+
"dateBasis": "indicative"
|
|
194
205
|
}
|
|
195
206
|
},
|
|
196
207
|
{
|
|
@@ -205,7 +216,8 @@
|
|
|
205
216
|
"name": "Toy Safety Regulation",
|
|
206
217
|
"number": "(EU) 2025/2509",
|
|
207
218
|
"effectiveDate": "2030-08-01",
|
|
208
|
-
"mandatoryDate": "2030-08-01"
|
|
219
|
+
"mandatoryDate": "2030-08-01",
|
|
220
|
+
"dateBasis": "statutory"
|
|
209
221
|
}
|
|
210
222
|
},
|
|
211
223
|
{
|
|
@@ -222,7 +234,8 @@
|
|
|
222
234
|
"effectiveDate": "2028-01-01",
|
|
223
235
|
"datePrecision": "year",
|
|
224
236
|
"mandatoryDate": "2029-01-01",
|
|
225
|
-
"mandatoryDatePrecision": "year"
|
|
237
|
+
"mandatoryDatePrecision": "year",
|
|
238
|
+
"dateBasis": "indicative"
|
|
226
239
|
}
|
|
227
240
|
}
|
|
228
241
|
]
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracepass/dpp-schemas",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Machine-readable field specifications for EU Digital Product Passports (ESPR)
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Machine-readable field specifications for EU Digital Product Passports (ESPR) \u2014 13 product categories, 1005 fields, each traced to the article of EU law that mandates it. Pure JSON, no dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"digital-product-passport",
|
|
7
7
|
"dpp",
|
package/schema.json
CHANGED
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
],
|
|
92
92
|
"default": "day",
|
|
93
93
|
"description": "How much of mandatoryDate is real. Same semantics as datePrecision."
|
|
94
|
+
},
|
|
95
|
+
"dateBasis": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"enum": [
|
|
98
|
+
"statutory",
|
|
99
|
+
"indicative"
|
|
100
|
+
],
|
|
101
|
+
"default": "statutory",
|
|
102
|
+
"description": "Whether effectiveDate and mandatoryDate rest on an ADOPTED instrument. \"statutory\" = the date is fixed by a provision in force and can be cited (battery: 2027-02-18, Reg (EU) 2023/1542 Art. 77(1)). \"indicative\" = NO adopted act sets it; the value is a planning target taken from the Commission's working plan, and no legal deadline exists for the category yet. Every ESPR (EU) 2024/1781 category is indicative, because ESPR creates DPP obligations only through delegated acts adopted under Art. 4 and none has been adopted for any product group. This is a stronger statement than datePrecision: \"year\" means the day/month are filler, while \"indicative\" means the whole date has no legal force. Never present an indicative date to an end user as a deadline, and never cite it as an obligation."
|
|
94
103
|
}
|
|
95
104
|
}
|
|
96
105
|
},
|