@tracepass/dpp-schemas 1.18.4 → 1.18.5
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 +15 -14
- package/index.json +3 -5
- package/package.json +1 -1
- package/templates/packaging.json +3 -5
package/README.md
CHANGED
|
@@ -204,9 +204,11 @@ registry:
|
|
|
204
204
|
Five things are worth pointing out.
|
|
205
205
|
|
|
206
206
|
**`regulation.effectiveDate` is the date the passport obligation begins — not the date
|
|
207
|
-
the regulation applies.** Those are different dates and can sit years apart
|
|
208
|
-
(EU) 2025/40 has applied since
|
|
209
|
-
|
|
207
|
+
the regulation applies.** Those are different dates and can sit years apart, and
|
|
208
|
+
some categories have no passport obligation at all. PPWR (EU) 2025/40 has applied since
|
|
209
|
+
12 August 2026 but creates no packaging passport: Article 12 is a labelling regime (a
|
|
210
|
+
harmonised material label, with a QR code optional except on reusable packaging), so
|
|
211
|
+
`packaging` carries `dateBasis: "none"`, not `2026-08-12`.
|
|
210
212
|
|
|
211
213
|
Read both dates with their precision marker. `datePrecision` / `mandatoryDatePrecision`
|
|
212
214
|
are `"day"` or `"year"`; absent means `"day"`:
|
|
@@ -215,26 +217,25 @@ are `"day"` or `"year"`; absent means `"day"`:
|
|
|
215
217
|
2023/1542 Article 77.
|
|
216
218
|
- **`"year"`** — only the year is known, because the governing delegated or implementing
|
|
217
219
|
act is not yet adopted. The day and month are filler. **Do not render these as a
|
|
218
|
-
deadline.**
|
|
219
|
-
carry an exact date.
|
|
220
|
+
deadline.** Six of the thirteen categories are currently `"year"`.
|
|
220
221
|
|
|
221
222
|
**`datePrecision` is not the same question as `dateBasis`, and you usually want the
|
|
222
223
|
latter.** Precision asks *how exact is this date*; basis asks *does an adopted
|
|
223
224
|
instrument set it at all*. `dateBasis: "statutory"` means a provision in force fixes
|
|
224
225
|
the date and it can be cited — exactly three categories: `battery` (2027-02-18,
|
|
225
226
|
Reg (EU) 2023/1542 Art. 77(1)), `detergents` (2029-09-23) and `toys` (2030-08-01).
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
that does not exist. Filter on `dateBasis`, not on precision, when you need to know
|
|
233
|
-
what is actually mandated.
|
|
227
|
+
Six are `"indicative"`: no adopted act sets the date, so it is a planning target with
|
|
228
|
+
no legal force. Four are `"none"` — `fmcg`, `jewelry`, `packaging` and `paints-coatings`:
|
|
229
|
+
no adopted act creates a passport for them and none is scheduled, so a passport is
|
|
230
|
+
voluntary and both dates carry the sentinel `9999-12-31`, which must never be shown or
|
|
231
|
+
compared. Filter on `dateBasis`, not on precision, when you need to know what is
|
|
232
|
+
actually mandated.
|
|
234
233
|
|
|
235
234
|
```python
|
|
236
235
|
r = template["regulation"]
|
|
237
|
-
if r.get("
|
|
236
|
+
if r.get("dateBasis") == "none":
|
|
237
|
+
print("No passport obligation; a passport is voluntary") # sentinel dates: ignore
|
|
238
|
+
elif r.get("datePrecision", "day") == "year":
|
|
238
239
|
print(f"DPP obligation expected in {r['effectiveDate'][:4]}") # "2027"
|
|
239
240
|
else:
|
|
240
241
|
print(f"DPP obligation from {r['effectiveDate']}") # "2027-02-18"
|
package/index.json
CHANGED
|
@@ -141,11 +141,9 @@
|
|
|
141
141
|
"regulation": {
|
|
142
142
|
"name": "Packaging and Packaging Waste Regulation",
|
|
143
143
|
"number": "(EU) 2025/40",
|
|
144
|
-
"effectiveDate": "
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"mandatoryDatePrecision": "year",
|
|
148
|
-
"dateBasis": "indicative"
|
|
144
|
+
"effectiveDate": "9999-12-31",
|
|
145
|
+
"mandatoryDate": "9999-12-31",
|
|
146
|
+
"dateBasis": "none"
|
|
149
147
|
}
|
|
150
148
|
},
|
|
151
149
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracepass/dpp-schemas",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.5",
|
|
4
4
|
"description": "Machine-readable field specifications for EU Digital Product Passports (ESPR) — 13 product categories, 991 fields, each traced to the article of EU law that mandates it. Pure JSON, no dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"digital-product-passport",
|
package/templates/packaging.json
CHANGED
|
@@ -31,11 +31,9 @@
|
|
|
31
31
|
"regulation": {
|
|
32
32
|
"name": "Packaging and Packaging Waste Regulation",
|
|
33
33
|
"number": "(EU) 2025/40",
|
|
34
|
-
"effectiveDate": "
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"mandatoryDatePrecision": "year",
|
|
38
|
-
"dateBasis": "indicative"
|
|
34
|
+
"effectiveDate": "9999-12-31",
|
|
35
|
+
"mandatoryDate": "9999-12-31",
|
|
36
|
+
"dateBasis": "none"
|
|
39
37
|
},
|
|
40
38
|
"fields": [
|
|
41
39
|
{
|