@tracepass/dpp-schemas 1.20.2 → 1.21.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 +26 -0
- package/instruments.json +200 -1
- package/package.json +7 -4
package/README.md
CHANGED
|
@@ -139,6 +139,30 @@ This is the one place those dates are kept. Copy that states them (the TracePass
|
|
|
139
139
|
marketing site checks every sentence against this registry) and the templates' own
|
|
140
140
|
`anticipated` flags follow it.
|
|
141
141
|
|
|
142
|
+
## Planned acts
|
|
143
|
+
|
|
144
|
+
`instruments.json` also holds `plannedActs`: acts that are planned but **not adopted**,
|
|
145
|
+
keyed by a stable id (`espr-da-textiles`). Each entry records the act it would be adopted
|
|
146
|
+
under (`framework`, `article`), what it covers (`productGroup`, and `kind`:
|
|
147
|
+
`product-group`, `horizontal` or `procedural`), its planning `stage`, and the planned
|
|
148
|
+
adoption date with its precision:
|
|
149
|
+
|
|
150
|
+
| Source | `stage` | `planned.precision` |
|
|
151
|
+
|---|---|---|
|
|
152
|
+
| A Have Your Say initiative (`hysId`, `source.kind: hys`) | `planned` or `consultation` | `quarter` (the portal's planned period) |
|
|
153
|
+
| The ESPR working plan COM(2025) 187 only (`source.kind: working_plan`) | `not-scheduled` | `year` |
|
|
154
|
+
| Only the empowering article (`source.kind: act`) | `not-scheduled` | `none` (`date: null`) |
|
|
155
|
+
|
|
156
|
+
A planned date is the Commission's intention, never an obligation date: render a quarter
|
|
157
|
+
or a year as "planned", never as "from" or "by". When an act is adopted, its entry leaves
|
|
158
|
+
`plannedActs` in the same release that adds the act to `instruments`. `lastChecked` is
|
|
159
|
+
the day the entry was last read against its source. `npm run check:planned` enforces the
|
|
160
|
+
shape, and that a date says no more than its source does.
|
|
161
|
+
|
|
162
|
+
```js
|
|
163
|
+
import instruments from "@tracepass/dpp-schemas/instruments.json" with { type: "json" };
|
|
164
|
+
```
|
|
165
|
+
|
|
142
166
|
## Standards
|
|
143
167
|
|
|
144
168
|
[`standards.json`](./standards.json) is a registry of the technical standards a field — or
|
|
@@ -358,6 +382,8 @@ runs it on every push:
|
|
|
358
382
|
claims. It catches a field required under an act that mandates nothing, an article
|
|
359
383
|
missing from the act it cites, duplicate fields, and one key with two units. See
|
|
360
384
|
[`audit/README.md`](./audit/README.md).
|
|
385
|
+
- **Planned acts** (`scripts/check-planned-acts.mjs`): every `plannedActs` entry names
|
|
386
|
+
an instrument it is adopted under, and its planned date matches its source's precision.
|
|
361
387
|
|
|
362
388
|
## Recent changes
|
|
363
389
|
|
package/instruments.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_note": "Canonical registry of the legal instruments and standards a template field may cite. `regulationRef.instrument` must be one of these keys. Every CELEX below was verified to resolve against the EU Publications Office RDF store (cdm:resource_legal_id_celex). Kinds: `legislation` binds; `standard` supports a presumption of conformity but binds nothing; `scheme` is voluntary; `national` is one member state's law; `specification` is not a reference at all.",
|
|
2
|
+
"_note": "Canonical registry of the legal instruments and standards a template field may cite. `regulationRef.instrument` must be one of these keys. Every CELEX below was verified to resolve against the EU Publications Office RDF store (cdm:resource_legal_id_celex). Kinds: `legislation` binds; `standard` supports a presumption of conformity but binds nothing; `scheme` is voluntary; `national` is one member state's law; `specification` is not a reference at all. `plannedActs` records acts that are planned but not adopted (an ESPR delegated act per product group, the DPP service-provider act, the CPR Art. 75(1) act): planning status and the planned adoption date with its precision (`quarter` from Have Your Say, `year` from the ESPR working plan COM(2025) 187, `none` when no plan states one). A planned date is the Commission's intention, never an obligation date; an entry is removed in the release that adds its adopted act to `instruments`.",
|
|
3
3
|
"instruments": {
|
|
4
4
|
"32023R1542": {
|
|
5
5
|
"kind": "legislation",
|
|
@@ -870,6 +870,205 @@
|
|
|
870
870
|
"annexesVerifiedFrom": "32026R1738"
|
|
871
871
|
}
|
|
872
872
|
},
|
|
873
|
+
"plannedActs": {
|
|
874
|
+
"espr-da-iron-steel": {
|
|
875
|
+
"framework": "32024R1781",
|
|
876
|
+
"article": "Art. 4",
|
|
877
|
+
"kind": "product-group",
|
|
878
|
+
"productGroup": "Iron and steel",
|
|
879
|
+
"stage": "planned",
|
|
880
|
+
"hysId": 17672,
|
|
881
|
+
"planned": {
|
|
882
|
+
"date": "2026-Q4",
|
|
883
|
+
"precision": "quarter",
|
|
884
|
+
"event": "adoption"
|
|
885
|
+
},
|
|
886
|
+
"source": {
|
|
887
|
+
"kind": "hys",
|
|
888
|
+
"url": "https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/17672"
|
|
889
|
+
},
|
|
890
|
+
"lastChecked": "2026-10-09"
|
|
891
|
+
},
|
|
892
|
+
"espr-da-textiles": {
|
|
893
|
+
"framework": "32024R1781",
|
|
894
|
+
"article": "Art. 4",
|
|
895
|
+
"kind": "product-group",
|
|
896
|
+
"productGroup": "Apparel textiles",
|
|
897
|
+
"stage": "planned",
|
|
898
|
+
"hysId": 16116,
|
|
899
|
+
"planned": {
|
|
900
|
+
"date": "2027-Q1",
|
|
901
|
+
"precision": "quarter",
|
|
902
|
+
"event": "adoption"
|
|
903
|
+
},
|
|
904
|
+
"source": {
|
|
905
|
+
"kind": "hys",
|
|
906
|
+
"url": "https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/16116"
|
|
907
|
+
},
|
|
908
|
+
"lastChecked": "2026-10-09"
|
|
909
|
+
},
|
|
910
|
+
"espr-da-aluminium": {
|
|
911
|
+
"framework": "32024R1781",
|
|
912
|
+
"article": "Art. 4",
|
|
913
|
+
"kind": "product-group",
|
|
914
|
+
"productGroup": "Aluminium",
|
|
915
|
+
"stage": "not-scheduled",
|
|
916
|
+
"planned": {
|
|
917
|
+
"date": "2027",
|
|
918
|
+
"precision": "year",
|
|
919
|
+
"event": "adoption"
|
|
920
|
+
},
|
|
921
|
+
"source": {
|
|
922
|
+
"kind": "working_plan",
|
|
923
|
+
"document": "COM(2025) 187",
|
|
924
|
+
"url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52025DC0187"
|
|
925
|
+
},
|
|
926
|
+
"lastChecked": "2026-10-09"
|
|
927
|
+
},
|
|
928
|
+
"espr-da-tyres": {
|
|
929
|
+
"framework": "32024R1781",
|
|
930
|
+
"article": "Art. 4",
|
|
931
|
+
"kind": "product-group",
|
|
932
|
+
"productGroup": "Tyres",
|
|
933
|
+
"stage": "not-scheduled",
|
|
934
|
+
"planned": {
|
|
935
|
+
"date": "2027",
|
|
936
|
+
"precision": "year",
|
|
937
|
+
"event": "adoption"
|
|
938
|
+
},
|
|
939
|
+
"source": {
|
|
940
|
+
"kind": "working_plan",
|
|
941
|
+
"document": "COM(2025) 187",
|
|
942
|
+
"url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52025DC0187"
|
|
943
|
+
},
|
|
944
|
+
"lastChecked": "2026-10-09"
|
|
945
|
+
},
|
|
946
|
+
"espr-da-furniture": {
|
|
947
|
+
"framework": "32024R1781",
|
|
948
|
+
"article": "Art. 4",
|
|
949
|
+
"kind": "product-group",
|
|
950
|
+
"productGroup": "Furniture",
|
|
951
|
+
"stage": "not-scheduled",
|
|
952
|
+
"planned": {
|
|
953
|
+
"date": "2028",
|
|
954
|
+
"precision": "year",
|
|
955
|
+
"event": "adoption"
|
|
956
|
+
},
|
|
957
|
+
"source": {
|
|
958
|
+
"kind": "working_plan",
|
|
959
|
+
"document": "COM(2025) 187",
|
|
960
|
+
"url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52025DC0187"
|
|
961
|
+
},
|
|
962
|
+
"lastChecked": "2026-10-09"
|
|
963
|
+
},
|
|
964
|
+
"espr-da-mattresses": {
|
|
965
|
+
"framework": "32024R1781",
|
|
966
|
+
"article": "Art. 4",
|
|
967
|
+
"kind": "product-group",
|
|
968
|
+
"productGroup": "Mattresses",
|
|
969
|
+
"stage": "not-scheduled",
|
|
970
|
+
"planned": {
|
|
971
|
+
"date": "2029",
|
|
972
|
+
"precision": "year",
|
|
973
|
+
"event": "adoption"
|
|
974
|
+
},
|
|
975
|
+
"source": {
|
|
976
|
+
"kind": "working_plan",
|
|
977
|
+
"document": "COM(2025) 187",
|
|
978
|
+
"url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52025DC0187"
|
|
979
|
+
},
|
|
980
|
+
"lastChecked": "2026-10-09"
|
|
981
|
+
},
|
|
982
|
+
"espr-horizontal-repairability": {
|
|
983
|
+
"framework": "32024R1781",
|
|
984
|
+
"article": "Art. 4",
|
|
985
|
+
"kind": "horizontal",
|
|
986
|
+
"productGroup": "Horizontal repairability (consumer electronics, small household appliances, light means of transport)",
|
|
987
|
+
"stage": "planned",
|
|
988
|
+
"hysId": 17873,
|
|
989
|
+
"planned": {
|
|
990
|
+
"date": "2027-Q2",
|
|
991
|
+
"precision": "quarter",
|
|
992
|
+
"event": "adoption"
|
|
993
|
+
},
|
|
994
|
+
"source": {
|
|
995
|
+
"kind": "hys",
|
|
996
|
+
"url": "https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/17873"
|
|
997
|
+
},
|
|
998
|
+
"lastChecked": "2026-10-09"
|
|
999
|
+
},
|
|
1000
|
+
"espr-da-dishwashers": {
|
|
1001
|
+
"framework": "32024R1781",
|
|
1002
|
+
"article": "Art. 4",
|
|
1003
|
+
"kind": "product-group",
|
|
1004
|
+
"productGroup": "Household dishwashers",
|
|
1005
|
+
"stage": "planned",
|
|
1006
|
+
"hysId": 17874,
|
|
1007
|
+
"planned": {
|
|
1008
|
+
"date": "2027-Q3",
|
|
1009
|
+
"precision": "quarter",
|
|
1010
|
+
"event": "adoption"
|
|
1011
|
+
},
|
|
1012
|
+
"source": {
|
|
1013
|
+
"kind": "hys",
|
|
1014
|
+
"url": "https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/17874"
|
|
1015
|
+
},
|
|
1016
|
+
"lastChecked": "2026-10-09"
|
|
1017
|
+
},
|
|
1018
|
+
"espr-da-washing-machines": {
|
|
1019
|
+
"framework": "32024R1781",
|
|
1020
|
+
"article": "Art. 4",
|
|
1021
|
+
"kind": "product-group",
|
|
1022
|
+
"productGroup": "Household washing machines and washer-dryers",
|
|
1023
|
+
"stage": "planned",
|
|
1024
|
+
"hysId": 17994,
|
|
1025
|
+
"planned": {
|
|
1026
|
+
"date": "2027-Q3",
|
|
1027
|
+
"precision": "quarter",
|
|
1028
|
+
"event": "adoption"
|
|
1029
|
+
},
|
|
1030
|
+
"source": {
|
|
1031
|
+
"kind": "hys",
|
|
1032
|
+
"url": "https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/17994"
|
|
1033
|
+
},
|
|
1034
|
+
"lastChecked": "2026-10-09"
|
|
1035
|
+
},
|
|
1036
|
+
"espr-dppsp-da": {
|
|
1037
|
+
"framework": "32024R1781",
|
|
1038
|
+
"article": "Art. 11, third subparagraph",
|
|
1039
|
+
"kind": "procedural",
|
|
1040
|
+
"productGroup": "Digital product passport service providers (not a product group)",
|
|
1041
|
+
"stage": "planned",
|
|
1042
|
+
"hysId": 14382,
|
|
1043
|
+
"planned": {
|
|
1044
|
+
"date": "2026-Q4",
|
|
1045
|
+
"precision": "quarter",
|
|
1046
|
+
"event": "adoption"
|
|
1047
|
+
},
|
|
1048
|
+
"source": {
|
|
1049
|
+
"kind": "hys",
|
|
1050
|
+
"url": "https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/14382"
|
|
1051
|
+
},
|
|
1052
|
+
"lastChecked": "2026-10-09"
|
|
1053
|
+
},
|
|
1054
|
+
"cpr-art75-da": {
|
|
1055
|
+
"framework": "32024R3110",
|
|
1056
|
+
"article": "Art. 75(1)",
|
|
1057
|
+
"kind": "procedural",
|
|
1058
|
+
"productGroup": "Construction products digital product passport system",
|
|
1059
|
+
"stage": "not-scheduled",
|
|
1060
|
+
"planned": {
|
|
1061
|
+
"date": null,
|
|
1062
|
+
"precision": "none",
|
|
1063
|
+
"event": "adoption"
|
|
1064
|
+
},
|
|
1065
|
+
"source": {
|
|
1066
|
+
"kind": "act",
|
|
1067
|
+
"url": "http://data.europa.eu/eli/reg/2024/3110/oj"
|
|
1068
|
+
},
|
|
1069
|
+
"lastChecked": "2026-10-09"
|
|
1070
|
+
}
|
|
1071
|
+
},
|
|
873
1072
|
"nonLegislative": {
|
|
874
1073
|
"_note": "References that are not EU legislation. A field may cite one, but it must carry the right `kind` so nothing implies a legal obligation.",
|
|
875
1074
|
"standard": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracepass/dpp-schemas",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "Machine-readable field specifications for EU Digital Product Passports (ESPR) — 13 product categories, 994 fields, each traced to the article of EU law that mandates it. Pure JSON, no dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"digital-product-passport",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"exports": {
|
|
26
26
|
".": "./index.json",
|
|
27
27
|
"./schema.json": "./schema.json",
|
|
28
|
-
"./templates/*.json": "./templates/*.json"
|
|
28
|
+
"./templates/*.json": "./templates/*.json",
|
|
29
|
+
"./instruments.json": "./instruments.json"
|
|
29
30
|
},
|
|
30
31
|
"files": [
|
|
31
32
|
"templates",
|
|
@@ -47,10 +48,12 @@
|
|
|
47
48
|
"validate": "python3 -c \"import json,glob,sys;from jsonschema import Draft202012Validator as V;v=V(json.load(open('schema.json')));bad=0\nfor p in sorted(glob.glob('templates/*.json')):\n e=list(v.iter_errors(json.load(open(p))));bad+=bool(e);print(('FAIL' if e else 'ok '),p)\n [print(' ',str(x.absolute_path),x.message[:120]) for x in e[:3]]\nsys.exit(1 if bad else 0)\"",
|
|
48
49
|
"build:index": "node scripts/build-index.mjs",
|
|
49
50
|
"check:index": "node scripts/build-index.mjs --check",
|
|
50
|
-
"check": "npm run validate && npm run check:index && npm run check:standards && npm run check:locales && npm run check:audit && npm run test:audit",
|
|
51
|
+
"check": "npm run validate && npm run check:index && npm run check:standards && npm run check:locales && npm run check:audit && npm run test:audit && npm run check:planned && npm run test:planned",
|
|
51
52
|
"check:standards": "node scripts/check-standards.mjs",
|
|
52
53
|
"check:locales": "node scripts/check-locales.mjs",
|
|
53
54
|
"check:audit": "node audit/audit.mjs",
|
|
54
|
-
"test:audit": "node --test audit/self-test.mjs"
|
|
55
|
+
"test:audit": "node --test audit/self-test.mjs",
|
|
56
|
+
"check:planned": "node scripts/check-planned-acts.mjs",
|
|
57
|
+
"test:planned": "node --test scripts/check-planned-acts.test.mjs"
|
|
55
58
|
}
|
|
56
59
|
}
|