Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-FLU-03: 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-FLU-03.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-FLU-03-decision-por-negocio-ante-coincidencia.md.
En 30 segundos
Si el producto del seller ya existe no se vuelve a catalogar, y lo que toca depende del negocio donde existe, de la marca y del tipo de artículo. Esta épica es la tabla de decisión de Evaluación: si existe en Marketplace, multioferta; si es de Liverpool y está permitido, stock out (ofertar sobre su SKU sin cambiar su contenido); si está vetado o es de Suburbia, no se puede. Cada caso lleva su mensaje, igual en pantalla, archivo y API.
- Módulo dueño: MS-06 Evaluación. También participan: MS-01 Catálogo, MS-02 Producto.
- Etapa 1 · ¿Ya existe?. Recibe «PE-1 · Propuesta en Borrador» y entrega «PE-2 · Sin duplicado».
- APIs: construye 1 y usa 11 que construyen otras épicas.
- Eventos: publica 1 y consume 1.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| FT-REF-03 · Servicio de matching | Las coincidencias con su negocio, SKU, dueño, estado y confianza. |
| FT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de… | Los vetos por marca y por negocio protegido (Liverpool o Suburbia) y la lista blanca de sellers por marca. |
| FT-REF-04 · Matching por imagen y por URL del seller | Las coincidencias visuales y la marca leída de la página del seller, que entran a la misma decisión. |
| PE-1 · Propuesta en Borrador | El negocio y el dueño de la propuesta (qué seller pregunta), que cambian la acción. |
Entrega
| A | Qué |
|---|---|
| FT-INT-05 · Multioferta y stock out | La decisión MULTI_OFFER (producto de Marketplace) o STOCK_OUT (producto de Liverpool) con el producto y el SKU existentes y el mensaje para el seller. |
| PE-2 · Sin duplicado | Sin coincidencia (CONTINUE): la propuesta sigue como producto nuevo con su evaluación guardada. |
| FT-FLU-02 · Alta individual de Marketplace | La acción y el mensaje de cada rama para el alta individual de Marketplace. |
| FT-FLU-05 · Reglas de negocio en la carga masiva | El texto de la acción por renglón para el reporte de la carga masiva. |
Tareas que abre o cierra: Gobierno de Datos.
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 | Seller | Entrada Única · Vendor Center | Da de alta un producto que ya vende otro seller | — |
| 2 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el plan de la propuesta con su EAN | API-02-005 |
| 3 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma el plan | API-02-057 |
| 4 | MS-02 Producto | MS-06 Evaluación | Pide evaluar la propuesta del seller | API-06-001 |
| 5 | MS-06 Evaluación | MS-01 Catálogo | Revisa vetos generales y por negocio | API-01-016 |
| 6 | MS-06 Evaluación | Base pim | Aplica la fila: Marketplace de otro seller | — |
| 7 | MS-06 Evaluación | Base pim | Guarda la decisión MULTI_OFFER con el SKU | — |
| 8 | MS-06 Evaluación | MS-02 Producto | Responde MULTI_OFFER con el SKU y el mensaje | — |
| 9 | MS-02 Producto | Base pim | Guarda la decisión: no se cataloga | — |
| 10 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide sobre qué SKU puede ofertar | API-02-404 |
| 11 | Seller | Entrada Única · Vendor Center | Ve que ofertará sobre un producto que ya existe | — |
3.1 Ya existe en Liverpool
3.2 Con permiso, descontinuado o Suburbia
3.3 Configurar la tabla de decisión
4. Si algo sale mal
- El producto existe pero todavía no está en el portal de ofertas. La decisión sigue siendo ofertar; FT-INT-05 lo manda al portal y el seller ve «existe catalogado, en sincronización» hasta que llega el acuse.
- Coincide sólo con un producto de Suburbia. Por ahora no se puede catalogar, con la explicación de que Marketplace sólo vende en Liverpool. Cada caso queda en la evaluación para medir cuántos son y decidir la regla de Suburbia sin tocar código.
- La marca pide permiso o el producto de Liverpool está descontinuado. Se abre una tarea de Gobierno de Datos y el seller ve «en revisión»; si la tarea vence, el motor la escala a su cola. La decisión de la persona queda en la evaluación.
- El seller cambia el EAN o la marca para que no coincida. MS-02 vuelve a pedir la evaluación en cada cambio y al enviar; con imagen o URL, la coincidencia visual también entra a la decisión.
5. APIs
Las que construye esta épica (1)
GET /api/v2/evaluations/{evaluationId} · Detalle de una evaluación
| Campo | Valor |
|---|---|
| API | API-06-004 · MS-06 Evaluación |
| Para qué | Explica una evaluación o una calificación: con qué datos se hizo, qué regla de la lista negra aplicó, qué productos se compararon con qué confianza, qué se decidió y, si la hubo, la revisión de una persona. El seller ve su resultado sin datos de otros sellers. |
| En esta épica | Explicar una decisión: qué regla y qué fila aplicaron y con qué confianza |
| Quién la llama | Entrada Única · Vendor Center (por el BFF), MS-02 Producto, MS-15 IA y enriquecimiento |
| Permiso | El dueño de la propuesta (vista reducida); Gobierno de Datos y Administración del catálogo (vista completa); MS-02 y MS-15 como servicio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | evaluationId = evl-0000740 |
| También la usan | FT-FLU-05, FT-IA-06, FT-RAC-02, FT-REF-04 |
Request
null
Response · 200
{
"success": true,
"data": {
"evaluationId": "evl-0000740",
"kind": "IDENTIFICATION",
"status": "DONE",
"subject": {
"productId": "PRD-0004815",
"version": 1,
"business": "MKP",
"origin": "PORTAL",
"owner": {
"type": "SELLER",
"id": "SELLER-0002"
}
},
"inputs": {
"brandCode": "MARCA03",
"model": "CG-25W",
"ean": "7509876500018",
"productType": "CARGADOR",
"sources": [
"SELLER"
]
},
"blacklist": {
"blocked": false,
"rulesVersion": 12
},
"candidates": [
{
"productId": "PRD-0002031",
"business": "MKP",
"sku": "1000002031",
"productName": "Cargador de pared 25 W USB-C",
"confidence": 0.78,
"fields": [
{
"field": "EAN",
"matched": false
},
{
"field": "MARCA",
"matched": true,
"weight": 25
},
{
"field": "MODELO",
"matched": true,
"weight": 25
},
{
"field": "TIPO_PRODUCTO",
"matched": true,
"weight": 15
},
{
"field": "COLOR",
"matched": true,
"weight": 10
},
{
"field": "CONTENIDO",
"matched": false,
"weight": 5
}
]
}
],
"decision": {
"action": "REVIEW",
"reasonCode": "MATCH_BETWEEN_BANDS",
"message": "Encontramos un producto muy parecido; una persona lo revisa antes de seguir."
},
"bands": {
"low": 0.7,
"high": 0.9
},
"review": null,
"thresholdsVersion": 4
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | No existe o no es visible para quien llama |
Las que usa y construye otra épica (11)
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 y devolver la acción por negocio | FT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de… |
| API-06-007 | GET /api/v2/validation-thresholds | Leer la tabla de decisión por negocio | FT-REF-03 · Servicio de matching |
| API-06-008 | POST /api/v2/validation-thresholds/plans | Preparar un cambio de la tabla con su impacto | FT-REF-03 · Servicio de matching |
| API-06-009 | POST /api/v2/validation-plans/{planId}/apply | Confirmar el cambio de la tabla | FT-REF-03 · Servicio de matching |
| API-06-010 | POST /api/v2/evaluations/{evaluationId}/reviews | Registrar la autorización de un caso con permiso o descontinuado | FT-REF-03 · Servicio de matching |
| API-06-003 | GET /api/v2/evaluations/batches/{batchId} | Dar a la carga masiva la acción por renglón (crear multioferta porque existe en Marketplace o en Liverpool) | FT-FLU-05 · Reglas de negocio en la carga masiva |
| API-02-005 | POST /api/v2/products/plans | Preparar la propuesta en Borrador con su identificación | FT-PRD-01 · Modelo canónico de producto |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar el alta; MS-02 pide la evaluación sobre la propuesta | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-06-005 | POST /api/v2/matches | Avisar desde la pantalla, antes de guardar, que el producto ya existe y qué acción le toca | FT-REF-03 · Servicio de matching |
| API-01-016 | GET /api/v2/rules?type= | Leer vetos generales y por negocio | FT-PLT-07 · Reglas de atributos |
| API-02-404 | GET /api/v2/offer-targets/{sku} | Llevar al seller a ofertar sobre el SKU existente | FT-INT-05 · Multioferta y stock out |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.validation.result/EVALUATION_DONE | Gobierno de Datos autoriza o niega un caso con permiso o descontinuado | FT-FLU-02, FT-FLU-04, FT-FLU-05, FT-FLU-06, FT-PRD-10, FT-RAC-06, FT-REF-03 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.validation.result/EVALUATION_DONE | MS-02 lleva al seller a ofertar o le dice que no se puede, y cierra la tarea | 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 |
|---|---|---|---|
validation_results | MS-06 | El resultado de cada evaluación: lista negra, coincidencias con su confianza y score. | escribe |
validation_thresholds | MS-06 | Los umbrales de coincidencia y de calificación por negocio. | escribe |
governance_rules | MS-01 | Reglas de captura y clasificación: marcas por plantilla, grupo de artículo a plantilla, alcance del proveedor y lista negra de Marketplace. | lee |
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-FLU-03·H1 · Ya existe en Marketplace | P1 | pasos 4, 5, 6, 7, 8, 9, 10, 11; API-06-001, API-06-005, API-06-003 |
| FT-FLU-03·H2 · Ya existe en Liverpool | P1 | flujo «Ya existe en Liverpool»; API-06-003 |
| FT-FLU-03·H3 · Depende de la marca y el caso | P1 | flujo «Con permiso, descontinuado o Suburbia», «Configurar la tabla de decisión»; API-06-004, API-06-007 |
| FT-FLU-03·H4 · Coincide con Suburbia | P2 | flujo «Con permiso, descontinuado o Suburbia», «Configurar la tabla de decisión» |
| FT-FLU-03·H5 · Descontinuados | P3 | flujo «Con permiso, descontinuado o Suburbia» |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-FLU-03-1. Una sola tabla de decisión por negocio, en validation_thresholds de MS-06, versionada y editable con plan (API-06-008): cada fila dice negocio de la coincidencia, regla de la marca, si es del mismo seller y estado del producto existente, y da la acción (CONTINUE, BLOCK, MULTI_OFFER, OWN_DUPLICATE, STOCK_OUT, DUPLICATE o REVIEW) con su mensaje. MS-02, la carga masiva y el gateway no copian la tabla: usan la respuesta. Por qué: Una regla, un dueño; cambia sin código y explica cada rama, que es lo que piden los talleres. Se apoya en RF-MAT-10, DEC-37, RN-MAT-07, FT-PRD-03.
- D-FLU-03-2. Orden: primero los vetos generales (FT-REF-02), luego la coincidencia (FT-REF-03) y al final la fila del negocio que coincide, con los vetos de ese negocio. Por qué: Es el orden vigente del taller: lista negra primero, negocio después, y un rombo por negocio. Se apoya en DEC-36, DEC-34, DEC-37.
- D-FLU-03-3. Arranque de las filas abiertas: coincidencia sólo con Suburbia, BLOCK con explicación; marca «con permiso», REVIEW con Gobierno de Datos; producto de Liverpool descontinuado, REVIEW. Cada una se cambia en la tabla cuando se decidan PEN-19, PEN-20 y PEN-131. Por qué: Marketplace sólo vende en Liverpool y los SKU de Suburbia no van al portal de ofertas, así que hoy no hay stock out sobre Suburbia; lo dudoso lo decide una persona hasta tener regla. Se apoya en PEN-19, PEN-20, PEN-131, RN-CAT-04.
- D-FLU-03-4. Con coincidencia nunca se crea SKU ni se enriquece. Si la propuesta ya existía, MS-02 la cierra como convertida en oferta (FT-INT-05). Si el producto es del mismo seller (OWN_DUPLICATE), se le manda a modificar el suyo. Por qué: El seller se cuelga del SKU existente; duplicar contenido es justo lo que se quiere evitar. Se apoya en DEC-38, DEC-39, RN-MAT-18.
- D-FLU-03-5. «Stock out» quiere decir ofertar sobre un SKU de Liverpool sin cambiar su contenido; no es un negocio ni un producto nuevo. La palabra se usa sólo así en mensajes y reportes, y el mensaje nunca dice qué otros sellers venden el producto. Por qué: Hoy la palabra tiene tres significados; fijarla evita que cada pantalla la use distinto. Se apoya en RN-MAT-15, PEN-132.
Qué falta decidir
| ID | Qué falta |
|---|---|
| DUD-32 | Dueño de negocio de la tabla de decisión de Marketplace. |
También siguen abiertos: PEN-19, Regla de Suburbia: bloqueo, stock out o registro interno (Marketplace con el área comercial de Suburbia); PEN-20, Criterios de canibalización y quién autoriza el «con permiso»; PEN-131, Si se puede ofertar por stock out sobre artículos de Liverpool descontinuados; PEN-132, Ratificar la definición única de «stock out».
Fuentes
- [D]
trazabilidad/features/FT-FLU-03-decision-por-negocio-ante-coincidencia.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.