← Arquitectura por épica

FT-REF-03 · Servicio de matching

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

En 30 segundos

Antes de catalogar algo hay que saber si ya existe y en qué negocio, para no tener dos fichas del mismo producto. Esta épica busca el producto en Marketplace, Liverpool y Suburbia por EAN y por características (marca, modelo, tipo, color…), le pone una confianza a cada coincidencia y responde lo mismo al alta individual, a la carga masiva y a la API. Si la confianza queda en la zona gris, decide una persona de Gobierno de Datos.

  • 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 6 y usa 8 que construyen otras épicas.
  • Eventos: publica 3 y consume 1.

1. Dónde encaja

Recibe

DeQué
PE-1 · Propuesta en BorradorLa propuesta recién nacida en Borrador con lo que la identifica (EAN, marca, modelo y características), su negocio y su dueño; antes de guardarla, la pantalla pregunta por los mismos datos.
FT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…La marca ya revisada contra la lista negra en la misma evaluación.
FT-PRD-01 · Modelo canónico de productoEl modelo de producto y el registro de EAN por negocio contra los que se busca, servidos por MS-02.
FT-REF-01 · Datos de referencia administrablesLos catálogos de marcas, grupos y proveedores que usa la búsqueda para normalizar marca y modelo.

Entrega

AQué
PE-2 · Sin duplicadoLa propuesta en Borrador con su evaluación guardada: no existe otro igual en ningún negocio (o una persona confirmó que es distinto).
FT-FLU-03 · Decisión por negocio ante coincidenciaLas coincidencias con su negocio, SKU, dueño, estado y confianza, para decidir qué toca según el negocio.
FT-FLU-02 · Alta individual de MarketplaceLas coincidencias por EAN, marca y modelo o características, con su confianza, para el alta individual de Marketplace.
FT-IA-02 · Sugerencia de plantilla por IA a partir del producto…Los candidatos cercanos que no llegaron a coincidencia, como pista del producto homólogo.
FT-REF-04 · Matching por imagen y por URL del sellerLa lógica de coincidencia y su respuesta, en la que entran lo extraído de la página y los candidatos visuales.
FT-FLU-05 · Reglas de negocio en la carga masivaLa misma búsqueda por renglón, sólo con EAN y marca, para 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

GET /bff/v1/match-reviews/{taskId}

Buscar productos que ya existen
Resolver una coincidencia dudosa
y 3 más

Responde «no existe»: puede seguir
Responde el producto y la acción que…

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

Evaluar una propuesta

Consultar reglas

POST /internal/product/match-candidat…
Responde CONTINUE con los candidatos…
y 1 más

PRODUCT_CREATED
TASK_CHANGED

EVALUATION_DONE

EVALUATION_DONE

Seller

Gobierno de Datos

Administración del catálogo

Entrada Única · Vendor Center

BFF del portal

MS-01 Catálogo

MS-02 Producto

★ MS-06 Evaluación

Base pim

Eventos

Contexto de FT-REF-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.

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 EAN, marca y modelo de su producto2. Pregunta si ya existe antes de guardarPOST /api/v2/matches3. Responde «no existe»: puede seguir4. 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 con EAN y característicasPOST /api/v2/evaluations7. Revisa primero la lista negraGET /api/v2/rules?type=8. Pide candidatos en los tres negociosPOST /internal/product/match-candidates9. Calcula la confianza con pesos y bandas, la guarda10. Responde CONTINUE con los candidatos cercanos11. Guarda la evaluación en la propuesta12. Avisa la propuesta nueva, ya sin duplicadoPRODUCT_CREATEDSellerBFF
Flujo principal de FT-REF-03
Los pasos en texto
PasoDeAQué haceAPI o evento
1SellerEntrada Única · Vendor CenterCaptura EAN, marca y modelo de su producto—
2Entrada Única · Vendor CenterMS-06 Evaluación (por el BFF)Pregunta si ya existe antes de guardarAPI-06-005
3MS-06 EvaluaciónEntrada Única · Vendor CenterResponde «no existe»: puede seguir—
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 con EAN y característicasAPI-06-001
7MS-06 EvaluaciónMS-01 CatálogoRevisa primero la lista negraAPI-01-016
8MS-06 EvaluaciónMS-02 ProductoPide candidatos en los tres negociosAPI-02-123
9MS-06 EvaluaciónBase pimCalcula la confianza con pesos y bandas; la guarda—
10MS-06 EvaluaciónMS-02 ProductoResponde CONTINUE con los candidatos cercanos—
11MS-02 ProductoBase pimGuarda la evaluación en la propuesta—
12MS-02 ProductoEventosAvisa la propuesta nueva, ya sin duplicadocatalog.product.changed/PRODUCT_CREATED

3.1 Coincidencia dudosa: decide una persona

Entrada Única · Vendor CenterEventosBase·pimMS-02 ProductoMS-06 EvaluaciónEntrada Única · Vendor CenterEventosBase·pimMS-02 ProductoMS-06 EvaluaciónGobierno de DatosBFF1. Responde REVIEW: confianza entre las dos bandas2. Guarda la propuesta y abre tarea de Gobierno de Datos3. Avisa la tarea nuevaTASK_CHANGED4. Abre la revisión de la coincidencia5. Pide propuesta, candidatos y fotos lado a ladoGET /bff/v1/match-reviews/{taskId}6. Decide si es el mismo producto7. Registra el veredictoPOST /api/v2/evaluations/{evaluationId}/reviews8. Avisa la decisión nuevaEVALUATION_DONE9. Entrega la decisión: sigue o lleva a ofertarEVALUATION_DONEGobierno de DatosBFF
Coincidencia dudosa: decide una persona

3.2 Buscar para ofertar

MS-01 CatálogoMS-02 ProductoMS-06 EvaluaciónEntrada Única · Vendor CenterMS-01 CatálogoMS-02 ProductoMS-06 EvaluaciónEntrada Única · Vendor CenterSellerBFF1. Busca un producto por EAN o SKU para ofertar2. Pide buscarlo por identificadorPOST /api/v2/matches3. Pide el producto con ese EAN o SKUPOST /internal/product/match-candidates4. Revisa la lista negra para su negocioGET /api/v2/rules?type=5. Responde el producto y la acción que le toca6. Pide sobre qué SKU puede ofertarGET /api/v2/offer-targets/{sku}SellerBFF
Buscar para ofertar

3.3 Ajustar pesos, bandas y acciones

Base·pimMS-06 EvaluaciónEntrada Única · Vendor CenterBase·pimMS-06 EvaluaciónEntrada Única · Vendor CenterAdministración del catálogoBFF1. Revisa los umbrales de coincidencia de Marketplace2. Lee pesos, bandas y tabla de decisiónGET /api/v2/validation-thresholds3. Pide el plan con el cambio y su impactoPOST /api/v2/validation-thresholds/plans4. Confirma el planPOST /api/v2/validation-plans/{planId}/apply5. Guarda la versión nueva de umbralesAdministración del catálogoBFF
Ajustar pesos, bandas y acciones

4. Si algo sale mal

  • La confianza cae entre las dos bandas. La propuesta se guarda y se abre una tarea de Gobierno de Datos. El seller ve «encontramos un producto muy parecido; lo estamos revisando», puede seguir capturando pero no enviar hasta que se resuelva; si era el mismo, se le lleva a ofertar con un aviso.
  • El EAN coincide pero la marca no. No pasa como producto nuevo: la confianza se calcula por pesos y cae en revisión, porque puede ser un EAN inventado o un error de captura.
  • MS-02 no responde con los candidatos. MS-06 responde 503: la propuesta queda en Borrador sin darse por identificada, no puede elegir plantilla ni enviarse, y MS-02 reintenta; el seller ve que se está revisando su producto.
  • Un cambio de bandas manda demasiados casos a revisión. El plan muestra antes cuántas decisiones cambiarían con las evaluaciones de 30 días; si se aplicó y no sirvió, otro plan regresa la versión anterior. Cada evaluación guarda con qué versión se hizo.

5. APIs

Las que construye esta épica (6)

POST /api/v2/matches · Buscar productos que ya existen
CampoValor
APIAPI-06-005 · MS-06 Evaluación
Para quéBusca sin guardar nada: por un identificador (EAN o SKU) para ofertar sin recapturar, o por parecido (marca y modelo, características o una imagen de consulta) para ver referencias. Cada resultado trae su confianza y la acción que le tocaría a quien pregunta según la lista negra y su negocio. El gateway la usa para el «¿ya existe?» de terceros (API-GW-007).
En esta épicaPreguntar desde la pantalla si ya existe, antes de guardar, y buscar por EAN o SKU para ofertar
Quién la llamaEntrada Única · Vendor Center (por el BFF), MS-02 Producto, Gateway de terceros /partner/v1
PermisoSeller o proveedor con alta de propuestas (ENT-E), por pantalla o por API; sólo ve datos públicos del producto, nunca quién más lo oferta
CabecerasAuthorization, X-Request-Id
También la usanFT-ACT-03, FT-ARQ-01, FT-FLU-02, FT-FLU-03, FT-IA-01, FT-PRD-09, FT-REF-02, FT-REF-04

Request

{
  "mode": "LOOKUP",
  "business": "MKP",
  "identifier": {
    "type": "EAN",
    "value": "7501234567893"
  },
  "similar": null,
  "max": 10
}

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "productId": "PRD-0004812",
        "business": "MKP",
        "sku": "1000004812",
        "productName": "Batería externa de 20,000 mAh con carga rápida USB-C",
        "brandCode": "MARCA01",
        "mainImageAssetId": "ast-0009120",
        "confidence": 1.0,
        "allowedAction": "MULTI_OFFER",
        "message": "Vas a ofertar sobre un producto que ya existe: sólo capturas precio e inventario."
      }
    ],
    "page": 1,
    "size": 10,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERRORLOOKUP sin identificador, EAN con dígito verificador inválido o SIMILAR sin ningún dato
503DEPENDENCY_UNAVAILABLELa búsqueda por imagen no respondió; se devuelve lo encontrado por datos y se marca partial
GET /api/v2/validation-thresholds · Umbrales y reglas de evaluación vigentes
CampoValor
APIAPI-06-007 · MS-06 Evaluación
Para quéLee, por negocio, lo que gobierna las evaluaciones: los pesos de la coincidencia y sus dos bandas, la tabla de decisión por negocio, los pesos de la calificación, el mínimo del visto bueno de Marketplace y los rangos de publicación por calificación que usa FT-RAC-03.
En esta épicaLeer pesos, bandas y tabla de decisión por negocio
Quién la llamaEntrada Única · Vendor Center (por el BFF), MS-02 Producto
PermisoAdministración del catálogo y Gobierno de Datos; MS-02 como servicio (con caché de 5 minutos)
CabecerasAuthorization, X-Request-Id
Parámetrosbusiness = MKP
También la usanFT-FLU-03, FT-RAC-02, FT-RAC-03

Request

null

Response · 200

{
  "success": true,
  "data": {
    "business": "MKP",
    "version": 4,
    "updatedAt": "2026-10-15T18:20:00Z",
    "match": {
      "directRule": "EAN_Y_MARCA",
      "weights": {
        "MARCA": 25,
        "MODELO": 25,
        "TIPO_PRODUCTO": 15,
        "COLOR": 10,
        "CATEGORIA": 10,
        "GENERO": 10,
        "CONTENIDO": 5
      },
      "bands": {
        "low": 0.7,
        "high": 0.9
      },
      "bulkFields": [
        "EAN",
        "MARCA"
      ]
    },
    "decisionTable": [
      {
        "rule": "MARCA_O_GRUPO_VETADO",
        "action": "BLOCK",
        "message": "No se puede catalogar: son productos que comercializa Liverpool (1P o Mercaderías)."
      },
      {
        "rule": "MARCA_SOLO_SELLERS_AUTORIZADOS",
        "action": "BLOCK",
        "message": "Esta marca sólo la catalogan los sellers autorizados."
      },
      {
        "matchBusiness": "MKP",
        "sameOwner": false,
        "action": "MULTI_OFFER",
        "message": "Crear multioferta porque existe en Marketplace"
      },
      {
        "matchBusiness": "MKP",
        "sameOwner": true,
        "action": "OWN_DUPLICATE",
        "message": "Ya tienes este producto: modifícalo en lugar de darlo de alta otra vez"
      },
      {
        "matchBusiness": "MER",
        "brandRule": "PERMITIDA",
        "action": "STOCK_OUT",
        "message": "Crear multioferta porque está en Liverpool"
      },
      {
        "matchBusiness": "MER",
        "brandRule": "CON_PERMISO",
        "action": "REVIEW",
        "message": "Necesita autorización antes de ofertar sobre este producto"
      },
      {
        "matchBusiness": "MER",
        "brandRule": "VETADA_PARA_MER",
        "action": "BLOCK",
        "message": "No se puede catalogar: es producto de Mercaderías"
      },
      {
        "matchBusiness": "MER",
        "targetStatus": "DESCONTINUADO",
        "action": "REVIEW",
        "message": "Producto descontinuado en Liverpool: una persona decide si se puede ofertar"
      },
      {
        "matchBusiness": "SUB",
        "brandRule": "CUALQUIERA",
        "action": "BLOCK",
        "message": "No se puede catalogar: es producto de Suburbia y Marketplace sólo vende en Liverpool"
      },
      {
        "match": "ENTRE_BANDAS",
        "action": "REVIEW",
        "message": "Encontramos un producto muy parecido; una persona lo revisa antes de seguir"
      },
      {
        "match": "NINGUNO",
        "action": "CONTINUE",
        "message": "Producto nuevo"
      }
    ],
    "score": {
      "weights": {
        "MANDATORY": "CHECK",
        "RECOMMENDED": 2,
        "OPTIONAL": 1
      },
      "vistoBuenoMinimum": 0,
      "publicationBands": [
        {
          "from": 95,
          "band": "PUBLICAR"
        },
        {
          "from": 85,
          "to": 95,
          "band": "REVISION_PRIORITARIA"
        },
        {
          "to": 85,
          "band": "RETENER"
        }
      ]
    }
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl negocio no existe
POST /api/v2/validation-thresholds/plans · Preparar un cambio de umbrales o de la tabla de decisión
CampoValor
APIAPI-06-008 · MS-06 Evaluación
Para quéPrepara un cambio a los pesos, bandas, tabla de decisión o mínimos de un negocio y dice, volviendo a correr las evaluaciones de los últimos 30 días, cuántas decisiones cambiarían y hacia qué acción, sin cambiar nada todavía.
En esta épicaPreparar un cambio de umbrales con su impacto
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoAdministración del catálogo (Gobierno de Producto); la tabla de decisión de Suburbia, con visto bueno del área comercial de Suburbia
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
También la usanFT-FLU-03, FT-RAC-02, FT-RAC-03

Request

{
  "business": "MKP",
  "version": 4,
  "changes": {
    "match": {
      "bands": {
        "low": 0.75
      }
    },
    "decisionTable": [
      {
        "matchBusiness": "SUB",
        "brandRule": "CUALQUIERA",
        "action": "REVIEW"
      }
    ]
  },
  "reason": "Bajar falsos positivos de la revisión de coincidencias"
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-6e21b0",
    "expiresAt": "2026-10-18T16:40:00Z",
    "impact": {
      "window": "últimos 30 días",
      "replayedEvaluations": 5000,
      "decisionsChanged": 214,
      "byChange": [
        {
          "from": "REVIEW",
          "to": "CONTINUE",
          "count": 187
        },
        {
          "from": "BLOCK",
          "to": "REVIEW",
          "count": 27
        }
      ]
    },
    "applyUrl": "/api/v2/validation-plans/pln-6e21b0/apply"
  }
}

Errores

HTTPCódigoCuándo
409VERSION_CONFLICTLos umbrales cambiaron desde que se leyeron
422VALIDATION_ERRORLa banda baja queda arriba de la alta, un peso es negativo o una acción no existe
403AUTHORIZATION_ERRORQuien llama no administra umbrales de ese negocio
POST /api/v2/validation-plans/{planId}/apply · Confirmar un plan de Evaluación
CampoValor
APIAPI-06-009 · MS-06 Evaluación
Para quéConfirma un plan de MS-06: guarda la nueva versión de umbrales y la evaluación siguiente ya la usa. Lo ya decidido no se recalcula; cada evaluación guarda con qué versión se hizo.
En esta épicaConfirmar el cambio de umbrales
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoEl mismo que pidió el plan
CabecerasAuthorization, X-Request-Id, Idempotency-Key
ParámetrosplanId = pln-6e21b0
Escribe envalidation_thresholds
También la usanFT-FLU-03, FT-RAC-02, FT-RAC-03

Request

{}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-6e21b0",
    "status": "APPLIED",
    "business": "MKP",
    "version": 5,
    "appliedAt": "2026-10-18T16:12:30Z"
  }
}

Errores

HTTPCódigoCuándo
409PLAN_EXPIREDPasaron más de 10 minutos desde la vista previa
409VERSION_CONFLICTOtra persona cambió los umbrales después de la vista previa
409IDEMPOTENCY_MISMATCHSe repite la llave de idempotencia con otro plan
POST /api/v2/evaluations/{evaluationId}/reviews · Resolver una coincidencia dudosa
CampoValor
APIAPI-06-010 · MS-06 Evaluación
Para quéUna persona de Gobierno de Datos dice si la propuesta es el mismo producto que el candidato (o autoriza un caso «con permiso»). MS-06 guarda su veredicto en la evaluación, recalcula la decisión y avisa con EVALUATION_DONE para que MS-02 siga o lleve al seller a ofertar.
En esta épicaRegistrar el veredicto de Gobierno de Datos sobre una coincidencia dudosa
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoGobierno de Datos con la tarea de revisión asignada; los casos «con permiso», el área que defina PEN-20 (arranca Gobierno de Datos)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
ParámetrosevaluationId = evl-0000740
Escribe envalidation_results
Publicacatalog.validation.result/EVALUATION_DONE
También la usanFT-FLU-03

Request

{
  "verdict": "SAME_PRODUCT",
  "candidateProductId": "PRD-0002031",
  "taskId": "tsk-40211",
  "comment": "Mismo cargador: el modelo coincide y el EAN del seller es interno"
}

Response · 200

{
  "success": true,
  "data": {
    "evaluationId": "evl-0000740",
    "status": "DONE",
    "review": {
      "verdict": "SAME_PRODUCT",
      "candidateProductId": "PRD-0002031",
      "reviewedAt": "2026-10-19T15:10:00Z",
      "reviewer": {
        "area": "GOBIERNO-DATOS",
        "role": "GOBIERNO_DE_DATOS"
      }
    },
    "decision": {
      "action": "MULTI_OFFER",
      "reasonCode": "EXISTS_IN_MKP_REVIEWED",
      "targetSku": "1000002031",
      "targetBusiness": "MKP",
      "message": "Este producto ya existe en Marketplace: puedes ofertar sobre su SKU."
    }
  }
}

Errores

HTTPCódigoCuándo
409NOT_EDITABLE_IN_STATUSLa evaluación no está en revisión o ya se resolvió
403AUTHORIZATION_ERRORQuien llama no tiene la tarea de revisión ni el rol de Gobierno de Datos
422VALIDATION_ERRORSAME_PRODUCT sin candidato, o un candidato que no estaba en la evaluación
GET /bff/v1/match-reviews/{taskId} · Pantalla de revisión de una coincidencia dudosa: junta la ta
CampoValor
APIAPI-BFF-303 · BFF del portal
Para quéPantalla de revisión de una coincidencia dudosa: junta la tarea y la propuesta (MS-02), la evaluación con sus candidatos y la confianza por campo (MS-06) y la foto principal de la propuesta y de cada candidato (MS-11), para comparar lado a lado.
En esta épicaPantalla de revisión de una coincidencia dudosa (composición del BFF)

Request

null

Response · 200

{
  "success": true,
  "data": {
    "taskId": "tsk-40211",
    "taskType": "GOBIERNO_DE_DATOS",
    "queue": "COINCIDENCIAS",
    "proposal": {
      "productId": "PRD-0004815",
      "business": "MKP",
      "seller": "SELLER-0002",
      "title": "Cargador rápido 25 W",
      "brandCode": "MARCA03",
      "model": "CG-25W",
      "ean": "7509876500018",
      "mainImageAssetId": "ast-0004502"
    },
    "evaluation": {
      "evaluationId": "evl-0000740",
      "bands": {
        "low": 0.7,
        "high": 0.9
      },
      "decision": "REVIEW"
    },
    "candidates": [
      {
        "productId": "PRD-0002031",
        "business": "MKP",
        "sku": "1000002031",
        "productName": "Cargador de pared 25 W USB-C",
        "confidence": 0.78,
        "fields": [
          {
            "field": "MARCA",
            "matched": true
          },
          {
            "field": "MODELO",
            "matched": true
          },
          {
            "field": "EAN",
            "matched": false
          }
        ],
        "mainImageAssetId": "ast-0002210"
      }
    ],
    "actions": [
      "SAME_PRODUCT",
      "DIFFERENT_PRODUCT"
    ]
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene el permiso o no es el módulo autorizado
404NOT_FOUNDNo existe lo que se pide o no es visible para quien llama

Las que usa y construye otra épica (8)

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, coincidencias y decisiónFT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…
API-06-002POST /api/v2/evaluations/batchesLa misma búsqueda por renglón en la carga masivaFT-FLU-05 · Reglas de negocio en la carga masiva
API-06-003GET /api/v2/evaluations/batches/{batchId}Leer el resultado por renglón de la carga masivaFT-FLU-05 · Reglas de negocio en la carga masiva
API-01-016GET /api/v2/rules?type=Leer la lista negra antes de buscar coincidenciasFT-PLT-07 · Reglas de atributos
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 de la propuestaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-404GET /api/v2/offer-targets/{sku}Llevar al seller a ofertar sobre el SKU encontradoFT-INT-05 · Multioferta y stock out
API-02-123POST /internal/product/match-candidatesPedir a MS-02 candidatos por EAN y características sin leer su baseFT-FLU-05 · Reglas de negocio en la carga masiva

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.validation.result/EVALUATION_DONEGobierno de Datos resuelve una coincidencia dudosa y MS-06 recalcula la decisiónFT-FLU-02, FT-FLU-03, FT-FLU-04, FT-FLU-05, FT-FLU-06, FT-PRD-10, FT-RAC-06
catalog.product.changed/PRODUCT_CREATEDMS-02 guarda la propuesta con su evaluaciónFT-ARQ-01
catalog.product.changed/TASK_CHANGEDMS-02 abre o cierra la tarea de revisión de coincidenciaFT-ACT-05, FT-ACT-06, FT-ARQ-02, FT-CAT-06, FT-FLU-01, FT-IA-06, FT-PRD-02, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-05, FT-RAC-06

Consume

EventoPara quéQuién lo publica
catalog.validation.result/EVALUATION_DONEMS-02 aplica la decisión revisada: sigue con la propuesta o la lleva a la oferta (FT-INT-05) 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
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.lee
identifier_registryMS-02Unicidad de SKU y de EAN por negocio.lee
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

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-REF-03·H1 · ¿Ya existe y dónde?P1pasos 2, 3, 6, 8, 9, 10; API-06-001, API-06-005, API-02-123
FT-REF-03·H2 · Misma respuesta en la masivaP1API-06-002, API-06-003
FT-REF-03·H3 · Confianza configurableP1flujo «Ajustar pesos, bandas y acciones», «Coincidencia dudosa: decide una persona»; API-06-007, API-06-008, API-06-009, API-06-010
FT-REF-03·H4 · Buscar para ofertarP2flujo «Buscar para ofertar»; API-06-005, API-02-404
FT-REF-03·H5 · MercaderíasP3API-06-001. Fuera: La lógica propia de Mercaderías espera su sesión (DUD-32); mientras, aplica D-REF-03-6.

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-03-1. MS-06 no lee products ni identifier_registry: pide candidatos a MS-02 por una ruta interna (PEDIDA-FT-REF-03-1) que busca por índice (EAN exacto; marca y modelo normalizados) y devuelve a lo más 10 por consulta. MS-06 calcula la confianza con sus pesos. Por qué: Un dato, un dueño: el producto es de MS-02. Buscar por índice y con tope evita recorrer todo el catálogo en cada alta. Se apoya en ADR-12, RF-MAT-08, DEC-33.
  • D-REF-03-2. Cómo se mide: EAN igual con la misma marca es coincidencia directa (confianza 1.0); sin EAN igual, la confianza es la suma de los pesos de las características que coinciden entre las que trae la propuesta. EAN igual con marca distinta nunca pasa como nuevo. Bandas por negocio que arrancan en 0.70 y 0.90: arriba de la alta es el mismo producto (decide FT-FLU-03), entre las dos revisa una persona y abajo es producto nuevo. Por qué: Toma el criterio de taller (match contra el producto por EAN con la marca como peso, umbrales de referencia 70 y 90) y deja la acción de cada rango explícita, que era lo abierto. Se apoya en RF-MAT-06, RF-MAT-07, RN-MAT-11, PEN-22.
  • D-REF-03-3. Pesos y bandas son de MS-06 (validation_thresholds) y se cambian con plan y vista previa del impacto. Los MatchingWeights de P360 se migran como punto de partida; la mención de «pesos» en product_reference_tables de MS-02 se retira en la conciliación. Por qué: Quien calcula la confianza es quien guarda sus parámetros; dejarlos también en MS-02 serían dos copias. El umbral de hoy ni siquiera se lee por un nombre mal escrito. Se apoya en DUD-32, RF-MAT-07, ADR-12.
  • D-REF-03-4. La zona gris la decide una persona: MS-02 guarda la propuesta, abre GOBIERNO_DE_DATOS en la cola «Coincidencias» y el seller puede seguir capturando pero no enviar hasta que se resuelva. El veredicto se registra en MS-06 (API-06-010), que avisa con EVALUATION_DONE. Reemplaza la bandeja «Revisión Matching» de P360. Por qué: La IA y las reglas proponen y una persona decide lo dudoso, sin que el seller pueda darle la vuelta ni pierda su avance. Se apoya en PEN-22, RN-MAT-07, DEC-62.
  • D-REF-03-5. La carga masiva usa la misma evaluación por renglón, sólo con EAN y marca (sin imagen ni URL), con los mismos pesos y la misma tabla: con los mismos datos, el alta individual y la masiva dan la misma decisión. Por qué: Si los canales usan reglas distintas el seller recibe respuestas distintas para el mismo producto. Se apoya en RF-MAT-20, DEC-57, DEC-61, RN-MAS-03.
  • D-REF-03-6. En propuestas de Mercaderías y Suburbia, el EAN igual en su propio negocio es duplicado y no se crea (lo cuida además el registro de identificadores de FT-PRD-03); una coincidencia por características sólo avisa a Compras en su visto bueno, no bloquea. Por qué: La sesión de matching de Mercaderías no tiene fecha; esto conserva la regla de hoy (EAN duplicado) sin frenar al proveedor con reglas de Marketplace. Se apoya en DUD-32, PEN-25.
  • D-REF-03-7. EVALUATION_DONE sirve para tres casos: el bloque de una carga masiva, la evaluación que tardó por la IA y la revisión de una persona; el cuerpo dice cuál (kind). No se pide un tipo nuevo. API-06-001 y API-06-002 sólo los llama MS-02: aunque su ruta es /api/v2, el BFF no los publica. Por qué: Un solo aviso de «la evaluación cambió» basta para MS-02, que es su único consumidor; menos tipos que mantener. Se apoya en ADR-12.

Qué falta decidir

IDQué falta
DUD-32Agendar la sesión de matching de Mercaderías (lógica propia o por plantilla) y confirmar el nombre real del umbral de hoy en la base de P360.

También siguen abiertos: PEN-22, Ratificar con Gobierno de Producto y Marketplace las bandas (aquí 0.70 y 0.90) y la acción de cada rango; PEN-25, Confirmar que en Mercaderías una coincidencia por características o por imagen sólo avisa.

Fuentes

  1. [D] trazabilidad/features/FT-REF-03-servicio-de-matching.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.