@tracepass/dpp-schemas 1.18.3 → 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 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. PPWR
208
- (EU) 2025/40 has applied since 12 August 2026, but its packaging DPP provisions phase
209
- in from 2027, so `packaging` carries `2027`, not `2026-08-12`.
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.** Nine of the thirteen categories are currently `"year"`; the other four
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
- The other ten are `"indicative"`: no adopted act sets the date, so it is a planning
227
- target with no legal force.
228
-
229
- The two are independent, and `paints-coatings` is why the distinction matters — it has
230
- `datePrecision: "day"` (2010-01-01 is exact) but `dateBasis: "indicative"`, because the
231
- Decopaint Directive creates no passport duty at all. An exact date for an obligation
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("datePrecision", "day") == "year":
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": "2027-01-01",
145
- "datePrecision": "year",
146
- "mandatoryDate": "2030-01-01",
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",
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",
@@ -13009,12 +13009,12 @@
13009
13009
  "sortOrder": 96,
13010
13010
  "defaultAccessLevel": "public",
13011
13011
  "regulationRef": {
13012
- "article": "Battery Regulation Art. 38(7)",
13012
+ "article": "Battery Regulation Annex XIII 1(a) with Annex VI Part A(1)",
13013
13013
  "annex": "Annex VI Part A",
13014
13014
  "instrument": "32023R1542",
13015
- "provision": "Annex VI Part A (1)",
13015
+ "provision": "Annex XIII 1(a) with Annex VI Part A(1)",
13016
13016
  "kind": "legislation",
13017
- "description": "Art. 38(7) and Annex VI Part A(1) require the manufacturer's name and postal address, not a registration or EORI number."
13017
+ "description": "Annex XIII 1(a) puts the Annex VI Part A information in the passport, and Annex VI Part A(1) identifies the manufacturer by name and postal address (as Art. 38(7) requires) — not by a registration or EORI number. An operator identifier is therefore optional here."
13018
13018
  },
13019
13019
  "aiHints": {
13020
13020
  "alternateNames": [
@@ -31,11 +31,9 @@
31
31
  "regulation": {
32
32
  "name": "Packaging and Packaging Waste Regulation",
33
33
  "number": "(EU) 2025/40",
34
- "effectiveDate": "2027-01-01",
35
- "datePrecision": "year",
36
- "mandatoryDate": "2030-01-01",
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
  {