← Arquitectura por épica

FT-MIG-05 · Remediación

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-05: 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-05.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-MIG-05-remediacion-productos-faltantes.md.

En 30 segundos

Hay productos que viven en Entrada Única o en Vendor Center y no están en la tienda, y otros que ni siquiera están en P360. Esta épica los encuentra cruzando a nivel variante, con fecha de corte, lo que hay en cada sistema; elige por universo la fuente más completa y los carga con su enriquecimiento y su categoría, sólo con confirmación escrita y sin recapturar.

  • Módulo dueño: MS-03 Migración y convivencia. También participan: MS-02 Producto.
  • Etapa M · Migración. Recibe de otras épicas y entrega «PE-M · Producto migrado».
  • APIs: construye 0 y usa 7 que construyen otras épicas.
  • Eventos: publica 0 y consume 0.

1. Dónde encaja

Recibe

DeQué
FT-MIG-03 · Migración inicial de productos desde P360Lo migrado desde P360 con su mapa de identificadores, base del cruce.
FT-MIG-01 · Perfilado y limpieza previaLo que no pasa, con su regla y su destino, y la política para lo que llega de otra fuente.

Entrega

AQué
PE-M · Producto migradoLos faltantes cargados desde la fuente elegida, con su enriquecimiento, su categoría y su origen, o en cuarentena si llegan incompletos.
FT-CAT-03 · Categorización de productosLos faltantes que llegaron sin categoría, en la tarea Category, para que el equipo de categorías complete sólo lo pendiente.

Tareas que abre o cierra: Category.

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

Lee el universo de la tienda por vari…
Lee categoría y enriquecimiento de ca…

Entrega la extracción completa de Ent…

Carga interna de la migración

Lee lo que sólo vive en Omega, con ID…

Administración del catálogo

Gobierno de Datos

QA y Category

Entrada Única · Vendor Center

BFF del portal

★ MS-03 Migración y convivencia

MS-02 Producto

Archivos e imágenes

Base pim

Tienda en línea

P360

Contexto de FT-MIG-05

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-02 ProductoBase·pimArchivosTienda en líneaMS-03 Migración y convivenciaEntrada Única · Vendor CenterMS-02 ProductoBase·pimArchivosTienda en líneaMS-03 Migración y convivenciaEntrada Única · Vendor CenterBFFAdministración del catálogoGobierno de Datos1. Lanza el cruce por variante con fecha de cortePOST /api/v2/migration/runs2. Lee el universo de la tienda por variante3. Entrega la extracción completa de Entrada Única y Vendor4. Cruza por llave y aparta faltantes por universo5. Revisa los faltantes por grupo y fuente posibleGET /api/v2/migration/reconciliation?runId=6. Decide por grupo: migrar, cuarentena o excluir7. Lanza la remediación en ensayoPOST /api/v2/migration/runs8. Confirma por escrito el resultado del ensayo9. Registra la confirmación con su referenciaPOST /api/v2/migration/runs/{runId}/signoffs10. Lee categoría y enriquecimiento de cada faltante11. Carga la familia con su categoría y su origenPOST /internal/product/bulk-load/products12. Abre Category a lo que llegó sin categoríaBFFAdministración del catálogoGobierno de Datos
Flujo principal de FT-MIG-05
Los pasos en texto
PasoDeAQué haceAPI o evento
1Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Lanza el cruce por variante con fecha de corteAPI-03-001
2MS-03 Migración y convivenciaTienda en líneaLee el universo de la tienda por variante—
3Archivos e imágenes (almacén y CDN)MS-03 Migración y convivenciaEntrega la extracción completa de Entrada Única y Vendor—
4MS-03 Migración y convivenciaBase pimCruza por llave y aparta faltantes por universo—
5Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Revisa los faltantes por grupo y fuente posibleAPI-03-003
6Administración del catálogoEntrada Única · Vendor CenterDecide por grupo: migrar, cuarentena o excluir—
7Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Lanza la remediación en ensayoAPI-03-001
8Gobierno de DatosEntrada Única · Vendor CenterConfirma por escrito el resultado del ensayo—
9Entrada Única · Vendor CenterMS-03 Migración y convivencia (por el BFF)Registra la confirmación con su referenciaAPI-03-011
10MS-03 Migración y convivenciaTienda en líneaLee categoría y enriquecimiento de cada faltante—
11MS-03 Migración y convivenciaMS-02 ProductoCarga la familia con su categoría y su origenAPI-02-056
12MS-02 ProductoBase pimAbre Category a lo que llegó sin categoría—

3.1 Universos fuera de P360

Base·pimEntrada Única · Vendor CenterP360MS-03 Migración y convivenciaBase·pimEntrada Única · Vendor CenterP360MS-03 Migración y convivenciaBFFAdministración del catálogo1. Lee lo que sólo vive en Omega, con ID negativo2. Traduce cada ID heredado a su llaveGET /api/v2/migration/id-map?legacyId=&system=3. Fecha lo de Entrada Única por su ObjectId4. Decide por grupo con la regla firmada5. Registra la decisión del grupoPOST /api/v2/migration/runs/{runId}/signoffsBFFAdministración del catálogo
Universos fuera de P360

3.2 Si una remediación sale mal

MS-02 ProductoMS-03 Migración y convivenciaEntrada Única · Vendor CenterMS-02 ProductoMS-03 Migración y convivenciaEntrada Única · Vendor CenterQA y CategoryBFF1. Detecta familias mal cargadas en la conciliación2. Revisa qué cargó esa corridaGET /api/v2/migration/runs/{runId}3. Recarga esas familias en cuarentenaPOST /internal/product/bulk-load/products4. Revisa la cuarentena de la remediaciónGET /api/v2/migration/quarantineQA y CategoryBFF
Si una remediación sale mal

4. Si algo sale mal

  • Producto y SKU no coinciden entre fuentes. El cruce se hace por variante y la regla de qué es producto y qué es SKU queda escrita y confirmada antes de cargar; lo que no cuadra va a cuarentena con su motivo.
  • Un faltante llega sin categoría. Entra con la tarea Category abierta y el equipo de categorías sólo completa lo pendiente; no se recaptura nada más.
  • No hay confirmación escrita. La remediación se queda en ensayo: sin la firma de Gobierno de Datos la corrida no carga nada.
  • Una remediación cargó familias equivocadas. Cada familia lleva el ID de su corrida: se recarga con la marca de cuarentena, sale de la publicación y nada se borra.

5. APIs

Las que construye esta épica (0)

Ninguna: todo lo que usa ya lo construye otra épica.

Las que usa y construye otra épica (7)

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 el cruce y la remediación, primero en ensayoFT-MIG-01 · Perfilado y limpieza previa
API-03-002GET /api/v2/migration/runs/{runId}Ver qué cargó una corrida de remediaciónFT-MIG-01 · Perfilado y limpieza previa
API-03-003GET /api/v2/migration/reconciliation?runId=Faltantes por universo y diferencias del cruceFT-MIG-02 · Migración de plantillas, atributos y listas de valores
API-03-004GET /api/v2/migration/quarantineCuarentena de lo que llegó incompletoFT-MIG-03 · Migración inicial de productos desde P360
API-03-006GET /api/v2/migration/id-map?legacyId=&system=Traducir ID de Entrada Única u Omega a la llave nuevaFT-MIG-03 · Migración inicial de productos desde P360
API-03-011POST /api/v2/migration/runs/{runId}/signoffsRegistrar la confirmación escrita y las decisiones por grupoFT-MIG-01 · Perfilado y limpieza previa
API-02-056POST /internal/product/bulk-load/productsCargar la familia faltante con su categoría y su origenFT-ARQ-01 · Núcleo headless

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_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
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-MIG-05·H1 · Identificar faltantesP1pasos 1, 2, 3, 4, 5; API-03-001, API-03-003
FT-MIG-05·H2 · Cargar desde la fuente más completaP1pasos 10, 11, 12; API-02-056
FT-MIG-05·H3 · Respaldo escritoP1pasos 7, 8, 9; API-03-011
FT-MIG-05·H4 · Universos fuera de P360P2flujo «Universos fuera de P360»; API-03-006

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-05-1. La remediación es una corrida más de MS-03: un cruce (CROSS_CHECK) y una carga (REMEDIATION) con ensayo, conciliación y firma. Nunca un script suelto. Por qué: Así queda idempotente, conciliada y reversible, con la misma traza que la migración principal. Se apoya en RF-MIG-04, DEC-96.
  • D-MIG-05-2. La fuente se elige por universo. Lo que vive en P360 sale de P360 (FT-MIG-03) y, si falta en la tienda, se republica después del corte en lugar de cargarse. Lo de Entrada Única sin dueño o con dueño STEP sale de los datos de Entrada Única que se mudan al PIM en R2, completado con la categoría y el enriquecimiento que ya tiene la tienda. Lo que sólo vive en Omega sale de Omega con su marca. ATG no se usa como fuente en el Nuevo PIM. Por qué: La fuente oficial es la base de P360, pero no trae lo que nunca llegó a P360; la tienda tiene la categoría que no se quiere recapturar, y ATG se apaga con su propio decomiso. Se apoya en PEN-68, PD-19, DEC-73, DEC-ARQ-06.
  • D-MIG-05-3. Confirmación escrita antes de cargar: la corrida de remediación sólo pasa del ensayo a la carga con la firma de Gobierno de Datos y su referencia (correo, ticket o documento), y TI registra la fecha de remediación en la misma corrida. Por qué: Es la decisión firme del taller y deja la evidencia en el mismo lugar que la carga. Se apoya en DEC-96, PEN-126, PEN-111.
  • D-MIG-05-4. El cruce cubre el universo completo por variante, con fecha de corte y sin filtros de fecha; lo de Entrada Única se fecha por la hora de su ObjectId, porque createdAt sólo existe en el 13 %. Por qué: Un filtro de fecha ya dejó casos fuera en una corrección anterior. Se apoya en DEC-93, DUD-26.
  • D-MIG-05-5. Lo que llega sin categoría no se recaptura: entra con la tarea Category y el equipo de categorías sólo completa lo pendiente. Por qué: El objetivo de la remediación es no recapturar lo que la tienda ya tenía. Se apoya en RF-MIG-04, DEC-73.

Qué falta decidir

IDQué falta
PD-19Qué hacer por grupo con lo que no está en P360.
DUD-26Cruce por llave de los productos de Entrada Única sin dueño y de dueño STEP.
DUD-15Inventario y fuente de lo que sólo vive en Omega.

También siguen abiertos: PEN-68, Ratificar la fuente por universo (Entrada Única, tienda u Omega); PEN-150, Si los 200 SKU de stock out de Esfera son migración o producto nuevo; PEN-121, Validar los 20 casos del universo sin migrar.

Fuentes

  1. [D] trazabilidad/features/FT-MIG-05-remediacion-productos-faltantes.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.