← Arquitectura por épica

FT-FLU-03 · Decisión por negocio ante coincidencia

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

DeQué
FT-REF-03 · Servicio de matchingLas 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 sellerLas coincidencias visuales y la marca leída de la página del seller, que entran a la misma decisión.
PE-1 · Propuesta en BorradorEl negocio y el dueño de la propuesta (qué seller pregunta), que cambian la acción.

Entrega

AQué
FT-INT-05 · Multioferta y stock outLa 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 duplicadoSin coincidencia (CONTINUE): la propuesta sigue como producto nuevo con su evaluación guardada.
FT-FLU-02 · Alta individual de MarketplaceLa acción y el mensaje de cada rama para el alta individual de Marketplace.
FT-FLU-05 · Reglas de negocio en la carga masivaEl 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

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Alta de un producto
Confirmar un plan de Producto
y 1 más

Evaluar una propuesta

Consultar reglas

Responde MULTI_OFFER con el SKU y el…
Responde STOCK_OUT con el SKU de Live…
y 1 más

Muestra que es producto de Mercadería…

Resolver una coincidencia dudosa
Umbrales y reglas de evaluación vigen…
y 2 más

EVALUATION_DONE

EVALUATION_DONE

Seller

Administración del catálogo

Gobierno de Datos

Entrada Única · Vendor Center

BFF del portal

MS-01 Catálogo

MS-02 Producto

★ MS-06 Evaluación

Base pim

Eventos

Contexto de FT-FLU-03

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.

Base·pimMS-01 CatálogoMS-06 EvaluaciónMS-02 ProductoEntrada Única · Vendor CenterBase·pimMS-01 CatálogoMS-06 EvaluaciónMS-02 ProductoEntrada Única · Vendor CenterSellerBFF1. Da de alta un producto que ya vende otro seller2. Pide el plan de la propuesta con su EANPOST /api/v2/products/plans3. Confirma el planPOST /api/v2/product-plans/{planId}/apply4. Pide evaluar la propuesta del sellerPOST /api/v2/evaluations5. Revisa vetos generales y por negocioGET /api/v2/rules?type=6. Aplica la fila: Marketplace de otro seller7. Guarda la decisión MULTI_OFFER con el SKU8. Responde MULTI_OFFER con el SKU y el mensaje9. Guarda la decisión: no se cataloga10. Pide sobre qué SKU puede ofertarGET /api/v2/offer-targets/{sku}11. Ve que ofertará sobre un producto que ya existeSellerBFF
Flujo principal de FT-FLU-03
Los pasos en texto
PasoDeAQué haceAPI o evento
1SellerEntrada Única · Vendor CenterDa de alta un producto que ya vende otro seller—
2Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de la propuesta con su EANAPI-02-005
3Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el planAPI-02-057
4MS-02 ProductoMS-06 EvaluaciónPide evaluar la propuesta del sellerAPI-06-001
5MS-06 EvaluaciónMS-01 CatálogoRevisa vetos generales y por negocioAPI-01-016
6MS-06 EvaluaciónBase pimAplica la fila: Marketplace de otro seller—
7MS-06 EvaluaciónBase pimGuarda la decisión MULTI_OFFER con el SKU—
8MS-06 EvaluaciónMS-02 ProductoResponde MULTI_OFFER con el SKU y el mensaje—
9MS-02 ProductoBase pimGuarda la decisión: no se cataloga—
10Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide sobre qué SKU puede ofertarAPI-02-404
11SellerEntrada Única · Vendor CenterVe que ofertará sobre un producto que ya existe—

3.1 Ya existe en Liverpool

Entrada Única · Vendor CenterBase·pimMS-01 CatálogoMS-06 EvaluaciónMS-02 ProductoEntrada Única · Vendor CenterBase·pimMS-01 CatálogoMS-06 EvaluaciónMS-02 ProductoBFF1. Pide evaluar, coincide con un SKU de LiverpoolPOST /api/v2/evaluations2. Revisa si la marca está vetada para MercaderíasGET /api/v2/rules?type=3. Aplica la fila: vetada bloquea, permitida es stock out4. Responde STOCK_OUT con el SKU de Liverpool5. Muestra que es producto de Mercaderías y la oferta6. Pide el SKU de Liverpool para ofertarGET /api/v2/offer-targets/{sku}BFF
Ya existe en Liverpool

3.2 Con permiso, descontinuado o Suburbia

EventosEntrada Única · Vendor CenterBase·pimMS-02 ProductoMS-06 EvaluaciónEventosEntrada Única · Vendor CenterBase·pimMS-02 ProductoMS-06 EvaluaciónGobierno de DatosBFF1. Responde REVIEW (permiso o descontinuado) o BLOCK (Suburbia)2. Abre tarea de Gobierno de Datos para autorizar3. Revisa el caso y autoriza o niega4. Registra la decisiónPOST /api/v2/evaluations/{evaluationId}/reviews5. Avisa la decisión finalEVALUATION_DONE6. Entrega la decisión: oferta o no se puedeEVALUATION_DONEGobierno de DatosBFF
Con permiso, descontinuado o Suburbia

3.3 Configurar la tabla de decisión

Base·pimMS-06 EvaluaciónEntrada Única · Vendor CenterBase·pimMS-06 EvaluaciónEntrada Única · Vendor CenterAdministración del catálogoBFF1. Cambia la acción de una fila, por ejemplo Suburbia2. Lee la tabla vigente por negocioGET /api/v2/validation-thresholds3. Pide el plan con las decisiones que cambiaríanPOST /api/v2/validation-thresholds/plans4. Confirma el planPOST /api/v2/validation-plans/{planId}/apply5. Guarda la versión nueva de la tablaAdministración del catálogoBFF
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
CampoValor
APIAPI-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 épicaExplicar una decisión: qué regla y qué fila aplicaron y con qué confianza
Quién la llamaEntrada Única · Vendor Center (por el BFF), MS-02 Producto, MS-15 IA y enriquecimiento
PermisoEl 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
CabecerasAuthorization, X-Request-Id
ParámetrosevaluationId = evl-0000740
También la usanFT-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

HTTPCódigoCuándo
404NOT_FOUNDNo 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.

APIMétodo y rutaPara qué, aquíLa construye
API-06-001POST /api/v2/evaluationsEvaluar la propuesta y devolver la acción por negocioFT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…
API-06-007GET /api/v2/validation-thresholdsLeer la tabla de decisión por negocioFT-REF-03 · Servicio de matching
API-06-008POST /api/v2/validation-thresholds/plansPreparar un cambio de la tabla con su impactoFT-REF-03 · Servicio de matching
API-06-009POST /api/v2/validation-plans/{planId}/applyConfirmar el cambio de la tablaFT-REF-03 · Servicio de matching
API-06-010POST /api/v2/evaluations/{evaluationId}/reviewsRegistrar la autorización de un caso con permiso o descontinuadoFT-REF-03 · Servicio de matching
API-06-003GET /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-005POST /api/v2/products/plansPreparar la propuesta en Borrador con su identificaciónFT-PRD-01 · Modelo canónico de producto
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar el alta; MS-02 pide la evaluación sobre la propuestaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-06-005POST /api/v2/matchesAvisar desde la pantalla, antes de guardar, que el producto ya existe y qué acción le tocaFT-REF-03 · Servicio de matching
API-01-016GET /api/v2/rules?type=Leer vetos generales y por negocioFT-PLT-07 · Reglas de atributos
API-02-404GET /api/v2/offer-targets/{sku}Llevar al seller a ofertar sobre el SKU existenteFT-INT-05 · Multioferta y stock out

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.validation.result/EVALUATION_DONEGobierno de Datos autoriza o niega un caso con permiso o descontinuadoFT-FLU-02, FT-FLU-04, FT-FLU-05, FT-FLU-06, FT-PRD-10, FT-RAC-06, FT-REF-03

Consume

EventoPara quéQuién lo publica
catalog.validation.result/EVALUATION_DONEMS-02 lleva al seller a ofertar o le dice que no se puede, y cierra la tareaesta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
validation_resultsMS-06El resultado de cada evaluación: lista negra, coincidencias con su confianza y score.escribe
validation_thresholdsMS-06Los umbrales de coincidencia y de calificación por negocio.escribe
governance_rulesMS-01Reglas de captura y clasificación: marcas por plantilla, grupo de artículo a plantilla, alcance del proveedor y lista negra de Marketplace.lee
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-FLU-03·H1 · Ya existe en MarketplaceP1pasos 4, 5, 6, 7, 8, 9, 10, 11; API-06-001, API-06-005, API-06-003
FT-FLU-03·H2 · Ya existe en LiverpoolP1flujo «Ya existe en Liverpool»; API-06-003
FT-FLU-03·H3 · Depende de la marca y el casoP1flujo «Con permiso, descontinuado o Suburbia», «Configurar la tabla de decisión»; API-06-004, API-06-007
FT-FLU-03·H4 · Coincide con SuburbiaP2flujo «Con permiso, descontinuado o Suburbia», «Configurar la tabla de decisión»
FT-FLU-03·H5 · DescontinuadosP3flujo «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

IDQué falta
DUD-32Dueñ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

  1. [D] trazabilidad/features/FT-FLU-03-decision-por-negocio-ante-coincidencia.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.