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
| De | Qué |
|---|---|
| PE-1 · Propuesta en Borrador | La 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 vigente | Las reglas vigentes de Catálogo: marcas y grupos vetados, marcas vetadas por negocio y sellers autorizados por marca. |
| FT-REF-01 · Datos de referencia administrables | Los catálogos de marcas y de grupos de artículos a los que apuntan las reglas de la lista negra. |
Entrega
| A | Qué |
|---|---|
| PE-2 · Sin duplicado | La 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 matching | La marca ya revisada: en la misma evaluación sigue la búsqueda de coincidencias. |
| FT-FLU-03 · Decisión por negocio ante coincidencia | Los 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 masiva | La misma regla para cada renglón de la carga masiva, con el motivo para el reporte. |
| FT-FLU-02 · Alta individual de Marketplace | El bloqueo con su explicación, para cerrar el alta individual de Marketplace antes de capturar nada más. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T11 | Borrador → Cancelado | Vence 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
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 | Captura la marca y el EAN al empezar el alta | — |
| 2 | Entrada Única · Vendor Center | MS-06 Evaluación (por el BFF) | Revisa marca y EAN antes de guardar | API-06-005 |
| 3 | MS-06 Evaluación | Entrada Única · Vendor Center | Responde que la marca no está vetada | — |
| 4 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el plan de la propuesta con su identificación | API-02-005 |
| 5 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma el plan | API-02-057 |
| 6 | MS-02 Producto | MS-06 Evaluación | Pide evaluar la propuesta recién guardada | API-06-001 |
| 7 | MS-06 Evaluación | MS-01 Catálogo | Consulta la lista negra y la blanca vigentes | API-01-016 |
| 8 | MS-06 Evaluación | Base pim | Guarda la evaluación: marca no vetada, sin coincidencia | — |
| 9 | MS-06 Evaluación | MS-02 Producto | Responde CONTINUE con el evaluationId | — |
| 10 | MS-02 Producto | Base pim | Guarda la evaluación en la propuesta | — |
| 11 | MS-02 Producto | Eventos | Avisa la propuesta nueva, ya evaluada | catalog.product.changed/PRODUCT_CREATED |
3.1 Si la marca está vetada
3.2 Gobierno de Producto mantiene las listas
3.3 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Evaluar la propuesta: lista negra primero, luego coincidencias y decisión |
| Quién la llama | MS-02 Producto |
| Permiso | Sólo MS-02 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | validation_results |
| Publica | catalog.validation.result/EVALUATION_DONE |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | VALIDATION_ERROR | No trae marca, EAN, imagen ni URL: no hay con qué identificar el producto |
| 409 | IDEMPOTENCY_MISMATCH | Se repite la llave de idempotencia con otros datos de identificación |
| 503 | DEPENDENCY_UNAVAILABLE | No 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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-06-005 | POST /api/v2/matches | Revisar marca y EAN desde la pantalla antes de guardar (bloqueo inmediato) | FT-REF-03 · Servicio de matching |
| API-01-016 | GET /api/v2/rules?type= | Leer las reglas de lista negra y lista blanca (con caché) | FT-PLT-07 · Reglas de atributos |
| API-01-017 | POST /api/v2/rules/plans | Vetar o quitar el veto a una marca, una marca por negocio o un grupo; registrar sellers autorizados | FT-PLT-07 · Reglas de atributos |
| API-01-004 | POST /api/v2/catalog-plans/{planId}/apply | Confirmar el cambio de reglas en Catálogo | FT-PLT-01 · Fundamentos de gobierno de plantillas |
| API-01-053 | POST /internal/governance/bulk-load/{coleccion} | Cargar en la migración las listas Brands e ItemGroups del LOV 4714 | FT-PLT-01 · Fundamentos de gobierno de plantillas |
| API-02-005 | POST /api/v2/products/plans | Preparar la propuesta en Borrador con el evaluationId | FT-PRD-01 · Modelo canónico de producto |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar el alta de la propuesta | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-014 | POST /api/v2/products/{id}/variants/link/plans | Ligar una variante a un genérico, que pasa por la lista blanca | FT-PRD-01 · Modelo canónico de producto |
| API-06-002 | POST /api/v2/evaluations/batches | Evaluar cada renglón de la carga masiva con la misma lista negra | FT-FLU-05 · Reglas de negocio en la carga masiva |
| API-06-003 | GET /api/v2/evaluations/batches/{batchId} | Leer el motivo de bloqueo de cada renglón para el reporte | FT-FLU-05 · Reglas de negocio en la carga masiva |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/PRODUCT_CREATED | MS-02 guarda la propuesta con su evaluación | FT-ARQ-01 |
catalog.product.changed/STATUS_CHANGED | MS-02 cancela una propuesta que ya existía y quedó con marca vetada | 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.governance.changed/RULE_CHANGED | Gobierno de Producto cambia una regla de lista negra o lista blanca | FT-ACT-01, FT-CAT-03, FT-CAT-05, FT-PLT-07, FT-RAC-01 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.governance.changed/RULE_CHANGED | MS-06 renueva al momento su copia en caché de la lista negra y la lista blanca | 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 |
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 |
lov_values | MS-01 | Cada valor de lista: código, etiqueta, orden y equivalencias por sistema. | lee |
validation_thresholds | MS-06 | Los umbrales de coincidencia y de calificación por negocio. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-REF-02·H1 · Bloqueo inmediato | P1 | pasos 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 lista | P1 | flujo «Gobierno de Producto mantiene las listas»; API-01-017, API-01-004, API-01-053 |
| FT-REF-02·H3 · Carga masiva | P1 | API-06-002, API-06-003 |
| FT-REF-02·H4 · Suburbia | P2 | flujo «Gobierno de Producto mantiene las listas», «Si la marca está vetada»; API-01-017 |
| FT-REF-02·H5 · Lista blanca de sellers autorizados por marca | P2 | flujo «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
| ID | Qué falta |
|---|---|
| DUD-32 | Confirmar quién es el dueño de negocio de la lista negra (Gobierno de Producto o Marketplace). |
| PD-02 | La 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
- [D]
trazabilidad/features/FT-REF-02-blacklist-de-marketplace.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.