Verificar conformidade com a UE
Verificar conformidade com a UE
qr3.app inclui um validador da UE integrado para Digital Product Passports. Ele verifica os seus DPPs em relação aos regulamentos relevantes da UE (ESPR, Loi AGEC) e fornece problemas estruturados com gravidade, caminho do campo, dicas e um selo opcional ESPR-ready.
Existem três pontos de entrada:
- No lado do servidor, DPPs já guardados —
GET /v1/dpp/:id/eu-compliance - Pré-visualização ao vivo no formulário de criação —
POST /v1/dpp/validate - Simulador ao vivo em detalhe —
POST /v1/dpp/:id/validate-update
Todos os três fornecem a mesma estrutura EuComplianceResult — portanto, só precisa de implementar a avaliação uma vez.
Estrutura do resultado
{ "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⇔ todos os campos de opt-in do ESPR definidos (ver DPP Têxtil)issues[]é ordenado de forma estável por gravidade (error→warning→info) e depois por código
Níveis de gravidade
| Gravidade | Significado | Exemplo |
|---|---|---|
error | Bloqueia a conformidade com a UE; deve ser corrigido antes do lançamento | TEXTILE_AGEC_REQUIRED se a FR estiver no mercado e a cadeia de origem estiver incompleta |
warning | Recomendação; o cliente pode guardar, mas deve agir | TEXTILE_GREENWASHING fora da FR |
info | Sinal de estado sem necessidade de ação | TEXTILE_ESPR_READY — todos os campos de opt-in do ESPR completos |
Catálogo de regras (Têxtil + Bateria)
Têxtil (Q3.3.4)
| Código | Gravidade | Gatilho |
|---|---|---|
TEXTILE_AGEC_REQUIRED | error (FR) · warning (caso contrário) | Cadeia AGEC (tecelagem/tinturaria/confecção) incompleta, FR no mercado |
TEXTILE_MICROPLASTICS_CONSISTENCY | error | Sintético ≥ 50% mas contains_microplastics !== true |
TEXTILE_SVHC_THRESHOLD | warning | Registo SVHC sem número CAS ou concentração |
TEXTILE_GREENWASHING | error (FR) · warning (caso contrário) | Termo da lista de proibidos em product_name/material |
TEXTILE_ESPR_READY | info | Todos os campos ESPR B7–B15 completos |
Bateria (Fase 4a)
O validador verifica os limites do Regulamento de Baterias da UE 2023/1542 (limites de conteúdo reciclado, classes de pegada de carbono, garantia mínima, etc.). Detalhes na documentação do DPP de Bateria.
Pré-visualização ao vivo no formulário de criação
Assim que cria um DPP no painel (/dashboard/dpp/new), o mesmo validador é executado de forma stateless em cada ciclo de validação — sem que o passaporte precise de ser guardado. A secção eu_compliance aparece diretamente abaixo do painel de validação existente e destaca erros e avisos antes do envio (submit).
Acesso direto à 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 }] } }'A resposta contém:
data.valid— validade sintática (Zod)data.errors[]— erros clássicos do Zoddata.jsonld_preview— pré-visualização JSON-LDdata.eu_compliance— resultado do validador da UE (nullse a validação do Zod falhar)
Se eu_compliance.summary.errors > 0, o painel renderiza um banner Save-Guard imediatamente acima do botão de envio — a gravação não é bloqueada, mas verá as consequências antes de clicar.
Simulador ao vivo em detalhe
Em /dashboard/dpp/:dppId, existe um cartão do simulador abaixo da secção de conformidade. Ele permite alterar os dois campos mais relevantes para a conformidade (status e market_countries) e ver o impacto imediatamente — sem alterar os dados existentes. Fluxo típico:
- Preview: “O que acontece se eu incluir a FR na gama de produtos?” → Selecionar o chip “FR” → “Preview EU impact” →
TEXTILE_AGEC_REQUIREDtorna-se visível - Fix: Completar a cadeia de origem (fora do simulador, no fluxo de criação ou em lote)
- Save: “Save changes” guarda o estado/lista de mercados diretamente via
PUT /v1/dpp/:id
Acesso direto à 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" }'A resposta expande o resultado padrão com um objeto 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[] lista apenas os campos que realmente seriam alterados — permitindo, por exemplo, destacar apenas os chips alterados numa interface de utilizador.
Um corpo vazio é permitido e fornece a avaliação de conformidade atual (reavaliar o estado real).
Automatização
Pipeline de CI
Uma verificação típica de CI:
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/nullServidor MCP
O @qr3/mcp-server fornecido oferece, entre outras coisas, uma ferramenta validate_dpp — os agentes de IA podem usá-la antes da chamada de criação para verificar se os dados existentes cumprem as regras AGEC.
Erros comuns
| Problema | Causa | Correção |
|---|---|---|
TEXTILE_MICROPLASTICS_CONSISTENCY | Teor de poliéster ≥ 50%, mas a flag está como false | Definir contains_microplastics: true |
TEXTILE_AGEC_REQUIRED com hints.market: "FR" | FR no mercado, cadeia incompleta | Definir country_weaving_knitting, country_dyeing_printing, country_assembly |
TEXTILE_GREENWASHING como error | Termo proibido + FR no mercado | Remover o termo de product_name ou ajustar o mercado |
TEXTILE_SVHC_THRESHOLD | Substância SVHC sem CAS | Inserir o número CAS da lista REACH |
Próximos passos
- DPP Têxtil — esquema, cadeia de origem, caixa de aviso de microplásticos
- DPP de Bateria — campos obrigatórios do passaporte de bateria
- Referência da API — todos os endpoints de conformidade com a UE em detalhe