O DPP têxtil chegou: verifique a conformidade com a UE em segundos — antes de guardar

O qr3.app passa a suportar passaportes têxteis completos ao abrigo da Loi AGEC francesa + ESPR. Novidade: um validador e simulador ao vivo que assinala infrações da AGEC, greenwashing e prontidão para a ESPR dentro do formulário — antes de guardar.

por qr3.app Team

O DPP têxtil chegou: verifique a conformidade com a UE em segundos — antes de guardar

Para além da via das baterias, o qr3.app passa a disponibilizar uma segunda categoria de DPP completa: têxteis ao abrigo da Loi AGEC francesa (Décret 2022-748) e do rascunho do ato delegado da ESPR. Ao mesmo tempo, integrámos um validador da UE ao vivo que corre dentro do dashboard — antes de guardar um passaporte e antes de colocar um produto à venda num novo mercado.

Em resumo, três coisas que não encontra em plataformas de QR code típicas:

  1. Um esquema de DPP têxtil completo, incluindo a cadeia obrigatória da AGEC e a adesão opcional à ESPR.
  2. Uma pré-visualização ao vivo dentro do formulário de criação que assinala instantaneamente infrações da AGEC e greenwashing.
  3. Um simulador de conformidade na página de detalhe que responde à pergunta: "o que acontece se eu adicionar a França aos meus mercados amanhã?"

Porque é que o DPP têxtil já importa hoje

O ato delegado da ESPR para têxteis ainda está em rascunho — o registo central de DPP da UE entra em funcionamento a 2026-07-19. Mas não pode esperar até lá, porque uma fatia da regulamentação já é juridicamente vinculativa hoje:

  • Loi AGEC (França, desde 2023-01-01): cadeia de origem obrigatória, aviso sobre microplásticos, transparência REACH SVHC, proibição de alegações ambientais vagas.
  • A partir de 2025, a AGEC aplica-se a vendedores de têxteis com mais de 10 M€ de faturação ou mais de 10 000 unidades. Os fabricantes mais pequenos seguem em 2027, e praticamente todos em 2028.
  • As notificações de cessação por greenwashing atingiram um volume recorde em França em 2024 — "natural", "biodegradável" ou "écologique" sem prova fica mais caro do que um esforço concentrado de documentação.

Se está a colocar têxteis no mercado da UE (ou mesmo só em França), montar agora o seu stack de DPP é mais barato do que uma migração em pânico em 2027.

O esquema têxtil num relance

Construímos diretamente sobre o catálogo de campos obrigatórios da AGEC:

{
  "category": "textile",
  "gtin": "04012345678901",
  "product_name": "Organic Cotton T-Shirt",
  "manufacturer": "EcoWear GmbH",
  "origin_country": "PT",
  "market_countries": ["DE", "AT", "FR"],
  "textile_data": {
    "fiber_composition": [
      { "material": "cotton", "percentage": 95, "origin_country": "TR", "recycled_pct": 0 },
      { "material": "elastane", "percentage": 5, "origin_country": "IT", "recycled_pct": 0 }
    ],
    "country_weaving_knitting": "PT",
    "country_dyeing_printing": "PT",
    "country_assembly": "PT",
    "contains_microplastics": false
  }
}

Os campos obrigatórios cobrem as quatro regras da AGEC que as autoridades francesas fiscalizam com mais frequência:

Artigo AGEC Campo O que o validador faz
A1 fiber_composition[].recycled_pct Todas as percentagens de fibra têm de somar 100%
A2–A4 country_weaving_knitting / dyeing_printing / assembly Três países obrigatórios sempre que FR está no mercado
A5 contains_microplastics Forçado a true quando as fibras sintéticas ≥ 50%
A6 svhc_substances[] Número CAS + concentração obrigatórios a partir de 0,1%

Para além disso, suportamos campos ESPR opcionais (durabilidade, PEF CO₂, URL de reparação, prazo de peças sobressalentes, classe de reciclabilidade). Quando todos estão preenchidos, o dashboard exibe um selo de ESPR-ready — perfeito para fabricantes que investem tempo agora para arrancar em 2027 sem uma migração.

Pré-visualização ao vivo: veja os erros antes de guardar

O fluxo típico costumava ser: preencher o formulário → guardar → saltar para a página de detalhe → ler os erros de conformidade → voltar ao formulário. Isso magoa no preciso momento em que está a criar um lote.

Desde esta versão, o validador da UE corre stateless dentro do formulário de criação:

  • O POST /v1/dpp/validate passa a devolver um campo extra eu_compliance com compliant, espr_ready, issues[] e um resumo agrupado por gravidade, para além da validação Zod.
  • O dashboard apresenta os problemas diretamente abaixo do painel de validação, agrupados por erro / aviso / informação.
  • Surge um banner de salvaguarda acima dos botões de submissão ("2 erros e 1 aviso — guardar mesmo assim?") sempre que restem problemas. O guardar não é bloqueado, mas vê preto no branco aquilo que está a aceitar.

Para si, enquanto programador, isto significa que pode usar o validador em qualquer lado — dentro do seu próprio fluxo de importação, numa verificação de CI, num hook de agente Cursor.

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 @textile-payload.json | jq '.data.eu_compliance.summary'

O simulador de conformidade: "e se eu adicionar a França?"

A funcionalidade que eu próprio mais queria é o simulador de conformidade na página de detalhe de um DPP existente. Cenário típico:

Tem 500 passaportes têxteis no sistema, todos para o mercado alemão. Entra a equipa de vendas: "Vamos expandir para a França no próximo mês." Pergunta: quais dos seus passaportes deixam subitamente de cumprir a AGEC?

Abra um passaporte no dashboard e surge um novo cartão na secção de conformidade com a UE: Simulador de conformidade.

  • Clique no chip FR (ao lado das predefinições DE/AT/FR/IT/ES/NL) ou escreva um código ISO personalizado.
  • Opcional: alterne o estado de draft para live.
  • Botão Preview EU impact.

A interface mostra-lhe instantaneamente, sem guardar o passaporte:

  • Novos cartões de erro (por exemplo, TEXTILE_AGEC_REQUIRED no caminho de campo textile_data.country_weaving_knitting).
  • Um aviso de greenwashing que escala de warning para error porque a FR passa a estar no mercado.
  • Uma etiqueta preview.changed_fields que aponta exatamente quais os campos que mudariam.

Quando estiver satisfeito, Save changes envia o delta via PUT /v1/dpp/:id. Se não — Reset, e nada aconteceu.

Por baixo do capô, isto é um único endpoint novo:

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

O worker funde o patch em memória com o DPP existente e corre o validador da UE sobre o resultado — sem acesso de escrita. Um corpo vazio é permitido e devolve o veredito atual.

Porque é que isto é mais do que um "bom para ter"

Três razões pelas quais o simulador não é um truque de feira:

  1. Verificação pré-venda para expansão de mercado. As vendas conseguem responder em 60 segundos quais os produtos prontos para a FR e quão dispendioso seria um lançamento.
  2. Desacoplar as operações de dados das operações de conformidade. A conformidade deixa de andar atrás de cada defeito de dados — corra o simulador uma vez, filtre com clareza, abra tickets.
  3. Amigável para agentes de IA. O endpoint tem exatamente a mesma forma que o POST /v1/dpp/validate. Um agente Cursor ou Claude pode chamá-lo diretamente a partir de uma tarefa como "encontra os passaportes prontos para a FR" — sem um mini script pelo meio.

Continua a ser API-first

Tudo o que é visível no dashboard está acessível através da API:

  • POST /v1/dpp/validate — validador stateless para fluxos de criação.
  • POST /v1/dpp/:id/validate-update — validador stateless para atualizações parciais (o simulador).
  • GET /v1/dpp/:id/eu-compliance — verificação persistente para passaportes existentes (excelente para CI).
  • POST /v1/dpp/import — importação em massa CSV/XLSX com novos modelos têxteis (GET /v1/dpp/import/templates/textile?format=xlsx).
  • GET /01/{GTIN}/21/{SERIAL} — vista do consumidor com a caixa de aviso de microplásticos da AGEC, cadeia de origem, lista SVHC e secção de durabilidade.

Os três endpoints de validação devolvem todos a mesma forma EuComplianceResult. Por isso, constrói o agrupamento de problemas e a apresentação de gravidade exatamente uma única vez.

Garantia de não rutura

Tudo nesta versão é aditivo:

  • Os clientes existentes do POST /v1/dpp/validate podem ignorar o novo campo eu_compliance sem alterações.
  • Os fluxos de baterias permanecem inalterados.
  • O market_countries é opcional e assume por defeito [].

Os detalhes estão no changelog e na nossa política de versionamento da API.

Comece já

Se tem um grande catálogo de passaportes têxteis ou precisa de auditar o risco AGEC/França, fale connosco — estamos preparados para clientes-piloto entre 500 e 50 000 SKUs.