← Arquitectura por épica

FT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…

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-REF-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-REF-02.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-REF-02-blacklist-de-marketplace.md.

En 30 segundos

Marketplace no quiere que un seller dé de alta marcas que Liverpool vende directamente. Esta épica revisa la marca de cada propuesta de seller contra una lista negra en cuanto se conoce, en el alta individual, por API y en cada renglón de la carga masiva, y si está vetada termina el alta con una explicación. Gobierno de Producto mantiene la lista (marcas, marcas por negocio, grupos de artículos y sellers autorizados por marca) sin levantar un ticket.

  • Módulo dueño: MS-06 Evaluación. También participan: MS-01 Catálogo, MS-02 Producto, MS-03 Migración y convivencia.
  • Etapa 1 · ¿Ya existe?. Recibe «PE-1 · Propuesta en Borrador», «PE-C · Catálogo vigente» y entrega «PE-2 · Sin duplicado».
  • APIs: construye 1 y usa 10 que construyen otras épicas.
  • Eventos: publica 3 y consume 1.

1. Dónde encaja

Recibe

DeQué
PE-1 · Propuesta en BorradorLa propuesta de un seller recién nacida en Borrador (o los datos que la pantalla revisa justo antes de guardarla): marca y, si los tiene, EAN y modelo, con su negocio y su dueño; después, cada vez que cambian.
PE-C · Catálogo vigenteLas reglas vigentes de Catálogo: marcas y grupos vetados, marcas vetadas por negocio y sellers autorizados por marca.
FT-REF-01 · Datos de referencia administrablesLos catálogos de marcas y de grupos de artículos a los que apuntan las reglas de la lista negra.

Entrega

AQué
PE-2 · Sin duplicadoLa propuesta guardada en Borrador con su evaluación: la marca no está vetada y, con la búsqueda de coincidencias de la misma evaluación, no existe otro igual.
FT-REF-03 · Servicio de matchingLa marca ya revisada: en la misma evaluación sigue la búsqueda de coincidencias.
FT-FLU-03 · Decisión por negocio ante coincidenciaLos vetos por marca y negocio protegido (Liverpool o Suburbia), que la decisión por negocio aplica cuando el producto coincide con uno de ese negocio.
FT-FLU-05 · Reglas de negocio en la carga masivaLa misma regla para cada renglón de la carga masiva, con el motivo para el reporte.
FT-FLU-02 · Alta individual de MarketplaceEl bloqueo con su explicación, para cerrar el alta individual de Marketplace antes de capturar nada más.

Cambios de estado que hace

TransiciónDe → aCuándo
T11Borrador → CanceladoVence el plazo del rechazo (P-01) o se elimina.

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

Buscar productos que ya existen

Responde que la marca no está vetada
Responde «no se puede catalogar» con…

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

Evaluar una propuesta

Consultar reglas

Responde CONTINUE con el evaluationId
Responde BLOCK con la explicación par…
y 1 más

PRODUCT_CREATED
STATUS_CHANGED

Preparar un cambio de reglas
Confirmar un plan del catálogo

RULE_CHANGED

RULE_CHANGED

Carga de la migración

Devuelve el plan bloqueado con el mot…

Seller

Administración del catálogo

Entrada Única · Vendor Center

BFF del portal

MS-01 Catálogo

MS-02 Producto

MS-03 Migración y convivencia

★ MS-06 Evaluación

Base pim

Eventos

Contexto de FT-REF-02

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.

EventosBase·pimMS-01 CatálogoMS-02 ProductoMS-06 EvaluaciónEntrada Única · Vendor CenterEventosBase·pimMS-01 CatálogoMS-02 ProductoMS-06 EvaluaciónEntrada Única · Vendor CenterSellerBFF1. Captura la marca y el EAN al empezar el alta2. Revisa marca y EAN antes de guardarPOST /api/v2/matches3. Responde que la marca no está vetada4. Pide el plan de la propuesta con su identificaciónPOST /api/v2/products/plans5. Confirma el planPOST /api/v2/product-plans/{planId}/apply6. Pide evaluar la propuesta recién guardadaPOST /api/v2/evaluations7. Consulta la lista negra y la blanca vigentesGET /api/v2/rules?type=8. Guarda la evaluación: marca no vetada, sin coincidencia9. Responde CONTINUE con el evaluationId10. Guarda la evaluación en la propuesta11. Avisa la propuesta nueva, ya evaluadaPRODUCT_CREATEDSellerBFF
Flujo principal de FT-REF-02
Los pasos en texto
PasoDeAQué haceAPI o evento
1SellerEntrada Única · Vendor CenterCaptura la marca y el EAN al empezar el alta—
2Entrada Única · Vendor CenterMS-06 Evaluación (por el BFF)Revisa marca y EAN antes de guardarAPI-06-005
3MS-06 EvaluaciónEntrada Única · Vendor CenterResponde que la marca no está vetada—
4Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de la propuesta con su identificaciónAPI-02-005
5Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el planAPI-02-057
6MS-02 ProductoMS-06 EvaluaciónPide evaluar la propuesta recién guardadaAPI-06-001
7MS-06 EvaluaciónMS-01 CatálogoConsulta la lista negra y la blanca vigentesAPI-01-016
8MS-06 EvaluaciónBase pimGuarda la evaluación: marca no vetada, sin coincidencia—
9MS-06 EvaluaciónMS-02 ProductoResponde CONTINUE con el evaluationId—
10MS-02 ProductoBase pimGuarda la evaluación en la propuesta—
11MS-02 ProductoEventosAvisa la propuesta nueva, ya evaluadacatalog.product.changed/PRODUCT_CREATED

3.1 Si la marca está vetada

EventosBase·pimMS-02 ProductoMS-01 CatálogoMS-06 EvaluaciónEntrada Única · Vendor CenterEventosBase·pimMS-02 ProductoMS-01 CatálogoMS-06 EvaluaciónEntrada Única · Vendor CenterBFF1. Revisa marca y EAN antes de guardarPOST /api/v2/matches2. Encuentra la marca o el grupo en la lista negraGET /api/v2/rules?type=3. Responde «no se puede catalogar» con la explicación4. Al guardar o cambiar la marca, pide evaluarPOST /api/v2/evaluations5. Guarda la evaluación con la regla que aplicó6. Responde BLOCK con la explicación para el seller7. Descarta o cancela la propuesta y libera sus EAN8. Avisa la cancelaciónSTATUS_CHANGEDBFF
Si la marca está vetada

3.2 Gobierno de Producto mantiene las listas

MS-03 Migración y convivenciaMS-06 EvaluaciónEventosMS-01 CatálogoEntrada Única · Vendor CenterMS-03 Migración y convivenciaMS-06 EvaluaciónEventosMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Veta una marca, una marca por negocio o un grupo2. Pide el plan de la regla nuevaPOST /api/v2/rules/plans3. Confirma el planPOST /api/v2/catalog-plans/{planId}/apply4. Avisa que cambió una reglaRULE_CHANGED5. Entrega el cambio: renueva su caché al momentoRULE_CHANGED6. En la migración, carga Brands e ItemGroups del LOV 4714POST /internal/governance/bulk-load/{coleccion}Administración del catálogoBFF
Gobierno de Producto mantiene las listas

3.3 Variante de un seller no autorizado

MS-01 CatálogoMS-06 EvaluaciónMS-02 ProductoEntrada Única · Vendor CenterMS-01 CatálogoMS-06 EvaluaciónMS-02 ProductoEntrada Única · Vendor CenterSellerBFF1. Agrega una variante a un genérico de Mercaderías2. Pide el plan para ligar la variantePOST /api/v2/products/{id}/variants/link/plans3. Pide evaluar con propósito ADD_VARIANTPOST /api/v2/evaluations4. Ve que la marca sólo admite sellers autorizadosGET /api/v2/rules?type=5. Responde BLOCK: el seller no está en la lista blanca6. Devuelve el plan bloqueado con el motivoSellerBFF
Variante de un seller no autorizado

4. Si algo sale mal

  • La marca está vetada. La pantalla lo dice antes de guardar: «no se puede catalogar: son productos que comercializa Liverpool (1P o Mercaderías)». Si la propuesta llega a guardarse (por API, o porque la marca salió de la URL o cambió después), MS-02 la descarta en la misma operación o la cancela con el motivo, y sus EAN quedan libres. El intento queda en la evaluación.
  • MS-06 no puede leer la lista negra y no tiene copia vigente en caché. No deja pasar nada: responde 503; la propuesta no se da por identificada y MS-02 reintenta. El seller ve que se está revisando su marca.
  • Se veta una marca que ya tiene propuestas en curso. La caché de MS-06 se renueva con RULE_CHANGED y la siguiente evaluación ya la aplica. Las propuestas que pasaron antes se vuelven a evaluar al enviarse (Validación automática) y ahí se cancelan con explicación; lo ya publicado no se toca.
  • El seller cambia la marca después de pasar la revisión. MS-02 vuelve a pedir la evaluación; si la marca nueva está vetada, la propuesta se cancela con el motivo. No hay forma de saltarse la revisión cambiando datos.

5. APIs

Las que construye esta épica (1)

POST /api/v2/evaluations · Evaluar una propuesta
CampoValor
APIAPI-06-001 · MS-06 Evaluación
Para quéDice si una propuesta se puede catalogar: revisa la lista negra, busca si el producto ya existe en Marketplace, Liverpool o Suburbia y decide qué hacer según el negocio. Responde en línea: en menos de 2 segundos con marca, EAN y características, y hasta 15 segundos si hay que ver una imagen o leer una URL. Si la parte de IA no termina a tiempo, responde status RUNNING con el evaluationId y avisa con EVALUATION_DONE al terminar. La evaluación vale 24 horas para crear la propuesta. Sólo la llama MS-02 (en la identificación previa al alta, al cambiar los datos que identifican y al enviar): aunque su ruta es /api/v2, el BFF y el gateway no la publican.
En esta épicaEvaluar la propuesta: lista negra primero, luego coincidencias y decisión
Quién la llamaMS-02 Producto
PermisoSólo MS-02 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe envalidation_results
Publicacatalog.validation.result/EVALUATION_DONE
También la usanFT-ARQ-01, FT-FLU-02, FT-FLU-03, FT-INT-05, FT-PRD-03, FT-PRD-10, FT-RAC-01, FT-REF-03, FT-REF-04

Request

{
  "subject": {
    "productId": "PRD-0004812",
    "version": 1,
    "business": "MKP",
    "origin": "PORTAL",
    "owner": {
      "type": "SELLER",
      "id": "SELLER-0001"
    }
  },
  "purpose": "NEW_PROPOSAL",
  "mode": "INDIVIDUAL",
  "identity": {
    "brandCode": "MARCA01",
    "model": "PF-100",
    "ean": "7501234567893",
    "productType": "PERFUME",
    "itemGroup": null,
    "attributes": {
      "CONTENIDO_ML": 100,
      "GENERO": "MUJER"
    }
  },
  "imageAssetId": null,
  "pdpUrl": null
}

Response · 200

{
  "success": true,
  "data": {
    "evaluationId": "evl-0000731",
    "kind": "IDENTIFICATION",
    "status": "DONE",
    "evaluatedAt": "2026-10-18T16:02:11Z",
    "validUntil": "2026-10-19T16:02:11Z",
    "blacklist": {
      "blocked": false,
      "rulesChecked": [
        "MKP_BANNED_BRAND",
        "MKP_BANNED_ITEM_GROUP",
        "MKP_BRAND_ALLOWED_SELLERS"
      ],
      "rulesVersion": 12
    },
    "matches": [
      {
        "productId": "PRD-0001190",
        "business": "MER",
        "sku": "1000001190",
        "productName": "Perfume floral para mujer 100 ml",
        "matchType": "EAN",
        "confidence": 1.0,
        "fieldsMatched": [
          "EAN",
          "MARCA"
        ]
      }
    ],
    "decision": {
      "action": "STOCK_OUT",
      "reasonCode": "EXISTS_IN_MER",
      "targetSku": "1000001190",
      "targetBusiness": "MER",
      "message": "Este producto ya lo vende Liverpool. Puedes ofertar sobre su SKU sin cambiar su contenido."
    },
    "nearCandidates": [],
    "thresholdsVersion": 4
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERRORNo trae marca, EAN, imagen ni URL: no hay con qué identificar el producto
409IDEMPOTENCY_MISMATCHSe repite la llave de idempotencia con otros datos de identificación
503DEPENDENCY_UNAVAILABLENo se pudo leer la lista negra y no hay copia vigente en caché: no deja pasar nada y MS-02 reintenta

Las que usa y construye otra épica (10)

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-005POST /api/v2/matchesRevisar marca y EAN desde la pantalla antes de guardar (bloqueo inmediato)FT-REF-03 · Servicio de matching
API-01-016GET /api/v2/rules?type=Leer las reglas de lista negra y lista blanca (con caché)FT-PLT-07 · Reglas de atributos
API-01-017POST /api/v2/rules/plansVetar o quitar el veto a una marca, una marca por negocio o un grupo; registrar sellers autorizadosFT-PLT-07 · Reglas de atributos
API-01-004POST /api/v2/catalog-plans/{planId}/applyConfirmar el cambio de reglas en CatálogoFT-PLT-01 · Fundamentos de gobierno de plantillas
API-01-053POST /internal/governance/bulk-load/{coleccion}Cargar en la migración las listas Brands e ItemGroups del LOV 4714FT-PLT-01 · Fundamentos de gobierno de plantillas
API-02-005POST /api/v2/products/plansPreparar la propuesta en Borrador con el evaluationIdFT-PRD-01 · Modelo canónico de producto
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar el alta de la propuestaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-014POST /api/v2/products/{id}/variants/link/plansLigar una variante a un genérico, que pasa por la lista blancaFT-PRD-01 · Modelo canónico de producto
API-06-002POST /api/v2/evaluations/batchesEvaluar cada renglón de la carga masiva con la misma lista negraFT-FLU-05 · Reglas de negocio en la carga masiva
API-06-003GET /api/v2/evaluations/batches/{batchId}Leer el motivo de bloqueo de cada renglón para el reporteFT-FLU-05 · Reglas de negocio en la carga masiva

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/PRODUCT_CREATEDMS-02 guarda la propuesta con su evaluaciónFT-ARQ-01
catalog.product.changed/STATUS_CHANGEDMS-02 cancela una propuesta que ya existía y quedó con marca vetadaFT-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.governance.changed/RULE_CHANGEDGobierno de Producto cambia una regla de lista negra o lista blancaFT-ACT-01, FT-CAT-03, FT-CAT-05, FT-PLT-07, FT-RAC-01

Consume

EventoPara quéQuién lo publica
catalog.governance.changed/RULE_CHANGEDMS-06 renueva al momento su copia en caché de la lista negra y la lista blancaesta 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
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
lov_valuesMS-01Cada valor de lista: código, etiqueta, orden y equivalencias por sistema.lee
validation_thresholdsMS-06Los umbrales de coincidencia y de calificación por negocio.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-REF-02·H1 · Bloqueo inmediatoP1pasos 2, 3, 6, 7, 8, 9; flujo «Si la marca está vetada»; API-06-001, API-06-005, API-01-016
FT-REF-02·H2 · Mantener la listaP1flujo «Gobierno de Producto mantiene las listas»; API-01-017, API-01-004, API-01-053
FT-REF-02·H3 · Carga masivaP1API-06-002, API-06-003
FT-REF-02·H4 · SuburbiaP2flujo «Gobierno de Producto mantiene las listas», «Si la marca está vetada»; API-01-017
FT-REF-02·H5 · Lista blanca de sellers autorizados por marcaP2flujo «Variante de un seller no autorizado», «Gobierno de Producto mantiene las listas»; API-02-014, API-06-001

9. Decisiones de esta épica

Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.

  • D-REF-02-1. La lista negra vive en governance_rules de Catálogo (MS-01), que la administra; MS-06 sólo la evalúa. A los nueve tipos de regla se suman dos: MKP_BANNED_BRAND (marca, con negocio protegido opcional) y MKP_BRAND_ALLOWED_SELLERS (sellers autorizados por marca); los grupos siguen en MKP_BANNED_ITEM_GROUP. MS-06 la guarda en caché y la renueva con RULE_CHANGED. Por qué: Un dato, un dueño: Catálogo ya es dueño de las reglas de captura y clasificación. El modelo del 2-oct sólo tenía grupos vetados y los talleres piden la marca como llave principal. Se apoya en DEC-PLT-14, RF-MAT-02, DUD-32, ADR-12.
  • D-REF-02-2. Cómo bloquea: una marca vetada sin negocio o un grupo vetado bloquean siempre, en cuanto se conoce la marca y aunque no haya coincidencia; una marca vetada para un negocio (Liverpool o Suburbia) bloquea sólo cuando el producto coincide con uno de ese negocio, y eso lo aplica FT-FLU-03. Lo que migra del LOV 4714 entra como veto general, que es como funciona hoy. Por qué: Concilia las dos lecturas del taller (general por marca y marca más negocio) sin perder la paridad, y abre la lista de Suburbia que hoy no existe. Se apoya en PEN-18, RN-MAT-04, RN-MAT-06, DEC-32.
  • D-REF-02-3. La lista negra sólo aplica a propuestas de sellers de Marketplace; a las de Mercaderías y Suburbia no. Por qué: Son las marcas que Liverpool vende directamente: aplicada a sus propios proveedores bloquearía su surtido. Se apoya en RF-MAT-01, RN-MAT-05.
  • D-REF-02-4. Hay dos momentos y una sola regla. La pantalla revisa marca y EAN antes de guardar (API-06-005) para avisar de inmediato; la que decide es la evaluación que pide MS-02 (API-06-001) al guardar la propuesta, cuando cambian la marca, el EAN, el grupo de artículos, el negocio o el seller, al ligar una variante y otra vez en la Validación automática al enviar. Si dice BLOCK, MS-02 descarta la propuesta en la misma operación (o la cancela si ya existía) y libera sus EAN. Las reglas y la respuesta son las mismas para la pantalla, la carga masiva y la API. Por qué: El aviso temprano evita capturar en vano y la evaluación en el servidor evita que alguien le dé la vuelta cambiando la marca después o saltándose la pantalla. Se apoya en RN-MAT-07, DEC-29, DEC-56, RF-MAT-20.
  • D-REF-02-5. Si MS-06 no puede leer la lista negra y no tiene copia vigente, no deja pasar: responde 503 y MS-02 reintenta. Cada intento queda en la evaluación (validation_results) aunque no se cree nada, con la regla que aplicó. Por qué: Dejar pasar por una falla técnica publicaría marcas prohibidas; guardar los intentos permite medir la evasión, que hoy no se ve. Se apoya en RF-MAT-01, RSG-12.

Qué falta decidir

IDQué falta
DUD-32Confirmar quién es el dueño de negocio de la lista negra (Gobierno de Producto o Marketplace).
PD-02La fase en que entra el alta TO-BE de sellers; la regla se construye igual para el alta de hoy sobre el PIM nuevo.

También siguen abiertos: PEN-18, Ratificar con Marketplace y Gobierno de Producto el modelo de llave (aquí conviven veto general y veto por negocio) y si los grupos vetados se conservan; PEN-20, Confirmar con Marketplace qué pasa en la rama Liverpool con marca vetada y el caso «con permiso».

Fuentes

  1. [D] trazabilidad/features/FT-REF-02-blacklist-de-marketplace.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.