← Arquitectura por épica

FT-MIG-03 · Migración inicial de productos desde P360

Arquitectura del Nuevo PIM por épica · corte del 18-oct-2026

Propuesta del TL: no sustituye la spec de cada épica

Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.

Qué responde. Cómo funciona por dentro FT-MIG-03: qué piezas participan, en qué orden hablan, qué APIs hay que construir con su request y su response, y qué le entrega a la épica siguiente.

Para quién. Los equipos que van a construir la épica, QA y arquitectura.

Estado. [Propuesta] del TL del Nuevo PIM, 18-oct-2026, construida sobre ADR-12. La spec de cada épica dice el qué; estas páginas, el cómo.

Fuente. docs/arquitectura/por-epica/epicas/FT-MIG-03.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-MIG-03-migracion-inicial-de-productos.md.

En 30 segundos

Los cerca de 3.4 millones de productos vivos de P360 tienen que pasar al Nuevo PIM sin perder nada y sin bloquear lo que hoy se vende. Esta épica los extrae de P360, arma cada familia con sus variantes, valores, imágenes y clasificaciones, la carga en Producto con su estado y su estado por canal, manda a cuarentena lo dudoso y concilia todo contra P360 antes de firmar.

  • Módulo dueño: MS-03 Migración y convivencia. También participan: MS-02 Producto, MS-05 Auditoría, MS-08 Adaptadores de salida, MS-11 Activos digitales, MS-12 Estudio fotográfico.
  • Etapa M · Migración. Recibe «PE-C · Catálogo vigente» y entrega «PE-M · Producto migrado».
  • APIs: construye 3 y usa 11 que construyen otras épicas.
  • Eventos: publica 0 y consume 0.

1. Dónde encaja

Recibe

DeQué
FT-MIG-01 · Perfilado y limpieza previaLas reglas firmadas de la ola: qué productos pasan, cuáles van a cuarentena y cuáles se excluyen.
FT-MIG-02 · Migración de plantillas, atributos y listas de valoresLas plantillas conciliadas y firmadas en MS-01.
PE-C · Catálogo vigenteEl catálogo vigente con el que se valida cada familia: plantillas, listas y reglas de salida.
FT-PRD-01 · Modelo canónico de productoLa forma del documento, las reglas de integridad y la derivación del tipo con que se carga lo migrado.
FT-ARQ-01 · Núcleo headlessLa carga interna por llave de negocio y sin eventos (API-02-056) para la migración inicial.
FT-INT-01 · Publicación a e-commerceEl ensayo sin envío (API-08-005) para comparar lo publicable contra la tienda.
FT-ACT-02 · Registro, congelado y publicación de URLs de activosLa carga de activos migrados (API-11-016): cada URL de trabajo y congelada de P360 queda una vez en Activos, sin copiar archivos ni cambiar URL.
FT-ACT-05 · Servicios para Foro FotográficoLa carga de las decisiones de tomar o no tomar de P360 como valor de lista del Estudio (API-12-013).

Entrega

AQué
PE-M · Producto migradoCada familia viva de P360 en Producto con su estado, su estado por canal sembrado y su historia de estados: entra al hilo en PE-8 o PE-9 sin repetir etapas.
FT-ARQ-02 · Bitácora inmutable y versionado de producto, plantilla y…La versión 1 de cada producto migrado, con su corrida, y la historia de estados de P360 y Omega (API-05-006).
FT-MIG-04 · Convivencia P360 ↔ nuevo PIMLa carga completa, conciliada y firmada antes de R2, que la convivencia mantiene al día.
FT-MIG-05 · RemediaciónLo migrado con su mapa de identificadores, base del cruce de faltantes.

2. Diagrama de contexto

Quién participa y cómo se conecta. Las pantallas llegan por el BFF del portal, que valida el token y compone; cada módulo vuelve a validar el token y decide sus permisos con los roles de MS-13.

🟩 Verde: nuevo, se construye · 🟦 Azul: ya existe y se queda, se reutiliza su código · 🟧 Naranja: temporal o se retira (se apaga en R3) · ⬜ Gris: sistema externo · ★ módulo dueño

Sistemas externos

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Lanzar una corrida de migración
Conciliación de una corrida
y 5 más

Extrae por rangos la revisión 1 viva
Extrae y mide filas por segundo por t…
y 1 más

Deja la extracción cifrada en archivos

Carga interna de la migración

Carga de activos migrados

Carga de decisiones migradas

Carga de historia migrada

Ensayo de publicación sin envío

Foto del producto para publicar

Deja lo que mandaría con su huella

Lee products y skus de la tienda

¿Es enviable a cada canal?

Administración del catálogo

QA y Category

Entrada Única · Vendor Center

BFF del portal

★ MS-03 Migración y convivencia

MS-02 Producto

MS-05 Auditoría

MS-08 Adaptadores de salida

MS-11 Activos digitales

MS-12 Estudio fotográfico

Archivos e imágenes

Base pim

P360

Tienda en línea

Contexto de FT-MIG-03

3. Diagrama de flujo

El camino principal, paso por paso. Cuando una pantalla llama a un módulo se ven dos flechas: la pantalla al BFF y el BFF al módulo. Los eventos salen del outbox del módulo después de guardar; quien los consume ignora los repetidos.

MS-05 AuditoríaMS-12 Estudio fotográficoMS-11 Activos digitalesMS-02 ProductoBase·pimArchivosP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterMS-05 AuditoríaMS-12 Estudio fotográficoMS-11 Activos digitalesMS-02 ProductoBase·pimArchivosP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterBFFQA y Category1. Lanza la carga de productos con la política firmadaPOST /api/v2/migration/runs2. Extrae por rangos la revisión 1 viva3. Deja la extracción cifrada en archivos4. Arma cada familia y aplica las reglas de la ola5. Carga la familia con SKU, EAN y estado por canalPOST /internal/product/bulk-load/products6. Registra sus imágenes sin copiar archivosPOST /internal/assets/bulk-load7. Carga su decisión de tomar o no tomarPOST /internal/studio/bulk-load/decisions8. Carga la historia de estados de P360POST /internal/audit/bulk-load/status-history9. Guarda mapa de identificadores, conteos y huellas10. Revisa diferencias por tipo, negocio y estadoGET /api/v2/migration/reconciliation?runId=11. Revisa la cuarentena con su motivoGET /api/v2/migration/quarantine12. QA firma la conciliación de la carga13. Registra la firma: la ola queda migradaPOST /api/v2/migration/runs/{runId}/signoffsBFFQA y Category
Flujo principal de FT-MIG-03
Los pasos en texto
PasoDeAQué haceAPI o evento
1Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Lanza la carga de productos con la política firmadaAPI-03-001
2MS-03 Migración y convivenciaP360Extrae por rangos la revisión 1 viva—
3MS-03 Migración y convivenciaArchivos e imágenes (almacén y CDN)Deja la extracción cifrada en archivos—
4MS-03 Migración y convivenciaBase pimArma cada familia y aplica las reglas de la ola—
5MS-03 Migración y convivenciaMS-02 ProductoCarga la familia con SKU, EAN y estado por canalAPI-02-056
6MS-03 Migración y convivenciaMS-11 Activos digitalesRegistra sus imágenes sin copiar archivosAPI-11-016
7MS-03 Migración y convivenciaMS-12 Estudio fotográficoCarga su decisión de tomar o no tomarAPI-12-013
8MS-03 Migración y convivenciaMS-05 AuditoríaCarga la historia de estados de P360API-05-006
9MS-03 Migración y convivenciaBase pimGuarda mapa de identificadores, conteos y huellas—
10Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Revisa diferencias por tipo, negocio y estadoAPI-03-003
11Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Revisa la cuarentena con su motivoAPI-03-004
12QA y CategoryEntrada Única · Vendor CenterQA firma la conciliación de la carga—
13Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Registra la firma: la ola queda migradaAPI-03-011

3.1 Piloto de 10,000 familias

MS-02 ProductoP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterMS-02 ProductoP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterBFF1. Lanza el piloto de 10,000 familiasPOST /api/v2/migration/runs2. Extrae y mide filas por segundo por tabla3. Carga las familias del pilotoPOST /internal/product/bulk-load/products4. Revisa velocidad, tamaño y diferenciasGET /api/v2/migration/runs/{runId}5. Repite el piloto y comprueba cero cambiosPOST /api/v2/migration/runsBFF
Piloto de 10,000 familias

3.2 Cuarentena y liberación

P360Entrada Única · Vendor CenterMS-02 ProductoMS-03 Migración y convivenciaP360Entrada Única · Vendor CenterMS-02 ProductoMS-03 Migración y convivenciaBFFAdministración del catálogo1. Carga la familia sin plantilla con su marcaPOST /internal/product/bulk-load/products2. Lista la cuarentena por motivoGET /api/v2/migration/quarantine3. Corrige el dato en P360 y pide liberar4. Pide revalidar la familiaPOST /api/v2/migration/quarantine/{id}/release5. Vuelve a leer la familia corregida6. La recarga sin la marcaPOST /internal/product/bulk-load/products7. Traduce un ID heredado a su llave nuevaGET /api/v2/migration/id-map?legacyId=&system=BFFAdministración del catálogo
Cuarentena y liberación

3.3 Lo publicable igual que en la tienda

Entrada Única · Vendor CenterBase·pimTienda en líneaArchivosMS-02 ProductoMS-08 Adaptadores de salidaMS-03 Migración y convivenciaEntrada Única · Vendor CenterBase·pimTienda en líneaArchivosMS-02 ProductoMS-08 Adaptadores de salidaMS-03 Migración y convivenciaBFF1. Pide el ensayo de las familias de referenciaPOST /internal/egress/rehearsals2. Pide la foto de cada familiaGET /internal/product/products/{id}/publication-snapshot?versio…3. Deja lo que mandaría con su huella4. Lee products y skus de la tienda5. Compara campo por campo y atribuye cada diferencia6. Ve por qué una familia que hoy sale no es enviablePOST /api/v2/publications/eligibility7. Revisa la regla que bloquea cada familiaGET /api/v2/migration/reconciliation?runId=BFF
Lo publicable igual que en la tienda

4. Si algo sale mal

  • Dos productos del mismo negocio tienen el mismo EAN. El segundo no se carga como vivo: entra en cuarentena por choque de EAN junto con el primero y Gobierno de Producto decide quién conserva el código; al corregirlo en P360 se libera.
  • Un genérico no tiene plantilla. Se carga con la marca de cuarentena: no se publica ni se ofrece como aprobable hasta que Gobierno de Producto le asigne plantilla.
  • Un artículo no tiene padre o tiene varios. No forma un documento válido: va completo a las incidencias con sus filas de origen y el equipo de migración corrige el mapeo y lo vuelve a cargar.
  • La extracción mide menos de 30 millones de filas por hora. Se pide al DBA una tabla plana nocturna o más lectores en paralelo, y la carga se parte en dos noches por rangos de ID.
  • Una familia que hoy sale quedaría bloqueada por una regla. La conciliación de salida lista la regla que la bloquea; ninguna familia con envíos registrados puede quedar en cuarentena sin decisión antes de firmar.

5. APIs

Las que construye esta épica (3)

GET /api/v2/migration/quarantine · Cuarentena de la migración
CampoValor
APIAPI-03-004 · MS-03 Migración y convivencia
Para quéLas familias que entraron en cuarentena (sin plantilla, sin negocio, tipo no previsto, choque de SKU o EAN en un negocio, etiqueta sin código) y lo que ni siquiera formó un documento, con quién lo libera y si la familia tiene envíos registrados en algún canal.
En esta épicaLista de cuarentena con su motivo
Quién la llamaBFF del portal
PermisoMIG-ADMIN con Gobierno de Producto
CabecerasAuthorization, X-Request-Id
Parámetroscode = EAN_COLLISION, business = MER, hasDeliveries = True, status = OPEN, page = 1, size = 50
También la usanFT-CAT-01, FT-MIG-05, FT-PRD-01

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "qr-1033301-EAN_COLLISION",
        "productId": "PRD-0004812",
        "legacy": {
          "system": "P360",
          "identifier": "1033301"
        },
        "code": "EAN_COLLISION",
        "detail": "El EAN 7501234567909 también lo tiene la familia 1033412 en MER",
        "releasedBy": "GOBIERNO_DE_PRODUCTO",
        "hasDeliveries": true,
        "runId": "run-prd-e1-0003",
        "detectedAt": "2026-11-28T03:22:15Z",
        "status": "OPEN"
      }
    ],
    "page": 1,
    "size": 50,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl código de cuarentena no existe
POST /api/v2/migration/quarantine/{id}/release · Liberar una cuarentena
CampoValor
APIAPI-03-005 · MS-03 Migración y convivencia
Para quéPide liberar una cuarentena corrigiendo el dato, no apagando la marca: MS-03 vuelve a leer la familia de P360 (donde se corrige mientras P360 sea la fuente), Producto la revalida con sus reglas y se recarga sin la marca. Si sigue rota, responde qué regla falla. Descartar un registro exige la decisión de Gobierno de Producto.
En esta épicaLiberar una cuarentena revalidando la familia
Quién la llamaBFF del portal
PermisoMIG-ADMIN con Gobierno de Producto; DISCARD sólo Gobierno de Producto
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Parámetrosid = qr-1033301-EAN_COLLISION
Escribe enmig_issues

Request

{
  "action": "REVALIDATE",
  "reason": "Gobierno de Producto dejó el EAN en la familia 1033301 y lo quitó de la 1033412 en P360",
  "approvalRef": "TCK-0421"
}

Response · 202

{
  "success": true,
  "data": {
    "requestId": "req-qr-0071",
    "status": "ACCEPTED",
    "receiptUrl": "/api/v2/migration/quarantine?id=qr-1033301-EAN_COLLISION"
  }
}

Errores

HTTPCódigoCuándo
409NOT_EDITABLE_IN_STATUSLa cuarentena ya se liberó o se descartó
422BUSINESS_ERRORLa familia releída sigue rompiendo la regla; details dice cuál
403AUTHORIZATION_ERRORSe pide DISCARD sin el rol de Gobierno de Producto
GET /api/v2/migration/id-map?legacyId=&system= · Mapa de identificadores heredados
CampoValor
APIAPI-03-006 · MS-03 Migración y convivencia
Para quéTraduce un ID de P360, de Omega o de Entrada Única a la llave del producto en el Nuevo PIM y dice cómo se resolvió: directo, por Identifier, ganó P360 o sin resolver.
En esta épicaTraducir un ID de P360, Omega o Entrada Única a su llave nueva
Quién la llamaBFF del portal, MS-02 Producto, MS-04 Reportes
PermisoMIG-ADMIN y cuentas de servicio de MS-02 y MS-04
CabecerasAuthorization, X-Request-Id
ParámetroslegacyId = -4471, system = OMEGA
También la usanFT-MIG-05

Request

null

Response · 200

{
  "success": true,
  "data": {
    "legacyId": "-4471",
    "system": "OMEGA",
    "table": "PRODUCTO",
    "identifier": "1033301",
    "productId": "PRD-0004812",
    "resolution": "P360_WINS",
    "owner": "P360",
    "firstSeenRun": "run-prd-e1-0003",
    "lastSeenRun": "run-prd-e3-0001"
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl ID no está en el mapa

Las que usa y construye otra épica (11)

Su request y su response están en la página de la épica que la construye.

APIMétodo y rutaPara qué, aquíLa construye
API-03-001POST /api/v2/migration/runsLanzar la carga o el piloto de productosFT-MIG-01 · Perfilado y limpieza previa
API-03-002GET /api/v2/migration/runs/{runId}Velocidad, tamaño y conteos del pilotoFT-MIG-01 · Perfilado y limpieza previa
API-03-003GET /api/v2/migration/reconciliation?runId=Diferencias por tipo, negocio y estadoFT-MIG-02 · Migración de plantillas, atributos y listas de valores
API-03-011POST /api/v2/migration/runs/{runId}/signoffsFirmar la conciliación de la olaFT-MIG-01 · Perfilado y limpieza previa
API-02-056POST /internal/product/bulk-load/productsCargar la familia por llave de negocio, sin eventosFT-ARQ-01 · Núcleo headless
API-05-006POST /internal/audit/bulk-load/status-historyCargar la historia de estados de P360FT-ARQ-02 · Bitácora inmutable y versionado de producto, plantilla y…
API-11-016POST /internal/assets/bulk-loadRegistrar en Activos las URL de trabajo y congeladas de P360FT-ACT-02 · Registro, congelado y publicación de URLs de activos
API-12-013POST /internal/studio/bulk-load/decisionsCargar en el Estudio las decisiones de tomar o no tomarFT-ACT-05 · Servicios para Foro Fotográfico
API-08-005POST /internal/egress/rehearsalsArmar sin mandar lo que recibiría la tiendaFT-INT-01 · Publicación a e-commerce
API-02-054GET /internal/product/products/{id}/publication-snapshot?version=Foto del producto para el ensayoFT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio
API-02-041POST /api/v2/publications/eligibilityVer si una familia migrada es enviable y por qué noFT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio

6. Eventos

Esta épica no publica ni consume eventos.

7. Datos

Cada colección tiene un solo dueño, el único que escribe en ella.

ColecciónDueñoQué guardaEsta épica
mig_runsMS-03Cada corrida de migración con sus conteos.escribe
mig_issuesMS-03Lo que no se pudo migrar y por qué.escribe
mig_reconciliationMS-03Las diferencias entre P360 y el Nuevo PIM durante la convivencia.escribe
mig_id_mapMS-03El mapa de identidad entre sistemas: cada ID heredado de P360, Omega o Entrada Única con su llave en el Nuevo PIM y cómo se resolvió, y los bloques de Identifier reservados en la secuencia de P360.escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
identifier_registryMS-02Unicidad de SKU y de EAN por negocio.escribe
product_delivery_statusMS-02El estado de publicación por producto y canal: Pendiente, Enviado, Publicado, Error o Retirado.escribe
audit_eventsMS-05Quién cambió qué, cuándo, desde dónde, con el antes y el después.escribe
assetsMS-11Cada archivo una vez: a qué producto, variante y posición pertenece, su validación técnica, URL de trabajo y URL congelada.escribe
studio_workMS-12Tomas, ediciones y capturas por SKU, con quién las tiene asignadas.escribe

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-MIG-03·H1 · PilotoP1flujo «Piloto de 10,000 familias»; API-03-001, API-03-002
FT-MIG-03·H2 · Carga conciliadaP1pasos 4, 5, 6, 7, 9, 10, 11; flujo «Cuarentena y liberación»; API-03-003, API-03-004, API-03-005
FT-MIG-03·H3 · Sin bloqueos nuevosP1flujo «Lo publicable igual que en la tienda»; API-02-041, API-03-003
FT-MIG-03·H4 · Lo publicable igualP2flujo «Lo publicable igual que en la tienda»; API-08-005
FT-MIG-03·H5 · Identidad y versiónP2pasos 5, 9; API-03-006, API-02-056

9. Decisiones de esta épica

Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.

  • D-MIG-03-1. La fuente es el la base de P360 de P360, revisión 1 o nula y fila viva. Se extrae por rangos de ID a archivos cifrados de retención corta y cada familia (genérico con sus variantes) se arma como un solo documento. Por qué: Entrada Única no guarda los valores y la copia de Omega no es confiable; leer por rangos permite paralelo y reintento por rango. Se apoya en DEC-ARQ-06, DEC-PRD-05, DEC-PRD-09, RSG-43.
  • D-MIG-03-2. Cada familia se carga con API-02-056: SKU y EAN en el registro de identificadores en la misma transacción, versión 1 con razón MIGRATION, estado por canal sembrado «en sincronía con legado» y sin eventos. La historia de estados va a Auditoría (API-05-006) y la de valores arranca en cero. Por qué: Publicar millones de altas que no son altas saturaría a los consumidores; sembrar el estado por canal evita republicar en el corte. Se apoya en DEC-PRD-04, DEC-PRD-06, DEC-ARQ-09, FT-ARQ-01.
  • D-MIG-03-3. El ID del producto sigue la política de PD-16 (prefijo de negocio más el Identifier de P360, propuesta del 17-oct). El Identifier, el proposalId de P360 y los ID técnicos de Omega quedan como alias en el producto y en el mapa de MS-03 (API-03-006), nunca como llave. Por qué: Un ID estable con la llave de P360 deja seguir cada producto entre sistemas durante la convivencia. Se apoya en PD-16, DUD-18, DEC-PRD-01.
  • D-MIG-03-4. La cuarentena es una marca en el producto: sin plantilla, sin negocio, tipo no previsto, choque de SKU o EAN y etiqueta sin código. Lo marcado no se publica ni se ofrece como aprobable, y se libera corrigiendo el dato en la fuente y revalidando (API-03-005), nunca apagando la marca. Por qué: El dato corregido queda bien para siempre y con traza; liberar con una bandera publicaría datos rotos. Se apoya en DMS-86, PD-19.
  • D-MIG-03-5. Sin bloqueos nuevos: lo migrado se valida para salir con las reglas de salida de hoy y no con los obligatorios TO-BE. La conciliación de salida lista la regla que bloquearía a cada familia que hoy sale, y ninguna familia con envíos registrados queda en cuarentena sin decisión. Por qué: Lo que hoy se vende no puede dejar de venderse por migrarlo. Se apoya en RF-MIG-02, DEC-ARQ-12.
  • D-MIG-03-6. Lo publicable igual: antes del corte, MS-08 arma sin mandar (API-08-005) el mensaje de un juego de referencia y MS-03 lo compara campo por campo con products y skus de la tienda; cada diferencia se atribuye al broker, al procesador o al PIM. Las fechas centinela no se propagan. Por qué: Es la única forma de saber que la tienda recibirá lo mismo sin el broker. Se apoya en PD-23, FT-INT-01.
  • D-MIG-03-7. La carga completa de productos se hace antes de R2, cuando las pantallas de producto pasan al BFF. Desde ahí la convivencia (FT-MIG-04) mantiene la copia al día y las pantallas escriben en P360 por MS-03 hasta el corte de R3. Por qué: Las pantallas de R2 necesitan la copia completa desde su primer día, y P360 sigue siendo la fuente hasta R3. Se apoya en ADR-12, FT-MIG-04.
  • D-MIG-03-8. Cada dato migrado va a su dueño: la familia a Producto, sus imágenes a Activos (API-11-016) sin copiar archivos ni cambiar URL, la decisión de tomar o no tomar al Estudio (API-12-013) como valor de su lista, y la historia de estados a Auditoría. Lo que un dueño no puede aparear o traducir queda como incidencia de la corrida. Por qué: Una sola base con un dueño por colección: MS-03 no escribe datos de negocio, sólo los entrega a quien los guarda. Se apoya en ADR-12, FT-ACT-02, FT-ACT-05.

Qué falta decidir

IDQué falta
PD-19Qué grupos entran: genéricos sin plantilla, eliminados, rechazados, borradores y lo de dueño STEP.
PD-16Ratificar la política de identificadores y el prefijo de cada negocio (DUD-18).
PD-18Qué historia se migra además de la de estados.
PD-17Tipos de producto y su derivación para lo que llega sin tipo.
DUD-15Inventario de lo que sólo vive en Omega.

También siguen abiertos: RSG-09, Conteo exacto del universo: las cifras de P360, del modelo y de la PAC no coinciden.

Fuentes

  1. [D] trazabilidad/features/FT-MIG-03-migracion-inicial-de-productos.md: la ficha de la épica, con sus historias, reglas y bloqueos.
  2. [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
  3. [D] docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta.
  4. [D] docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida.
  5. [D] docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md §7: estados, tareas y canales.
  6. [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.