Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-INT-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-INT-02.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-INT-02-publicacion-oms-dwh-senalizacion.md.
En 30 segundos
Además de la tienda, cada producto aprobado tiene que llegar a OMS para venderse y surtirse, a Señalización para las etiquetas en tienda y al DWH para análisis, con el contenido que reciben hoy. Esta épica entrega a cada uno su documento desde la misma foto del producto, confirma que llegó y devuelve el acuse. El DWH lo atiende el exportador MS-10, que también manda cada día hábil el diccionario de plantillas.
- Módulo dueño: MS-08 Adaptadores de salida. También participan: MS-02 Producto, MS-10 Exportador al DWH, MS-01 Catálogo.
- Etapa 8 · Publicación. Recibe «PE-8 · Aprobado» y entrega «PE-9 · Publicado por canal».
- APIs: construye 3 y usa 3 que construyen otras épicas.
- Eventos: publica 1 y consume 4.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| PE-8 · Aprobado | El producto Aprobado con OMS, Señalización o DWH en Pendiente según su negocio, y la petición de publicar. |
| FT-INT-01 · Publicación a e-commerce | La foto del producto ya leída y el XML canónico del lote guardado con su huella. |
| FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio | La misma petición para OMS, Señalización y DWH, con los canales ya decididos por negocio y el XML guardado con su huella. |
| FT-PLT-04 · Grupos de atributos y mínimos de información por sistema… | Qué atributos van a OMS, Señalización y DWH, con su mínimo, por la misma foto. |
| FT-INT-03 · Entrada de SKUs creados en SAP | El SKU asignado de cada variante (SKU_ASSIGNED), del que sale el envío exprés a OMS. |
Entrega
| A | Qué |
|---|---|
| PE-9 · Publicado por canal | OMS, Señalización y DWH en Publicado o en Error, cada uno con su acuse. |
| FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio | El acuse de OMS con el que el enrutamiento de Producto habilita la venta en la tienda. |
| FT-MIG-04 · Convivencia P360 ↔ nuevo PIM | Las salidas a OMS, Señalización y DWH sin P360, condición para apagarlo. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| C02 | Pendiente → Enviado (por canal) | Cumple el mínimo del canal y el bus confirma que tomó el mensaje. |
| C03 | Enviado → Publicado (por canal) | Llega el acuse del destino. |
| C04 | Enviado → Error (por canal) | No llega el acuse o el destino rechaza. |
| C05 | Error → Enviado (por canal) | Se republica. |
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 | Eventos | MS-08 Adaptadores de salida | Entrega la petición para OMS y Señalización | catalog.product.publication/PUBLICATION_REQUESTED |
| 2 | MS-08 Adaptadores de salida | MS-02 Producto | Pide la foto del producto en esa versión | API-02-054 |
| 3 | MS-08 Adaptadores de salida | Archivos e imágenes (almacén y CDN) | Guarda el XML canónico del lote con su huella | — |
| 4 | MS-08 Adaptadores de salida | OMS | Entrega el XML sin clasificaciones por el broker | — |
| 5 | OMS | MS-08 Adaptadores de salida | Responde que recibió el lote | — |
| 6 | MS-08 Adaptadores de salida | Señalización | Deja por SFTP el XML de los artículos marcados | — |
| 7 | MS-08 Adaptadores de salida | Eventos | Devuelve el acuse de OMS y de Señalización | catalog.delivery.result/DELIVERY_RESULT |
| 8 | Archivos e imágenes (almacén y CDN) | MS-10 Exportador al DWH | Avisa que hay un XML nuevo para el DWH | catalog.egress.files/OBJECT_FINALIZE |
| 9 | MS-10 Exportador al DWH | DWH | Sube el archivo como .part y lo renombra | — |
| 10 | MS-10 Exportador al DWH | Archivos e imágenes (almacén y CDN) | Marca el archivo como entregado al DWH | — |
| 11 | MS-10 Exportador al DWH | Eventos | Devuelve el acuse del DWH por producto | catalog.delivery.result/DELIVERY_RESULT |
| 12 | Eventos | MS-02 Producto | Entrega los acuses de cada canal | catalog.delivery.result/DELIVERY_RESULT |
| 13 | MS-02 Producto | Base pim | Pasa cada canal de Enviado a Publicado | — |
3.1 Envío exprés a OMS al asignar el SKU
3.2 Diccionario de plantillas al DWH
3.3 Si OMS o el DWH no confirman
4. Si algo sale mal
- El broker no responde o responde vacío para OMS. El lote queda incierto y el canal OMS pasa a Error; nada se reenvía solo. Mientras OMS no esté Publicado, Producto no cataloga para venta ese producto en la tienda.
- Llega un Conjunto Look aprobado. No va a OMS ni al DWH, como hoy: Producto no lo pide para esos canales y el carril de OMS lo quita si viene en un lote mixto.
- Falla el SFTP de Señalización. Se reintenta con espera creciente hasta 15 minutos; después el canal pasa a Error y el archivo queda intacto en el almacén para reenviarlo igual.
- El DWH no confirma el cambio de nombre del archivo. El envío queda incierto en el monitor de MS-10 y Operaciones decide subirlo otra vez o descartarlo (API-10-002); los productos del lote quedan en Error mientras tanto.
5. APIs
Las que construye esta épica (3)
GET /api/v2/dwh-exports?type=&state= · Envíos al DWH
| Campo | Valor |
|---|---|
| API | API-10-001 · MS-10 Exportador al DWH |
| Para qué | Lista lo que el exportador mandó al DWH: cada lote de productos (S42) y el diccionario de plantillas del día (S41), con su archivo, su huella y si quedó entregado, falló o está incierto. MS-10 no tiene base: lo lee de las marcas que deja en cada archivo del almacén. |
| En esta épica | Envíos al DWH: lotes de productos y diccionario |
| Quién la llama | BFF del portal |
| Permiso | Operaciones y Gobierno de Datos (lectura de integraciones) |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | type = PRODUCTS, state = UNCERTAIN, from = 2026-10-17T00:00:00Z, page = 1, size = 50 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"exportId": "dwh-20261018-152011-042",
"type": "PRODUCTS",
"state": "UNCERTAIN",
"sourceEvidenceId": "evd-7a51c0",
"fileName": "eilstep_20261018_152011_042.xml",
"sha256": "4c1e0d9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e1d",
"products": 120,
"startedAt": "2026-10-18T15:20:11Z",
"reason": {
"code": "RENAME_NOT_CONFIRMED",
"detail": "Se subió el .part y no se pudo confirmar el cambio de nombre"
}
},
{
"exportId": "dwh-dict-20261017",
"type": "TEMPLATE_DICTIONARY",
"state": "DELIVERED",
"sourceEvidenceId": null,
"fileName": "diccionario_plantillas_20261017.csv",
"sha256": "7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c",
"templates": 4096,
"startedAt": "2026-10-17T00:00:05Z",
"reason": null
}
],
"page": 1,
"size": 50,
"total": 2
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El tipo o el estado no existen |
POST /api/v2/dwh-exports/{exportId}/resolve · Resolver un envío incierto al DWH
| Campo | Valor |
|---|---|
| API | API-10-002 · MS-10 Exportador al DWH |
| Para qué | Una persona decide qué pasa con un envío al DWH que quedó incierto: RESEND lo vuelve a subir con el mismo nombre y contenido o DISCARD lo cierra como fallido, siempre con motivo. Al resolverse, cada producto del lote recibe su acuse. |
| En esta épica | Resolver un envío incierto al DWH |
| Quién la llama | BFF del portal |
| Permiso | Operaciones |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Parámetros | exportId = dwh-20261018-152011-042 |
Request
{
"decision": "RESEND",
"reason": "El área del DWH confirmó que el archivo no aparece en su carpeta"
}
Response · 202
{
"success": true,
"data": {
"requestId": "req-dwh-0091",
"status": "ACCEPTED",
"receiptUrl": "/api/v2/dwh-exports?exportId=dwh-20261018-152011-042"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | NOT_EDITABLE_IN_STATUS | El envío ya no está incierto |
| 422 | VALIDATION_ERROR | Falta el motivo o la decisión no es RESEND ni DISCARD |
GET /internal/governance/template-views?business=&changedSince=&page=&size= · MS-10 lee por páginas las vistas efectivas ya resueltas (pla
| Campo | Valor |
|---|---|
| API | API-01-111 · MS-01 Catálogo |
| Para qué | MS-10 lee por páginas las vistas efectivas ya resueltas (plantilla, negocio, atributos con tipo, lista y obligatoriedad) para armar el diccionario de plantillas que recibe el DWH, sin pedir una por una las 4,100 plantillas. |
| En esta épica | Leer por páginas las vistas efectivas de plantilla para el diccionario del DWH |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"templateId": "EU4-0412",
"name": "Licuadoras",
"business": "MER",
"viewVersion": 31,
"group": "EU3-0398",
"attributes": [
{
"attributeId": "MARCA",
"label": "Marca",
"dataType": "LOV",
"lovId": "MARCAS_ECC_LOV",
"level": "REQUIRED"
},
{
"attributeId": "POTENCIA_W",
"label": "Potencia en watts",
"dataType": "NUMBER",
"lovId": null,
"level": "OPTIONAL"
}
]
}
],
"page": 1,
"size": 200,
"total": 12288
}
}
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 (3)
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-02-054 | GET /internal/product/products/{id}/publication-snapshot?version= | Leer la foto del producto, con el uso por canal de cada atributo | FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio |
| API-08-001 | GET /api/v2/egress/review | Lotes inciertos de OMS y de Señalización | FT-INT-01 · Publicación a e-commerce |
| API-08-002 | POST /api/v2/egress/review/{batchId}/resolve | Reenviar igual o descartar un lote incierto | FT-INT-01 · Publicación a e-commerce |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.delivery.result/DELIVERY_RESULT | OMS, Señalización o el DWH confirman, rechazan o no contestan, y cuando acusa un lote exprés de OMS | FT-ARQ-02, FT-CAT-02, FT-CAT-05, FT-CAT-06, FT-IA-05, FT-INT-01, FT-INT-05, FT-INT-07, FT-PRD-02, FT-PRD-10, FT-RAC-06 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.product.publication/PUBLICATION_REQUESTED | MS-08 arma y entrega los documentos de OMS y Señalización | FT-ACT-02, FT-CAT-03, FT-CAT-05, FT-CAT-06, FT-INT-01, FT-INT-05, FT-INT-07, FT-PLT-08, FT-PRD-01, FT-PRD-03, FT-PRD-05, FT-RAC-03 |
catalog.product.changed/SKU_ASSIGNED | MS-08 manda el envío exprés a OMS | FT-INT-03, FT-PRD-02 |
catalog.egress.files/OBJECT_FINALIZE | MS-10 toma cada XML canónico nuevo y lo copia al DWH | D-ARCHIVOS |
catalog.delivery.result/DELIVERY_RESULT | Producto pasa cada canal a Publicado o Error | 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 |
|---|---|---|---|
egress_batches | MS-08 | Cada lote que sale a un destino: productos y versiones, intentos, respuesta del destino, huella de lo enviado y, si quedó incierto, la decisión de una persona con su motivo. | escribe |
template_views | MS-01 | La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-INT-02·H1 · Recibir producto y SKU aprobados con el contenido de hoy | P1 | pasos 1, 2, 3, 4, 5; flujo «Envío exprés a OMS al asignar el SKU»; API-02-054 |
| FT-INT-02·H2 · Saber que OMS recibió el producto | P1 | pasos 5, 7, 12, 13; flujo «Si OMS o el DWH no confirman»; API-08-001, API-08-002 |
| FT-INT-02·H3 · La foto de productos por trabajos por lotes en lotes con el contenido de hoy | P1 | pasos 8, 9, 10, 11; API-10-001, API-10-002 |
| FT-INT-02·H4 · Recibir a diario los artículos marcados | P2 | pasos 6, 7 |
| FT-INT-02·H5 · El diccionario de plantillas y atributos (S41) | P2 | flujo «Diccionario de plantillas al DWH»; API-01-111 |
| FT-INT-02·H6 · Que cada destino reciba sólo los atributos relevantes | P3 | pasos 2; API-02-054 |
| FT-INT-02·H7 · Cada sistema recibe sus negocios | P2 | pasos 1 |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-INT-02-1. OMS va por el broker en el primer corte, con el contenido de hoy: el XML canónico sin Classifications ni AttributeList y con SalesItemFamilyMkt renombrado a SalesItemFamily, por la misma ruta. El éxito es la respuesta no vacía del broker. Cuando OMS tenga un contrato sin broker, sólo cambia el carril de MS-08. Por qué: OMS depende hoy de la cola del broker y no tiene dueño identificado para un contrato nuevo; cambiarlo en el corte sumaría un riesgo crítico. Se apoya en PD-10, DUD-10, RSG-25.
- D-INT-02-2. La tienda espera a OMS: un producto nuevo no se cataloga para venta en la tienda hasta que su canal OMS esté Publicado. La regla vive en el enrutamiento de Producto y usa el acuse que devuelve MS-08. Por qué: No se vende lo que no se puede entregar; la regla es del canal y la decide quien decide los canales. Se apoya en RN-PUB-05, FT-CAT-05, DUD-10.
- D-INT-02-3. Señalización recibe por el SFTP «pricing», con el nombre output-<época en ms>.xml, el mismo XML de cada lote, sólo con los artículos que Producto pidió para ese canal: los marcados para Access Via (EnvioAV). Es la entrega por lote que hace el código desde el 31-ago; la de las 19:00 de la tabla de integraciones no tiene código. Por qué: Gana el código sobre la tabla; Producto ya sólo pide Señalización para los artículos marcados. Se apoya en DUD-10, RSG-28.
- D-INT-02-4. El DWH es un canal con adaptador propio: MS-10 copia al SFTP del DWH cada XML canónico que MS-08 deja en el almacén (eilstep_yyyyMMdd_HHmmss_SSS.xml; sube .part y renombra) y devuelve el acuse por producto. MS-10 no transforma ni guarda datos: la marca de entregado vive en el archivo. Por qué: El DWH recibe hoy el mismo XML del comercio electrónico; copiarlo evita un segundo armador y deja el canal con estado. Se apoya en DEC-ARQ-03, DUD-10, FT-CAT-05.
- D-INT-02-5. El diccionario de plantillas y atributos (S41) lo arma MS-10 de lunes a viernes a las 18:00 con las vistas efectivas de MS-01: identificador, nombre, grupo, tipo de dato, lista y obligatoriedad por negocio, en CSV mientras el DWH no entregue su muestra. Por qué: No hay clase ni muestra de hoy; las vistas de MS-01 ya traen todo resuelto. Se apoya en DUD-10.
- D-INT-02-6. Cada destino recibe los atributos marcados para él en el catálogo (uso por canal que llega en la foto). Mientras un destino no tenga marcas, recibe lo mismo que hoy. El Conjunto Look nunca va a OMS ni al DWH. Por qué: Dirección aprobó las mejoras en catalogación (DEC-ARQ-12) y el uso por canal ya lo administra FT-PLT-04; sin marcas, se conserva la paridad. Se apoya en DEC-ARQ-12, FT-PLT-04.
- D-INT-02-7. El envío exprés a OMS al asignar el SKU sigue como hoy: XML propio en lotes de 25 con acuse por lote. Un lote en vuelo o fallido queda en revisión y nunca se reenvía a ciegas. Su acuse se guarda en el historial de envíos sin mover el estado del canal, que nace al aprobar. Por qué: OMS necesita el artículo desde que tiene SKU para surtir; mezclarlo con el estado por canal confundiría Enviado con Publicado. Se apoya en DUD-10, PD-10.
- D-INT-02-8. Cada sistema recibe sólo sus negocios: lo decide el enrutamiento de Producto (por ejemplo, Suburbia nunca va a Marketplace) y MS-08 y MS-10 entregan sólo lo pedido. Por qué: Un solo lugar decide qué recibe cada destino; el adaptador no filtra por su cuenta. Se apoya en FT-CAT-05, P-40.
Qué falta decidir
| ID | Qué falta |
|---|---|
| PD-10 | Ratificar que OMS sigue por el broker en el primer corte (ADR-07, 13-nov). |
| DUD-10 | Confirmar con el dueño de OMS si acusa recibo, y con Señalización y el DWH el formato, los campos y la agenda que esperan. |
| PD-09 | Contrato final de OMS sin broker y del DWH por trabajos por lotes. |
Fuentes
- [D]
trazabilidad/features/FT-INT-02-publicacion-oms-dwh-senalizacion.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.