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
| De | Qué |
|---|---|
| FT-MIG-01 · Perfilado y limpieza previa | La 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 plantillas | La 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
| A | Qué |
|---|---|
| PE-C · Catálogo vigente | El 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 administrables | Los 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 P360 | Las plantillas conciliadas y firmadas, requisito para cargar productos. |
| FT-MIG-04 · Convivencia P360 ↔ nuevo PIM | La 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 Foro | La 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
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.
Los pasos en texto
| Paso | De | A | Qué hace | API o evento |
|---|---|---|---|---|
| 1 | Entrada Única · Vendor Center | MS-03 Migración y convivencia (por el BFF) | Lanza la corrida del catálogo en un ambiente vacío | API-03-001 |
| 2 | MS-03 Migración y convivencia | P360 | Lee lo vivo de la revisión 1 y el catálogo 54001 | — |
| 3 | MS-03 Migración y convivencia | Base pim | Guarda la copia cruda con su huella | — |
| 4 | MS-03 Migración y convivencia | MS-01 Catálogo | Carga nodos, atributos, listas y valores por llave | API-01-053 |
| 5 | MS-03 Migración y convivencia | MS-01 Catálogo | Carga bindings por negocio, reglas y diccionarios | API-01-053 |
| 6 | MS-01 Catálogo | Base pim | Resuelve la vista efectiva por plantilla y negocio | — |
| 7 | MS-03 Migración y convivencia | Base pim | Concilia conteos y contenido contra P360 | — |
| 8 | Entrada Única · Vendor Center | MS-03 Migración y convivencia (por el BFF) | Revisa diferencias por entidad | API-03-003 |
| 9 | QA y Category | Entrada Única · Vendor Center | QA explica o firma cada diferencia | — |
| 10 | Entrada Única · Vendor Center | MS-03 Migración y convivencia (por el BFF) | Registra la firma: el catálogo queda migrado | API-03-011 |
3.1 Incremental del catálogo hasta el corte
3.2 Paridad de la vista efectiva contra GetTemplate
3.3 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Diferencias de conteo, contenido y contrato |
| Quién la llama | BFF del portal |
| Permiso | MIG-ADMIN, QA y las áreas que firman |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | runId = run-prd-e1-0003, check = C1, explained = False, page = 1, size = 50 |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La 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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-03-001 | POST /api/v2/migration/runs | Lanzar o repetir la corrida del catálogo | FT-MIG-01 · Perfilado y limpieza previa |
| API-03-002 | GET /api/v2/migration/runs/{runId} | Ver el detalle y la duración de la corrida | FT-MIG-01 · Perfilado y limpieza previa |
| API-03-011 | POST /api/v2/migration/runs/{runId}/signoffs | Firmar la conciliación del catálogo | FT-MIG-01 · Perfilado y limpieza previa |
| API-01-053 | POST /internal/governance/bulk-load/{coleccion} | Cargar el catálogo por llave de negocio | FT-PLT-01 · Fundamentos de gobierno de plantillas |
| API-01-028 | GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective | Leer la vista efectiva para compararla con GetTemplate | FT-PLT-06 · Configuración de atributos por plantilla y por negocio… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.governance.changed/TEMPLATE_VIEW_CHANGED | El incremental cambia la configuración de una plantilla y MS-01 recalcula su vista | FT-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ón | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
mig_runs | MS-03 | Cada corrida de migración con sus conteos. | escribe |
mig_reconciliation | MS-03 | Las diferencias entre P360 y el Nuevo PIM durante la convivencia. | escribe |
mig_issues | MS-03 | Lo que no se pudo migrar y por qué. | escribe |
taxonomy_nodes | MS-01 | Plantillas y nodos de grupo de artículo, con la configuración de atributos de cada plantilla. | escribe |
attributes | MS-01 | Cada atributo: tipo, lista, restricciones, grupos e identificadores externos. | escribe |
lovs | MS-01 | Cabecera de cada lista de valores. | escribe |
lov_values | MS-01 | Cada valor de lista: código, etiqueta, orden y equivalencias por sistema. | escribe |
template_views | MS-01 | La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios. | escribe |
reference_tables | MS-01 | Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia. | escribe |
governance_rules | MS-01 | Reglas 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
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-MIG-02·H1 · Carga reejecutable | P1 | pasos 1, 2, 3, 4, 5; flujo «Repetir la carga sin duplicar»; API-03-001, API-01-053 |
| FT-MIG-02·H2 · Copia viva | P1 | pasos 2, 5, 6 |
| FT-MIG-02·H3 · Conciliación | P1 | pasos 7, 8, 9, 10; API-03-003, API-03-011 |
| FT-MIG-02·H4 · Reglas explícitas | P1 | pasos 5 |
| FT-MIG-02·H5 · Incremental y paridad | P2 | flujo «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
| ID | Qué falta |
|---|---|
| PD-03 | Qué lista de atributos de plantilla gana (la del EAV o la de categorías); se cargan las dos con su procedencia. |
| PD-19 | Qué hacer con las plantillas sin atributos. |
| PD-12 | Confirmar con Gobierno de Datos qué del catálogo aceptan los servicios de P360 si su administración pasa antes al PIM. |
| DUD-14 | Ruta de sólo lectura de el clúster a la base de P360 para los ensayos. |
Fuentes
- [D]
trazabilidad/features/FT-MIG-02-migracion-plantillas-atributos-listas.md: la ficha de la épica, con sus historias, reglas y bloqueos. - [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
- [D]
docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta. - [D]
docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida. - [D]
docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md§7: estados, tareas y canales. - [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.