@passwerk/rules 0.1.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/LICENSE +202 -0
- package/PROVENANCE.md +64 -0
- package/README.md +59 -0
- package/artefacts/aas/3.0.9/aas.json +1522 -0
- package/artefacts/aas/3.1.2/aas.json +1532 -0
- package/artefacts/batterypass/2025_Battery_Passport_Data_Attributes_V1.2.xlsx +0 -0
- package/artefacts/batterypass/samm/CarbonFootprint-1.2.0.ttl +96 -0
- package/artefacts/batterypass/samm/Circularity-1.2.0.ttl +280 -0
- package/artefacts/batterypass/samm/GeneralProductInformation-1.2.0.ttl +200 -0
- package/artefacts/batterypass/samm/Labels-1.2.0.ttl +65 -0
- package/artefacts/batterypass/samm/MaterialComposition-1.2.0.ttl +188 -0
- package/artefacts/batterypass/samm/Performance-1.2.1.ttl +660 -0
- package/artefacts/batterypass/samm/SupplyChainDueDiligence-1.2.0.ttl +45 -0
- package/artefacts/ec/2026-08-15_data-points-by-category_v2.0.pdf +0 -0
- package/artefacts/idta/02035-1/1.0/template.aasx +0 -0
- package/artefacts/idta/02035-1/1.0/template.json +2276 -0
- package/artefacts/idta/02035-1/1.0/template.noexamples.json +2263 -0
- package/artefacts/idta/02035-2/1.0/template.aasx +0 -0
- package/artefacts/idta/02035-2/1.0/template.json +2991 -0
- package/artefacts/idta/02035-2/1.0/template.noexamples.json +2990 -0
- package/artefacts/idta/02035-3/1.0/template.aasx +0 -0
- package/artefacts/idta/02035-3/1.0/template.json +1644 -0
- package/artefacts/idta/02035-3/1.0/template.noexamples.json +1643 -0
- package/artefacts/idta/02035-4/1.0.1/template.aasx +0 -0
- package/artefacts/idta/02035-4/1.0.1/template.json +4248 -0
- package/artefacts/idta/02035-4/1.0.1/template.noexamples.json +4219 -0
- package/artefacts/idta/02035-5/1.0.2/template.aasx +0 -0
- package/artefacts/idta/02035-5/1.0.2/template.json +4185 -0
- package/artefacts/idta/02035-6/1.0.1/template.aasx +0 -0
- package/artefacts/idta/02035-6/1.0.1/template.json +2167 -0
- package/artefacts/idta/02035-6/1.0.1/template.noexamples.json +2160 -0
- package/artefacts/idta/02035-7/1.0.1/template.aasx +0 -0
- package/artefacts/idta/02035-7/1.0.1/template.json +3296 -0
- package/artefacts/idta/02035-7/1.0.1/template.noexamples.json +3296 -0
- package/artefacts/manifest.json +417 -0
- package/dist/artefacts/aas/3.0.9/aas.json +1522 -0
- package/dist/artefacts/aas/3.1.2/aas.json +1532 -0
- package/dist/artefacts/idta/02035-1/1.0/template.json +2276 -0
- package/dist/artefacts/idta/02035-1/1.0/template.noexamples.json +2263 -0
- package/dist/artefacts/idta/02035-2/1.0/template.json +2991 -0
- package/dist/artefacts/idta/02035-2/1.0/template.noexamples.json +2990 -0
- package/dist/artefacts/idta/02035-3/1.0/template.json +1644 -0
- package/dist/artefacts/idta/02035-3/1.0/template.noexamples.json +1643 -0
- package/dist/artefacts/idta/02035-4/1.0.1/template.json +4248 -0
- package/dist/artefacts/idta/02035-4/1.0.1/template.noexamples.json +4219 -0
- package/dist/artefacts/idta/02035-5/1.0.2/template.json +4185 -0
- package/dist/artefacts/idta/02035-6/1.0.1/template.json +2167 -0
- package/dist/artefacts/idta/02035-6/1.0.1/template.noexamples.json +2160 -0
- package/dist/artefacts/idta/02035-7/1.0.1/template.json +3296 -0
- package/dist/artefacts/idta/02035-7/1.0.1/template.noexamples.json +3296 -0
- package/dist/artefacts/manifest.json +417 -0
- package/dist/kb/attributes/01-identifiers.json +483 -0
- package/dist/kb/attributes/02-labels-conformity.json +319 -0
- package/dist/kb/attributes/03-carbon-footprint.json +421 -0
- package/dist/kb/attributes/04-due-diligence.json +163 -0
- package/dist/kb/attributes/05-materials.json +264 -0
- package/dist/kb/attributes/06-circularity.json +758 -0
- package/dist/kb/attributes/07-performance-electrical.json +1118 -0
- package/dist/kb/attributes/08-performance-lifetime.json +837 -0
- package/dist/kb/carrier.json +44 -0
- package/dist/kb/ec-datapoints.json +866 -0
- package/dist/kb/generated/batterypass-samm.json +3310 -0
- package/dist/kb/generated/din-longlist.json +2610 -0
- package/dist/kb/generated/template-catalogue.json +7788 -0
- package/dist/kb/rules.json +524 -0
- package/dist/kb/timeline.json +422 -0
- package/dist/src/index.d.ts +75 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +214 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types.d.ts +298 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/kb/attributes/01-identifiers.json +483 -0
- package/kb/attributes/02-labels-conformity.json +319 -0
- package/kb/attributes/03-carbon-footprint.json +421 -0
- package/kb/attributes/04-due-diligence.json +163 -0
- package/kb/attributes/05-materials.json +264 -0
- package/kb/attributes/06-circularity.json +758 -0
- package/kb/attributes/07-performance-electrical.json +1118 -0
- package/kb/attributes/08-performance-lifetime.json +837 -0
- package/kb/attributes/README.md +74 -0
- package/kb/carrier.json +44 -0
- package/kb/ec-datapoints.json +866 -0
- package/kb/generated/batterypass-samm.json +3310 -0
- package/kb/generated/din-longlist.json +2610 -0
- package/kb/generated/template-catalogue.json +7788 -0
- package/kb/rules.json +524 -0
- package/kb/timeline.json +422 -0
- package/package.json +59 -0
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "passwerk plausibility rules (validation layer L4, see docs/BUILD_PLAN.md 2.4). Data only: the rule engine in @passwerk/core implements one check per id. Rules never override the AAS metamodel (L2) or template conformance (L3) verdicts. Severity 'error' makes the verdict invalid; 'warning' yields valid_with_warnings. 'attributes' lists the attribute ids (kb/attributes) a rule reads. Legal references are informational and come from kb/ec-datapoints.json or the cited article. Rules with \"legalRef\": null are arithmetic consistency checks, not legal requirements. The numeric tolerances used by PW-PLAUS-016, 017 and 022 are engineering judgement, not values stated in the Regulation; they are named constants in @passwerk/core.",
|
|
3
|
+
"lastVerified": "2026-09-04",
|
|
4
|
+
"rules": [
|
|
5
|
+
{
|
|
6
|
+
"id": "PW-PLAUS-001",
|
|
7
|
+
"severity": "error",
|
|
8
|
+
"title": {
|
|
9
|
+
"en": "Percentage values must lie between 0 and 100",
|
|
10
|
+
"de": "Prozentwerte müssen zwischen 0 und 100 liegen"
|
|
11
|
+
},
|
|
12
|
+
"message": {
|
|
13
|
+
"en": "{attribute} is {value} %, outside 0..100.",
|
|
14
|
+
"de": "{attribute} beträgt {value} %, außerhalb von 0..100."
|
|
15
|
+
},
|
|
16
|
+
"fixHint": {
|
|
17
|
+
"en": "Check whether the source gives a fraction (0.12) instead of a percentage (12 %), or a promille value.",
|
|
18
|
+
"de": "Prüfen, ob die Quelle einen Bruch (0,12) statt Prozent (12 %) oder Promille angibt."
|
|
19
|
+
},
|
|
20
|
+
"attributes": [
|
|
21
|
+
"capacityFade",
|
|
22
|
+
"powerFade",
|
|
23
|
+
"initialRoundTripEnergyEfficiency",
|
|
24
|
+
"roundTripEnergyEfficiencyAt50PercentCycleLife",
|
|
25
|
+
"remainingRoundTripEnergyEfficiency",
|
|
26
|
+
"energyRoundTripEfficiencyFade",
|
|
27
|
+
"stateOfCharge",
|
|
28
|
+
"stateOfCertifiedEnergy",
|
|
29
|
+
"capacityThresholdForExhaustion",
|
|
30
|
+
"renewableContentShare",
|
|
31
|
+
"recycledNickelPreConsumer",
|
|
32
|
+
"recycledCobaltPreConsumer",
|
|
33
|
+
"recycledLithiumPreConsumer",
|
|
34
|
+
"recycledLeadPreConsumer",
|
|
35
|
+
"recycledNickelPostConsumer",
|
|
36
|
+
"recycledCobaltPostConsumer",
|
|
37
|
+
"recycledLithiumPostConsumer",
|
|
38
|
+
"recycledLeadPostConsumer",
|
|
39
|
+
"carbonFootprintShareRawMaterials",
|
|
40
|
+
"carbonFootprintShareManufacturing",
|
|
41
|
+
"carbonFootprintShareDistribution"
|
|
42
|
+
],
|
|
43
|
+
"legalRef": null
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "PW-PLAUS-002",
|
|
47
|
+
"severity": "error",
|
|
48
|
+
"title": {
|
|
49
|
+
"en": "Voltage limits must be ordered: minimum <= nominal <= maximum",
|
|
50
|
+
"de": "Spannungsgrenzen müssen geordnet sein: minimal <= nominal <= maximal"
|
|
51
|
+
},
|
|
52
|
+
"message": {
|
|
53
|
+
"en": "Minimum {min} V, nominal {nom} V and maximum {max} V are not in ascending order.",
|
|
54
|
+
"de": "Minimal {min} V, nominal {nom} V und maximal {max} V sind nicht aufsteigend geordnet."
|
|
55
|
+
},
|
|
56
|
+
"fixHint": {
|
|
57
|
+
"en": "Cell-level and pack-level voltages are often mixed up in data sheets; use pack-level values throughout.",
|
|
58
|
+
"de": "Zell- und Packspannungen werden in Datenblättern oft vermischt; durchgehend Packwerte verwenden."
|
|
59
|
+
},
|
|
60
|
+
"attributes": ["minimumVoltage", "nominalVoltage", "maximumVoltage"],
|
|
61
|
+
"legalRef": "BR Annex XIII 1(h)"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "PW-PLAUS-003",
|
|
65
|
+
"severity": "error",
|
|
66
|
+
"title": {
|
|
67
|
+
"en": "Manufacturing date must be plausible and precede the date of putting into service",
|
|
68
|
+
"de": "Herstellungsdatum muss plausibel sein und vor der Inbetriebnahme liegen"
|
|
69
|
+
},
|
|
70
|
+
"message": {
|
|
71
|
+
"en": "Manufacturing date {manufacturingDate} is in the future, before 2000, or after the date of putting into service {dateOfPuttingIntoService}.",
|
|
72
|
+
"de": "Herstellungsdatum {manufacturingDate} liegt in der Zukunft, vor 2000 oder nach der Inbetriebnahme {dateOfPuttingIntoService}."
|
|
73
|
+
},
|
|
74
|
+
"fixHint": {
|
|
75
|
+
"en": "Check day/month order (DD.MM.YYYY vs MM/DD/YYYY) and two-digit years in the source document.",
|
|
76
|
+
"de": "Tag/Monat-Reihenfolge (TT.MM.JJJJ vs MM/TT/JJJJ) und zweistellige Jahreszahlen im Quelldokument prüfen."
|
|
77
|
+
},
|
|
78
|
+
"attributes": ["manufacturingDate", "dateOfPuttingIntoService"],
|
|
79
|
+
"legalRef": "BR Annex VI Part A (4)"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "PW-PLAUS-004",
|
|
83
|
+
"severity": "warning",
|
|
84
|
+
"title": {
|
|
85
|
+
"en": "Battery mass should be plausible for the battery category",
|
|
86
|
+
"de": "Batteriemasse sollte zur Batteriekategorie passen"
|
|
87
|
+
},
|
|
88
|
+
"message": {
|
|
89
|
+
"en": "A mass of {value} kg is unusual for a {category} battery (typical: LMT 1-50 kg, EV 100-1500 kg, industrial >2 kWh 10-50000 kg).",
|
|
90
|
+
"de": "Eine Masse von {value} kg ist für eine {category}-Batterie ungewöhnlich (typisch: LMT 1-50 kg, EV 100-1500 kg, Industrie >2 kWh 10-50000 kg)."
|
|
91
|
+
},
|
|
92
|
+
"fixHint": {
|
|
93
|
+
"en": "Check the unit: grams and tonnes must be converted to kilograms; cell mass is not pack mass.",
|
|
94
|
+
"de": "Einheit prüfen: Gramm und Tonnen in Kilogramm umrechnen; Zellmasse ist nicht Packmasse."
|
|
95
|
+
},
|
|
96
|
+
"attributes": ["batteryMass", "batteryCategory"],
|
|
97
|
+
"legalRef": "BR Annex VI Part A (5)"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "PW-PLAUS-005",
|
|
101
|
+
"severity": "error",
|
|
102
|
+
"title": {
|
|
103
|
+
"en": "Industrial batteries in passport scope must have more than 2 kWh",
|
|
104
|
+
"de": "Industriebatterien im Passumfang müssen mehr als 2 kWh haben"
|
|
105
|
+
},
|
|
106
|
+
"message": {
|
|
107
|
+
"en": "Category is industrial but rated capacity {capacity} Ah x nominal voltage {voltage} V = {energy} kWh is not above 2 kWh.",
|
|
108
|
+
"de": "Kategorie ist Industrie, aber Nennkapazität {capacity} Ah x Nennspannung {voltage} V = {energy} kWh liegt nicht über 2 kWh."
|
|
109
|
+
},
|
|
110
|
+
"fixHint": {
|
|
111
|
+
"en": "Industrial batteries of 2 kWh or less need no passport (Article 77(1)); check capacity unit (Ah vs mAh) and voltage level.",
|
|
112
|
+
"de": "Industriebatterien bis 2 kWh brauchen keinen Pass (Artikel 77(1)); Kapazitätseinheit (Ah vs. mAh) und Spannungsebene prüfen."
|
|
113
|
+
},
|
|
114
|
+
"attributes": ["batteryCategory", "ratedCapacity", "nominalVoltage"],
|
|
115
|
+
"legalRef": "BR Article 77(1)"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "PW-PLAUS-006",
|
|
119
|
+
"severity": "error",
|
|
120
|
+
"title": {
|
|
121
|
+
"en": "Battery status must be one of the five defined values",
|
|
122
|
+
"de": "Batteriestatus muss einer der fünf definierten Werte sein"
|
|
123
|
+
},
|
|
124
|
+
"message": {
|
|
125
|
+
"en": "Status '{value}' is not one of original, repurposed, re-used, remanufactured, waste.",
|
|
126
|
+
"de": "Status '{value}' ist keiner der Werte original, repurposed, re-used, remanufactured, waste."
|
|
127
|
+
},
|
|
128
|
+
"fixHint": {
|
|
129
|
+
"en": "Map free text ('new', 'neu', 'second life') to the closest defined value; new batteries are 'original'.",
|
|
130
|
+
"de": "Freitext ('neu', 'new', 'second life') auf den passenden Wert abbilden; Neubatterien sind 'original'."
|
|
131
|
+
},
|
|
132
|
+
"attributes": ["batteryStatus"],
|
|
133
|
+
"legalRef": "BR Annex XIII 4(c)"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "PW-PLAUS-007",
|
|
137
|
+
"severity": "error",
|
|
138
|
+
"title": {
|
|
139
|
+
"en": "Battery category in the passport must match the declared category of the draft",
|
|
140
|
+
"de": "Batteriekategorie im Pass muss der deklarierten Kategorie des Entwurfs entsprechen"
|
|
141
|
+
},
|
|
142
|
+
"message": {
|
|
143
|
+
"en": "The draft is being validated as {draftCategory} but the battery category attribute says {value}.",
|
|
144
|
+
"de": "Der Entwurf wird als {draftCategory} geprüft, das Attribut Batteriekategorie sagt aber {value}."
|
|
145
|
+
},
|
|
146
|
+
"fixHint": {
|
|
147
|
+
"en": "The category decides which data points are mandatory; fix it first, then re-validate.",
|
|
148
|
+
"de": "Die Kategorie entscheidet über die Pflichtdatenpunkte; zuerst korrigieren, dann erneut prüfen."
|
|
149
|
+
},
|
|
150
|
+
"attributes": ["batteryCategory"],
|
|
151
|
+
"legalRef": "BR Annex VI Part A (2), Article 3"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "PW-PLAUS-008",
|
|
155
|
+
"severity": "error",
|
|
156
|
+
"title": {
|
|
157
|
+
"en": "Battery passport identifier must be an absolute https URI",
|
|
158
|
+
"de": "Batteriepass-Kennung muss eine absolute https-URI sein"
|
|
159
|
+
},
|
|
160
|
+
"message": {
|
|
161
|
+
"en": "'{value}' is not an absolute https URI that a QR code can resolve.",
|
|
162
|
+
"de": "'{value}' ist keine absolute https-URI, die ein QR-Code auflösen kann."
|
|
163
|
+
},
|
|
164
|
+
"fixHint": {
|
|
165
|
+
"en": "Use the resolver URL of the passport, e.g. a GS1 Digital Link (https://id.example.com/01/.../21/...), not the bare serial number.",
|
|
166
|
+
"de": "Die Resolver-URL des Passes verwenden, z. B. einen GS1 Digital Link (https://id.example.com/01/.../21/...), nicht die reine Seriennummer."
|
|
167
|
+
},
|
|
168
|
+
"attributes": ["batteryPassportIdentifier"],
|
|
169
|
+
"legalRef": "BR Article 77(3), ISO/IEC 15459"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "PW-PLAUS-009",
|
|
173
|
+
"severity": "warning",
|
|
174
|
+
"title": {
|
|
175
|
+
"en": "Material identifiers should be valid CAS registry numbers",
|
|
176
|
+
"de": "Materialkennungen sollten gültige CAS-Nummern sein"
|
|
177
|
+
},
|
|
178
|
+
"message": {
|
|
179
|
+
"en": "'{value}' does not look like a CAS number (NN-NN-N with a valid check digit).",
|
|
180
|
+
"de": "'{value}' sieht nicht wie eine CAS-Nummer aus (NN-NN-N mit gültiger Prüfziffer)."
|
|
181
|
+
},
|
|
182
|
+
"fixHint": {
|
|
183
|
+
"en": "Take the CAS number from the safety data sheet, section 3; do not use trade names as identifiers.",
|
|
184
|
+
"de": "CAS-Nummer aus dem Sicherheitsdatenblatt, Abschnitt 3, übernehmen; keine Handelsnamen als Kennung verwenden."
|
|
185
|
+
},
|
|
186
|
+
"attributes": [
|
|
187
|
+
"criticalRawMaterials",
|
|
188
|
+
"electrodeAndElectrolyteMaterials",
|
|
189
|
+
"hazardousSubstances"
|
|
190
|
+
],
|
|
191
|
+
"legalRef": "BR Annex VI Part A (8) and (10)"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "PW-PLAUS-010",
|
|
195
|
+
"severity": "error",
|
|
196
|
+
"title": {
|
|
197
|
+
"en": "Pre-consumer and post-consumer recycled shares of one material must not exceed 100 % together",
|
|
198
|
+
"de": "Pre-Consumer- und Post-Consumer-Rezyklatanteil eines Materials dürfen zusammen 100 % nicht überschreiten"
|
|
199
|
+
},
|
|
200
|
+
"message": {
|
|
201
|
+
"en": "{material}: pre-consumer {pre} % + post-consumer {post} % = {sum} % exceeds 100 %.",
|
|
202
|
+
"de": "{material}: Pre-Consumer {pre} % + Post-Consumer {post} % = {sum} % überschreitet 100 %."
|
|
203
|
+
},
|
|
204
|
+
"fixHint": {
|
|
205
|
+
"en": "Both shares refer to the same total material mass; check whether one value is already the combined share.",
|
|
206
|
+
"de": "Beide Anteile beziehen sich auf dieselbe Gesamtmasse; prüfen, ob ein Wert bereits der Gesamtanteil ist."
|
|
207
|
+
},
|
|
208
|
+
"attributes": [
|
|
209
|
+
"recycledNickelPreConsumer",
|
|
210
|
+
"recycledNickelPostConsumer",
|
|
211
|
+
"recycledCobaltPreConsumer",
|
|
212
|
+
"recycledCobaltPostConsumer",
|
|
213
|
+
"recycledLithiumPreConsumer",
|
|
214
|
+
"recycledLithiumPostConsumer",
|
|
215
|
+
"recycledLeadPreConsumer",
|
|
216
|
+
"recycledLeadPostConsumer"
|
|
217
|
+
],
|
|
218
|
+
"legalRef": "BR Article 8, Annex XIII 1(e)"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "PW-PLAUS-011",
|
|
222
|
+
"severity": "error",
|
|
223
|
+
"title": {
|
|
224
|
+
"en": "Dynamic values need a LastUpdate timestamp that is not in the future",
|
|
225
|
+
"de": "Dynamische Werte brauchen einen LastUpdate-Zeitstempel, der nicht in der Zukunft liegt"
|
|
226
|
+
},
|
|
227
|
+
"message": {
|
|
228
|
+
"en": "{attribute} has a value but its LastUpdate is missing or in the future ({timestamp}).",
|
|
229
|
+
"de": "{attribute} hat einen Wert, aber LastUpdate fehlt oder liegt in der Zukunft ({timestamp})."
|
|
230
|
+
},
|
|
231
|
+
"fixHint": {
|
|
232
|
+
"en": "Take the timestamp from the BMS read-out; use ISO 8601 with time zone.",
|
|
233
|
+
"de": "Zeitstempel aus dem BMS-Auslesen übernehmen; ISO 8601 mit Zeitzone verwenden."
|
|
234
|
+
},
|
|
235
|
+
"attributes": [
|
|
236
|
+
"remainingCapacity",
|
|
237
|
+
"remainingUsableBatteryEnergy",
|
|
238
|
+
"stateOfCertifiedEnergy",
|
|
239
|
+
"stateOfCharge",
|
|
240
|
+
"remainingPowerCapability",
|
|
241
|
+
"remainingRoundTripEnergyEfficiency",
|
|
242
|
+
"currentSelfDischargeRate",
|
|
243
|
+
"evolutionOfSelfDischarge",
|
|
244
|
+
"numberOfFullCycles",
|
|
245
|
+
"energyThroughput",
|
|
246
|
+
"capacityThroughput",
|
|
247
|
+
"temperatureInformation",
|
|
248
|
+
"timeInExtremeHighTemperature",
|
|
249
|
+
"timeInExtremeLowTemperature",
|
|
250
|
+
"timeChargingInExtremeHighTemperature",
|
|
251
|
+
"timeChargingInExtremeLowTemperature",
|
|
252
|
+
"deepDischargeEvents",
|
|
253
|
+
"overchargeEvents"
|
|
254
|
+
],
|
|
255
|
+
"legalRef": "BR Article 77(4)"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"id": "PW-PLAUS-012",
|
|
259
|
+
"severity": "warning",
|
|
260
|
+
"title": {
|
|
261
|
+
"en": "Data points not to be displayed for the battery category should be left empty",
|
|
262
|
+
"de": "Für die Batteriekategorie nicht anzuzeigende Datenpunkte sollten leer bleiben"
|
|
263
|
+
},
|
|
264
|
+
"message": {
|
|
265
|
+
"en": "{attribute} is filled although the Commission's guidance marks it 'not to be filled/displayed' for {category}.",
|
|
266
|
+
"de": "{attribute} ist befüllt, obwohl die Leitlinie der Kommission es für {category} als 'nicht auszufüllen/anzuzeigen' einstuft."
|
|
267
|
+
},
|
|
268
|
+
"fixHint": {
|
|
269
|
+
"en": "Keep the value in your records but omit it from the emitted passport, or document why it is shown.",
|
|
270
|
+
"de": "Wert intern behalten, im ausgegebenen Pass aber weglassen oder begründen, warum er angezeigt wird."
|
|
271
|
+
},
|
|
272
|
+
"attributes": [
|
|
273
|
+
"stateOfCertifiedEnergy",
|
|
274
|
+
"capacityThresholdForExhaustion",
|
|
275
|
+
"remainingCapacity",
|
|
276
|
+
"remainingPowerCapability",
|
|
277
|
+
"remainingRoundTripEnergyEfficiency",
|
|
278
|
+
"evolutionOfSelfDischarge"
|
|
279
|
+
],
|
|
280
|
+
"legalRef": "EC guidance v2.0, data points 33 and 61-66"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": "PW-PLAUS-014",
|
|
284
|
+
"severity": "warning",
|
|
285
|
+
"title": {
|
|
286
|
+
"en": "Internal resistance values should be in ohms, not milliohms",
|
|
287
|
+
"de": "Innenwiderstände sollten in Ohm, nicht in Milliohm angegeben sein"
|
|
288
|
+
},
|
|
289
|
+
"message": {
|
|
290
|
+
"en": "Internal resistance {value} Ohm is implausibly high for a battery; the source probably states milliohms.",
|
|
291
|
+
"de": "Innenwiderstand {value} Ohm ist für eine Batterie unplausibel hoch; die Quelle nennt vermutlich Milliohm."
|
|
292
|
+
},
|
|
293
|
+
"fixHint": {
|
|
294
|
+
"en": "Divide milliohm values by 1000. Cell values are typically 0.0005-0.1 Ohm, pack values below 1 Ohm.",
|
|
295
|
+
"de": "Milliohm-Werte durch 1000 teilen. Zellwerte liegen typisch bei 0,0005-0,1 Ohm, Packwerte unter 1 Ohm."
|
|
296
|
+
},
|
|
297
|
+
"attributes": ["initialInternalResistance"],
|
|
298
|
+
"legalRef": "BR Annex XIII 1(o)"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"id": "PW-PLAUS-015",
|
|
302
|
+
"severity": "error",
|
|
303
|
+
"title": {
|
|
304
|
+
"en": "Idle temperature range must have lower boundary below upper boundary",
|
|
305
|
+
"de": "Ruhetemperaturbereich: untere Grenze muss unter der oberen liegen"
|
|
306
|
+
},
|
|
307
|
+
"message": {
|
|
308
|
+
"en": "Lower boundary {lower} degC is not below upper boundary {upper} degC.",
|
|
309
|
+
"de": "Untere Grenze {lower} °C liegt nicht unter der oberen Grenze {upper} °C."
|
|
310
|
+
},
|
|
311
|
+
"fixHint": {
|
|
312
|
+
"en": "Check for a lost minus sign in the lower boundary.",
|
|
313
|
+
"de": "Auf ein verlorenes Minuszeichen bei der unteren Grenze prüfen."
|
|
314
|
+
},
|
|
315
|
+
"attributes": ["temperatureRangeIdleLowerBoundary", "temperatureRangeIdleUpperBoundary"],
|
|
316
|
+
"legalRef": "BR Annex XIII 1(l)"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"id": "PW-PLAUS-016",
|
|
320
|
+
"severity": "warning",
|
|
321
|
+
"title": {
|
|
322
|
+
"en": "Certified usable energy must fit rated capacity and nominal voltage",
|
|
323
|
+
"de": "Zertifizierte nutzbare Energie muss zu Nennkapazität und Nennspannung passen"
|
|
324
|
+
},
|
|
325
|
+
"message": {
|
|
326
|
+
"en": "Declared {declared} kWh differs by more than 20 % from the {derived} kWh implied by rated capacity and nominal voltage.",
|
|
327
|
+
"de": "Angegebene {declared} kWh weichen um mehr als 20 % von den aus Nennkapazität und Nennspannung berechneten {derived} kWh ab."
|
|
328
|
+
},
|
|
329
|
+
"fixHint": {
|
|
330
|
+
"en": "Usually Wh reported as kWh, or cell values reported as pack values. State pack-level figures in kWh.",
|
|
331
|
+
"de": "Häufig werden Wh als kWh oder Zellwerte als Packwerte angegeben. Werte auf Packebene und in kWh angeben."
|
|
332
|
+
},
|
|
333
|
+
"attributes": ["certifiedUsableBatteryEnergy", "ratedCapacity", "nominalVoltage"],
|
|
334
|
+
"legalRef": "BR Annex XIII 1(g), 1(h)"
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"id": "PW-PLAUS-017",
|
|
338
|
+
"severity": "warning",
|
|
339
|
+
"title": {
|
|
340
|
+
"en": "The life-cycle carbon footprint shares should add up to 100 %",
|
|
341
|
+
"de": "Die Anteile am CO2-Fußabdruck sollten zusammen 100 % ergeben"
|
|
342
|
+
},
|
|
343
|
+
"message": {
|
|
344
|
+
"en": "The life-cycle shares add up to {sum} % instead of 100 %.",
|
|
345
|
+
"de": "Die Lebenszyklus-Anteile ergeben zusammen {sum} % statt 100 %."
|
|
346
|
+
},
|
|
347
|
+
"fixHint": {
|
|
348
|
+
"en": "Take all four shares from the same life-cycle assessment; mixing studies rarely adds up.",
|
|
349
|
+
"de": "Alle vier Anteile aus derselben Ökobilanz übernehmen; gemischte Studien ergeben selten 100 %."
|
|
350
|
+
},
|
|
351
|
+
"attributes": [
|
|
352
|
+
"carbonFootprintShareRawMaterials",
|
|
353
|
+
"carbonFootprintShareManufacturing",
|
|
354
|
+
"carbonFootprintShareDistribution",
|
|
355
|
+
"carbonFootprintShareEndOfLife"
|
|
356
|
+
],
|
|
357
|
+
"legalRef": null
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"id": "PW-PLAUS-018",
|
|
361
|
+
"severity": "error",
|
|
362
|
+
"title": {
|
|
363
|
+
"en": "The material masses must not exceed the battery mass",
|
|
364
|
+
"de": "Die Summe der Materialmassen darf die Batteriemasse nicht überschreiten"
|
|
365
|
+
},
|
|
366
|
+
"message": {
|
|
367
|
+
"en": "The declared material masses add up to {sum} kg but the battery mass is {mass} kg.",
|
|
368
|
+
"de": "Die angegebenen Materialmassen ergeben zusammen {sum} kg, die Batteriemasse ist mit {mass} kg angegeben."
|
|
369
|
+
},
|
|
370
|
+
"fixHint": {
|
|
371
|
+
"en": "Check whether masses were given per cell instead of per pack, or whether the battery mass is too low.",
|
|
372
|
+
"de": "Prüfen, ob Massen je Zelle statt je Pack angegeben wurden oder ob die Batteriemasse zu niedrig ist."
|
|
373
|
+
},
|
|
374
|
+
"attributes": ["batteryMass", "criticalRawMaterials", "electrodeAndElectrolyteMaterials"],
|
|
375
|
+
"legalRef": "BR Annex VI Part A (5), Annex XIII 1(b)"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"id": "PW-PLAUS-019",
|
|
379
|
+
"severity": "error",
|
|
380
|
+
"title": {
|
|
381
|
+
"en": "Hazardous substance concentrations must not exceed 100 % together",
|
|
382
|
+
"de": "Die Konzentrationen der Gefahrstoffe dürfen zusammen 100 % nicht überschreiten"
|
|
383
|
+
},
|
|
384
|
+
"message": {
|
|
385
|
+
"en": "The declared concentrations add up to {sum} %.",
|
|
386
|
+
"de": "Die angegebenen Konzentrationen ergeben zusammen {sum} %."
|
|
387
|
+
},
|
|
388
|
+
"fixHint": {
|
|
389
|
+
"en": "State each concentration as a mass share of the whole pack, from section 3 of the safety data sheet.",
|
|
390
|
+
"de": "Jede Konzentration als Massenanteil am Gesamtpack angeben, aus Abschnitt 3 des Sicherheitsdatenblatts."
|
|
391
|
+
},
|
|
392
|
+
"attributes": ["hazardousSubstances"],
|
|
393
|
+
"legalRef": "BR Annex VI Part A (8)"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"id": "PW-PLAUS-020",
|
|
397
|
+
"severity": "error",
|
|
398
|
+
"title": {
|
|
399
|
+
"en": "Remaining values must not exceed their original counterparts",
|
|
400
|
+
"de": "Restwerte dürfen ihre Ausgangswerte nicht überschreiten"
|
|
401
|
+
},
|
|
402
|
+
"message": {
|
|
403
|
+
"en": "{pair}: the remaining value {remaining} is greater than the original value {original}.",
|
|
404
|
+
"de": "{pair}: Restwert {remaining} ist größer als der Ausgangswert {original}."
|
|
405
|
+
},
|
|
406
|
+
"fixHint": {
|
|
407
|
+
"en": "Remaining values come from the battery management system, original values from the data sheet; bring both to the same level and unit.",
|
|
408
|
+
"de": "Restwerte stammen aus dem Batteriemanagementsystem, Ausgangswerte aus dem Datenblatt; beide auf dieselbe Ebene und Einheit bringen."
|
|
409
|
+
},
|
|
410
|
+
"attributes": [
|
|
411
|
+
"remainingCapacity",
|
|
412
|
+
"ratedCapacity",
|
|
413
|
+
"remainingUsableBatteryEnergy",
|
|
414
|
+
"certifiedUsableBatteryEnergy",
|
|
415
|
+
"remainingRoundTripEnergyEfficiency",
|
|
416
|
+
"initialRoundTripEnergyEfficiency"
|
|
417
|
+
],
|
|
418
|
+
"legalRef": "BR Annex XIII 4(a)"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"id": "PW-PLAUS-021",
|
|
422
|
+
"severity": "warning",
|
|
423
|
+
"title": {
|
|
424
|
+
"en": "Round trip efficiency must not rise over cycle life",
|
|
425
|
+
"de": "Der Round-Trip-Wirkungsgrad darf über die Lebensdauer nicht steigen"
|
|
426
|
+
},
|
|
427
|
+
"message": {
|
|
428
|
+
"en": "Efficiency at 50 % of cycle-life ({later} %) is above the initial value ({initial} %).",
|
|
429
|
+
"de": "Der Wirkungsgrad bei 50 % der Zyklenlebensdauer ({later} %) liegt über dem Anfangswert ({initial} %)."
|
|
430
|
+
},
|
|
431
|
+
"fixHint": {
|
|
432
|
+
"en": "The two values are often swapped in data sheets; the initial value is the higher one.",
|
|
433
|
+
"de": "Die beiden Werte werden in Datenblättern oft vertauscht; der Anfangswert ist der höhere."
|
|
434
|
+
},
|
|
435
|
+
"attributes": [
|
|
436
|
+
"initialRoundTripEnergyEfficiency",
|
|
437
|
+
"roundTripEnergyEfficiencyAt50PercentCycleLife"
|
|
438
|
+
],
|
|
439
|
+
"legalRef": "BR Annex XIII 1(n)"
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"id": "PW-PLAUS-022",
|
|
443
|
+
"severity": "warning",
|
|
444
|
+
"title": {
|
|
445
|
+
"en": "Capacity fade must agree with rated and remaining capacity",
|
|
446
|
+
"de": "Der Kapazitätsverlust muss zu Nennkapazität und Restkapazität passen"
|
|
447
|
+
},
|
|
448
|
+
"message": {
|
|
449
|
+
"en": "Declared capacity fade {declared} % differs from the {derived} % implied by rated and remaining capacity.",
|
|
450
|
+
"de": "Angegebener Kapazitätsverlust {declared} % weicht von den aus Nenn- und Restkapazität berechneten {derived} % ab."
|
|
451
|
+
},
|
|
452
|
+
"fixHint": {
|
|
453
|
+
"en": "Compute fade as (1 - remaining / rated) x 100 from the same measurement.",
|
|
454
|
+
"de": "Kapazitätsverlust als (1 - Restkapazität / Nennkapazität) x 100 aus derselben Messung berechnen."
|
|
455
|
+
},
|
|
456
|
+
"attributes": ["capacityFade", "ratedCapacity", "remainingCapacity"],
|
|
457
|
+
"legalRef": "BR Annex XIII 4(a)"
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"id": "PW-PLAUS-023",
|
|
461
|
+
"severity": "warning",
|
|
462
|
+
"title": {
|
|
463
|
+
"en": "The cycle count must not exceed the expected lifetime in cycles",
|
|
464
|
+
"de": "Die Zyklenzahl darf die erwartete Lebensdauer nicht überschreiten"
|
|
465
|
+
},
|
|
466
|
+
"message": {
|
|
467
|
+
"en": "{cycles} full cycles exceed the expected lifetime of {expected} cycles.",
|
|
468
|
+
"de": "{cycles} gefahrene Vollzyklen überschreiten die erwartete Lebensdauer von {expected} Zyklen."
|
|
469
|
+
},
|
|
470
|
+
"fixHint": {
|
|
471
|
+
"en": "Either the expected lifetime is set too low or the counter is counting partial cycles.",
|
|
472
|
+
"de": "Entweder ist die erwartete Lebensdauer zu niedrig angesetzt oder der Zähler zählt Teilzyklen."
|
|
473
|
+
},
|
|
474
|
+
"attributes": ["numberOfFullCycles", "expectedLifetimeCycles"],
|
|
475
|
+
"legalRef": "BR Annex XIII 1(j), 4(d)"
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"id": "PW-PLAUS-024",
|
|
479
|
+
"severity": "warning",
|
|
480
|
+
"title": {
|
|
481
|
+
"en": "A declared carbon footprint needs its calculation method and study",
|
|
482
|
+
"de": "Ein angegebener CO2-Fußabdruck braucht Berechnungsmethode und Studie"
|
|
483
|
+
},
|
|
484
|
+
"message": {
|
|
485
|
+
"en": "A carbon footprint is declared but {missing} is missing.",
|
|
486
|
+
"de": "Der CO2-Fußabdruck ist angegeben, aber {missing} fehlt."
|
|
487
|
+
},
|
|
488
|
+
"fixHint": {
|
|
489
|
+
"en": "Ask the provider of the life-cycle assessment for the calculation method and a link to the study.",
|
|
490
|
+
"de": "Berechnungsmethode und Verweis auf die Studie beim Anbieter der Ökobilanz anfordern."
|
|
491
|
+
},
|
|
492
|
+
"attributes": [
|
|
493
|
+
"carbonFootprintPerFunctionalUnit",
|
|
494
|
+
"carbonFootprintGeneralInformation",
|
|
495
|
+
"carbonFootprintStudyLink"
|
|
496
|
+
],
|
|
497
|
+
"legalRef": "BR Annex XIII 1(c)"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"id": "PW-PLAUS-025",
|
|
501
|
+
"severity": "warning",
|
|
502
|
+
"title": {
|
|
503
|
+
"en": "Time in extreme temperature must not exceed the age of the battery",
|
|
504
|
+
"de": "Die Zeiten in Extremtemperatur dürfen das Alter der Batterie nicht überschreiten"
|
|
505
|
+
},
|
|
506
|
+
"message": {
|
|
507
|
+
"en": "The extreme-temperature times add up to {minutes} minutes but the battery has been in service for only {ageMinutes} minutes.",
|
|
508
|
+
"de": "Die Extremtemperaturzeiten ergeben zusammen {minutes} Minuten, die Batterie ist seit Inbetriebnahme aber erst {ageMinutes} Minuten in Betrieb."
|
|
509
|
+
},
|
|
510
|
+
"fixHint": {
|
|
511
|
+
"en": "Usually hours reported as minutes. Convert the battery management system values to minutes.",
|
|
512
|
+
"de": "Häufig werden Stunden als Minuten angegeben. Werte des Batteriemanagementsystems in Minuten umrechnen."
|
|
513
|
+
},
|
|
514
|
+
"attributes": [
|
|
515
|
+
"timeInExtremeHighTemperature",
|
|
516
|
+
"timeInExtremeLowTemperature",
|
|
517
|
+
"timeChargingInExtremeHighTemperature",
|
|
518
|
+
"timeChargingInExtremeLowTemperature",
|
|
519
|
+
"dateOfPuttingIntoService"
|
|
520
|
+
],
|
|
521
|
+
"legalRef": "BR Annex XIII 4(d)"
|
|
522
|
+
}
|
|
523
|
+
]
|
|
524
|
+
}
|