Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-INT-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-INT-05.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-INT-05-multioferta-stock-out-mirakl.md.
En 30 segundos
Si un seller de Marketplace da de alta algo que ya existe, no se vuelve a catalogar: oferta sobre el SKU existente y sólo captura precio e inventario en el portal de ofertas (Mirakl). Esta épica revisa que ese SKU exista con sus datos base y que ya esté en el portal de ofertas (si no, lo manda), cierra la propuesta como oferta y avisa al portal y al seller. Lo mismo vale para el stock out sobre un producto de Liverpool.
- Módulo dueño: MS-02 Producto. También participan: MS-06 Evaluación, MS-08 Adaptadores de salida, MS-14 Avisos y ayuda.
- Etapa 1 · ¿Ya existe?. Recibe «PE-1 · Propuesta en Borrador» y entrega «PE-9 · Publicado por canal».
- APIs: construye 1 y usa 6 que construyen otras épicas.
- Eventos: publica 4 y consume 4.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| PE-1 · Propuesta en Borrador | La propuesta del seller en Borrador, con su EAN, su marca y su modelo. |
| FT-FLU-03 · Decisión por negocio ante coincidencia | La decisión de MS-06 ante la coincidencia: MULTI_OFFER sobre un producto de Marketplace o STOCK_OUT sobre uno de Liverpool, con el producto y el SKU existentes. |
| FT-PRD-02 · Creación de SKU con SAP | El SKU del producto existente: sin él no se habilita la oferta. |
| FT-FLU-02 · Alta individual de Marketplace | Si ya existe: el SKU existente y la acción, multioferta o stock out, para «detalle oferta»; el alta termina sin propuesta nueva ni SKU. |
| FT-FLU-05 · Reglas de negocio en la carga masiva | Los renglones que ya existen, con su acción (multioferta o stock out) y el SKU sobre el que puede ofertar el seller. |
| FT-PRD-10 · Catalogación por API del proveedor o seller | Cuando ya existe: el SKU sobre el que puede ofertar el seller y la acción (multioferta o stock out), sin propuesta viva. |
Entrega
| A | Qué |
|---|---|
| PE-9 · Publicado por canal | El producto existente Publicado en el canal Marketplace y el portal de ofertas avisado de que el seller puede ofertar sobre su SKU. |
| FT-FLU-02 · Alta individual de Marketplace | El seller que sale del alta individual hacia su oferta, con la propuesta cerrada como convertida en oferta. |
| FT-IA-06 · Asistente conversacional para que el seller reporte errores | El seller ligado a un SKU que ya existe, que no puede modificar y sobre el que sólo oferta. |
| FT-RAC-08 · Monitoreo de visibilidad y alertas de caída de SKUs… | Las ofertas de cada SKU en Marketplace, para saber si tiene oferta activa. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T11 | Borrador → Cancelado | Vence el plazo del rechazo (P-01) o se elimina. |
| C01 | Inicio → Pendiente (por canal) | El producto queda Aprobado. |
| 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. |
| C08 | Retirado → 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 | MS-02 Producto | MS-06 Evaluación | Pide evaluar la propuesta y recibe MULTI_OFFER | API-06-001 |
| 2 | MS-02 Producto | Base pim | Revisa que el SKU exista con título y marca | — |
| 3 | MS-02 Producto | Base pim | Revisa que el canal Marketplace esté Publicado | — |
| 4 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide sobre qué SKU puede ofertar el seller | API-02-404 |
| 5 | Seller | Entrada Única · Vendor Center | Elige ofertar sobre el producto que ya existe | — |
| 6 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el plan de convertir la propuesta en oferta | API-02-028 |
| 7 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma el plan | API-02-057 |
| 8 | MS-02 Producto | Base pim | Cierra la propuesta como convertida en oferta | — |
| 9 | MS-02 Producto | Eventos | Avisa la oferta sobre el SKU existente | catalog.product.changed/OFFER_CREATED |
| 10 | Eventos | MS-08 Adaptadores de salida | Entrega la oferta al adaptador de Marketplace | catalog.product.changed/OFFER_CREATED |
| 11 | MS-08 Adaptadores de salida | Marketplace | Avisa al portal de ofertas el SKU y la tienda del seller | — |
| 12 | Eventos | MS-14 Avisos y ayuda | Entrega la oferta para avisar al seller | catalog.product.changed/OFFER_CREATED |
| 13 | Seller | Marketplace | Captura sólo precio e inventario de su oferta | — |
3.1 Existe catalogado pero no está en el portal de ofertas
3.2 Stock out sobre un producto de Liverpool
3.3 El producto existente todavía no tiene SKU
4. Si algo sale mal
- La coincidencia es con un producto de Suburbia. No se oferta ni se recataloga, porque Marketplace no vende en Suburbia: la propuesta queda en revisión manual de Marketplace y el seller lo ve en su propuesta.
- El portal de ofertas rechaza el documento o no contesta. El canal Marketplace queda en Error con la respuesta; el seller sigue viendo «existe catalogado, en sincronización» y la oferta no se habilita. Operación republica sólo ese canal (FT-CAT-05); nadie lo reenvía a mano desde Entrada Única.
- El SKU existe pero le faltan título o marca. La oferta no se habilita y se abre Gobierno de Datos sobre el producto existente; el seller ve que su oferta está en espera.
- El seller abandona sin elegir. La propuesta sigue en Borrador y vence como cualquier borrador (FT-PRD-04); nunca crea SKU.
- La marca está en la lista negra. No llega aquí: MS-06 la bloquea antes (FT-REF-02) y el seller ve el motivo.
5. APIs
Las que construye esta épica (1)
GET /api/v2/offer-targets/{sku} · Sobre qué SKU puede ofertar el seller
| Campo | Valor |
|---|---|
| API | API-02-404 · MS-02 Producto |
| Para qué | Cuando el producto que da de alta un seller ya existe, dice sobre qué SKU puede ofertar, si ya tiene sus datos base (título y marca), en qué estado está en el portal de ofertas y qué sigue: crear la oferta ahí o esperar a que llegue. El PIM no guarda la oferta. |
| En esta épica | Sobre qué SKU puede ofertar el seller y si ya está en el portal de ofertas |
| Quién la llama | BFF del portal, Gateway de terceros /partner/v1 |
| Permiso | El seller con acceso a Marketplace y Soporte de Marketplace (SoporteMKP) |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | sku = 1000007301, proposalId = PRD-0007388 |
| También la usan | FT-FLU-02, FT-FLU-03, FT-FLU-05, FT-PRD-10, FT-REF-03 |
Request
null
Response · 200
{
"success": true,
"data": {
"sku": "1000007301",
"productId": "PRD-0007301",
"business": "MKP",
"decision": "MULTI_OFFER",
"title": "Audífonos inalámbricos con cancelación de ruido",
"brand": "MARCA01",
"offerable": true,
"marketplace": {
"state": "PUBLICADO",
"document": "MKT",
"lastAckAt": "2026-10-17T22:10:00Z"
},
"nextStep": "CREAR_OFERTA_EN_MARKETPLACE"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El SKU no existe |
| 403 | PARTNER_SUSPENDED | El seller está suspendido o no tiene Marketplace |
| 422 | BUSINESS_ERROR | El producto es de Suburbia: no se oferta en Marketplace |
Las que usa y construye otra épica (6)
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-06-001 | POST /api/v2/evaluations | Evaluar la propuesta: lista negra, coincidencia y decisión (MULTI_OFFER o STOCK_OUT) con el SKU existente | FT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de… |
| API-02-028 | POST /api/v2/workflow/actions/plans | Vista previa de convertir la propuesta en oferta (CONVERT_TO_OFFER) o de esperar el SKU | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar la conversión | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-054 | GET /internal/product/products/{id}/publication-snapshot?version= | La foto del producto para armar el documento de Marketplace | FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio |
| API-02-042 | GET /api/v2/delivery-status?productId=&sku= | El estado del canal Marketplace del producto existente | FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio |
| API-GW-003 | GET /partner/v1/offer-targets/{sku} | Lo mismo para los sellers que catalogan por API, por el gateway | FT-PRD-10 · Catalogación por API del proveedor o seller |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/OFFER_CREATED | El seller queda ligado a un SKU con título y marca que ya está Publicado en Marketplace | MS-05 (bitácora) |
catalog.product.changed/STATUS_CHANGED | La propuesta se cierra como convertida en oferta | FT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-02, FT-PRD-04, FT-PRD-06, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06 |
catalog.product.publication/PUBLICATION_REQUESTED | El SKU existe en el PIM pero no en el portal de ofertas | FT-CAT-05, FT-CAT-06, FT-INT-01, FT-INT-02, FT-INT-07, FT-PLT-08, FT-PRD-05, FT-RAC-03 |
catalog.delivery.result/DELIVERY_RESULT | MS-08 devuelve el acuse del portal de ofertas | FT-ARQ-02, FT-CAT-02, FT-CAT-05, FT-CAT-06, FT-IA-05, FT-INT-01, FT-INT-02, FT-INT-07, FT-PRD-02, FT-PRD-10, FT-RAC-06 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.product.changed/OFFER_CREATED | MS-08 avisa al portal de ofertas; MS-14 avisa al seller | esta misma épica |
catalog.product.publication/PUBLICATION_REQUESTED | MS-08 manda el documento al portal de ofertas | esta misma épica |
catalog.delivery.result/DELIVERY_RESULT | MS-02 marca el canal Marketplace Publicado y habilita la oferta | esta misma épica |
catalog.product.changed/SKU_ASSIGNED | MS-02 habilita la oferta que esperaba el SKU del producto existente | FT-INT-03, FT-PRD-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 |
|---|---|---|---|
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | escribe |
product_delivery_status | MS-02 | El estado de publicación por producto y canal: Pendiente, Enviado, Publicado, Error o Retirado. | escribe |
product_receipts | MS-02 | El recibo de cada escritura confirmada en el producto (antes operation_receipts). | escribe |
product_outbox | MS-02 | Los cambios del producto que esperan salir como evento (antes outbox). | escribe |
identifier_registry | MS-02 | Unicidad de SKU y de EAN por negocio. | lee |
validation_results | MS-06 | El resultado de cada evaluación: lista negra, coincidencias con su confianza y score. | lee |
publication_rules | MS-02 | El mínimo que pide cada canal para publicar. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-INT-05·H1 · Ir directo a crear la oferta | P1 | pasos 1, 4, 5, 6, 7, 8, 13; flujo «Stock out sobre un producto de Liverpool» |
| FT-INT-05·H2 · El SKU existe en Mirakl antes de ofertar | P1 | pasos 3; flujo «Existe catalogado pero no está en el portal de ofertas» |
| FT-INT-05·H3 · Oferta sólo con SKU y datos base | P1 | pasos 2; flujo «El producto existente todavía no tiene SKU» |
| FT-INT-05·H4 · Entrega a Mirakl sin reenvíos manuales | P2 | flujo «Existe catalogado pero no está en el portal de ofertas», «Stock out sobre un producto de Liverpool»; API-02-054 |
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-05-1. La oferta nace y vive en el portal de ofertas; el PIM no guarda precio ni inventario. El PIM garantiza que el SKU existe con sus datos base y que ya está en el portal, y avisa al portal y al seller. Por qué: Orquestar ofertas en el PIM sería construir lo que el portal ya hace; precio e inventario viven en la oferta. Se apoya en PEN-23, DEC-38, RN-ALT-13.
- D-INT-05-2. OFFER_CREATED quiere decir «el seller quedó ligado a un SKU sobre el que ya puede ofertar». Sale sólo cuando el SKU tiene título y marca y su canal Marketplace está Publicado; antes, el seller ve «existe catalogado, en sincronización». Por qué: La oferta sólo existe si el SKU existe, y redirigir a un SKU que el portal no tiene es el error de hoy. Se apoya en RN-ALT-13, RN-INT-05.
- D-INT-05-3. La propuesta que se vuelve oferta pasa a Cancelado con el motivo «Convertida en oferta» y queda ligada al SKU (T11): no crea SKU, no se enriquece y no reserva sus EAN. Se convierte con una acción del motor (CONVERT_TO_OFFER en API-02-028). Por qué: Con coincidencia no se crea SKU ni se enriquece; el registro se conserva para que el seller y el reporte sepan qué pasó. Se apoya en RN-MAT-18, RN-MAT-13.
- D-INT-05-4. «Existe catalogado»: si el canal Marketplace del producto no está Publicado, MS-02 pide publicarlo sólo en ese canal y avisa al seller cuando llega el acuse. Por qué: Hoy Operación reenvía a mano desde Entrada Única los SKU que no llegan; así se reenvía solo y con estado. Se apoya en RN-INT-05, PEN-24.
- D-INT-05-5. Un solo canal (MARKETPLACE) con dos documentos: MKT para productos de Marketplace al destino de Marketplace y LVP para el stock out de Liverpool al destino de Stock Out. Suburbia nunca va al portal de ofertas. Por qué: Es lo que hace el código de hoy y deja un solo estado por canal. Se apoya en RN-MAT-15, PEN-133.
- D-INT-05-6. Datos base para ofertar: SKU, título y marca; para mandar el documento, además, el grupo de artículo y la imagen principal que pide el portal. Por qué: Nadie oferta sobre un producto incompleto; la lista completa queda por confirmar con Marketplace. Se apoya en RN-ALT-13.
- D-INT-05-7. La misma regla sirve al portal y a la API: el gateway responde «ya existe» con el SKU (API-GW-003) leyendo lo mismo que API-02-404. Por qué: Un solo lugar para la regla, sin importar por dónde llegó el seller. Se apoya en PD-02, PEN-23.
Qué falta decidir
| ID | Qué falta |
|---|---|
| DUD-32 | Reglas de Marketplace: qué hacer con coincidencias de Suburbia y con proveedores híbridos. |
| PD-02 | Si el alta de sellers entra en la primera salida; esta épica es de la ola 2. |
También siguen abiertos: PEN-23, Mecanismo y destino de la redirección: aquí, el portal de ofertas y el PIM sólo avisa. Lo valida Marketplace con Arquitectura en ADR-02; PEN-24, Llevar a cero los SKU que no llegan al portal de ofertas antes de automatizar.
Fuentes
- [D]
trazabilidad/features/FT-INT-05-multioferta-stock-out-mirakl.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.