@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 CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)
12
12
  [![npm](https://img.shields.io/npm/v/@tracepass/dpp-schemas.svg)](https://www.npmjs.com/package/@tracepass/dpp-schemas)
13
- [![Fields](https://img.shields.io/badge/fields-1004-informational)](#whats-in-here)
13
+ [![Fields](https://img.shields.io/badge/fields-1005-informational)](#whats-in-here)
14
14
  [![Categories](https://img.shields.io/badge/categories-13-informational)](#whats-in-here)
15
15
  [![Dependencies](https://img.shields.io/badge/dependencies-none-success)](#no-build-step)
16
16
  [![Schema](https://img.shields.io/badge/JSON%20Schema-2020--12-orange)](./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,004 fields in total. 188 are required by
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` | 119 | 54 | Regulation (EU) 2023/1542 |
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 other
63
- categories with dated obligations are `detergents`, `toys` and `paints-coatings`; the
64
- remaining nine await an ESPR delegated act and so carry mostly `anticipated` fields.
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"`. The four with a real
126
- statutory date are `battery` (2027-02-18), `detergents` (2029-09-23), `toys`
127
- (2030-08-01), and `paints-coatings` (2010-01-01, an instrument long in force).
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": 1004,
11
- "requiredFields": 188,
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": 119,
21
- "requiredFieldCount": 54,
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.1.1",
4
- "description": "Machine-readable field specifications for EU Digital Product Passports (ESPR) — 13 product categories, 1004 fields, each traced to the article of EU law that mandates it. Pure JSON, no dependencies.",
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
  },