← Arquitectura por épica

FT-MIG-02 · Migración de plantillas, atributos y listas de valores

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-02: 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-02.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-MIG-02-migracion-plantillas-atributos-listas.md.

En 30 segundos

Los productos sólo se pueden migrar a plantillas que ya existan. Esta épica copia de P360 al Catálogo del Nuevo PIM las plantillas, atributos, listas, reglas y diccionarios vivos, con una carga que se puede repetir sin duplicar; la concilia contra P360 y la mantiene al día hasta el corte, para que las pantallas vean lo mismo que hoy.

  • Módulo dueño: MS-03 Migración y convivencia. También participan: MS-01 Catálogo.
  • Etapa M · Migración. Recibe de otras épicas y entrega «PE-C · Catálogo vigente».
  • APIs: construye 1 y usa 5 que construyen otras épicas.
  • Eventos: publica 1 y consume 0.

1. Dónde encaja

Recibe

DeQué
FT-MIG-01 · Perfilado y limpieza previaLa corrida de perfil firmada: qué plantillas pasan, cuáles no tienen atributos y la matriz por atributo.
FT-PLT-06 · Configuración de atributos por plantilla y por negocio…El modelo destino de plantillas: bindings por plantilla y negocio con su obligatoriedad, y la vista efectiva.
FT-PLT-01 · Fundamentos de gobierno de plantillasLa ruta de carga de la migración (API-01-053): conserva los ID de P360, no publica eventos en la carga completa y deja la secuencia en el máximo migrado más uno.

Entrega

AQué
PE-C · Catálogo vigenteEl catálogo vivo de P360 cargado en MS-01 y conciliado: plantillas, atributos, listas, reglas explícitas y diccionarios.
FT-REF-01 · Datos de referencia administrablesLos diccionarios que se conservan, leídos de la base de P360 y entregados por lote con sus llaves de P360.
FT-MIG-03 · Migración inicial de productos desde P360Las plantillas conciliadas y firmadas, requisito para cargar productos.
FT-MIG-04 · Convivencia P360 ↔ nuevo PIMLa copia del catálogo al día por el incremental, que pasa a ser fuente con los productos en el corte de R3.
FT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y ForoLa copia viva del catálogo de P360 en MS-01 mientras P360 sea la fuente, con la que las pantallas dejan de llamar a P360 en R1.

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 2 más

Lee lo vivo de la revisión 1 y el cat…
Lee cada hora lo que cambió desde su…
y 1 más

Carga de la migración
Vista efectiva de una plantilla por n…

TEMPLATE_VIEW_CHANGED

QA y Category

Entrada Única · Vendor Center

BFF del portal

★ MS-03 Migración y convivencia

MS-01 Catálogo

Base pim

Eventos

P360

Contexto de FT-MIG-02

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-01 CatálogoBase·pimP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterMS-01 CatálogoBase·pimP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterBFFQA y Category1. Lanza la corrida del catálogo en un ambiente vacíoPOST /api/v2/migration/runs2. Lee lo vivo de la revisión 1 y el catálogo 540013. Guarda la copia cruda con su huella4. Carga nodos, atributos, listas y valores por llavePOST /internal/governance/bulk-load/{coleccion}5. Carga bindings por negocio, reglas y diccionariosPOST /internal/governance/bulk-load/{coleccion}6. Resuelve la vista efectiva por plantilla y negocio7. Concilia conteos y contenido contra P3608. Revisa diferencias por entidadGET /api/v2/migration/reconciliation?runId=9. QA explica o firma cada diferencia10. Registra la firma: el catálogo queda migradoPOST /api/v2/migration/runs/{runId}/signoffsBFFQA y Category
Flujo principal de FT-MIG-02
Los pasos en texto
PasoDeAQué haceAPI o evento
1Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Lanza la corrida del catálogo en un ambiente vacíoAPI-03-001
2MS-03 Migración y convivenciaP360Lee lo vivo de la revisión 1 y el catálogo 54001—
3MS-03 Migración y convivenciaBase pimGuarda la copia cruda con su huella—
4MS-03 Migración y convivenciaMS-01 CatálogoCarga nodos, atributos, listas y valores por llaveAPI-01-053
5MS-03 Migración y convivenciaMS-01 CatálogoCarga bindings por negocio, reglas y diccionariosAPI-01-053
6MS-01 CatálogoBase pimResuelve la vista efectiva por plantilla y negocio—
7MS-03 Migración y convivenciaBase pimConcilia conteos y contenido contra P360—
8Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Revisa diferencias por entidadAPI-03-003
9QA y CategoryEntrada Única · Vendor CenterQA explica o firma cada diferencia—
10Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Registra la firma: el catálogo queda migradoAPI-03-011

3.1 Incremental del catálogo hasta el corte

Base·pimEventosMS-01 CatálogoP360MS-03 Migración y convivenciaBase·pimEventosMS-01 CatálogoP360MS-03 Migración y convivencia1. Lee cada hora lo que cambió desde su cursor2. Aplica el cambio por llave, con avisoPOST /internal/governance/bulk-load/{coleccion}3. Avisa la vista efectiva nuevaTEMPLATE_VIEW_CHANGED4. Guarda el cursor y la huella semanal
Incremental del catálogo hasta el corte

3.2 Paridad de la vista efectiva contra GetTemplate

Entrada Única · Vendor CenterBase·pimMS-01 CatálogoP360MS-03 Migración y convivenciaEntrada Única · Vendor CenterBase·pimMS-01 CatálogoP360MS-03 Migración y convivenciaBFF1. Pide GetTemplate de 300 plantillas por negocio2. Pide la vista efectiva de las mismasGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective3. Compara las 900 respuestas campo por campo4. Revisa lo que no coincideGET /api/v2/migration/reconciliation?runId=BFF
Paridad de la vista efectiva contra GetTemplate

3.3 Repetir la carga sin duplicar

Base·pimMS-01 CatálogoMS-03 Migración y convivenciaEntrada Única · Vendor CenterBase·pimMS-01 CatálogoMS-03 Migración y convivenciaEntrada Única · Vendor CenterBFF1. Repite la corrida sobre lo ya cargadoPOST /api/v2/migration/runs2. Vuelve a cargar por la misma llavePOST /internal/governance/bulk-load/{coleccion}3. Cuenta cero cambios y cero duplicados4. Revisa el detalle y la duraciónGET /api/v2/migration/runs/{runId}BFF
Repetir la carga sin duplicar

4. Si algo sale mal

  • Una plantilla de P360 no tiene atributos. Se carga como nodo para no romper el árbol y queda en la lista que decide Gobierno de Producto; no frena la carga.
  • Un atributo dependiente tiene un padre que no es visible. Queda como incidencia con sus filas de origen; no se descarta en silencio como hace hoy P360.
  • Las copias de la configuración no coinciden (catálogo 54001 frente al diccionario 17). Gana el 54001, que es lo que lee GetTemplate desde el 8-ago; la diferencia queda explicada en la conciliación.
  • El incremental pierde un cambio. La huella semanal lo detecta y esa parte del catálogo se vuelve a cargar; la diferencia queda en la conciliación.
  • Una corrida se cae a la mitad. Se reanuda desde el último lote confirmado; como la carga es por llave, repetir no duplica.

5. APIs

Las que construye esta épica (1)

GET /api/v2/migration/reconciliation?runId= · Conciliación de una corrida
CampoValor
APIAPI-03-003 · MS-03 Migración y convivencia
Para quéLas diferencias de una corrida contra la fuente: conteos (C1), contenido por huella (C2), respuestas y mensajes iguales a los de hoy (C3), unicidad de SKU y EAN (C4) y reglas de salida (C5), por tipo × negocio × estado y con cuántas están explicadas por una regla o una incidencia.
En esta épicaDiferencias de conteo, contenido y contrato
Quién la llamaBFF del portal
PermisoMIG-ADMIN, QA y las áreas que firman
CabecerasAuthorization, X-Request-Id
ParámetrosrunId = run-prd-e1-0003, check = C1, explained = False, page = 1, size = 50
También la usanFT-CAT-01, FT-MIG-03, FT-MIG-04, FT-MIG-05, FT-PLT-10

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "check": "C1",
        "scope": {
          "type": "SalesItemFamily",
          "business": "MER",
          "status": "APROBADO"
        },
        "expected": 412118,
        "actual": 412090,
        "diff": 28,
        "explained": 28,
        "byReason": [
          {
            "code": "NO_TEMPLATE",
            "count": 21
          },
          {
            "code": "EAN_COLLISION",
            "count": 7
          }
        ]
      },
      {
        "check": "C5",
        "scope": {
          "type": "SalesItemFamily",
          "business": "MKP",
          "status": "APROBADO"
        },
        "expected": 3120,
        "actual": 3118,
        "diff": 2,
        "explained": 0,
        "byReason": [
          {
            "code": "OUTPUT_RULE_BLOCKS",
            "rule": "RUL-PUB-0776",
            "count": 2
          }
        ]
      }
    ],
    "page": 1,
    "size": 50,
    "total": 2
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDLa corrida no existe o todavía no termina su conciliación

Las que usa y construye otra épica (5)

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 o repetir la corrida del catálogoFT-MIG-01 · Perfilado y limpieza previa
API-03-002GET /api/v2/migration/runs/{runId}Ver el detalle y la duración de la corridaFT-MIG-01 · Perfilado y limpieza previa
API-03-011POST /api/v2/migration/runs/{runId}/signoffsFirmar la conciliación del catálogoFT-MIG-01 · Perfilado y limpieza previa
API-01-053POST /internal/governance/bulk-load/{coleccion}Cargar el catálogo por llave de negocioFT-PLT-01 · Fundamentos de gobierno de plantillas
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveLeer la vista efectiva para compararla con GetTemplateFT-PLT-06 · Configuración de atributos por plantilla y por negocio…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.governance.changed/TEMPLATE_VIEW_CHANGEDEl incremental cambia la configuración de una plantilla y MS-01 recalcula su vistaFT-ACT-01, FT-ACT-05, FT-IA-03, FT-PLT-06, FT-PLT-09, FT-PRD-01, FT-RAC-01, FT-RAC-02

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_reconciliationMS-03Las diferencias entre P360 y el Nuevo PIM durante la convivencia.escribe
mig_issuesMS-03Lo que no se pudo migrar y por qué.escribe
taxonomy_nodesMS-01Plantillas y nodos de grupo de artículo, con la configuración de atributos de cada plantilla.escribe
attributesMS-01Cada atributo: tipo, lista, restricciones, grupos e identificadores externos.escribe
lovsMS-01Cabecera de cada lista de valores.escribe
lov_valuesMS-01Cada valor de lista: código, etiqueta, orden y equivalencias por sistema.escribe
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.escribe
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.escribe
governance_rulesMS-01Reglas de captura y clasificación: marcas por plantilla, grupo de artículo a plantilla, alcance del proveedor y lista negra de Marketplace.escribe

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-MIG-02·H1 · Carga reejecutableP1pasos 1, 2, 3, 4, 5; flujo «Repetir la carga sin duplicar»; API-03-001, API-01-053
FT-MIG-02·H2 · Copia vivaP1pasos 2, 5, 6
FT-MIG-02·H3 · ConciliaciónP1pasos 7, 8, 9, 10; API-03-003, API-03-011
FT-MIG-02·H4 · Reglas explícitasP1pasos 5
FT-MIG-02·H5 · Incremental y paridadP2flujo «Incremental del catálogo hasta el corte», «Paridad de la vista efectiva contra GetTemplate»; API-01-028

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-02-1. La fuente es una sola: el la base de P360 de P360, lo vivo de la revisión 1, con la configuración de atributos del catálogo 54001 sin filtrar el tipo de creación. La revisión 2 no entra; la copia de Omega y la réplica de Foro no son fuente. Por qué: Es lo que leen hoy las consultas de producción; la copia equivocada rompe la paridad de GetTemplate. Se apoya en DEC-ARQ-06, DEC-ARQ-07, DUD-04.
  • D-MIG-02-2. La carga es reejecutable por llave de negocio con los ID de P360 (API-01-053) y, en la carga completa, sin eventos: repetirla no duplica ni cambia nada y cada corrida deja su huella. Por qué: Así se puede ensayar en ambientes vacíos y repetir hasta que la conciliación salga limpia. Se apoya en FT-PLT-01, DEC-PLT-06.
  • D-MIG-02-3. Las relaciones escondidas en datos (LookupValueReference y StructureGroupMap) se cargan como reglas con tipo, alcance y objetivo; StructureGroupMap queda como la clasificación automática de grupo con producto a plantilla. Por qué: Hoy son reglas sin inventario que asignan plantilla a cerca de 317 mil productos; como reglas tienen dueño y se ven. Se apoya en DEC-PLT-14, RSG-12.
  • D-MIG-02-4. Cada negocio visible (LIV, SBB, MKP) recibe su propia obligatoriedad cuando la configuración trae varios. La paridad se mide comparando GetTemplate de P360 contra la vista efectiva de MS-01 (API-01-028), que es la que usa el BFF: 900 respuestas y luego 9,261. La ruta /public/rt no se construye. Por qué: Sin capa de compatibilidad (decisión 20 que adopta ADR-12) las pantallas leen la vista efectiva; eso es lo que tiene que responder igual. Se apoya en RSG-50, ADR-12.
  • D-MIG-02-5. P360 es la fuente del catálogo hasta el corte de R3. Un incremental cada hora (marcas de tiempo de diccionarios, listas, grupos y características) más una huella semanal mantienen la copia. A diferencia de la carga completa, el incremental sí avisa con los eventos normales de MS-01 para que las cachés y la bitácora lo vean. Si la administración de plantillas pasa antes al PIM, su cambio se escribe en P360 por MS-03 (D-MIG-04-3). Por qué: Congelar plantillas de R1 a R3 dejaría a Gobierno de Datos meses sin ajustar; un solo maestro con escritura por MS-03 evita dos versiones. Se apoya en PD-12, PD-11, FT-MIG-04.
  • D-MIG-02-6. Nada queda sin explicar: lo que no se carga tiene su exclusión documentada o su incidencia, con diferencia cero en nodos, listas, pares del EAV y metadatos, y las 300 plantillas de muestra sin diferencias sin explicar. Por qué: Es el criterio de aceptación del plan de migración y la base para firmar. Se apoya en DMS-85, DMS-88.

Qué falta decidir

IDQué falta
PD-03Qué lista de atributos de plantilla gana (la del EAV o la de categorías); se cargan las dos con su procedencia.
PD-19Qué hacer con las plantillas sin atributos.
PD-12Confirmar con Gobierno de Datos qué del catálogo aceptan los servicios de P360 si su administración pasa antes al PIM.
DUD-14Ruta de sólo lectura de el clúster a la base de P360 para los ensayos.

Fuentes

  1. [D] trazabilidad/features/FT-MIG-02-migracion-plantillas-atributos-listas.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.