Gå til indhold

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:

  1. Server-side, allerede gemte DPP’erGET /v1/dpp/:id/eu-compliance
  2. Live-preview i oprettelsesformularenPOST /v1/dpp/validate
  3. Live-simulator i detaljerPOST /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: truesummary.errors === 0
  • espr_ready: true ⇔ alle ESPR-opt-in-felter er udfyldt (se Tekstil-DPP)
  • issues[] er sorteret stabilt efter severity (errorwarninginfo) og derefter efter kode

Sværhedsgrader

SeverityBetydningEksempel
errorBlokerer EU-overholdelse; bør rettes før udgivelseTEXTILE_AGEC_REQUIRED, hvis FR er på markedet, og forsyningskæden er ufuldstændig
warningAnbefaling; kunden kan gemme, men bør handleTEXTILE_GREENWASHING uden for FR
infoStatussignal uden behov for handlingTEXTILE_ESPR_READY — alle ESPR-opt-in-felter er komplette

Regelkatalog (tekstil + batteri)

Tekstil (Q3.3.4)

CodeSværhedsgradUdløser
TEXTILE_AGEC_REQUIREDerror (FR) · warning (ellers)AGEC-kæde (vævning/farvning/konfektionering) ufuldstændig, FR på markedet
TEXTILE_MICROPLASTICS_CONSISTENCYerrorSyntetisk ≥ 50 %, men contains_microplastics !== true
TEXTILE_SVHC_THRESHOLDwarningSVHC-registrering uden CAS-nummer eller koncentration
TEXTILE_GREENWASHINGerror (FR) · warning (ellers)Udtryk fra forbudslisten i product_name/material
TEXTILE_ESPR_READYinfoAlle 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:

Terminal window
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-fejl
  • data.jsonld_preview — JSON-LD-preview
  • data.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

/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:

  1. Preview: “Hvad sker der, hvis jeg tilføjer FR til sortimentet?” → Vælg chippen “FR” → “Preview EU impact” → TEXTILE_AGEC_REQUIRED bliver synlig
  2. Fix: Færdiggør forsyningskæden (uden for simulatoren i oprettelses- eller bulk-flowet)
  3. Save: “Save changes” gemmer status-/markedslisten direkte via PUT /v1/dpp/:id

Direkte API-adgang:

Terminal window
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:

Terminal window
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 1
fi
jq -e '.data.summary.errors == 0' /tmp/out.json > /dev/null

MCP-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ÅrsagLøsning
TEXTILE_MICROPLASTICS_CONSISTENCYPolyesterandel ≥ 50 %, men flaget er falseSæt contains_microplastics: true
TEXTILE_AGEC_REQUIRED med hints.market: "FR"FR på markedet, kæden er ufuldstændigSæt country_weaving_knitting, country_dyeing_printing, country_assembly
TEXTILE_GREENWASHING som errorForbudt udtryk + FR på markedetFjern udtrykket fra product_name eller tilpas markedet
TEXTILE_SVHC_THRESHOLDSVHC-stof uden CASIndtast 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