Saltearse al contenido

Verificar la conformidad con la UE

Verificar la conformidad con la UE

qr3.app incluye un validador de la UE integrado para Digital Product Passports. Evalúa tus DPP frente a las normativas pertinentes de la UE (ESPR, Loi AGEC) y devuelve problemas estructurados con gravedad, ruta del campo, sugerencias y una insignia opcional ESPR-ready.

Existen tres puntos de entrada:

  1. Del lado del servidor, DPP ya guardadosGET /v1/dpp/:id/eu-compliance
  2. Vista previa en vivo en el formulario de creaciónPOST /v1/dpp/validate
  3. Simulador en vivo en el detallePOST /v1/dpp/:id/validate-update

Los tres devuelven la misma estructura (EuComplianceResult), por lo que solo necesitas implementar la evaluación una vez.

Estructura del 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 los campos de exclusión voluntaria (opt-in) de ESPR están definidos (ver DPP de textiles)
  • issues[] está ordenado de forma estable por gravedad (errorwarninginfo) y luego por código

Niveles de gravedad

SeveritySignificadoEjemplo
errorBloquea la conformidad con la UE; debería corregirse antes del lanzamientoTEXTILE_AGEC_REQUIRED si FR está en el mercado y la cadena de origen está incompleta
warningRecomendación; el cliente puede guardar, pero debería tomar medidasTEXTILE_GREENWASHING fuera de FR
infoSeñal de estado sin necesidad de acciónTEXTILE_ESPR_READY — todos los campos de exclusión voluntaria (opt-in) de ESPR están completos

Catálogo de reglas (Textiles + Baterías)

Textiles (Q3.3.4)

CodeGravedadDesencadenante
TEXTILE_AGEC_REQUIREDerror (FR) · warning (de lo contrario)Cadena AGEC (tejido/teñido/confección) incompleta, FR en el mercado
TEXTILE_MICROPLASTICS_CONSISTENCYerrorSintético ≥ 50 % pero contains_microplastics !== true
TEXTILE_SVHC_THRESHOLDwarningEntrada de SVHC sin número CAS o concentración
TEXTILE_GREENWASHINGerror (FR) · warning (de lo contrario)Término de la lista de prohibiciones en product_name/material
TEXTILE_ESPR_READYinfoTodos los campos ESPR B7–B15 completos

Baterías (Fase 4a)

El validador comprueba los valores límite del Reglamento de Baterías de la UE 2023/1542 (umbrales de contenido reciclado, clases de huella de carbono, garantía mínima, etc.). Detalles en la documentación del DPP de baterías.

Vista previa en vivo en el formulario de creación

Tan pronto como creas un DPP en el panel de control (/dashboard/dpp/new), el mismo validador se ejecuta de forma sin estado (stateless) en cada ciclo de validación, sin necesidad de guardar el pasaporte. La sección eu_compliance aparece directamente debajo del panel de validación existente y resalta los errores y advertencias antes del envío (submit).

Acceso directo a la API:

Ventana 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 respuesta contiene:

  • data.valid — validez sintáctica (Zod)
  • data.errors[] — errores clásicos de Zod
  • data.jsonld_preview — vista previa de JSON-LD
  • data.eu_compliance — resultado del validador de la UE (null si falla la validación de Zod)

Si eu_compliance.summary.errors > 0, el panel de control muestra un banner de Save-Guard justo encima del botón de envío; el guardado no se bloquea, pero verás las consecuencias antes de hacer clic.

Simulador en vivo en el detalle

En /dashboard/dpp/:dppId, debajo de la sección de conformidad, hay una tarjeta de simulador. Permite modificar los dos campos más relevantes para la conformidad (status y market_countries) y ver el impacto de inmediato, sin alterar los datos existentes. Flujo típico:

  1. Vista previa: “¿Qué pasa si incluyo FR en el catálogo?” → seleccionar el chip “FR” → “Preview EU impact” → TEXTILE_AGEC_REQUIRED se vuelve visible
  2. Corrección: Completar la cadena de origen (fuera del simulador, en el flujo de creación o de carga masiva)
  3. Guardar: “Save changes” guarda el estado/lista de mercados directamente a través de PUT /v1/dpp/:id

Acceso directo a la API:

Ventana 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 respuesta amplía el resultado estándar con un 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[] enumera solo los campos que realmente cambiarían; de este modo, por ejemplo, puedes resaltar únicamente los chips modificados en una interfaz de usuario.

Se permite un cuerpo vacío y devuelve la evaluación de conformidad actual (volver a comprobar el estado real).

Automatización

Pipeline de CI

Un chequeo típico de CI:

Ventana 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

Servidor MCP

El @qr3/mcp-server incluido ofrece, entre otras cosas, una herramienta validate_dpp; los agentes de IA pueden usarla antes de la llamada de creación para verificar si los datos disponibles cumplen con las reglas de AGEC.

Errores comunes

IssueCausaSolución
TEXTILE_MICROPLASTICS_CONSISTENCYProporción de poliéster ≥ 50 %, pero la bandera es falseEstablecer contains_microplastics: true
TEXTILE_AGEC_REQUIRED con hints.market: "FR"FR en el mercado, cadena incompleEstablecer country_weaving_knitting, country_dyeing_printing, country_assembly
TEXTILE_GREENWASHING als errorTérmino prohibido + FR en el mercadoEliminar el término de product_name o ajustar el mercado
TEXTILE_SVHC_THRESHOLDSustancia SVHC sin CASIntroducir el número CAS de la lista REACH

Siguientes pasos