Pular para o conteúdo

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:

  1. No lado do servidor, DPPs já guardadosGET /v1/dpp/:id/eu-compliance
  2. Pré-visualização ao vivo no formulário de criaçãoPOST /v1/dpp/validate
  3. Simulador ao vivo em detalhePOST /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: truesummary.errors === 0
  • espr_ready: true ⇔ todos os campos de opt-in do ESPR definidos (ver DPP Têxtil)
  • issues[] é ordenado de forma estável por gravidade (errorwarninginfo) e depois por código

Níveis de gravidade

GravidadeSignificadoExemplo
errorBloqueia a conformidade com a UE; deve ser corrigido antes do lançamentoTEXTILE_AGEC_REQUIRED se a FR estiver no mercado e a cadeia de origem estiver incompleta
warningRecomendação; o cliente pode guardar, mas deve agirTEXTILE_GREENWASHING fora da FR
infoSinal de estado sem necessidade de açãoTEXTILE_ESPR_READY — todos os campos de opt-in do ESPR completos

Catálogo de regras (Têxtil + Bateria)

Têxtil (Q3.3.4)

CódigoGravidadeGatilho
TEXTILE_AGEC_REQUIREDerror (FR) · warning (caso contrário)Cadeia AGEC (tecelagem/tinturaria/confecção) incompleta, FR no mercado
TEXTILE_MICROPLASTICS_CONSISTENCYerrorSintético ≥ 50% mas contains_microplastics !== true
TEXTILE_SVHC_THRESHOLDwarningRegisto SVHC sem número CAS ou concentração
TEXTILE_GREENWASHINGerror (FR) · warning (caso contrário)Termo da lista de proibidos em product_name/material
TEXTILE_ESPR_READYinfoTodos 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:

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 }] }
}'

A resposta contém:

  • data.valid — validade sintática (Zod)
  • data.errors[] — erros clássicos do Zod
  • data.jsonld_preview — pré-visualização JSON-LD
  • data.eu_compliance — resultado do validador da UE (null se 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:

  1. Preview: “O que acontece se eu incluir a FR na gama de produtos?” → Selecionar o chip “FR” → “Preview EU impact” → TEXTILE_AGEC_REQUIRED torna-se visível
  2. Fix: Completar a cadeia de origem (fora do simulador, no fluxo de criação ou em lote)
  3. Save: “Save changes” guarda o estado/lista de mercados diretamente via PUT /v1/dpp/:id

Acesso direto à API:

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" }'

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:

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

Servidor 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

ProblemaCausaCorreção
TEXTILE_MICROPLASTICS_CONSISTENCYTeor de poliéster ≥ 50%, mas a flag está como falseDefinir contains_microplastics: true
TEXTILE_AGEC_REQUIRED com hints.market: "FR"FR no mercado, cadeia incompletaDefinir country_weaving_knitting, country_dyeing_printing, country_assembly
TEXTILE_GREENWASHING como errorTermo proibido + FR no mercadoRemover o termo de product_name ou ajustar o mercado
TEXTILE_SVHC_THRESHOLDSubstância SVHC sem CASInserir 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