Además de la línea de baterías, qr3.app ahora incorpora una segunda categoría DPP completa: los textiles bajo la Loi AGEC de Francia (Décret 2022-748) y el borrador del acto delegado ESPR. Al mismo tiempo, hemos integrado un validador de la UE en vivo que se ejecuta dentro del panel de control, antes de guardar un pasaporte y antes de poner un producto a la venta en un nuevo mercado.
En resumen, tres cosas que no obtienes en las plataformas de QR habituales:
- Un esquema DPP textil completo que incluye la cadena obligatoria de AGEC y la opción adicional de ESPR.
- Una vista previa en vivo dentro del formulario de creación que detecta al instante las infracciones de AGEC y el greenwashing.
- Un simulador de cumplimiento en la página de detalle que responde: "¿qué pasa si mañana añado Francia a mis mercados?".
Por qué el DPP textil importa hoy
El acto delegado ESPR para textiles todavía está en fase de borrador: el registro central del DPP de la UE entra en funcionamiento el 2026-07-19. No puedes esperar hasta entonces, porque una parte de la normativa ya es legalmente vinculante hoy:
- Loi AGEC (Francia, desde el 2023-01-01): cadena de origen obligatoria, advertencia sobre microplásticos, transparencia REACH-SVHC, prohibición de afirmaciones medioambientales vagas.
- A partir de 2025, la AGEC se aplica a los vendedores de textiles con una facturación >10 M € o >10 000 unidades. Los fabricantes más pequeños se incorporan en 2027, y prácticamente todos en 2028.
- Los requerimientos de cese y desistimiento por greenwashing alcanzaron un volumen récord en Francia en 2024: "natural", "biodegradable" o "écologique" sin pruebas es más caro que un sprint de documentación.
Si envías textiles a la UE (o incluso solo a Francia), montar tu stack de DPP ahora es más barato que migrar con prisas y pánico en 2027.
El esquema textil de un vistazo
Construimos directamente sobre el catálogo de campos obligatorios de 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
}
}
Los campos obligatorios cubren las cuatro reglas de AGEC que las autoridades francesas hacen cumplir con más frecuencia:
| Artículo AGEC | Campo | Qué hace el validador |
|---|---|---|
| A1 | fiber_composition[].recycled_pct |
Todos los porcentajes de fibra deben sumar el 100 % |
| A2–A4 | country_weaving_knitting / dyeing_printing / assembly |
Se requieren tres países siempre que FR esté en el mercado |
| A5 | contains_microplastics |
Se fuerza a true cuando las fibras sintéticas son ≥ 50 % |
| A6 | svhc_substances[] |
Número CAS + concentración obligatorios a partir del 0,1 % |
Además, admitimos campos ESPR opcionales (durabilidad, CO₂ PEF, URL de reparación, plazo de piezas de repuesto, clase de reciclabilidad). Cuando todos están definidos, el panel de control muestra una insignia de ESPR-ready, perfecta para los fabricantes que invierten tiempo ahora para comercializar en 2027 sin necesidad de migración.
Vista previa en vivo: detecta errores antes de guardar
El flujo habitual solía ser: rellenar el formulario → guardar → saltar a la página de detalle → leer los errores de cumplimiento → volver al formulario. Eso resulta doloroso en el momento en que estás creando un lote.
Desde esta versión, el validador de la UE se ejecuta sin estado dentro del formulario de creación:
POST /v1/dpp/validateahora devuelve un campo adicionaleu_complianceconcompliant,espr_ready,issues[]y un resumen agrupado por gravedad, además de la validación de Zod.- El panel de control muestra las incidencias directamente debajo del panel de validación, agrupadas por error / advertencia / información.
- Un banner de protección al guardar aparece encima de los botones de envío ("2 errores y 1 advertencia: ¿guardar de todos modos?") siempre que queden incidencias. El guardado no se bloquea, pero ves negro sobre blanco lo que estás aceptando.
Para ti como desarrollador, esto significa que puedes integrar el validador en cualquier lugar: dentro de tu propio flujo de importación, en una comprobación de CI, en un hook de agente de 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'
El simulador de cumplimiento: "¿y si añado Francia?"
La función que más quería personalmente es el simulador de cumplimiento en la página de detalle de un DPP existente. Escenario típico:
Tienes 500 pasaportes textiles en el sistema, todos para el mercado alemán. Llega ventas: "Vamos a expandirnos a Francia el mes que viene". Pregunta: ¿cuáles de tus pasaportes incumplen de repente la AGEC?
Abre un pasaporte en el panel de control y aparece una nueva tarjeta bajo la sección de cumplimiento de la UE: Simulador de cumplimiento.
- Haz clic en el chip FR (junto a los preajustes DE/AT/FR/IT/ES/NL) o escribe un código ISO personalizado.
- Opcional: cambia el estado de
draftalive. - Botón Vista previa del impacto en la UE.
La interfaz te muestra al instante, sin guardar el pasaporte:
- Nuevas tarjetas de error (por ejemplo,
TEXTILE_AGEC_REQUIREDen la ruta del campotextile_data.country_weaving_knitting). - Una advertencia de greenwashing que escala de
warningaerrorporque FR está en el mercado. - Una etiqueta
preview.changed_fieldsque señala exactamente qué campos cambiarían.
Cuando estés satisfecho, Guardar cambios envía el delta mediante PUT /v1/dpp/:id. Si no, Restablecer, y no ha pasado nada.
Por debajo, esto es un único endpoint nuevo:
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" }'
El worker fusiona el parche en memoria con el DPP existente y ejecuta el validador de la UE sobre el resultado, sin acceso de escritura. Se permite un cuerpo vacío, que devuelve el veredicto actual.
Por qué esto es más que un "extra agradable"
Tres razones por las que el simulador no es un truco:
- Comprobación previa a la venta para la expansión de mercado. Ventas puede responder en 60 segundos qué productos están listos para FR y cuán costoso sería un despliegue.
- Desacopla las operaciones de datos de las operaciones de cumplimiento. Cumplimiento ya no persigue cada defecto de datos: ejecuta el simulador una vez, filtra limpiamente, abre tickets.
- Apto para agentes de IA. El endpoint tiene exactamente la misma forma que
POST /v1/dpp/validate. Un agente de Cursor o Claude puede invocarlo directamente desde una tarea como "encuentra los pasaportes listos para FR", sin necesidad de un mini script intermedio.
Sigue siendo API-first
Todo lo visible en el panel de control es accesible a través de la API:
POST /v1/dpp/validate— validador sin estado para los flujos de creación.POST /v1/dpp/:id/validate-update— validador sin estado para actualizaciones parciales (el simulador).GET /v1/dpp/:id/eu-compliance— comprobación persistente para pasaportes existentes (ideal para CI).POST /v1/dpp/import— importación masiva CSV/XLSX con nuevas plantillas textiles (GET /v1/dpp/import/templates/textile?format=xlsx).GET /01/{GTIN}/21/{SERIAL}— vista del consumidor con el recuadro de advertencia de microplásticos de AGEC, cadena de origen, lista SVHC y sección de durabilidad.
Los tres endpoints de validación devuelven la misma forma EuComplianceResult. Así construyes la agrupación de incidencias y el renderizado de gravedad exactamente una sola vez.
Garantía de no romper nada
Todo en esta versión es aditivo:
- Los clientes existentes de
POST /v1/dpp/validatepueden ignorar el nuevo campoeu_compliancesin ningún cambio. - Los flujos de baterías permanecen inalterados.
market_countrieses opcional y su valor por defecto es[].
Encontrarás los detalles en el changelog y en nuestra política de versionado de la API.
Empieza ya
- Documentación del DPP textil — esquema, regla de microplásticos, opción adicional ESPR
- Documentación de cumplimiento de la UE — catálogo de reglas, vista previa en vivo, simulador
- Empieza gratis — plan gratuito, panel de control + API
- Síguenos en GitHub — incidencias, lanzamientos de SDK, hoja de ruta
Si tienes un gran catálogo de pasaportes textiles o necesitas auditar el riesgo de AGEC/Francia, habla con nosotros: estamos preparados para clientes piloto de entre 500 y 50 000 SKU.