@tracepass/dpp-validate 0.13.1 → 0.14.1
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/dist/vendor/battery-applicability.d.ts +39 -6
- package/dist/vendor/battery-applicability.d.ts.map +1 -1
- package/dist/vendor/battery-applicability.js +143 -13
- package/dist/vendor/battery-applicability.js.map +1 -1
- package/dist/vendor/publish-gate.d.ts.map +1 -1
- package/dist/vendor/publish-gate.js +16 -3
- package/dist/vendor/publish-gate.js.map +1 -1
- package/package.json +2 -2
|
@@ -40,23 +40,44 @@ export type Applicability = "applies" | "not_applicable" | "unknown";
|
|
|
40
40
|
* importing it from here; the passport-level scope gate is rules.ts BAT-1. */
|
|
41
41
|
export { IN_SCOPE_BATTERY_CATEGORIES };
|
|
42
42
|
export interface FieldGate {
|
|
43
|
-
/**
|
|
43
|
+
/** Template field keys this gate governs. */
|
|
44
44
|
keys: string[];
|
|
45
|
-
/**
|
|
45
|
+
/** Regulation article / annex point reference, for the verdict citation. */
|
|
46
46
|
article: string;
|
|
47
47
|
/** One-line reason, surfaced in the verdict + editor tooltip. */
|
|
48
48
|
reason: string;
|
|
49
49
|
/** Extra remediation, for gates that turn on the stationary-storage flag. */
|
|
50
50
|
fixHint?: string;
|
|
51
|
+
/**
|
|
52
|
+
* ISO-8601 date from which the underlying provision is mandatory.
|
|
53
|
+
* Before this date `categoryFieldApplicability` returns "unknown" for fields
|
|
54
|
+
* governed by this gate, so they produce a warning but never a hard block.
|
|
55
|
+
* After this date the gate's `decide()` result is used as-is.
|
|
56
|
+
*/
|
|
57
|
+
mandatoryFrom?: string;
|
|
51
58
|
/** Decide applicability from the resolved trigger values. */
|
|
52
59
|
decide(t: Triggers): Applicability;
|
|
53
60
|
}
|
|
54
61
|
interface Triggers {
|
|
62
|
+
/** Sub-category value read from the passport (batteryCategory / detergentUserType / …). */
|
|
55
63
|
category: string | undefined;
|
|
56
64
|
hasBMS: boolean | undefined;
|
|
57
65
|
rechargeable: boolean | undefined;
|
|
58
66
|
externalStorageOnly: boolean | undefined;
|
|
59
67
|
isStationaryBess: boolean | undefined;
|
|
68
|
+
microorganismsAdded?: boolean | undefined;
|
|
69
|
+
sdsProvided?: boolean | undefined;
|
|
70
|
+
containsAllergenicFragrances?: boolean | undefined;
|
|
71
|
+
alsoUnderOtherActs?: boolean | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Field-derived tri-state: resolves whether a named passport field has an
|
|
74
|
+
* approved, non-empty value.
|
|
75
|
+
* true — field present + approved
|
|
76
|
+
* undefined — field present but pending_review (unknown → no hard block)
|
|
77
|
+
* false — field absent or empty
|
|
78
|
+
* Optional for backward compat; absent ≡ false (field not present).
|
|
79
|
+
*/
|
|
80
|
+
fieldPresent?(key: string): boolean | undefined;
|
|
60
81
|
}
|
|
61
82
|
/**
|
|
62
83
|
* The conditional gates, one per applicability rule from the deck. Order
|
|
@@ -83,12 +104,17 @@ export declare function fieldApplicability(passport: Passport, key: string): App
|
|
|
83
104
|
export declare function batteryFieldApplicability(passport: Passport, category: string): Record<string, Applicability>;
|
|
84
105
|
/** Look up the gate metadata (article + reason) for a gated field key. */
|
|
85
106
|
export declare function gateForKey(key: string): FieldGate | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Date strings from which each category's passport obligations become mandatory.
|
|
109
|
+
* Before these dates, any gate that carries `mandatoryFrom` returns "unknown"
|
|
110
|
+
* (warning, no hard block). After, the gate's `decide()` result is used as-is.
|
|
111
|
+
*/
|
|
112
|
+
export declare const DETERGENTS_PASSPORT_MANDATORY_FROM = "2029-09-23";
|
|
113
|
+
export declare const TOYS_PASSPORT_MANDATORY_FROM = "2030-08-01";
|
|
86
114
|
/**
|
|
87
115
|
* CATEGORY_FIELD_GATES — generalised gate registry, keyed by template category.
|
|
88
116
|
*
|
|
89
|
-
* Phase 1: battery only.
|
|
90
|
-
* rules are encoded. Battery gates are unchanged from BATTERY_FIELD_GATES; the
|
|
91
|
-
* two names refer to the same array.
|
|
117
|
+
* Phase 1: battery only. Phase 2: detergents and toys added.
|
|
92
118
|
*
|
|
93
119
|
* Callers that need to enumerate gates for a category use this registry.
|
|
94
120
|
* The battery-specific `batteryFieldApplicability` is now a thin wrapper.
|
|
@@ -102,6 +128,13 @@ export declare const CATEGORY_FIELD_GATES: Record<string, FieldGate[]>;
|
|
|
102
128
|
* generic path: every category that has gates in CATEGORY_FIELD_GATES is handled,
|
|
103
129
|
* everything else is a no-op. `batteryFieldApplicability` is kept as a
|
|
104
130
|
* backward-compat alias.
|
|
131
|
+
*
|
|
132
|
+
* @param now Optional reference date for `mandatoryFrom` enforcement. Defaults
|
|
133
|
+
* to the current wall clock. Callers should pass a fixed date in tests.
|
|
134
|
+
* When a gate's `mandatoryFrom` is in the future relative to `now`,
|
|
135
|
+
* ALL keys governed by that gate resolve to "unknown" (warning only,
|
|
136
|
+
* never a hard publish block) — keeping the provision from creating
|
|
137
|
+
* obligations before it legally applies.
|
|
105
138
|
*/
|
|
106
|
-
export declare function categoryFieldApplicability(passport: Passport, category: string): Record<string, Applicability>;
|
|
139
|
+
export declare function categoryFieldApplicability(passport: Passport, category: string, now?: Date): Record<string, Applicability>;
|
|
107
140
|
//# sourceMappingURL=battery-applicability.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battery-applicability.d.ts","sourceRoot":"","sources":["../../src/vendor/battery-applicability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"battery-applicability.d.ts","sourceRoot":"","sources":["../../src/vendor/battery-applicability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAGjE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAErE;;+EAE+E;AAC/E,OAAO,EAAE,2BAA2B,EAAE,CAAC;AAUvC,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,MAAM,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;CACpC;AAED,UAAU,QAAQ;IAChB,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,mBAAmB,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC;IAGtC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAElC,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACjD;AA4FD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,EA6L1C,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,sFAAsF;AACtF,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAE/B;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,eAAe,CAAC;AAC/D,eAAO,MAAM,4BAA4B,eAAe,CAAC;AAqFzD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAI5D,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,IAAI,GACT,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAiB/B"}
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
*/
|
|
35
35
|
import { resolveConditionProfile } from "./condition-profile.js";
|
|
36
36
|
import { IN_SCOPE_BATTERY_CATEGORIES } from "./battery-scope.js";
|
|
37
|
+
import { SUBCATEGORY_FIELD } from "./subcategory.js";
|
|
37
38
|
/** Battery categories that are *in scope* for a battery passport at all.
|
|
38
39
|
* Re-exported from the shared definition so this module's consumers keep
|
|
39
40
|
* importing it from here; the passport-level scope gate is rules.ts BAT-1. */
|
|
@@ -58,17 +59,36 @@ function confirmed(flag) {
|
|
|
58
59
|
return undefined;
|
|
59
60
|
return flag.status === "approved" ? flag.value : undefined;
|
|
60
61
|
}
|
|
61
|
-
function readTriggers(passport) {
|
|
62
|
-
|
|
62
|
+
function readTriggers(passport, templateCategory = "battery") {
|
|
63
|
+
// Sub-category field key (batteryCategory / detergentUserType / …) from the
|
|
64
|
+
// SUBCATEGORY_FIELD map. Falls back to undefined for categories with no map entry (e.g. toys).
|
|
65
|
+
const subcatFieldKey = SUBCATEGORY_FIELD[templateCategory];
|
|
66
|
+
const catField = subcatFieldKey ? passport.fields[subcatFieldKey] : undefined;
|
|
63
67
|
// Use the canonical accessor so conditionProfile (new) and batteryProfile
|
|
64
68
|
// (legacy) both work through the same path.
|
|
65
69
|
const profile = resolveConditionProfile(passport);
|
|
66
70
|
return {
|
|
67
|
-
category:
|
|
71
|
+
category: catField && catField.value != null && catField.value !== ""
|
|
72
|
+
? String(catField.value)
|
|
73
|
+
: undefined,
|
|
74
|
+
// Battery flags
|
|
68
75
|
hasBMS: confirmed(profile["hasBMS"]),
|
|
69
76
|
rechargeable: confirmed(profile["rechargeable"]),
|
|
70
77
|
externalStorageOnly: confirmed(profile["externalStorageOnly"]),
|
|
71
78
|
isStationaryBess: confirmed(profile["isStationaryBess"]),
|
|
79
|
+
// Detergents flags (phase 2)
|
|
80
|
+
microorganismsAdded: confirmed(profile["microorganismsAdded"]),
|
|
81
|
+
sdsProvided: confirmed(profile["sdsProvided"]),
|
|
82
|
+
// Toys flags (phase 2)
|
|
83
|
+
containsAllergenicFragrances: confirmed(profile["containsAllergenicFragrances"]),
|
|
84
|
+
alsoUnderOtherActs: confirmed(profile["alsoUnderOtherActs"]),
|
|
85
|
+
// Field-derived tri-state: approved non-empty → true; pending_review → undefined; absent → false
|
|
86
|
+
fieldPresent: (key) => {
|
|
87
|
+
const f = passport.fields[key];
|
|
88
|
+
if (!f || f.value == null || f.value === "")
|
|
89
|
+
return false;
|
|
90
|
+
return f.status === "approved" ? true : undefined;
|
|
91
|
+
},
|
|
72
92
|
};
|
|
73
93
|
}
|
|
74
94
|
/**
|
|
@@ -104,6 +124,10 @@ function art14Subject(t) {
|
|
|
104
124
|
function sbessOrLmt(t) {
|
|
105
125
|
if (t.category === undefined)
|
|
106
126
|
return "unknown";
|
|
127
|
+
// Annex VII data lives in the BMS (Art. 14(1)); a battery confirmed to have
|
|
128
|
+
// none owes none of it (Commission battery FAQ §8.5). Unknown stays as before.
|
|
129
|
+
if (t.hasBMS === false)
|
|
130
|
+
return "not_applicable";
|
|
107
131
|
if (t.category === "LMT")
|
|
108
132
|
return "applies";
|
|
109
133
|
if (t.category === "industrial_gt_2kwh") {
|
|
@@ -214,11 +238,14 @@ export const BATTERY_FIELD_GATES = [
|
|
|
214
238
|
// only to electric-vehicle (EV) batteries. Resolvable from batteryCategory.
|
|
215
239
|
keys: ["stateOfCertifiedEnergy"],
|
|
216
240
|
article: "Annex XIII 4(b) / Art. 14",
|
|
217
|
-
reason: "State of certified energy (SOCE) applies only to electric-vehicle (EV) batteries.",
|
|
241
|
+
reason: "State of certified energy (SOCE) applies only to electric-vehicle (EV) batteries that have a battery management system (BMS).",
|
|
218
242
|
decide: (t) => {
|
|
219
243
|
if (t.category === undefined)
|
|
220
244
|
return "unknown";
|
|
221
|
-
|
|
245
|
+
if (t.category !== "EV")
|
|
246
|
+
return "not_applicable";
|
|
247
|
+
// SOCE is Art. 14 state-of-health data, held in the BMS; FAQ §8.5.
|
|
248
|
+
return t.hasBMS === false ? "not_applicable" : "applies";
|
|
222
249
|
},
|
|
223
250
|
},
|
|
224
251
|
{
|
|
@@ -243,7 +270,7 @@ export const BATTERY_FIELD_GATES = [
|
|
|
243
270
|
],
|
|
244
271
|
article: "Annex XIII 4(b) / Art. 14 / Annex VII Part A",
|
|
245
272
|
fixHint: SBESS_FIX_HINT,
|
|
246
|
-
reason: "Remaining capacity, remaining power capability, remaining round-trip efficiency, self-discharge evolution, pack ohmic resistance, and initial self-discharge rate (Annex VII Part A) apply only to LMT batteries and stationary battery energy storage systems, not EV or non-stationary industrial batteries.",
|
|
273
|
+
reason: "Remaining capacity, remaining power capability, remaining round-trip efficiency, self-discharge evolution, pack ohmic resistance, and initial self-discharge rate (Annex VII Part A) apply only to LMT batteries and stationary battery energy storage systems that have a battery management system (BMS), not EV or non-stationary industrial batteries.",
|
|
247
274
|
decide: sbessOrLmt,
|
|
248
275
|
},
|
|
249
276
|
{
|
|
@@ -261,7 +288,7 @@ export const BATTERY_FIELD_GATES = [
|
|
|
261
288
|
],
|
|
262
289
|
article: "Annex XIII 4(b) / Art. 14 / Annex VII Part B",
|
|
263
290
|
fixHint: SBESS_FIX_HINT,
|
|
264
|
-
reason: "Expected-lifetime parameters (Annex VII Part B) apply only to LMT batteries and stationary battery energy storage systems.",
|
|
291
|
+
reason: "Expected-lifetime parameters (Annex VII Part B) apply only to LMT batteries and stationary battery energy storage systems that have a battery management system (BMS).",
|
|
265
292
|
decide: sbessOrLmt,
|
|
266
293
|
},
|
|
267
294
|
{
|
|
@@ -333,7 +360,7 @@ export function fieldApplicability(passport, key) {
|
|
|
333
360
|
const gate = KEY_TO_GATE.get(key);
|
|
334
361
|
if (!gate)
|
|
335
362
|
return "applies";
|
|
336
|
-
return gate.decide(readTriggers(passport));
|
|
363
|
+
return gate.decide(readTriggers(passport, "battery"));
|
|
337
364
|
}
|
|
338
365
|
/**
|
|
339
366
|
* Full map for the gated fields only (callers default everything else to
|
|
@@ -352,18 +379,106 @@ export function batteryFieldApplicability(passport, category) {
|
|
|
352
379
|
export function gateForKey(key) {
|
|
353
380
|
return KEY_TO_GATE.get(key);
|
|
354
381
|
}
|
|
382
|
+
/**
|
|
383
|
+
* Date strings from which each category's passport obligations become mandatory.
|
|
384
|
+
* Before these dates, any gate that carries `mandatoryFrom` returns "unknown"
|
|
385
|
+
* (warning, no hard block). After, the gate's `decide()` result is used as-is.
|
|
386
|
+
*/
|
|
387
|
+
export const DETERGENTS_PASSPORT_MANDATORY_FROM = "2029-09-23";
|
|
388
|
+
export const TOYS_PASSPORT_MANDATORY_FROM = "2030-08-01";
|
|
389
|
+
// ─── Detergents gates (Reg (EU) 2026/405) ────────────────────────────────────
|
|
390
|
+
const DETERGENTS_FIELD_GATES = [
|
|
391
|
+
{
|
|
392
|
+
// Annex VI Part A(i): microorganisms list is required ONLY where micro-organisms
|
|
393
|
+
// are intentionally added to the product. If no micro-organisms are added the
|
|
394
|
+
// field does not apply. `microorganismsAdded` flag (owner-confirmed) resolves this.
|
|
395
|
+
keys: ["microorganisms"],
|
|
396
|
+
article: "Annex VI Part A(i) / Reg (EU) 2026/405",
|
|
397
|
+
reason: "The list of micro-organisms is required only where micro-organisms are intentionally added to the detergent formulation.",
|
|
398
|
+
mandatoryFrom: DETERGENTS_PASSPORT_MANDATORY_FROM,
|
|
399
|
+
decide: (t) => {
|
|
400
|
+
if (t.microorganismsAdded === undefined)
|
|
401
|
+
return "unknown";
|
|
402
|
+
return t.microorganismsAdded ? "applies" : "not_applicable";
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
// Annex VI Part A(h): the full ingredients list for industrial/institutional
|
|
407
|
+
// detergents is required UNLESS the manufacturer has provided a Safety Data Sheet
|
|
408
|
+
// (SDS) for the product. When an SDS is provided the duty is discharged separately.
|
|
409
|
+
keys: ["ingredients"],
|
|
410
|
+
article: "Annex VI Part A(h) / Reg (EU) 2026/405",
|
|
411
|
+
reason: "The full ingredients list for an industrial/institutional detergent is required in the passport unless a Safety Data Sheet covering that information has been provided separately.",
|
|
412
|
+
mandatoryFrom: DETERGENTS_PASSPORT_MANDATORY_FROM,
|
|
413
|
+
decide: (t) => {
|
|
414
|
+
if (t.sdsProvided === undefined)
|
|
415
|
+
return "unknown";
|
|
416
|
+
// SDS provided → the duty is discharged via SDS, not the passport.
|
|
417
|
+
return t.sdsProvided ? "not_applicable" : "applies";
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
];
|
|
421
|
+
// ─── Toys gates (Reg (EU) 2025/2509) ─────────────────────────────────────────
|
|
422
|
+
const TOYS_FIELD_GATES = [
|
|
423
|
+
{
|
|
424
|
+
// Annex VI Part I(l): a list of fragrances to which the toy may expose users
|
|
425
|
+
// is required only when those fragrances are listed under Annex II of
|
|
426
|
+
// Regulation (EC) No 1223/2009 (cosmetics allergens). If no allergen-listed
|
|
427
|
+
// fragrances are present the duty does not arise.
|
|
428
|
+
keys: ["allergenicFragrances"],
|
|
429
|
+
article: "Annex VI Part I(l) / Reg (EU) 2025/2509",
|
|
430
|
+
reason: "A list of allergen-listed fragrances is required in the toy passport only when such fragrances are present in the toy.",
|
|
431
|
+
mandatoryFrom: TOYS_PASSPORT_MANDATORY_FROM,
|
|
432
|
+
decide: (t) => {
|
|
433
|
+
if (t.containsAllergenicFragrances === undefined)
|
|
434
|
+
return "unknown";
|
|
435
|
+
return t.containsAllergenicFragrances ? "applies" : "not_applicable";
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
// Annex VI Part I(h): a statement about which other Union acts apply to the
|
|
440
|
+
// toy is required only where the toy also falls under one of the acts listed
|
|
441
|
+
// in Annex XI to the Regulation, or under Directive 2011/65/EU (RoHS).
|
|
442
|
+
keys: ["replacesDeclarationOfConformity"],
|
|
443
|
+
article: "Annex VI Part I(h) / Reg (EU) 2025/2509",
|
|
444
|
+
reason: "Information on compliance with other applicable Union acts (Annex XI / RoHS) is required only when the toy falls under one of those acts.",
|
|
445
|
+
mandatoryFrom: TOYS_PASSPORT_MANDATORY_FROM,
|
|
446
|
+
decide: (t) => {
|
|
447
|
+
if (t.alsoUnderOtherActs === undefined)
|
|
448
|
+
return "unknown";
|
|
449
|
+
return t.alsoUnderOtherActs ? "applies" : "not_applicable";
|
|
450
|
+
},
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
// Annex VI Part I(j): the notified-body certificate reference is required only
|
|
454
|
+
// when a notified body was involved (i.e. the `notifiedBody` field is filled).
|
|
455
|
+
// This is field-derived (no separate flag): an approved non-empty `notifiedBody`
|
|
456
|
+
// → certificate reference applies; absent/empty → not_applicable.
|
|
457
|
+
keys: ["notifiedBodyCertificateReference"],
|
|
458
|
+
article: "Annex VI Part I(j) / Reg (EU) 2025/2509",
|
|
459
|
+
reason: "The notified-body certificate reference is required only when a notified body was involved in the conformity assessment (indicated by the notifiedBody field being filled).",
|
|
460
|
+
mandatoryFrom: TOYS_PASSPORT_MANDATORY_FROM,
|
|
461
|
+
decide: (t) => {
|
|
462
|
+
// fieldPresent is optional in Triggers (backward compat); treat absent as false.
|
|
463
|
+
const present = t.fieldPresent ? t.fieldPresent("notifiedBody") : false;
|
|
464
|
+
if (present === undefined)
|
|
465
|
+
return "unknown"; // pending_review → warn, no block
|
|
466
|
+
return present ? "applies" : "not_applicable";
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
];
|
|
355
470
|
/**
|
|
356
471
|
* CATEGORY_FIELD_GATES — generalised gate registry, keyed by template category.
|
|
357
472
|
*
|
|
358
|
-
* Phase 1: battery only.
|
|
359
|
-
* rules are encoded. Battery gates are unchanged from BATTERY_FIELD_GATES; the
|
|
360
|
-
* two names refer to the same array.
|
|
473
|
+
* Phase 1: battery only. Phase 2: detergents and toys added.
|
|
361
474
|
*
|
|
362
475
|
* Callers that need to enumerate gates for a category use this registry.
|
|
363
476
|
* The battery-specific `batteryFieldApplicability` is now a thin wrapper.
|
|
364
477
|
*/
|
|
365
478
|
export const CATEGORY_FIELD_GATES = {
|
|
366
479
|
battery: BATTERY_FIELD_GATES,
|
|
480
|
+
detergents: DETERGENTS_FIELD_GATES,
|
|
481
|
+
toys: TOYS_FIELD_GATES,
|
|
367
482
|
};
|
|
368
483
|
/**
|
|
369
484
|
* Compute the applicability map for all gated fields of any category.
|
|
@@ -373,14 +488,29 @@ export const CATEGORY_FIELD_GATES = {
|
|
|
373
488
|
* generic path: every category that has gates in CATEGORY_FIELD_GATES is handled,
|
|
374
489
|
* everything else is a no-op. `batteryFieldApplicability` is kept as a
|
|
375
490
|
* backward-compat alias.
|
|
491
|
+
*
|
|
492
|
+
* @param now Optional reference date for `mandatoryFrom` enforcement. Defaults
|
|
493
|
+
* to the current wall clock. Callers should pass a fixed date in tests.
|
|
494
|
+
* When a gate's `mandatoryFrom` is in the future relative to `now`,
|
|
495
|
+
* ALL keys governed by that gate resolve to "unknown" (warning only,
|
|
496
|
+
* never a hard publish block) — keeping the provision from creating
|
|
497
|
+
* obligations before it legally applies.
|
|
376
498
|
*/
|
|
377
|
-
export function categoryFieldApplicability(passport, category) {
|
|
499
|
+
export function categoryFieldApplicability(passport, category, now) {
|
|
378
500
|
const gates = CATEGORY_FIELD_GATES[category];
|
|
379
501
|
if (!gates || gates.length === 0)
|
|
380
502
|
return {};
|
|
381
|
-
const triggers = readTriggers(passport);
|
|
503
|
+
const triggers = readTriggers(passport, category);
|
|
504
|
+
const effectiveNow = now ?? new Date();
|
|
382
505
|
const out = {};
|
|
383
506
|
for (const gate of gates) {
|
|
507
|
+
// Date-gate: if the provision has not yet entered into force, return "unknown"
|
|
508
|
+
// for every field in this gate — never a hard block before the law applies.
|
|
509
|
+
if (gate.mandatoryFrom && effectiveNow < new Date(gate.mandatoryFrom)) {
|
|
510
|
+
for (const k of gate.keys)
|
|
511
|
+
out[k] = "unknown";
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
384
514
|
const verdict = gate.decide(triggers);
|
|
385
515
|
for (const k of gate.keys)
|
|
386
516
|
out[k] = verdict;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battery-applicability.js","sourceRoot":"","sources":["../../src/vendor/battery-applicability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"battery-applicability.js","sourceRoot":"","sources":["../../src/vendor/battery-applicability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-gate.d.ts","sourceRoot":"","sources":["../../src/vendor/publish-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI9E,iEAAiE;AACjE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;CAC9C;AAQD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAUT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAKT;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,MAAM,EACxB,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAIT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAIT;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAM,GACvD,iBAAiB,
|
|
1
|
+
{"version":3,"file":"publish-gate.d.ts","sourceRoot":"","sources":["../../src/vendor/publish-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI9E,iEAAiE;AACjE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;CAC9C;AAQD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAUT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAKT;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,MAAM,EACxB,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAIT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAIT;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAM,GACvD,iBAAiB,CAwEnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAM,GACvD,YAAY,CAoEd"}
|
|
@@ -154,9 +154,16 @@ export function evaluateFieldRequirements(passport, template, applicabilityMap =
|
|
|
154
154
|
// emits an unverifiable_conditional warning via BAT-APP but never blocks.
|
|
155
155
|
const rb = tf.validation.requiredBy;
|
|
156
156
|
if (applicabilityMap[tf.key] === "applies" &&
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
157
|
+
(
|
|
158
|
+
// Path 1: field has a per-subcategory requiredBy map and the current
|
|
159
|
+
// subcategory is "conditional" — the gate's "applies" verdict promotes
|
|
160
|
+
// the conditional entry to a hard block (battery, detergents pattern).
|
|
161
|
+
(rb && category !== undefined && rb[category] === "conditional") ||
|
|
162
|
+
// Path 2: no requiredBy map at all and field is not statically required.
|
|
163
|
+
// Used for categories whose gated fields carry no subcategory (toys) —
|
|
164
|
+
// the gate alone decides whether the duty arises; when it says "applies"
|
|
165
|
+
// the field becomes mandatory regardless of the subcategory value.
|
|
166
|
+
(!tf.validation.required && !rb))) {
|
|
160
167
|
if (isFieldAbsent(f)) {
|
|
161
168
|
conditionalMissingFields.push(tf.key);
|
|
162
169
|
}
|
|
@@ -170,6 +177,12 @@ export function evaluateFieldRequirements(passport, template, applicabilityMap =
|
|
|
170
177
|
continue;
|
|
171
178
|
}
|
|
172
179
|
// ── Static required check ────────────────────────────────────────────────
|
|
180
|
+
// A gate verdict of "not_applicable" rests on an APPROVED flag (see
|
|
181
|
+
// `confirmed` in battery-applicability.ts), so it outranks the template's
|
|
182
|
+
// per-category "required": an LMT battery confirmed to have no BMS owes no
|
|
183
|
+
// Art. 14 data even though requiredBy.LMT says "required".
|
|
184
|
+
if (applicabilityMap[tf.key] === "not_applicable")
|
|
185
|
+
continue;
|
|
173
186
|
if (!effectiveRequiredFor(template.category, tf, category))
|
|
174
187
|
continue;
|
|
175
188
|
// Shared helper: `[]` stays a valid answer ("none apply"), while a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-gate.js","sourceRoot":"","sources":["../../src/vendor/publish-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkCrD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAqB;IACvD,OAAO;IACP,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAqC,EACrC,QAA4B;IAE5B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;IAE/C,wEAAwE;IACxE,IAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC;QACvE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,+CAA+C;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,2BAA2B,CACzC,EAAqC,EACrC,QAA4B;IAE5B,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAAwB,EACxB,EAAqC,EACrC,WAA+B;IAE/B,OAAO,gBAAgB,KAAK,SAAS;QACnC,CAAC,CAAC,2BAA2B,CAAC,EAAE,EAAE,WAAW,CAAC;QAC9C,CAAC,CAAC,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,wBAAwB,CACtC,EAAqC,EACrC,QAA4B;IAE5B,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;IACrC,IAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,eAAe,CAAC;AAClD,CAAC;AASD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAkB,EAClB,QAAkB,EAClB,mBAAsD,EAAE;IAExD,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEzE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,wBAAwB,GAAa,EAAE,CAAC;IAE9C,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,0EAA0E;QAC1E,4EAA4E;QAC5E,oDAAoD;QACpD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW;YAAE,SAAS;QAExC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAElC,2EAA2E;QAC3E,sEAAsE;QACtE,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QACpC,IACE,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS;YACtC,
|
|
1
|
+
{"version":3,"file":"publish-gate.js","sourceRoot":"","sources":["../../src/vendor/publish-gate.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.14.1",
|
|
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.14.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"typescript": "^5.6.3"
|