Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-RAC-08: 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-RAC-08.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-RAC-08-monitoreo-visibilidad-alertas-caida.md.
En 30 segundos
El 23 de septiembre un seller pasó de 1,354 a 861 productos visibles y se enteró el negocio, no un sistema; las causas se buscaron a mano. Esta épica cuenta cada día, en productos, lo que se ve en la tienda por seller, por universo y del catálogo; lo compara con el día anterior y con una línea base; avisa sola cuando cae más del umbral, y deja bajar del seller a cada producto no visible con su causa.
- Módulo dueño: MS-04 Reportes. También participan: MS-08 Adaptadores de salida, MS-02 Producto, MS-07 Ingesta de archivos, MS-03 Migración y convivencia, MS-14 Avisos y ayuda.
- Etapa T · Transversal. Recibe «PE-9 · Publicado por canal» y entrega «PE-T · Usuario con permisos y bitácora».
- APIs: construye 4 y usa 12 que construyen otras épicas.
- Eventos: publica 1 y consume 1.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| PE-9 · Publicado por canal | Los productos publicados por canal, que son el universo que debería verse en la tienda. |
| FT-INT-01 · Publicación a e-commerce | Lo publicado a la tienda y su acuse, por producto. |
| FT-CAT-02 · Publicación de categorías a la tienda | Las categorías publicadas a la tienda, para saber si la categoría de cada producto existe allá. |
| FT-INT-05 · Multioferta y stock out | Las ofertas de cada SKU en Marketplace, para saber si tiene oferta activa. |
| FT-CAT-06 · Agrupadores y corrección masiva de categorías con… | La lista de productos corregidos por cada corrida, para comprobar que vuelven a verse. |
Entrega
| A | Qué |
|---|---|
| PE-T · Usuario con permisos y bitácora | Una alerta diaria de caída de visibles, con su diagnóstico por producto, que sirve a todas las etapas. |
| FT-CAT-06 · Agrupadores y corrección masiva de categorías con… | La comprobación de que, después de corregir, republicar e indexar, el seller volvió a su línea base. |
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 | MS-04 Reportes | MS-08 Adaptadores de salida | Pide la foto diaria de visibles y de ofertas | API-08-006 |
| 2 | MS-08 Adaptadores de salida | Tienda en línea | Extrae lo visible e indexado por sitio | — |
| 3 | MS-08 Adaptadores de salida | Marketplace | Extrae las ofertas activas por seller | — |
| 4 | MS-08 Adaptadores de salida | Archivos e imágenes (almacén y CDN) | Deja las fotos normalizadas con su huella | — |
| 5 | MS-08 Adaptadores de salida | Eventos | Avisa que las fotos están listas | catalog.delivery.result/EXTRACTION_READY |
| 6 | Eventos | MS-04 Reportes | Entrega el aviso a Reportes | catalog.delivery.result/EXTRACTION_READY |
| 7 | MS-04 Reportes | MS-02 Producto | Lee categoría y variantes del universo de cada seller | API-02-121 |
| 8 | MS-04 Reportes | Base pim | Cuenta visibles en productos y guarda la causa | — |
| 9 | MS-04 Reportes | MS-14 Avisos y ayuda | Pide la alerta: cayó 36 % contra la línea base | API-14-005 |
| 10 | MS-14 Avisos y ayuda | Servicio de correo | Avisa al equipo de Marketplace | — |
| 11 | Gobierno de Datos | Entrada Única · Vendor Center | Abre el diagnóstico del seller | — |
| 12 | Entrada Única · Vendor Center | MS-04 Reportes (por el BFF) | Pide el conteo contra la línea base | API-04-021 |
| 13 | Entrada Única · Vendor Center | MS-04 Reportes (por el BFF) | Baja a cada producto no visible con su causa | API-04-022 |
3.1 Cruzar con el universo de una incidencia
3.2 Comparar contra una línea base elegida
3.3 La pantalla de procesos
4. Si algo sale mal
- La foto de la tienda no llega. Ese día no se calcula: el conteo sale «sin dato», nunca cero visibles, la línea base no se mueve y Operación recibe la alerta técnica por MS-14.
- La caída es menor que el umbral. No alerta; el conteo queda en el historial y se ve en el diagnóstico.
- Un producto cumple todo y no está indexado. Queda como «sin indexar, causa desconocida» y Marketplace lo escala al equipo de la tienda con la lista.
- La tienda trae SKU que el PIM no tiene. No cuentan como visibles del seller; aparecen como INEXISTENTE en la conciliación de FT-RAC-04.
- Un módulo no responde a la pantalla de procesos. Su bloque sale «sin dato» y los demás se muestran; el reintento sólo se ofrece donde el dueño respondió.
5. APIs
Las que construye esta épica (4)
GET /api/v2/visibility/counts · Conteo diario de visibles
| Campo | Valor |
|---|---|
| API | API-04-021 · MS-04 Reportes |
| Para qué | Cuántos productos se ven en la tienda cada día, por seller, por universo o del catálogo general, contra el día anterior y contra la línea base elegida, con el cambio en porcentaje y si alertó. Se cuenta en productos, no en variantes. |
| En esta épica | El conteo diario de visibles contra el día anterior y la línea base |
| Quién la llama | BFF del portal |
| Permiso | REP-L de Marketplace o de Gobierno de Datos; un seller sólo ve el suyo |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | scope = SELLER, sellerId = SELLER-0001, site = `, from = 2026-09-21, to = 2026-09-25, baselineDate = 2026-09-22` |
Request
null
Response · 200
{
"success": true,
"data": {
"scope": "SELLER",
"sellerId": "SELLER-0001",
"unit": "productos",
"baseline": {
"kind": "DATE",
"date": "2026-09-22",
"visible": 1354
},
"days": [
{
"date": "2026-09-21",
"visible": 1352,
"changePctVsBaseline": -0.1,
"alert": false
},
{
"date": "2026-09-23",
"visible": 861,
"changePctVsBaseline": -36.4,
"alert": true,
"alertId": "alr-0923-01"
},
{
"date": "2026-09-24",
"visible": 873,
"changePctVsBaseline": -35.5,
"alert": true
},
{
"date": "2026-09-25",
"visible": null,
"state": "SIN_DATO",
"reason": "No llegó la foto de la tienda"
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | Falta el seller o el universo para ese alcance, o el periodo pasa de 400 días |
GET /api/v2/visibility/sellers/{sellerId}/diagnostics · Diagnóstico de no visibles
| Campo | Valor |
|---|---|
| API | API-04-022 · MS-04 Reportes |
| Para qué | Baja del seller a cada producto que no se ve en la tienda, con una sola causa: sin categoría, sin relación genérico–variante, sin oferta activa, no publicado, o sin indexar con causa desconocida. |
| En esta épica | Cada producto no visible con su causa |
| Quién la llama | BFF del portal |
| Permiso | REP-L de Marketplace o de Gobierno de Datos; un seller sólo ve el suyo |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | sellerId = SELLER-0001, date = 2026-09-24, cause = `, page = 1, size = 100` |
Request
null
Response · 200
{
"success": true,
"data": {
"sellerId": "SELLER-0001",
"date": "2026-09-24",
"products": 1400,
"visible": 873,
"notVisible": 527,
"byCause": {
"SIN_CATEGORIA": 301,
"SIN_RELACION_GENERICO_VARIANTE": 44,
"SIN_OFERTA_ACTIVA": 62,
"NO_PUBLICADO": 18,
"SIN_INDEXAR_CAUSA_DESCONOCIDA": 102
},
"items": [
{
"productId": "PRD-0007710",
"cause": "SIN_CATEGORIA",
"detail": "La categoría catst-000812 no está en la tienda"
},
{
"productId": "PRD-0007711",
"cause": "SIN_INDEXAR_CAUSA_DESCONOCIDA",
"detail": "Publicado con categoría y oferta activa; no aparece en el índice"
}
],
"page": 1,
"size": 100,
"total": 527
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | No hay conteo de ese seller en esa fecha |
GET /bff/v1/operations/processes · Pantalla de procesos
| Campo | Valor |
|---|---|
| API | API-BFF-510 · BFF del portal |
| Para qué | La pantalla de Operación con los procesos de fondo: archivos de SAP en curso o fallidos (MS-07), lotes inciertos por destino (MS-08), pendientes y errores por canal (MS-02) y atraso de la convivencia (MS-03). Cada botón de reintento llama a la acción del módulo dueño. |
| En esta épica | La pantalla de procesos compuesta con lo de cada dueño |
| Quién la llama | Entrada Única · Vendor Center (por el BFF) |
| Permiso | OPS-L para ver; reintentar pide la capacidad de cada dueño |
| Cabeceras | X-Request-Id |
| Parámetros | business = `` |
Request
null
Response · 200
{
"success": true,
"data": {
"sapFiles": {
"inProgress": 2,
"failed": 1,
"oldestFailedAt": "2026-10-18T09:12:00Z"
},
"uncertainBatches": [
{
"destination": "OMS",
"batches": 3,
"products": 214,
"oldestAt": "2026-10-18T11:40:00Z"
}
],
"deliveryByChannel": [
{
"channel": "OMS",
"pending": 120,
"sent": 214,
"error": 9,
"oldestSentWithoutAckMinutes": 95
},
{
"channel": "TIENDA",
"pending": 40,
"sent": 18,
"error": 2,
"oldestSentWithoutAckMinutes": 7
}
],
"coexistence": {
"receiptCursorLagMinutes": 4,
"lastSweepAt": "2026-10-18T14:00:00Z"
},
"actions": [
{
"label": "Reenviar lote incierto",
"api": "API-08-002"
},
{
"label": "Republicar productos en Error",
"api": "API-02-039"
},
{
"label": "Reprocesar archivo de SAP",
"api": "API-07-002"
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | El perfil no tiene la pantalla de procesos |
| 503 | DEPENDENCY_UNAVAILABLE | Ningún módulo respondió; si sólo falla uno, su bloque sale «sin dato» y los demás se muestran |
GET /api/v2/delivery-status/summary?business= · Resume el estado por canal de todos los productos: cuántos e
| Campo | Valor |
|---|---|
| API | API-02-406 · MS-02 Producto |
| Para qué | Resume el estado por canal de todos los productos: cuántos están Pendientes, Enviados sin acuse, en Error y Retirados por destino y negocio, y la antigüedad del envío más viejo sin acuse, para la pantalla de procesos. |
| En esta épica | Resumen del estado por canal para la pantalla de procesos |
Request
null
Response · 200
{
"success": true,
"data": {
"business": null,
"asOf": "2026-10-18T15:20:00Z",
"channels": [
{
"channel": "OMS",
"pending": 120,
"sent": 214,
"error": 9,
"withdrawn": 3,
"oldestSentWithoutAckAt": "2026-10-18T13:45:00Z"
},
{
"channel": "TIENDA",
"pending": 40,
"sent": 18,
"error": 2,
"withdrawn": 0,
"oldestSentWithoutAckAt": "2026-10-18T15:13:00Z"
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Quien llama no tiene el permiso o no es el módulo autorizado |
| 404 | NOT_FOUND | No existe lo que se pide o no es visible para quien llama |
Las que usa y construye otra épica (12)
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-04-001 | POST /api/v2/exports | Pedir el cruce con el universo de una incidencia | FT-RAC-07 · Reportes, exportes, importes y búsquedas por atributos |
| API-04-002 | GET /api/v2/exports/{jobId} | Leer el resultado del cruce | FT-RAC-07 · Reportes, exportes, importes y búsquedas por atributos |
| API-04-020 | PUT /api/v2/monitors/{monitorId} | Cambiar el umbral o la línea base de una alerta | FT-RAC-04 · Consistencia entre sistemas y gobierno de datos proactivo |
| API-14-005 | POST /internal/notifications/messages | Mandar la alerta de caída | FT-RAC-05 · Estatus del producto y motivos visibles para seller y… |
| API-08-001 | GET /api/v2/egress/review | Lotes inciertos por destino | FT-INT-01 · Publicación a e-commerce |
| API-08-002 | POST /api/v2/egress/review/{batchId}/resolve | Reenviar o descartar un lote incierto | FT-INT-01 · Publicación a e-commerce |
| API-07-001 | GET /api/v2/sap-ingest/files?interface=&state= | Archivos de SAP en curso o fallidos | FT-INT-03 · Entrada de SKUs creados en SAP |
| API-03-007 | GET /api/v2/migration/coexistence/status | Atraso de la convivencia con P360 | FT-MIG-04 · Convivencia P360 ↔ nuevo PIM |
| API-02-039 | POST /api/v2/publications/plans | Republicar los productos en Error | FT-INT-07 · Repoblamiento masivo de productos hacia la tienda |
| API-08-006 | POST /internal/egress/extractions | Pedir a MS-08 la foto de la tienda y de Marketplace | FT-RAC-04 · Consistencia entre sistemas y gobierno de datos proactivo |
| API-02-121 | POST /internal/product/exports/pages | Leer categoría y variantes del universo del seller | FT-RAC-07 · Reportes, exportes, importes y búsquedas por atributos |
| API-02-122 | POST /api/v2/products/id-lists | Registrar el universo de una incidencia como lista | FT-RAC-07 · Reportes, exportes, importes y búsquedas por atributos |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.delivery.result/EXTRACTION_READY | MS-08 deja en el almacén la foto diaria de la tienda y de Marketplace | FT-RAC-04 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.delivery.result/EXTRACTION_READY | Reportes cuenta los visibles del día y calcula la causa de cada no visible | esta misma épica |
7. Datos
Cada colección tiene un solo dueño, el único que escribe en ella.
| Colección | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
report_facts | MS-04 | Los hechos que Reportes arma con los eventos de los demás módulos: entrada, salida y visitas de cada paso; errores por punto de detección; tiempo de Aprobado a Publicado por canal; latencia de calculados; uso de la API de terceros por minuto y conteos diarios de visibles. No es fuente de ningún dato de operación. | escribe |
report_findings | MS-04 | Los hallazgos de las corridas de consistencia y de visibilidad: objeto, caso, valor en cada sistema, negocio, oferta activa, causa, fecha de corte, estado y tarea que lo atiende. | escribe |
report_jobs | MS-04 | Exportaciones y reportes asíncronos. | escribe |
report_monitors | MS-04 | Los casos de consistencia y las alertas que vigila Reportes: umbral, línea base, horario, a quién se avisa, si abren tarea y cuándo se cierran. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-RAC-08·H1 · Una alerta automática cuando caigan los visibles de un seller | P1 | pasos 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; API-04-021 |
| FT-RAC-08·H2 · Una alerta cuando los visibles del catálogo general caigan 6 % o más | P1 | pasos 8, 9; API-04-021 |
| FT-RAC-08·H3 · Bajar del seller al producto y ver la causa de no visibilidad | P1 | pasos 11, 12, 13; API-04-022 |
| FT-RAC-08·H4 · Cruzar el universo del seller con el de una incidencia | P2 | flujo «Cruzar con el universo de una incidencia» |
| FT-RAC-08·H5 · Comparar contra una línea base elegida | P2 | flujo «Comparar contra una línea base elegida» |
| FT-RAC-08·H6 · Pantalla de procesos | P2 | flujo «La pantalla de procesos»; API-BFF-510 |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-RAC-08-1. La visibilidad sale de la foto diaria de la tienda (visible e indexado por sitio) y de Marketplace (ofertas activas), que trae MS-08 con la misma extracción que usa FT-RAC-04. Reportes no llama a la tienda. Por qué: La fuente de visibilidad vive en e-commerce y sólo los adaptadores hablan con los externos. Se apoya en PD-09, DUD-10, FT-RAC-04.
- D-RAC-08-2. Se cuenta en productos, no en variantes, por seller, por universo y del catálogo general, contra el día anterior y contra una línea base: por omisión la mediana de los últimos 7 días, y el analista puede fijar una fecha. Alerta por omisión con 8 % de caída por seller o universo y 6 % en el catálogo; los dos umbrales se cambian en la alerta. Por qué: Así lo acordó el taller (8 a 10 % y 6 %); la mediana evita que un día malo mueva la línea base, que no estaba decidida. Se apoya en PEN-124, RN-REP-02, RN-REP-01.
- D-RAC-08-3. La alerta la manda MS-14 en pantalla y por correo al equipo de Marketplace y a quien se suscriba, con el seller, el conteo, la línea base, el cambio en porcentaje y la liga al diagnóstico. Por qué: Hoy no hay canal; MS-14 ya es el único que avisa a personas. Se apoya en PEN-124, DEC-94.
- D-RAC-08-4. Cada producto no visible lleva una sola causa, en este orden: SIN_CATEGORIA, SIN_RELACION_GENERICO_VARIANTE, SIN_OFERTA_ACTIVA, NO_PUBLICADO y SIN_INDEXAR_CAUSA_DESCONOCIDA. Por qué: Son las condiciones de visibilidad de hoy; una sola causa por producto permite sumar y no contar dos veces. Se apoya en RN-PUB-01.
- D-RAC-08-5. La pantalla de procesos la compone el BFF (API-BFF-510) con lo de cada dueño: archivos de SAP (MS-07), lotes inciertos (MS-08), estado por canal (MS-02) y convivencia (MS-03). Reintentar es siempre la acción del dueño: republicar en MS-02, reenviar en MS-08 o reprocesar en MS-07. Los outbox de cada módulo los vigila la observabilidad de la plataforma. Por qué: La composición es del BFF y la decisión de reintentar es de quien tiene el dato; los outbox de hoy por destino ya no existen en el TO-BE. Se apoya en PD-30, ADR-12.
- D-RAC-08-6. Para cruzar con una incidencia, el analista registra su universo como lista en MS-02 y pide un exporte de tipo VISIBILITY_CROSS_CHECK; el resultado cuenta en productos cuántos faltantes están en ese universo y cuántos tienen otra causa. Por qué: Reusa la lista y el exporte que ya existen, sin una herramienta aparte. Se apoya en DEC-88, RN-REP-01.
- D-RAC-08-7. Si la foto no llega, el día queda «sin dato»: no se calculan cero visibles ni se mueve la línea base. Por qué: Un cero donde no se midió dispararía una alerta falsa y movería la base. Se apoya en RN-REP-02.
Qué falta decidir
| ID | Qué falta |
|---|---|
| DUD-10 | Arquitectura con el equipo de e-commerce acuerda el contrato de lectura de visibilidad e indexación. |
| PD-22 | Publicación con Category deciden si se publica sin categoría; de eso depende si SIN_CATEGORIA es una causa o un error previo. |
También siguen abiertos: PEN-124, El área de reportes con el proponente ratifica los umbrales finales y el canal de la alerta; PEN-123, Confirmar si los 23 mil sin indexar son los mismos 23 mil sin categoría.
Fuentes
- [D]
trazabilidad/features/FT-RAC-08-monitoreo-visibilidad-alertas-caida.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.