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 :
- Côté serveur, DPP déjà enregistrés —
GET /v1/dpp/:id/eu-compliance - Aperçu en direct dans le formulaire de création —
POST /v1/dpp/validate - Simulateur en direct en détail —
POST /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: true⇔summary.errors === 0espr_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é (error→warning→info), puis par code
Niveaux de sévérité
| Sévérité | Signification | Exemple |
|---|---|---|
error | Bloque la conformité UE ; devrait être corrigé avant la publication | TEXTILE_AGEC_REQUIRED si FR est dans le marché et que la chaîne de traçabilité est incomplète |
warning | Recommandation ; le client peut enregistrer, mais devrait agir | TEXTILE_GREENWASHING en dehors de FR |
info | Signal d’état sans action requise | TEXTILE_ESPR_READY — tous les champs d’opt-in ESPR sont complets |
Catalogue de règles (Textile + Batterie)
Textile (Q3.3.4)
| Code | Sévérité | Déclencheur |
|---|---|---|
TEXTILE_AGEC_REQUIRED | error (FR) · warning (sinon) | Chaîne AGEC (tissage/teinture/confection) incomplète, FR dans le marché |
TEXTILE_MICROPLASTICS_CONSISTENCY | error | Synthétique ≥ 50 % mais contains_microplastics !== true |
TEXTILE_SVHC_THRESHOLD | warning | Entrée SVHC sans numéro CAS ou concentration |
TEXTILE_GREENWASHING | error (FR) · warning (sinon) | Terme de la liste d’interdiction dans product_name/material |
TEXTILE_ESPR_READY | info | Tous 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 :
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 classiquesdata.jsonld_preview— aperçu JSON-LDdata.eu_compliance— résultat du validateur UE (nullsi 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 :
- Aperçu : « Que se passe-t-il si j’ajoute FR à la gamme ? » → sélectionner le badge « FR » → « Preview EU impact » →
TEXTILE_AGEC_REQUIREDdevient visible - Correction : compléter la chaîne de traçabilité (en dehors du simulateur dans le flux de création ou de traitement par lot)
- Enregistrement : « Save changes » enregistre le statut/la liste des marchés directement via
PUT /v1/dpp/:id
Accès direct à l’API :
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 :
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/nullServeur 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ème | Cause | Solution |
|---|---|---|
TEXTILE_MICROPLASTICS_CONSISTENCY | Part de polyester ≥ 50 %, mais le drapeau est false | Définir contains_microplastics: true |
TEXTILE_AGEC_REQUIRED avec hints.market: "FR" | FR dans le marché, chaîne incomplète | Définir country_weaving_knitting, country_dyeing_printing, country_assembly |
TEXTILE_GREENWASHING en tant qu’ error | Terme interdit + FR dans le marché | Retirer le terme de product_name ou adapter le marché |
TEXTILE_SVHC_THRESHOLD | Substance SVHC sans CAS | Saisir 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