Kontroller EU-overholdelse
Kontroller EU-overholdelse
qr3.app indeholder en integreret EU-validator til Digital Product Passports. Den kontrollerer dine DPP’er mod de relevante EU-regelsæt (ESPR, Loi AGEC) og leverer strukturerede issues med severity, feltsti, tips og et valgfrit ESPR-ready-badge.
Der er tre adgangspunkter:
- Server-side, allerede gemte DPP’er —
GET /v1/dpp/:id/eu-compliance - Live-preview i oprettelsesformularen —
POST /v1/dpp/validate - Live-simulator i detaljer —
POST /v1/dpp/:id/validate-update
Alle tre leverer den samme EuComplianceResult-shape — så du behøver kun at implementere evalueringen én gang.
Resultatets struktur
{ "compliant": false, "espr_ready": true, "issues": [ { "code": "TEXTILE_AGEC_REQUIRED", "severity": "error", "field": "textile_data.country_weaving_knitting", "message": "AGEC chain country is required for products sold on the French market", "hints": { "market": "FR" } }, { "code": "TEXTILE_GREENWASHING", "severity": "warning", "field": "product_name", "message": "\"natural\" is a prohibited term under AGEC", "hints": { "term": "natural", "locale": "en", "category": "generic" } } ], "summary": { "errors": 1, "warnings": 1, "info": 0 }}compliant: true⇔summary.errors === 0espr_ready: true⇔ alle ESPR-opt-in-felter er udfyldt (se Tekstil-DPP)issues[]er sorteret stabilt efter severity (error→warning→info) og derefter efter kode
Sværhedsgrader
| Severity | Betydning | Eksempel |
|---|---|---|
error | Blokerer EU-overholdelse; bør rettes før udgivelse | TEXTILE_AGEC_REQUIRED, hvis FR er på markedet, og forsyningskæden er ufuldstændig |
warning | Anbefaling; kunden kan gemme, men bør handle | TEXTILE_GREENWASHING uden for FR |
info | Statussignal uden behov for handling | TEXTILE_ESPR_READY — alle ESPR-opt-in-felter er komplette |
Regelkatalog (tekstil + batteri)
Tekstil (Q3.3.4)
| Code | Sværhedsgrad | Udløser |
|---|---|---|
TEXTILE_AGEC_REQUIRED | error (FR) · warning (ellers) | AGEC-kæde (vævning/farvning/konfektionering) ufuldstændig, FR på markedet |
TEXTILE_MICROPLASTICS_CONSISTENCY | error | Syntetisk ≥ 50 %, men contains_microplastics !== true |
TEXTILE_SVHC_THRESHOLD | warning | SVHC-registrering uden CAS-nummer eller koncentration |
TEXTILE_GREENWASHING | error (FR) · warning (ellers) | Udtryk fra forbudslisten i product_name/material |
TEXTILE_ESPR_READY | info | Alle ESPR-felter B7–B15 er komplette |
Batteri (Fase 4a)
Validatoren kontrollerer grænseværdier fra EU-batteriforordningen 2023/1542 (tærskler for genanvendt indhold, Carbon Footprint-klasser, minimumsgaranti osv.). Detaljer findes i Batteri-DPP-dokumentationen.
Live-preview i oprettelsesformularen
Så snart du opretter en DPP i dashboardet (/dashboard/dpp/new), kører den samme validator stateless ved hver validerings-roundtrip — uden at passet behøver at blive gemt. Sektionen eu_compliance vises direkte under det eksisterende valideringspanel og fremhæver fejl og advarsler før afsendelse (submit).
Direkte API-adgang:
curl -X POST https://qr3.app/v1/dpp/validate \ -H "Authorization: Bearer $API_KEY" \ -H "X-Workspace-Id: $WS_ID" \ -H "Content-Type: application/json" \ -d '{ "category": "textile", "gtin": "04012345678901", "product_name": "Natural Cotton T-Shirt", "manufacturer": "EcoWear GmbH", "origin_country": "PT", "market_countries": ["FR"], "textile_data": { "fiber_composition": [{ "material": "cotton", "percentage": 100, "recycled_pct": 0 }] } }'Svaret indeholder:
data.valid— syntaktisk gyldighed (Zod)data.errors[]— klassiske Zod-fejldata.jsonld_preview— JSON-LD-previewdata.eu_compliance— EU-validator-resultat (null, hvis Zod-valideringen mislykkes)
Hvis eu_compliance.summary.errors > 0, renderer dashboardet et Save-Guard-banner umiddelbart over submit-knappen — lagringen (save) bliver ikke blokeret, men du ser konsekvenserne før klikket.
Live-simulator i detaljer
På /dashboard/dpp/:dppId er der et simulatorkort under compliance-sektionen. Det gør det muligt at ændre de to mest compliance-relevante felter (status og market_countries) og se effekten med det samme — uden at røre ved de eksisterende data. Typisk flow:
- Preview: “Hvad sker der, hvis jeg tilføjer FR til sortimentet?” → Vælg chippen “FR” → “Preview EU impact” →
TEXTILE_AGEC_REQUIREDbliver synlig - Fix: Færdiggør forsyningskæden (uden for simulatoren i oprettelses- eller bulk-flowet)
- Save: “Save changes” gemmer status-/markedslisten direkte via
PUT /v1/dpp/:id
Direkte API-adgang:
curl -X POST https://qr3.app/v1/dpp/$DPP_ID/validate-update \ -H "Authorization: Bearer $API_KEY" \ -H "X-Workspace-Id: $WS_ID" \ -H "Content-Type: application/json" \ -d '{ "market_countries": ["DE", "FR"], "status": "live" }'Responsen udvider standardresultatet med et preview-objekt:
{ "data": { "compliant": false, "espr_ready": false, "issues": [/* … */], "summary": { "errors": 1, "warnings": 0, "info": 0 }, "preview": { "status": "live", "landing_locale": "de", "market_countries": ["DE", "FR"], "changed_fields": ["status", "market_countries"] } }}changed_fields[] viser kun felter, der faktisk ville ændre sig — på den måde kan du f.eks. nøjes med at fremhæve de ændrede chips i en brugergrænseflade (UI).
En tom body er tilladt og leverer den aktuelle compliance-vurdering (genvurdering af den nuværende tilstand).
Automatisering
CI-pipeline
Et typisk CI-tjek:
STATUS=$(curl -s -o /tmp/out.json -w "%{http_code}" \ https://qr3.app/v1/dpp/$DPP_ID/eu-compliance \ -H "Authorization: Bearer $API_KEY" \ -H "X-Workspace-Id: $WS_ID")
if [ "$STATUS" != "200" ]; then exit 1fi
jq -e '.data.summary.errors == 0' /tmp/out.json > /dev/nullMCP-server
Den medfølgende @qr3/mcp-server tilbyder blandt andet et validate_dpp-værktøj — AI-agenter kan bruge det til at kontrollere, om de foreliggende data overholder AGEC-reglerne, før oprettelseskaldet (create-call) foretages.
Almindelige fejl
| Issue | Årsag | Løsning |
|---|---|---|
TEXTILE_MICROPLASTICS_CONSISTENCY | Polyesterandel ≥ 50 %, men flaget er false | Sæt contains_microplastics: true |
TEXTILE_AGEC_REQUIRED med hints.market: "FR" | FR på markedet, kæden er ufuldstændig | Sæt country_weaving_knitting, country_dyeing_printing, country_assembly |
TEXTILE_GREENWASHING som error | Forbudt udtryk + FR på markedet | Fjern udtrykket fra product_name eller tilpas markedet |
TEXTILE_SVHC_THRESHOLD | SVHC-stof uden CAS | Indtast CAS-nummer fra REACH-listen |
Næste skridt
- Tekstil-DPP — skema, forsyningskæde, mikroplast-advarselsboks
- Batteri-DPP — obligatoriske felter for batteripas
- API-reference — alle EU-compliance-endpoints i detaljer