← Arquitectura por épica

FT-INT-05 · Multioferta y stock out

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-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

DeQué
PE-1 · Propuesta en BorradorLa propuesta del seller en Borrador, con su EAN, su marca y su modelo.
FT-FLU-03 · Decisión por negocio ante coincidenciaLa 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 SAPEl SKU del producto existente: sin él no se habilita la oferta.
FT-FLU-02 · Alta individual de MarketplaceSi 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 masivaLos 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 sellerCuando ya existe: el SKU sobre el que puede ofertar el seller y la acción (multioferta o stock out), sin propuesta viva.

Entrega

AQué
PE-9 · Publicado por canalEl 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 MarketplaceEl 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 erroresEl 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ónDe → aCuándo
T11Borrador → CanceladoVence el plazo del rechazo (P-01) o se elimina.
C01Inicio → Pendiente (por canal)El producto queda Aprobado.
C02Pendiente → Enviado (por canal)Cumple el mínimo del canal y el bus confirma que tomó el mensaje.
C03Enviado → Publicado (por canal)Llega el acuse del destino.
C08Retirado → 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

Sistemas externos

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Evaluar una propuesta

Sobre qué SKU puede ofertar el seller
Pedir una acción del flujo
y 1 más

OFFER_CREATED
PUBLICATION_REQUESTED

OFFER_CREATED
PUBLICATION_REQUESTED

Avisa al portal de ofertas el SKU y l…
Manda el documento del producto
y 1 más

OFFER_CREATED

Foto del producto para publicar

DELIVERY_RESULT

DELIVERY_RESULT

Avisa al seller que ya puede crear su…
Avisa al seller que ya puede ofertar

Seller

Entrada Única · Vendor Center

BFF del portal

★ MS-02 Producto

MS-06 Evaluación

MS-08 Adaptadores de salida

MS-14 Avisos y ayuda

Base pim

Eventos

Marketplace

Servicio de correo

Contexto de FT-INT-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-14 Avisos y ayudaMarketplaceMS-08 Adaptadores de salidaEventosEntrada Única · Vendor CenterBase·pimMS-06 EvaluaciónMS-02 ProductoMS-14 Avisos y ayudaMarketplaceMS-08 Adaptadores de salidaEventosEntrada Única · Vendor CenterBase·pimMS-06 EvaluaciónMS-02 ProductoBFFSeller1. Pide evaluar la propuesta y recibe MULTI_OFFERPOST /api/v2/evaluations2. Revisa que el SKU exista con título y marca3. Revisa que el canal Marketplace esté Publicado4. Pide sobre qué SKU puede ofertar el sellerGET /api/v2/offer-targets/{sku}5. Elige ofertar sobre el producto que ya existe6. Pide el plan de convertir la propuesta en ofertaPOST /api/v2/workflow/actions/plans7. Confirma el planPOST /api/v2/product-plans/{planId}/apply8. Cierra la propuesta como convertida en oferta9. Avisa la oferta sobre el SKU existenteOFFER_CREATED10. Entrega la oferta al adaptador de MarketplaceOFFER_CREATED11. Avisa al portal de ofertas el SKU y la tienda del seller12. Entrega la oferta para avisar al sellerOFFER_CREATED13. Captura sólo precio e inventario de su ofertaBFFSeller
Flujo principal de FT-INT-05
Los pasos en texto
PasoDeAQué haceAPI o evento
1MS-02 ProductoMS-06 EvaluaciónPide evaluar la propuesta y recibe MULTI_OFFERAPI-06-001
2MS-02 ProductoBase pimRevisa que el SKU exista con título y marca—
3MS-02 ProductoBase pimRevisa que el canal Marketplace esté Publicado—
4Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide sobre qué SKU puede ofertar el sellerAPI-02-404
5SellerEntrada Única · Vendor CenterElige ofertar sobre el producto que ya existe—
6Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de convertir la propuesta en ofertaAPI-02-028
7Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el planAPI-02-057
8MS-02 ProductoBase pimCierra la propuesta como convertida en oferta—
9MS-02 ProductoEventosAvisa la oferta sobre el SKU existentecatalog.product.changed/OFFER_CREATED
10EventosMS-08 Adaptadores de salidaEntrega la oferta al adaptador de Marketplacecatalog.product.changed/OFFER_CREATED
11MS-08 Adaptadores de salidaMarketplaceAvisa al portal de ofertas el SKU y la tienda del seller—
12EventosMS-14 Avisos y ayudaEntrega la oferta para avisar al sellercatalog.product.changed/OFFER_CREATED
13SellerMarketplaceCaptura sólo precio e inventario de su oferta—

3.1 Existe catalogado pero no está en el portal de ofertas

Servicio de correoMS-14 Avisos y ayudaMarketplaceMS-08 Adaptadores de salidaEventosEntrada Única · Vendor CenterBase·pimMS-02 ProductoServicio de correoMS-14 Avisos y ayudaMarketplaceMS-08 Adaptadores de salidaEventosEntrada Única · Vendor CenterBase·pimMS-02 ProductoBFF1. Ve el canal Marketplace sin publicar2. Muestra «existe catalogado» al sellerGET /api/v2/offer-targets/{sku}3. Pide publicar el SKU sólo en MarketplacePUBLICATION_REQUESTED4. Entrega la petición al adaptadorPUBLICATION_REQUESTED5. Pide la foto del productoGET /internal/product/products/{id}/publication-snapshot?versio…6. Manda el documento del producto7. Devuelve el acuse del portal de ofertasDELIVERY_RESULT8. Entrega el acuse: el canal queda PublicadoDELIVERY_RESULT9. Avisa que ya se puede ofertarOFFER_CREATED10. Entrega la oferta para avisarOFFER_CREATED11. Avisa al seller que ya puede crear su ofertaBFF
Existe catalogado pero no está en el portal de ofertas

3.2 Stock out sobre un producto de Liverpool

MarketplaceMS-08 Adaptadores de salidaEventosEntrada Única · Vendor CenterMS-06 EvaluaciónMS-02 ProductoMarketplaceMS-08 Adaptadores de salidaEventosEntrada Única · Vendor CenterMS-06 EvaluaciónMS-02 ProductoBFFSeller1. Pide evaluar y recibe STOCK_OUTPOST /api/v2/evaluations2. Muestra el SKU de Liverpool con documento de stock outGET /api/v2/offer-targets/{sku}3. Pide el plan de convertir en oferta de stock outPOST /api/v2/workflow/actions/plans4. Confirma el planPOST /api/v2/product-plans/{planId}/apply5. Avisa la oferta de stock outOFFER_CREATED6. Entrega la oferta al adaptadorOFFER_CREATED7. Avisa al destino de stock out la tienda del seller8. Captura precio e inventario de su oferta de stock outBFFSeller
Stock out sobre un producto de Liverpool

3.3 El producto existente todavía no tiene SKU

Servicio de correoMS-14 Avisos y ayudaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterBFF1. Pide el SKU y recibe «todavía sin SKU»GET /api/v2/offer-targets/{sku}2. Pide el plan de esperar el SKU para ofertarPOST /api/v2/workflow/actions/plans3. Confirma la esperaPOST /api/v2/product-plans/{planId}/apply4. Liga la propuesta al producto sin habilitar la oferta5. Al asignarse el SKU, revisa título y marca6. Avisa que la oferta ya se puede crearOFFER_CREATED7. Entrega la oferta para avisarOFFER_CREATED8. Avisa al seller que ya puede ofertarBFF
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
CampoValor
APIAPI-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 épicaSobre qué SKU puede ofertar el seller y si ya está en el portal de ofertas
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoEl seller con acceso a Marketplace y Soporte de Marketplace (SoporteMKP)
CabecerasAuthorization, X-Request-Id
Parámetrossku = 1000007301, proposalId = PRD-0007388
También la usanFT-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

HTTPCódigoCuándo
404NOT_FOUNDEl SKU no existe
403PARTNER_SUSPENDEDEl seller está suspendido o no tiene Marketplace
422BUSINESS_ERROREl 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.

APIMétodo y rutaPara qué, aquíLa construye
API-06-001POST /api/v2/evaluationsEvaluar la propuesta: lista negra, coincidencia y decisión (MULTI_OFFER o STOCK_OUT) con el SKU existenteFT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…
API-02-028POST /api/v2/workflow/actions/plansVista previa de convertir la propuesta en oferta (CONVERT_TO_OFFER) o de esperar el SKUFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar la conversiónFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-054GET /internal/product/products/{id}/publication-snapshot?version=La foto del producto para armar el documento de MarketplaceFT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio
API-02-042GET /api/v2/delivery-status?productId=&sku=El estado del canal Marketplace del producto existenteFT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio
API-GW-003GET /partner/v1/offer-targets/{sku}Lo mismo para los sellers que catalogan por API, por el gatewayFT-PRD-10 · Catalogación por API del proveedor o seller

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/OFFER_CREATEDEl seller queda ligado a un SKU con título y marca que ya está Publicado en MarketplaceMS-05 (bitácora)
catalog.product.changed/STATUS_CHANGEDLa propuesta se cierra como convertida en ofertaFT-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_REQUESTEDEl SKU existe en el PIM pero no en el portal de ofertasFT-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_RESULTMS-08 devuelve el acuse del portal de ofertasFT-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

EventoPara quéQuién lo publica
catalog.product.changed/OFFER_CREATEDMS-08 avisa al portal de ofertas; MS-14 avisa al selleresta misma épica
catalog.product.publication/PUBLICATION_REQUESTEDMS-08 manda el documento al portal de ofertasesta misma épica
catalog.delivery.result/DELIVERY_RESULTMS-02 marca el canal Marketplace Publicado y habilita la ofertaesta misma épica
catalog.product.changed/SKU_ASSIGNEDMS-02 habilita la oferta que esperaba el SKU del producto existenteFT-INT-03, FT-PRD-02

7. Datos

Cada colección tiene un solo dueño, el único que escribe en ella.

ColecciónDueñoQué guardaEsta épica
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
product_delivery_statusMS-02El estado de publicación por producto y canal: Pendiente, Enviado, Publicado, Error o Retirado.escribe
product_receiptsMS-02El recibo de cada escritura confirmada en el producto (antes operation_receipts).escribe
product_outboxMS-02Los cambios del producto que esperan salir como evento (antes outbox).escribe
identifier_registryMS-02Unicidad de SKU y de EAN por negocio.lee
validation_resultsMS-06El resultado de cada evaluación: lista negra, coincidencias con su confianza y score.lee
publication_rulesMS-02El mínimo que pide cada canal para publicar.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-INT-05·H1 · Ir directo a crear la ofertaP1pasos 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 ofertarP1pasos 3; flujo «Existe catalogado pero no está en el portal de ofertas»
FT-INT-05·H3 · Oferta sólo con SKU y datos baseP1pasos 2; flujo «El producto existente todavía no tiene SKU»
FT-INT-05·H4 · Entrega a Mirakl sin reenvíos manualesP2flujo «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

IDQué falta
DUD-32Reglas de Marketplace: qué hacer con coincidencias de Suburbia y con proveedores híbridos.
PD-02Si 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

  1. [D] trazabilidad/features/FT-INT-05-multioferta-stock-out-mirakl.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.