Aller au contenu

Vérifier la conformité UE

Vérifier la conformité UE

qr3.app contient un validateur UE intégré pour les Digital Product Passports. Il vérifie vos DPP par rapport aux réglementations européennes applicables (ESPR, Loi AGEC) et fournit des problèmes structurés avec leur sévérité, le chemin du champ, des conseils et un badge facultatif ESPR-ready.

Il existe trois points d’entrée :

  1. Côté serveur, DPP déjà enregistrésGET /v1/dpp/:id/eu-compliance
  2. Aperçu en direct dans le formulaire de créationPOST /v1/dpp/validate
  3. Simulateur en direct en détailPOST /v1/dpp/:id/validate-update

Tous trois renvoient la même structure EuComplianceResult — vous n’avez donc à implémenter l’évaluation qu’une seule fois.

Structure du résultat

{
"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 ⇔ tous les champs d’opt-in ESPR sont définis (voir DPP Textile)
  • issues[] est trié de manière stable par sévérité (errorwarninginfo), puis par code

Niveaux de sévérité

SévéritéSignificationExemple
errorBloque la conformité UE ; devrait être corrigé avant la publicationTEXTILE_AGEC_REQUIRED si FR est dans le marché et que la chaîne de traçabilité est incomplète
warningRecommandation ; le client peut enregistrer, mais devrait agirTEXTILE_GREENWASHING en dehors de FR
infoSignal d’état sans action requiseTEXTILE_ESPR_READY — tous les champs d’opt-in ESPR sont complets

Catalogue de règles (Textile + Batterie)

Textile (Q3.3.4)

CodeSévéritéDéclencheur
TEXTILE_AGEC_REQUIREDerror (FR) · warning (sinon)Chaîne AGEC (tissage/teinture/confection) incomplète, FR dans le marché
TEXTILE_MICROPLASTICS_CONSISTENCYerrorSynthétique ≥ 50 % mais contains_microplastics !== true
TEXTILE_SVHC_THRESHOLDwarningEntrée SVHC sans numéro CAS ou concentration
TEXTILE_GREENWASHINGerror (FR) · warning (sinon)Terme de la liste d’interdiction dans product_name/material
TEXTILE_ESPR_READYinfoTous les champs ESPR B7–B15 complets

Batterie (Phase 4a)

Le validateur vérifie les valeurs limites de la réglementation européenne sur les batteries 2023/1542 (seuils de contenu recyclé, classes d’empreinte carbone, garantie minimale, etc.). Détails dans la documentation du DPP Batterie.

Aperçu en direct dans le formulaire de création

Dès que vous créez un DPP dans le tableau de bord (/dashboard/dpp/new), le même validateur s’exécute de manière stateless à chaque cycle de validation — sans que le passe n’ait besoin d’être enregistré. La section eu_compliance apparaît directement sous le panneau de validation existant et met en évidence les erreurs et les avertissements avant la soumission.

Accès direct à l’API :

Fenêtre de terminal
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 }] }
}'

La réponse contient :

  • data.valid — validité syntaxique (Zod)
  • data.errors[] — erreurs Zod classiques
  • data.jsonld_preview — aperçu JSON-LD
  • data.eu_compliance — résultat du validateur UE (null si la validation Zod échoue)

Si eu_compliance.summary.errors > 0, le tableau de bord affiche une bannière Save-Guard juste au-dessus du bouton de soumission — l’enregistrement n’est pas bloqué, mais vous voyez les conséquences avant de cliquer.

Simulateur en direct en détail

Sur /dashboard/dpp/:dppId, il y a une carte de simulation sous la section de conformité. Elle permet de modifier les deux champs les plus pertinents pour la conformité (status et market_countries) et d’en voir immédiatement l’impact — sans toucher aux données existantes. Flux typique :

  1. Aperçu : « Que se passe-t-il si j’ajoute FR à la gamme ? » → sélectionner le badge « FR » → « Preview EU impact » → TEXTILE_AGEC_REQUIRED devient visible
  2. Correction : compléter la chaîne de traçabilité (en dehors du simulateur dans le flux de création ou de traitement par lot)
  3. Enregistrement : « Save changes » enregistre le statut/la liste des marchés directement via PUT /v1/dpp/:id

Accès direct à l’API :

Fenêtre de terminal
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" }'

La réponse enrichit le résultat standard avec un objet preview :

{
"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[] répertorie uniquement les champs qui changeraient réellement — vous pouvez ainsi, par exemple, mettre en évidence uniquement les badges modifiés dans une interface utilisateur.

Un corps vide est autorisé et renvoie l’évaluation de conformité actuelle (réévaluation de l’état réel).

Automatisation

Pipeline CI

Un test CI typique :

Fenêtre de terminal
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

Serveur MCP

Le serveur @qr3/mcp-server fourni propose entre autres un outil validate_dpp — les agents d’IA peuvent ainsi vérifier avant l’appel de création si les données existantes respectent les règles AGEC.

Erreurs courantes

ProblèmeCauseSolution
TEXTILE_MICROPLASTICS_CONSISTENCYPart de polyester ≥ 50 %, mais le drapeau est falseDéfinir contains_microplastics: true
TEXTILE_AGEC_REQUIRED avec hints.market: "FR"FR dans le marché, chaîne incomplèteDéfinir country_weaving_knitting, country_dyeing_printing, country_assembly
TEXTILE_GREENWASHING en tant qu’ errorTerme interdit + FR dans le marchéRetirer le terme de product_name ou adapter le marché
TEXTILE_SVHC_THRESHOLDSubstance SVHC sans CASSaisir le numéro CAS de la liste REACH

Étapes suivantes

  • DPP Textile — schéma, chaîne de traçabilité, boîte d’avertissement sur les microplastiques
  • DPP Batterie — champs obligatoires du passeport batterie
  • Référence API — tous les points de terminaison de conformité UE en détail