@tracepass/dpp-validate 0.5.0 → 0.7.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 +13 -5
- package/dist/battery-applicability.d.ts +3 -2
- package/dist/battery-applicability.d.ts.map +1 -1
- package/dist/battery-applicability.js +3 -2
- package/dist/battery-applicability.js.map +1 -1
- package/dist/rules.d.ts +12 -6
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +29 -62
- package/dist/rules.js.map +1 -1
- package/dist/types.d.ts +5 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -3
- package/dist/types.js.map +1 -1
- package/dist/verdict.d.ts +3 -1
- package/dist/verdict.d.ts.map +1 -1
- package/dist/verdict.js +4 -2
- package/dist/verdict.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# @tracepass/dpp-validate
|
|
5
5
|
|
|
6
|
-
**Evaluate an EU Digital Product Passport against its category field spec. Pure functions, no third-party runtime dependencies,
|
|
6
|
+
**Evaluate an EU Digital Product Passport against its category field spec. Pure functions, no third-party runtime dependencies, 43 tests.**
|
|
7
7
|
|
|
8
8
|
[](../../LICENSE)
|
|
9
9
|
[](#)
|
|
@@ -39,10 +39,18 @@ result.checkedRules; // ["static:required-fields", ..., "BAT-1", "CC-1"
|
|
|
39
39
|
identified, values match their datatype, enum, pattern, and bounds.
|
|
40
40
|
|
|
41
41
|
**Conditional** — obligations that only fire under a condition. Battery carbon-footprint
|
|
42
|
-
fields apply only to rechargeable batteries;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
fields apply only to rechargeable batteries; CE-marking coherence triggers when a
|
|
43
|
+
conformity status is recorded. Five categories carry these rules — battery, construction,
|
|
44
|
+
electronics, steel and toys — plus one cross-cutting rule for every category.
|
|
45
|
+
|
|
46
|
+
Some obligations start on a date. The battery passport is mandatory from 18 February 2027
|
|
47
|
+
(Regulation (EU) 2023/1542 Art. 77(1)), so a missing passport identifier is a warning
|
|
48
|
+
before that day and critical from it. The engine reads the date from an optional fourth
|
|
49
|
+
argument, which defaults to now; pass one to evaluate as of a given day:
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
evaluateCompliance(passport, batteryTemplate, "battery", new Date("2027-02-18"));
|
|
53
|
+
```
|
|
46
54
|
|
|
47
55
|
**Coverage** — the engine reports whether it evaluated conditionals at all. For the other
|
|
48
56
|
six categories `conditionalCoverage` is `"static-only"`, so silence is never mistaken for
|
|
@@ -24,8 +24,9 @@
|
|
|
24
24
|
* | portable). Read from `passport.fields`.
|
|
25
25
|
* - hasBMS, rechargeable, externalStorageOnly — tri-state booleans on
|
|
26
26
|
* `passport.batteryProfile` (a separate block, NOT
|
|
27
|
-
* template fields —
|
|
28
|
-
*
|
|
27
|
+
* template fields — deliberately outside the template
|
|
28
|
+
* field set, so they do not inflate its count).
|
|
29
|
+
* Absent ⇒ the dependent gate resolves to
|
|
29
30
|
* "unknown" (show + warn), not a guess.
|
|
30
31
|
*
|
|
31
32
|
* Pure + IO-free → unit-tested in tests/compliance/battery-applicability.test.ts.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battery-applicability.d.ts","sourceRoot":"","sources":["../src/battery-applicability.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"battery-applicability.d.ts","sourceRoot":"","sources":["../src/battery-applicability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,sBAAsB,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAErE;;sDAEsD;AACtD,eAAO,MAAM,2BAA2B,8CAA+C,CAAC;AAExF;;;4EAG4E;AAC5E,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;CACpC;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,mBAAmB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C;AAwBD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAiE1C,CAAC;AAQF,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA+B,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAIjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAS/B;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE7D"}
|
|
@@ -24,8 +24,9 @@
|
|
|
24
24
|
* | portable). Read from `passport.fields`.
|
|
25
25
|
* - hasBMS, rechargeable, externalStorageOnly — tri-state booleans on
|
|
26
26
|
* `passport.batteryProfile` (a separate block, NOT
|
|
27
|
-
* template fields —
|
|
28
|
-
*
|
|
27
|
+
* template fields — deliberately outside the template
|
|
28
|
+
* field set, so they do not inflate its count).
|
|
29
|
+
* Absent ⇒ the dependent gate resolves to
|
|
29
30
|
* "unknown" (show + warn), not a guess.
|
|
30
31
|
*
|
|
31
32
|
* Pure + IO-free → unit-tested in tests/compliance/battery-applicability.test.ts.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battery-applicability.js","sourceRoot":"","sources":["../src/battery-applicability.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"battery-applicability.js","sourceRoot":"","sources":["../src/battery-applicability.ts"],"names":[],"mappings":"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"}
|
package/dist/rules.d.ts
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
* Per-category CONDITIONAL compliance rules.
|
|
3
3
|
*
|
|
4
4
|
* These encode the conditional obligations that are binding and in force.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* required fields are the whole obligation.
|
|
5
|
+
* Five categories carry them — battery, construction, electronics, steel and
|
|
6
|
+
* toys — plus one cross-cutting rule (CC-1) that applies to every category.
|
|
7
|
+
* The remaining categories have no rule entry here, so the engine reports them
|
|
8
|
+
* `static-only`: their template's required fields are the whole obligation.
|
|
10
9
|
*
|
|
11
10
|
* Rules live in TypeScript rather than a JSON DSL in the templates.
|
|
12
11
|
* Regulatory logic stays in code, reviewed in pull requests, and is
|
|
@@ -24,11 +23,18 @@
|
|
|
24
23
|
*/
|
|
25
24
|
import type { Passport, Template } from "@tracepass/dpp-types";
|
|
26
25
|
import type { ComplianceFinding } from "./types.js";
|
|
26
|
+
/** What a rule may know besides the passport: the evaluation time, passed in
|
|
27
|
+
* by the caller so date-gated rules are testable and flip without a release. */
|
|
28
|
+
export interface RuleContext {
|
|
29
|
+
now: Date;
|
|
30
|
+
}
|
|
27
31
|
/** A conditional rule: given passport+template, produce zero or more findings. */
|
|
28
32
|
export interface ConditionalRule {
|
|
29
33
|
id: string;
|
|
30
|
-
run(passport: Passport, template: Template): ComplianceFinding[];
|
|
34
|
+
run(passport: Passport, template: Template, ctx?: RuleContext): ComplianceFinding[];
|
|
31
35
|
}
|
|
36
|
+
export declare const BATTERY_PASSPORT_MANDATORY_FROM = "2027-02-18";
|
|
37
|
+
export declare function batteryPassportMandatory(now: Date): boolean;
|
|
32
38
|
/**
|
|
33
39
|
* Conditional-rule registry. Categories ABSENT from this map have no
|
|
34
40
|
* binding conditionals in force → the engine reports them `static-only`.
|
package/dist/rules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAapD;iFACiF;AACjF,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,IAAI,CAAC;CACX;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAAC;CACrF;AAoED,eAAO,MAAM,+BAA+B,eAAe,CAAC;AAC5D,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAE3D;AAgUD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAM/D,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAAU,CAAC"}
|
package/dist/rules.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
* Per-category CONDITIONAL compliance rules.
|
|
3
3
|
*
|
|
4
4
|
* These encode the conditional obligations that are binding and in force.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* required fields are the whole obligation.
|
|
5
|
+
* Five categories carry them — battery, construction, electronics, steel and
|
|
6
|
+
* toys — plus one cross-cutting rule (CC-1) that applies to every category.
|
|
7
|
+
* The remaining categories have no rule entry here, so the engine reports them
|
|
8
|
+
* `static-only`: their template's required fields are the whole obligation.
|
|
10
9
|
*
|
|
11
10
|
* Rules live in TypeScript rather than a JSON DSL in the templates.
|
|
12
11
|
* Regulatory logic stays in code, reviewed in pull requests, and is
|
|
@@ -90,9 +89,19 @@ const IN_SCOPE_BATTERY = new Set(["LMT", "EV", "industrial_gt_2kwh"]);
|
|
|
90
89
|
// only the identifiers Art. 77 hangs the passport on; broader field
|
|
91
90
|
// completeness is the static tier's job.
|
|
92
91
|
const BATTERY_PASSPORT_FIELDS = ["batteryUniqueIdentifier"];
|
|
92
|
+
// BAT-2 · date gate, Art. 77(1): "From 18 February 2027 each LMT battery, each
|
|
93
|
+
// industrial battery with a capacity greater than 2 kWh and each electric vehicle
|
|
94
|
+
// battery … shall have an electronic record". Before that day the passport is
|
|
95
|
+
// recommended, not mandatory, so BAT-1's finding is a warning; from that day it is
|
|
96
|
+
// critical. Implemented inside BAT-1 because it changes BAT-1's severity and has
|
|
97
|
+
// no finding of its own. Midnight UTC is the flip.
|
|
98
|
+
export const BATTERY_PASSPORT_MANDATORY_FROM = "2027-02-18";
|
|
99
|
+
export function batteryPassportMandatory(now) {
|
|
100
|
+
return now.getTime() >= Date.parse(`${BATTERY_PASSPORT_MANDATORY_FROM}T00:00:00Z`);
|
|
101
|
+
}
|
|
93
102
|
const BAT1 = {
|
|
94
103
|
id: "BAT-1",
|
|
95
|
-
run(passport) {
|
|
104
|
+
run(passport, _template, ctx) {
|
|
96
105
|
const cat = valueOf(passport, "batteryCategory");
|
|
97
106
|
if (cat === undefined) {
|
|
98
107
|
return [
|
|
@@ -111,18 +120,28 @@ const BAT1 = {
|
|
|
111
120
|
// Out-of-scope categories (portable, SLI, industrial_lte_2kwh) → no obligation.
|
|
112
121
|
if (!IN_SCOPE_BATTERY.has(String(cat)))
|
|
113
122
|
return [];
|
|
123
|
+
const mandatory = batteryPassportMandatory(ctx?.now ?? new Date());
|
|
114
124
|
const findings = [];
|
|
115
125
|
for (const key of BATTERY_PASSPORT_FIELDS) {
|
|
116
126
|
if (!hasValue(passport, key)) {
|
|
117
127
|
findings.push({
|
|
118
128
|
type: "conditional_missing",
|
|
119
|
-
severity: "critical",
|
|
129
|
+
severity: mandatory ? "critical" : "warning",
|
|
120
130
|
target: key,
|
|
121
131
|
regulation: "(EU) 2023/1542",
|
|
122
|
-
article: "Art. 77",
|
|
132
|
+
article: "Art. 77(1)",
|
|
123
133
|
ruleId: "BAT-1",
|
|
124
|
-
why:
|
|
125
|
-
|
|
134
|
+
why: mandatory
|
|
135
|
+
? `This is an in-scope battery (${String(cat)}); a battery passport with its unique identifier is mandatory.`
|
|
136
|
+
: `This is an in-scope battery (${String(cat)}); the battery passport becomes mandatory on 18 February 2027 (Art. 77(1)), and its unique identifier is not set yet.`,
|
|
137
|
+
// Deliberately does NOT name a scheme. EN 18219 (unique identifiers)
|
|
138
|
+
// is scheme-plural: a web-resolvable structured path such as a GS1
|
|
139
|
+
// Digital Link URI is one permitted route among several, not the
|
|
140
|
+
// mandated one. This rule also only checks PRESENCE — naming GS1 here
|
|
141
|
+
// asserted a constraint the rule never verified and the standard does
|
|
142
|
+
// not impose, which could push an implementer onto GS1 when their
|
|
143
|
+
// scheme was already conformant.
|
|
144
|
+
fix: `Provide ${key} — the battery passport's unique identifier, in one of the schemes EN 18219 permits for a product identifier.`,
|
|
126
145
|
});
|
|
127
146
|
}
|
|
128
147
|
}
|
|
@@ -283,53 +302,6 @@ const BAT_VAL = {
|
|
|
283
302
|
return findings;
|
|
284
303
|
},
|
|
285
304
|
};
|
|
286
|
-
// ── Chemicals · REACH Art. 33 + SCIP (WFD Art. 9(1)(i)) ─────────────
|
|
287
|
-
// CHEM-1: SVHC disclosure required IF any Candidate-List SVHC present
|
|
288
|
-
// >0.1% w/w. The trigger is composition data the passport may not carry
|
|
289
|
-
// machine-readably — when `svhcSubstances` is absent we cannot tell
|
|
290
|
-
// whether the threshold is crossed, so we WARN (verify manually) rather
|
|
291
|
-
// than assert compliance. When the array is present and non-empty, the
|
|
292
|
-
// disclosure obligation is engaged → require the safe-use disclosure.
|
|
293
|
-
const CHEM1 = {
|
|
294
|
-
id: "CHEM-1",
|
|
295
|
-
run(passport) {
|
|
296
|
-
const svhc = valueOf(passport, "svhcSubstances");
|
|
297
|
-
if (svhc === undefined) {
|
|
298
|
-
return [
|
|
299
|
-
{
|
|
300
|
-
type: "unverifiable_conditional",
|
|
301
|
-
severity: "warning",
|
|
302
|
-
target: "svhcSubstances",
|
|
303
|
-
regulation: "(EC) 1907/2006",
|
|
304
|
-
article: "Art. 33",
|
|
305
|
-
ruleId: "CHEM-1",
|
|
306
|
-
why: "SVHC content isn't recorded, so REACH Art. 33 / SCIP disclosure (triggered above 0.1% w/w) couldn't be evaluated.",
|
|
307
|
-
fix: "Record svhcSubstances. If any Candidate-List substance exceeds 0.1% w/w, safe-use info and a SCIP notification are required.",
|
|
308
|
-
},
|
|
309
|
-
];
|
|
310
|
-
}
|
|
311
|
-
// Empty array → declared no SVHC above threshold → obligation not engaged.
|
|
312
|
-
const list = Array.isArray(svhc) ? svhc : [svhc];
|
|
313
|
-
if (list.length === 0)
|
|
314
|
-
return [];
|
|
315
|
-
// SVHC present → the safe-use disclosure (substance name min.) must be set.
|
|
316
|
-
if (!hasValue(passport, "svhcSubstanceName")) {
|
|
317
|
-
return [
|
|
318
|
-
{
|
|
319
|
-
type: "conditional_missing",
|
|
320
|
-
severity: "critical",
|
|
321
|
-
target: "svhcSubstanceName",
|
|
322
|
-
regulation: "(EC) 1907/2006",
|
|
323
|
-
article: "Art. 33(1)",
|
|
324
|
-
ruleId: "CHEM-1",
|
|
325
|
-
why: "A Candidate-List SVHC is recorded; Art. 33 requires safe-use information including, as a minimum, the substance name.",
|
|
326
|
-
fix: "Provide svhcSubstanceName and ensure a SCIP notification reference (WFD Art. 9(1)(i)) is recorded.",
|
|
327
|
-
},
|
|
328
|
-
];
|
|
329
|
-
}
|
|
330
|
-
return [];
|
|
331
|
-
},
|
|
332
|
-
};
|
|
333
305
|
// ── Construction · Reg (EU) 2024/3110 (new CPR) ─────────────────────
|
|
334
306
|
// CON-1: a Declaration of Performance & Conformity is required IF the
|
|
335
307
|
// product is covered by a harmonised technical specification. The
|
|
@@ -438,11 +410,6 @@ const CE1 = {
|
|
|
438
410
|
*/
|
|
439
411
|
export const CONDITIONAL_RULES = {
|
|
440
412
|
battery: [BAT1, BAT_APP, BAT_VAL, CE1],
|
|
441
|
-
// CHEM-1 is REACH Art. 33, which binds by substance content, not by product
|
|
442
|
-
// category. `chemicals` was split into these two successors; both carry
|
|
443
|
-
// `svhcSubstances` and `svhcSubstanceName`, so both engage the rule.
|
|
444
|
-
detergents: [CHEM1],
|
|
445
|
-
"paints-coatings": [CHEM1],
|
|
446
413
|
construction: [CON1, CE1],
|
|
447
414
|
electronics: [CE1],
|
|
448
415
|
steel: [CE1],
|
package/dist/rules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
* 2. CONDITIONAL — per-category rules that only fire under a condition
|
|
11
11
|
* (e.g. battery passport required IF category is EV/LMT/
|
|
12
12
|
* industrial>2kWh; EU operator required IF manufacturer
|
|
13
|
-
* non-EU).
|
|
14
|
-
* battery, detergents,
|
|
15
|
-
*
|
|
13
|
+
* non-EU). Seven categories carry binding conditionals —
|
|
14
|
+
* battery, construction, detergents, electronics,
|
|
15
|
+
* paints-coatings, steel and toys — plus one cross-cutting
|
|
16
|
+
* rule that applies to every category. `rule-surface.json`
|
|
17
|
+
* is the source; count it rather than trusting this list.
|
|
16
18
|
* 3. COVERAGE — the engine self-reports whether conditionals were
|
|
17
19
|
* evaluated or the category is static-only, so an agent
|
|
18
20
|
* NEVER reads silence as "compliant".
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,yBAAyB,GACzB,YAAY,CAAC;AAEjB;wEACwE;AACxE,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,aAAa,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAC;AAErD,MAAM,MAAM,WAAW;AACrB,4DAA4D;AAC1D,eAAe;AACjB,gEAAgE;GAC9D,kBAAkB;AACpB,kEAAkE;GAChE,eAAe;AACjB,gFAAgF;GAC9E,gBAAgB;AAClB,wEAAwE;GACtE,qBAAqB;AACvB;yEACyE;GACvE,0BAA0B,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;gFAC4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,wCAAwC;IACxC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B;+EAC2E;IAC3E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
|
package/dist/types.js
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
* 2. CONDITIONAL — per-category rules that only fire under a condition
|
|
11
11
|
* (e.g. battery passport required IF category is EV/LMT/
|
|
12
12
|
* industrial>2kWh; EU operator required IF manufacturer
|
|
13
|
-
* non-EU).
|
|
14
|
-
* battery, detergents,
|
|
15
|
-
*
|
|
13
|
+
* non-EU). Seven categories carry binding conditionals —
|
|
14
|
+
* battery, construction, detergents, electronics,
|
|
15
|
+
* paints-coatings, steel and toys — plus one cross-cutting
|
|
16
|
+
* rule that applies to every category. `rule-surface.json`
|
|
17
|
+
* is the source; count it rather than trusting this list.
|
|
16
18
|
* 3. COVERAGE — the engine self-reports whether conditionals were
|
|
17
19
|
* evaluated or the category is static-only, so an agent
|
|
18
20
|
* NEVER reads silence as "compliant".
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
|
package/dist/verdict.d.ts
CHANGED
|
@@ -26,5 +26,7 @@ import type { ComplianceResult } from "./types.js";
|
|
|
26
26
|
* critical finding (mirrors checkPublishReady's "template missing" hard
|
|
27
27
|
* blocker rather than throwing).
|
|
28
28
|
*/
|
|
29
|
-
export declare function evaluateCompliance(passport: Passport, template: Template | undefined, category: string
|
|
29
|
+
export declare function evaluateCompliance(passport: Passport, template: Template | undefined, category: string,
|
|
30
|
+
/** Evaluation time for date-gated rules (BAT-2). Defaults to the current time. */
|
|
31
|
+
now?: Date): ComplianceResult;
|
|
30
32
|
//# sourceMappingURL=verdict.d.ts.map
|
package/dist/verdict.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAK9E,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAiEpB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAK9E,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAiEpB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM;AAChB,kFAAkF;AAClF,GAAG,GAAE,IAAiB,GACrB,gBAAgB,CA2GlB"}
|
package/dist/verdict.js
CHANGED
|
@@ -88,7 +88,9 @@ function checkFieldFormat(tf, value) {
|
|
|
88
88
|
* critical finding (mirrors checkPublishReady's "template missing" hard
|
|
89
89
|
* blocker rather than throwing).
|
|
90
90
|
*/
|
|
91
|
-
export function evaluateCompliance(passport, template, category
|
|
91
|
+
export function evaluateCompliance(passport, template, category,
|
|
92
|
+
/** Evaluation time for date-gated rules (BAT-2). Defaults to the current time. */
|
|
93
|
+
now = new Date()) {
|
|
92
94
|
const { completionPercentage } = derivePassportCounts(passport.fields);
|
|
93
95
|
if (!template) {
|
|
94
96
|
return {
|
|
@@ -167,7 +169,7 @@ export function evaluateCompliance(passport, template, category) {
|
|
|
167
169
|
const conditionalCoverage = categoryRules.length > 0 ? "evaluated" : "static-only";
|
|
168
170
|
for (const rule of [...categoryRules, ...CROSS_CUTTING_RULES]) {
|
|
169
171
|
checkedRules.push(rule.id);
|
|
170
|
-
for (const finding of rule.run(passport, template)) {
|
|
172
|
+
for (const finding of rule.run(passport, template, { now })) {
|
|
171
173
|
(finding.severity === "critical" ? critical : warnings).push(finding);
|
|
172
174
|
}
|
|
173
175
|
}
|
package/dist/verdict.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracepass/dpp-validate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Evaluate an EU Digital Product Passport against its category field-spec — a three-tier compliance verdict with regulation-cited findings. Pure functions, no third-party runtime dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"digital-product-passport",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"clean": "rm -rf dist"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@tracepass/dpp-types": "^0.
|
|
48
|
+
"@tracepass/dpp-types": "^0.7.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"typescript": "^5.6.3"
|