Saltar a contenido

Prompt T-3(b) — Conformidad EN de lo ya emitido (Digital Link · PDF/A-3 · API)

Arte Taxco / ICEDE-USC · 1 Ago 2026 · prompt acotado para el chat de código. Paridad con PROMPT-T0-PERFIL-TEXTIL.md, PROMPT-T1-ESQUELETO-TEXTIL.md, PROMPT-T3-FIRMA-DIDWEB.md.

Alcance de este chat. Endurecer a NORMA lo que el DPP ya emite, SIN cambiar su semántica: identificador EN 18219 (GS1 Digital Link), archivo EN 18221 (PDF/A-3 estricto), e interfaces EN 18216/18222 (API especificada). La firma did:web (EN 18246) ya se hizo en T-3(a). Es "endurecer lo emitido", no construir capacidad nueva. Cada paso es independiente y shippable por separado: si el chat se alarga, corta por paso.

⚠️ Regla de oro de este chat (anti-sobreafirmación): una afirmación de conformidad se VALIDA con una herramienta de conformidad real, no se asevera. PDF/A-3 → veraPDF en verde; Digital Link → validador GS1 / resolución real; API → un linter OpenAPI. Sin validador que lo respalde, se documenta como "compatible con", no "conforme a". Misma disciplina que "EPCIS serializable≠emisor" y "joyería≠textil".


Eres el asistente técnico del proyecto Arte Taxco. Antes de tocar nada, LEE en este orden: - docs/SYSTEM-PROMPT.md, docs/FIXES.md (reglas; español; aditivo; NUNCA prisma migrate dev) - docs/RUTA-DEMOSTRADOR-TEXTIL.md (la ruta; §1 Anexo A.1 mapea cada capa a su norma EN; T-3 "Conformidad EN") - docs/PROMPT-T3-FIRMA-DIDWEB.md (T-3a ya hecho: qué quedó dentro y qué se dejó a T-3b) - docs/MAPA-ECOSISTEMA-DPP.md y docs/DECISIONES-INTEROPERABILIDAD-DPP.md (dos ejes; gates) - apps/web/lib/dpp/export.ts (emisor XML/EPCIS/PDF/VC; construirDppPdf es ZUGFeRD-style, hoy SIN XMP/OutputIntent — el delta PDF/A-3) - apps/web/app/api/dpp/[folio]/route.ts y apps/web/app/api/verify/[folio]/route.ts (las dos superficies HTTP a especificar contra norma) - apps/web/lib/thermal-receipt.ts (QR actual: CERT_BASE_URL/{folio}, vía api.qrserver.com) - apps/web/public/dpp/dpp-1.0.xsd (por si algún paso lo extiende, aditivo)

CONTEXTO: T-0..T-2/T-3a dejaron el DPP textil FUNCIONAL: perfil, cadena de atestación, export XML/EPCIS/PDF/VC y firma did:web. Lo que falta de T-3 es conformidad formal a las normas EN 1821x de lo YA emitido — que un tercero (auditor, evaluador, otra plataforma) valide la interoperabilidad con herramientas estándar, no de palabra. No se añade dato nuevo al pasaporte; se endurece su envoltura.

DECISIÓN GATING A RESOLVER ANTES DEL PASO 0 (no asumir): GS1 Digital Link exige claves GS1 (GTIN + serie por AI 21), que requieren membresía GS1 (prefijo de compañía). Arte Taxco hoy NO tiene prefijo GS1. Dos caminos honestos: (a) construir un resolver Digital Link conforme que PARSEA/RESUELVE URIs GS1 Digital Link y sirve el DPP — sin emitir GTINs propios (se documenta que emitir claves conformes es institucional/gated a membresía GS1); o (b) esperar a tener prefijo GS1 y emitir identificadores plenamente conformes. Recomendado para el demostrador: (a) — el nodo "solo resuelve" (RUTA §1). El prompt asume (a); si el dueño consigue prefijo GS1, se sube a (b) sin reescribir el resolver.

TAREA T-3(b) — en pasos, cada uno con su commit (independientes; ordenar por valor):

0) IDENTIFICADOR GS1 DIGITAL LINK (EN 18219). - Resolver conforme: una ruta que acepte una URI GS1 Digital Link (p. ej. /01/{gtin}/21/{serie} o el esquema admitido) y redirija/resuelva al DPP del folio correspondiente (mapeo folio↔Digital Link en una columna aditiva o derivado). - El QR de la carta (thermal-receipt.ts) pasa a portar la URI Digital Link (no el folio suelto), manteniendo retrocompat con el link actual. - VALIDAR con el resolver/validador GS1 Digital Link (o la sintaxis oficial). Documentar que la EMISIÓN de GTINs conformes requiere membresía GS1 (gated) — el nodo resuelve.

1) PDF/A-3 ESTRICTO (EN 18221). - Endurecer construirDppPdf: añadir XMP (metadatos + marca PDF/A-3B) y OutputIntent (perfil ICC), manteniendo el XML embebido (AFRelationship=Data). - pdf-lib no hace PDF/A-3 nativo: inyectar XMP + OutputIntent + object structure requerida (evaluar pdf-lib + parche manual, o una lib que lo soporte). Aditivo: el f=pdf sigue sirviendo, ahora conforme. - VALIDAR con veraPDF (PDF/A-3B) en verde. Sin veraPDF verde, NO declarar "PDF/A-3"; dejar el comentario anti-sobreafirmación vigente hasta que pase.

2) API ESPECIFICADA CONTRA NORMA (EN 18216 / EN 18222). - OpenAPI 3.1 de las dos superficies (GET /api/dpp/{folio}?f=…, GET /api/verify/{folio}): esquemas de respuesta, content-negotiation, códigos, y el /.well-known/did.json. Servir el spec (p. ej. /api/openapi.json). - Alinear headers/negociación con la norma (tipos de contenido correctos ya presentes: application/ld+json EPCIS, application/xml, application/pdf, VC-JWT JSON). - VALIDAR el spec con un linter OpenAPI (p. ej. redocly lint / spectral). Mapear en un comentario cada endpoint a la cláusula EN 18216/18222 que cumple.

3) PORTADOR DE DATOS (EN 18220) — REVISIÓN, sin desarrollo. - Revisar el QR/Data Matrix actual contra EN 18220 (tamaño, corrección de errores, contenido = Digital Link del paso 0). Documentar conformidad/gap en FIXES.md; NO construir salvo un ajuste trivial del generador si la revisión lo exige.

RESTRICCIONES DURAS: - 100% aditivo. Cambios de schema (si el mapeo Digital Link necesita columna): npx prisma db push, NUNCA migrate dev. (Gotcha 5432: aplicar desde hotspot con URL directa.) - No cambies la SEMÁNTICA del DPP (atributos, estatus, nivelExigido, firmas): esto endurece la ENVOLTURA, no el contenido. No toques joyería ni el flujo de recertificación. - Conformidad = validada, no aseverada (veraPDF / validador GS1 / linter OpenAPI). Si un paso no pasa su validador, se documenta como pendiente, no como hecho. - Añadir dependencias solo si son puras JS (sin binarios nativos frágiles en Vercel); veraPDF puede correrse como paso de verificación local/CI, no en runtime. - Español en código, comentarios y commits. Documenta en docs/FIXES.md (sugerido FEAT-DPP-TEXTIL-T3B-001) y actualiza la tabla del Anexo A.1 en RUTA-DEMOSTRADOR-TEXTIL.md (marca qué capas pasan a "conforme validado").

CRITERIO DE ACEPTACIÓN: - npx tsc --noEmit → 0 errores. - PDF/A-3: f=pdf de una pieza pasa veraPDF (PDF/A-3B) en verde; el XML sigue embebido y extraíble. - Digital Link: una URI GS1 Digital Link resuelve al DPP correcto; el QR de la carta la porta; documentado el gate de emisión de GTIN (membresía GS1). - API: el OpenAPI valida con el linter y describe fielmente ambas superficies; servido en un endpoint. - Joyería y recertificación intactas; el DPP existente (XML/EPCIS/VC) no cambia de forma. - MUÉSTRAME EL DIFF ANTES DE HACER PUSH. Dame el comando de commit explícito, en español.

FUERA DE ALCANCE (otras fases — NO los hagas aquí): - Emitir GTINs GS1 conformes (requiere membresía GS1 — institucional). - DIDs por-actor, W3C Data Integrity (siguen en la cola de firmas post-T3a). - Verificación con laboratorio (T-2), endpoint de la planta de clasificación (T-4). - eIDAS/EUDI wallet, revocación de credenciales, timestamping cualificado. - Rediseño de la superficie pública /certificado/{folio} (es UI, no conformidad).


Decisiones (resueltas para este chat)

  • Digital Link → resolver conforme sin emitir GTINs (camino (a)); emitir claves GS1 es institucional (membresía). El nodo resuelve; se sube a plena conformidad al tener prefijo.
  • PDF/A-3B (no 3A/3U): nivel Basic es suficiente para "archivo + adjunto"; subir a 3U (Unicode) si un evaluador lo pide.
  • Conformidad validada con herramienta (veraPDF, validador GS1, linter OpenAPI) como condición de "hecho" — nunca autoafirmada.
  • Pasos independientes: si el chat se alarga, cada paso (Digital Link / PDF/A-3 / API) es su propio entregable y su propio commit; se pueden repartir en chats distintos.

Arte Taxco / ICEDE-USC · Prompt T-3(b) conformidad EN · 1 Ago 2026 · alcance, no implementación. Complementa T-3(a) (did:web) y cierra la fila "Conformidad EN" de la ruta.