← Arquitectura por épica

FT-RAC-01 · Motor de validación en línea y candados de datos…

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-RAC-01: 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-RAC-01.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-RAC-01-motor-de-validacion-en-linea.md.

En 30 segundos

Hoy las validaciones se concentran al final y SAP es el último en decir que falta algo, así que el proveedor retrabaja todo. Esta épica valida cada dato en el momento en que se captura, con el error en el mismo campo, y pone candados que impiden enviar, pedir el SKU o mandar a SAP un producto incompleto. Al enviar, una Validación automática revisa la versión enviada y la deja lista para el visto bueno.

  • Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-06 Evaluación, MS-08 Adaptadores de salida, MS-14 Avisos y ayuda.
  • Etapa 3 · Captura. Recibe «PE-3 · Plantilla asignada» y entrega «PE-4 · Propuesta enviada».
  • APIs: construye 3 y usa 10 que construyen otras épicas.
  • Eventos: publica 4 y consume 3.

1. Dónde encaja

Recibe

DeQué
PE-3 · Plantilla asignadaLa propuesta en Borrador con plantilla y negocio: la vista efectiva dice qué pedir y qué es obligatorio.
FT-PLT-06 · Configuración de atributos por plantilla y por negocio…La obligatoriedad por negocio en tres niveles y la sección de cada atributo, dentro de la vista efectiva de Catálogo.
FT-PLT-07 · Reglas de atributosLas reglas de calidad y de calculados, cada una con su mensaje, sus campos y su efecto por negocio (bloquea o avisa).
FT-PRD-07 · Captura guiada por pasos con los mínimos primeroLa propuesta capturada por pasos y enviada por el proveedor o seller.
FT-PRD-03 · EANLas variantes con EAN válidos y reservados en su negocio.
FT-PLT-08 · Títulos, nombres y descripciones de productoTítulo, título sin marca y descripción calculados, que los candados del envío y del SKU exigen.
FT-ACT-01 · Tipos de activo digital y reglas de imágenes por…La revisión de imágenes por etapa (API-11-014) que usa el candado de imagen principal antes de enviar y antes de pedir el SKU.
FT-IA-01 · Prellenado con IA y validación obligatoria del usuarioLa marca de «sugerencias de IA por confirmar» en la propuesta: mientras exista, el candado de envío no pasa.

Entrega

AQué
PE-4 · Propuesta enviadaLa propuesta En revisión, con los obligatorios completos y la Validación automática aprobada.
FT-PRD-04 · Propuesta del proveedor de MercaderíasEn Mercaderías y Suburbia, la propuesta enviada con los obligatorios completos y la tarea Visto bueno de Compras abierta.
FT-RAC-02 · Score de calidad del productoEn Marketplace, la propuesta validada con la tarea Calificación de IA abierta y su categoría ya calculada.
FT-CAT-03 · Categorización de productosLa propuesta enviada: el momento en que el agente calcula su categoría web, antes del score y del SKU.
FT-PRD-02 · Creación de SKU con SAPEl candado del SKU y de SAP: número de proveedor, grupo de artículos, imagen principal, descripción y datos logísticos, revisados antes de pedir el artículo.
FT-FLU-04 · Carga masiva de productos por archivoLas mismas validaciones de tipo, lista, longitud, obligatorios y reglas de calidad, para cada renglón de la carga masiva.
FT-PRD-07 · Captura guiada por pasos con los mínimos primeroLa validación en el momento y los candados que dicen qué falta en cada paso de la captura.
FT-PLT-09 · Carga masiva de configuración de plantillas con…El formato común de errores por renglón y campo (fila, columna, código y mensaje), para que la carga reporte igual que la validación en línea.
FT-PRD-09 · Contrato de propuestas con Entrada ÚnicaLa validación en el momento, por campo y por variante, que la pantalla muestra tal cual.

Cambios de estado que hace

TransiciónDe → aCuándo
T03Borrador → En revisiónEnvía con los obligatorios completos.
T04En revisión → BorradorRechazo de Compras o de las reglas; se abre Corrección.

Tareas que abre o cierra: Validación automática, Corrección, 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

Sistemas externos

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Revisar valores en el momento
Candados: qué le falta al producto
y 5 más

Vista efectiva de una plantilla por n…
Consultar reglas

Evaluar una propuesta

STATUS_CHANGED
TASK_CHANGED
y 1 más

REJECTION_ADDED

Avisa al proveedor qué campos corregir

Datos para los archivos de SAP

Proveedor

Seller

Compras

Entrada Única · Vendor Center

BFF del portal

MS-01 Catálogo

★ MS-02 Producto

MS-06 Evaluación

MS-08 Adaptadores de salida

MS-14 Avisos y ayuda

Base pim

Eventos

Servicio de correo

Contexto de FT-RAC-01

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.

EventosMS-06 EvaluaciónBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterEventosMS-06 EvaluaciónBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Captura un dato en un campo del paso2. Revisa los valores sin guardar nadaPOST /api/v2/products/{id}/values/plans3. Lee la vista efectiva de su plantilla y negocioGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective4. Lee las reglas de calidad vigentes y su efectoGET /api/v2/rules?type=5. Corrige el campo marcado y termina la captura6. Pregunta qué candado falta para enviarGET /api/v2/products/{id}/gates7. Pide el plan de envíoPOST /api/v2/workflow/actions/plans8. Confirma el envíoPOST /api/v2/product-plans/{planId}/apply9. Pasa a En revisión y abre la Validación automática10. Revalida la versión enviada y recalcula título y descripción11. Reevalúa si cambió el EAN, la marca o el modeloPOST /api/v2/evaluations12. Cierra la validación y abre visto bueno o calificación13. Avisa que la propuesta quedó En revisiónSTATUS_CHANGED14. Avisa las tareas que se cerraron y abrieronTASK_CHANGEDProveedorBFF
Flujo principal de FT-RAC-01
Los pasos en texto
PasoDeAQué haceAPI o evento
1ProveedorEntrada Única · Vendor CenterCaptura un dato en un campo del paso—
2Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Revisa los valores sin guardar nadaAPI-02-012
3MS-02 ProductoMS-01 CatálogoLee la vista efectiva de su plantilla y negocioAPI-01-028
4MS-02 ProductoMS-01 CatálogoLee las reglas de calidad vigentes y su efectoAPI-01-016
5ProveedorEntrada Única · Vendor CenterCorrige el campo marcado y termina la captura—
6Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pregunta qué candado falta para enviarAPI-02-101
7Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de envíoAPI-02-028
8Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el envíoAPI-02-057
9MS-02 ProductoBase pimPasa a En revisión y abre la Validación automática—
10MS-02 ProductoBase pimRevalida la versión enviada y recalcula título y descripción—
11MS-02 ProductoMS-06 EvaluaciónReevalúa si cambió el EAN, la marca o el modeloAPI-06-001
12MS-02 ProductoBase pimCierra la validación y abre visto bueno o calificación—
13MS-02 ProductoEventosAvisa que la propuesta quedó En revisióncatalog.product.changed/STATUS_CHANGED
14MS-02 ProductoEventosAvisa las tareas que se cerraron y abrieroncatalog.product.changed/TASK_CHANGED

3.1 Si las reglas rechazan la propuesta enviada

Entrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaEventosBase·pimMS-02 ProductoProveedorBFF1. Encuentra una regla que falla en la versión enviada2. Regresa a Borrador y abre Corrección con el motivo por campo3. Avisa el rechazo con los camposREJECTION_ADDED4. Entrega el rechazo para avisarREJECTION_ADDED5. Avisa al proveedor qué campos corregir6. Corrige los campos y vuelve a enviar7. Pide otra vez el plan de envíoPOST /api/v2/workflow/actions/plansProveedorBFF
Si las reglas rechazan la propuesta enviada

3.2 Candado antes del SKU y antes de SAP

EventosMS-08 Adaptadores de salidaBase·pimMS-02 ProductoEntrada Única · Vendor CenterEventosMS-08 Adaptadores de salidaBase·pimMS-02 ProductoEntrada Única · Vendor CenterComprasBFF1. Acepta la propuesta2. Pide el plan de aceptarPOST /api/v2/workflow/actions/plans3. Revisa el candado del SKU antes de pedirlo4. Si sale bloqueado, muestra «te hacen falta estos datos»GET /api/v2/products/{id}/gates5. Pide los datos para los 4 archivos de SAPGET /internal/product/products/{id}/sap-snapshot6. Recalcula la descripción o detiene el envío7. Abre Gobierno de Datos si falta un dato maestro8. Avisa la tarea abiertaTASK_CHANGEDComprasBFF
Candado antes del SKU y antes de SAP

3.3 Carga masiva con las mismas reglas

Base·pimMS-02 ProductoEntrada Única · Vendor CenterBase·pimMS-02 ProductoEntrada Única · Vendor CenterSellerBFF1. Sube un archivo de 15,000 productos2. Pide validar el archivo sin escribirPOST /api/v2/product-imports3. Valida cada renglón con el mismo motor, en segundo plano4. Consulta el resultado por renglónGET /api/v2/product-imports/{id}5. Confirma los renglones que pasaronPOST /api/v2/product-imports/{id}/applySellerBFF
Carga masiva con las mismas reglas

4. Si algo sale mal

  • Catálogo (MS-01) no responde al validar. MS-02 valida con la vista efectiva y las reglas que tiene en caché, con su versión; si no tiene caché responde 503 DEPENDENCY_UNAVAILABLE y no guarda nada. El autoguardado conserva lo tecleado (FT-PRD-07).
  • La plantilla o una regla cambió entre la vista previa y la confirmación. La confirmación responde 409 VERSION_CONFLICT porque las versiones de origen del plan ya no coinciden; el portal vuelve a revisar y el proveedor ve los campos nuevos.
  • Una regla falla en la Validación automática después de enviar. La propuesta regresa a Borrador (T04) con una tarea de Corrección y el motivo por campo; el proveedor recibe un aviso y, al reenviar, la validación corre otra vez.
  • Evaluación (MS-06) no responde durante la Validación automática. La tarea sigue abierta y MS-02 reintenta con espera creciente; el proveedor ve «Enviada, en validación». A las 4 horas sin respuesta, la tarea pasa a la cola de Gobierno de Datos para revisarla a mano.
  • A una propuesta aceptada le falta un dato del candado del SKU. El plan de aceptar sale bloqueado con «te hacen falta estos datos»; no se pide el artículo a SAP. Si la descripción está vacía se recalcula; si aun así falta un dato maestro se abre Gobierno de Datos.

5. APIs

Las que construye esta épica (3)

POST /api/v2/products/{id}/values/plans · Revisar valores en el momento
CampoValor
APIAPI-02-012 · MS-02 Producto
Para quéEs la validación en el momento: revisa hasta 50 valores de un producto o de una variante contra la vista efectiva de su plantilla y negocio y contra las reglas de calidad, sin escribir nada, y responde por campo qué está mal, qué falta para cerrar el paso, qué avisos hay y cómo quedan los calculados (título, descripción, margen). Si nada bloquea, deja el plan listo para confirmar.
En esta épicaLa validación en el momento: errores por campo, faltantes del paso, avisos y calculados
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoVAL-E sobre los grupos de atributos que su rol edita; el proveedor o seller dueño mientras la propuesta esté en Borrador
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Parámetrosid = PRD-0004812
Publicacatalog.product.changed/PRODUCT_UPDATED, catalog.product.changed/EAN_CHANGED
También la usanFT-ACT-06, FT-ARQ-01, FT-FLU-02, FT-IA-01, FT-IA-03, FT-IA-05, FT-PLT-06, FT-PLT-07, FT-PLT-08, FT-PRD-01, FT-PRD-03, FT-PRD-05, FT-PRD-07, FT-PRD-09, FT-PRD-10, FT-RAC-02, FT-RAC-03

Request

{
  "step": "DATOS_BASICOS",
  "values": [
    {
      "attributeId": "MARCA",
      "code": "MARCA01"
    },
    {
      "attributeId": "TIPO_PRODUCTO_SAP",
      "code": "LICUADORA"
    },
    {
      "attributeId": "MODELO_COMERCIAL",
      "text": "LX-200"
    },
    {
      "attributeId": "ANCHO_SIN_EMPAQUE",
      "value": "21",
      "unit": "cm"
    },
    {
      "attributeId": "ANCHO_CON_EMPAQUE",
      "value": "19",
      "unit": "cm"
    },
    {
      "attributeId": "POTENCIA_W",
      "value": "6OO"
    },
    {
      "attributeId": "PRECIO_VENTA",
      "value": "899.00"
    },
    {
      "attributeId": "PRECIO_COMPRA",
      "value": "540.00"
    },
    {
      "attributeId": "INDICADOR_IMPUESTO",
      "code": "G5"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "planId": null,
    "canApply": false,
    "sourceVersions": {
      "templateView": "EU4-0412@14",
      "rules": 31
    },
    "fieldErrors": [
      {
        "path": "/values/POTENCIA_W",
        "code": "NOT_A_NUMBER",
        "message": "Captura sólo números",
        "effect": "BLOCK"
      },
      {
        "path": "/values/ANCHO_CON_EMPAQUE",
        "code": "RULE_FAILED",
        "rule": "LOGISTICA-ANCHO",
        "message": "El ancho con empaque debe ser mayor que el ancho sin empaque",
        "fields": [
          "ANCHO_SIN_EMPAQUE",
          "ANCHO_CON_EMPAQUE"
        ],
        "effect": "BLOCK"
      }
    ],
    "missingInStep": [
      {
        "attributeId": "NUM_PROVEEDOR",
        "label": "Número de proveedor",
        "layer": "DATO_MAESTRO"
      }
    ],
    "warnings": [
      {
        "path": "/values/MODELO_COMERCIAL",
        "code": "TITLE_GENERIC",
        "message": "Tu título queda genérico: agrega la capacidad",
        "effect": "WARN"
      }
    ],
    "calculated": {
      "productName": "Licuadora MARCA01 LX-200",
      "titleWithoutBrand": "Licuadora LX-200",
      "MARGEN": {
        "value": "24.75",
        "unit": "%",
        "ruleId": "rul-000301"
      }
    },
    "stepComplete": false
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERRORUn atributo no está en la vista efectiva de la plantilla, o falta su unidad
403AUTHORIZATION_ERROREl campo es de un grupo que su rol no edita (por ejemplo, el EAN para quien no es Gobierno de Datos)
409NOT_EDITABLE_IN_STATUSLa propuesta ya no está en Borrador y quien llama no es dueño del dato
409VERSION_CONFLICTCambió el producto o la vista efectiva de su plantilla
503DEPENDENCY_UNAVAILABLENo hay vista efectiva en caché y Catálogo no responde; no se guarda nada
GET /api/v2/products/{id}/gates · Candados: qué le falta al producto
CampoValor
APIAPI-02-101 · MS-02 Producto
Para quéDice, para un candado (enviar, pedir el SKU, mandar a SAP o publicar), si el producto lo pasa y qué le falta, agrupado por sección de la plantilla y con el avance de cada sección. El motor usa la misma revisión antes de cada transición.
En esta épicaSaber qué falta para pasar un candado: enviar, SKU, SAP o publicar
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoENT-L; el proveedor o seller dueño
CabecerasAuthorization, X-Request-Id
Parámetrosid = PRD-0004812, gate = SUBMIT
También la usanFT-ACT-06, FT-FLU-02, FT-IA-01, FT-PRD-07

Request

null

Response · 200

{
  "success": true,
  "data": {
    "productId": "PRD-0004812",
    "gate": "SUBMIT",
    "passes": false,
    "version": 9,
    "sections": [
      {
        "section": "DATOS_BASICOS",
        "step": 1,
        "ownerArea": "COMPRAS",
        "mandatory": {
          "present": 9,
          "total": 10
        },
        "missing": [
          {
            "attributeId": "NUM_PROVEEDOR",
            "label": "Número de proveedor",
            "layer": "DATO_MAESTRO"
          }
        ]
      },
      {
        "section": "VARIANTES_LOGISTICA",
        "step": 3,
        "ownerArea": "LOGISTICA",
        "mandatory": {
          "present": 12,
          "total": 12
        },
        "missing": []
      }
    ],
    "locks": [
      {
        "lock": "AL_MENOS_UNA_VARIANTE",
        "passes": true
      },
      {
        "lock": "IMAGEN_PRINCIPAL",
        "passes": false,
        "message": "Falta la imagen principal"
      }
    ],
    "message": "Te hacen falta estos datos: número de proveedor e imagen principal"
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl candado no existe (SUBMIT, SKU, SAP o PUBLISH)
404NOT_FOUNDEl producto no existe o no es visible para quien llama
POST /api/v2/products/bulk-edit/plans · Edición masiva de un atributo
CampoValor
APIAPI-02-013 · MS-02 Producto
Para quéPrepara el mismo cambio de un atributo (poner, reemplazar o vaciar, o sólo donde está vacío) en hasta 100 productos y corre en cada uno las mismas reglas del motor de validación, sin escribir nada.
En esta épicaEdición masiva con las mismas reglas del motor
Quién la llamaBFF del portal
PermisoVAL-E sobre el grupo del atributo
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Publicacatalog.product.changed/PRODUCT_UPDATED

Request

{
  "items": [
    {
      "productId": "PRD-0004812",
      "version": 7
    },
    {
      "productId": "PRD-0004813",
      "version": 3
    }
  ],
  "attributeId": "GARANTIA_MESES",
  "op": "SET",
  "value": {
    "value": "12"
  },
  "onlyEmpty": true
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-0b3f55",
    "expiresAt": "2026-10-18T16:55:00Z",
    "summary": {
      "ok": 1,
      "skipped": 1,
      "blocked": 0
    },
    "items": [
      {
        "productId": "PRD-0004812",
        "result": "OK",
        "before": null,
        "after": "12"
      },
      {
        "productId": "PRD-0004813",
        "result": "SKIPPED",
        "reason": "Ya tiene valor y se pidió sólo vacíos"
      }
    ],
    "applyUrl": "/api/v2/product-plans/pln-0b3f55/apply"
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORMás de 100 productos
422VALIDATION_ERRORSe intenta vaciar un dato de candado (número de proveedor, grupo de artículos) en una propuesta ya enviada
409VERSION_CONFLICTAlgún producto cambió después de seleccionarlo

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-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveLeer la vista efectiva de la plantilla por negocioFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-01-016GET /api/v2/rules?type=Leer las reglas de calidad con su efecto por negocioFT-PLT-07 · Reglas de atributos
API-01-017POST /api/v2/rules/plansQue Gobierno de Producto cree o cambie una regla con su mensaje, sus campos y su efectoFT-PLT-07 · Reglas de atributos
API-02-028POST /api/v2/workflow/actions/plansPedir el plan de envío o de aceptaciónFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar el envíoFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-06-001POST /api/v2/evaluationsReevaluar lista negra y coincidencias si cambió la identidad del productoFT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…
API-02-055GET /internal/product/products/{id}/sap-snapshotRevisar el candado de SAP al armar los 4 archivosFT-PRD-02 · Creación de SKU con SAP
API-02-046POST /api/v2/product-importsValidar una carga masiva renglón por renglón con el mismo motorFT-FLU-04 · Carga masiva de productos por archivo
API-02-047POST /api/v2/product-imports/{id}/applyConfirmar una carga masivaFT-FLU-04 · Carga masiva de productos por archivo
API-02-048GET /api/v2/product-imports/{id}Ver el resultado por renglón de una carga masivaFT-FLU-04 · Carga masiva de productos por archivo

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/STATUS_CHANGEDLa propuesta pasa a En revisión al enviar, o regresa a Borrador porque una regla falló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.product.changed/TASK_CHANGEDSe abre y se cierra la Validación automática, y se abre Visto bueno de Compras, Calificación de IA, Corrección o Gobierno de DatosFT-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
catalog.product.changed/REJECTION_ADDEDLa Validación automática rechaza con motivo por campoFT-INT-07, FT-PRD-04, FT-PRD-05, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06
catalog.product.changed/PRODUCT_UPDATEDSe guardan valores o la validación recalcula título y descripciónFT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PLT-07, FT-PRD-05, FT-RAC-06

Consume

EventoPara quéQuién lo publica
catalog.governance.changed/RULE_CHANGEDMS-02 refresca las reglas de calidad que tiene en cachéFT-CAT-04, FT-PLT-07, FT-REF-02
catalog.governance.changed/TEMPLATE_VIEW_CHANGEDMS-02 refresca la vista efectiva y recalcula la completitud de las propuestas abiertas de esa plantillaFT-IA-03, FT-MIG-02, FT-PLT-04, FT-PLT-05, FT-PLT-06, FT-PLT-09
catalog.product.changed/REJECTION_ADDEDMS-14 avisa al proveedor qué campos corregiresta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.escribe
product_jobsMS-02Trabajos asíncronos: cargas masivas de productos, edición masiva y publicación.escribe
product_receiptsMS-02El recibo de cada escritura confirmada en el producto (antes operation_receipts).escribe
product_outboxMS-02Los cambios del producto que esperan salir como evento (antes outbox).escribe
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.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
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.lee
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.lee
validation_resultsMS-06El resultado de cada evaluación: lista negra, coincidencias con su confianza y score.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-RAC-01·H1 · Ver el error en el campo en el momento en que lo capturoP1pasos 1, 2, 3, 5; flujo «Carga masiva con las mismas reglas»; API-02-012
FT-RAC-01·H2 · Un candado que impida generar el SKU sin número de proveedor, grupo de…P1flujo «Candado antes del SKU y antes de SAP»; API-02-101, API-02-055
FT-RAC-01·H3 · Que el nuevo PIM aplique las validaciones de CreateProposal contra la vista…P1pasos 2, 3; API-02-012
FT-RAC-01·H4 · Reglas de calidad que bloqueen guardar o avanzar, con mensaje y camposP1pasos 4; API-01-016, API-01-017
FT-RAC-01·H5 · Fijar cuánto se valida antes de publicar y cuánto se corrige despuésP2pasos 4; API-01-016

9. Decisiones de esta épica

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

  • D-RAC-01-1. Un solo motor de validación. Las reglas y la obligatoriedad las define Catálogo; las corre un mismo evaluador dentro de los planes de MS-02 en todas las puertas (captura, edición masiva, carga masiva y API de terceros), y Catálogo usa ese evaluador en su vista previa de calculados (API-01-203) cuando todavía no hay propuesta. No hay un servicio de validación aparte. Por qué: Las mismas reglas para todas las puertas, con un dueño por regla; ADR-12 responde PD-05 y DEC-PRD-08 ya ponía estas validaciones en catalog-product. MS-02 lee las reglas con caché, así que no depende de Catálogo en cada tecla. Se apoya en DEC-PRD-08, PD-05, ADR-12.
  • D-RAC-01-2. La validación en el momento es el plan de valores (API-02-012): revisa sin escribir y responde errores por campo, lo que falta para cerrar el paso, avisos y calculados. Un valor inválido no se guarda; un obligatorio vacío sí deja guardar, pero no cerrar el paso ni enviar. Por qué: El error se ve en el campo donde se captura y no se acumula al final; guardar con faltantes permite saltar opcionales y regresar. Se apoya en RN-GEN-04, RF-CAL-03, RN-CAL-08.
  • D-RAC-01-3. La Validación automática es una tarea real que atiende MS-02 al enviar: revalida la versión congelada, recalcula los calculados, pide al agente la categoría web y reevalúa en MS-06 si cambió el EAN, la marca o el modelo desde la identificación. Si pasa, abre Visto bueno de Compras (Mercaderías y Suburbia) o Calificación de IA (Marketplace); si falla, T04 con Corrección. Por qué: Lo que se capturó después de la identificación puede cambiar la identidad del producto, y el visto bueno sólo debe recibir propuestas completas. Se apoya en PD-29, RN-CAL-07, RN-CAT-08.
  • D-RAC-01-4. Cuatro candados con nombre sobre el mismo motor: SUBMIT (enviar), SKU (pedir el artículo), SAP (armar los archivos) y PUBLISH (aprobar). El del SKU exige número de proveedor en Mercaderías, grupo de artículos, imagen principal, descripción y datos logísticos. Un dato de candado no se puede vaciar después de enviar por ninguna vía: plan, carga masiva o migración. Por qué: Hoy se pierden obligatorios entre la aprobación y el envío (los ~200 SKU de Esfera); el candado como red de seguridad en cada salida evita que vuelva a pasar. Se apoya en RF-CAL-05, RN-ALT-04, DEC-71.
  • D-RAC-01-5. Cada regla trae su efecto por negocio (bloquea o avisa) en Catálogo. Lo que avisa se guarda con una nota y baja el score, sin cola manual de QA. Arranque: Mercaderías y Suburbia bloquean lo de creación; Marketplace bloquea lo que SAP exige y avisa lo demás. Por qué: La política por negocio sigue abierta; este arranque no frena al seller más de lo que SAP exige y conserva el control de Mercaderías. Se apoya en PEN-03, RF-CAL-04, RN-CAL-07.
  • D-RAC-01-6. Las validaciones de CreateProposal (coherencia logística, proveedor válido para catalogar, avance de P1 a P2, campos de PP33) se reimplementan en código de MS-02 con parámetros de los diccionarios de Catálogo, y se prueban contra una muestra de 1,000 productos antes del corte. Por qué: Paridad con lo que hoy valida P360 mientras el lenguaje de reglas configurable llega después. Se apoya en DEC-PLT-08, DEC-PRD-08.
  • D-RAC-01-7. Lo migrado no se bloquea por obligatorios nuevos: los candados aplican a lo que se crea o se edita. Un migrado que se edita ve los obligatorios nuevos como aviso hasta que Gobierno de Producto los vuelva bloqueo. Por qué: Endurecer la salida de golpe bloquearía productos que hoy se venden; la salida no debe exigir más que P360. Se apoya en RF-MIG-02, RSG-01.
  • D-RAC-01-8. Los motivos que ve el seller después (por qué un SKU no se creó o no se ve, API-02-303 de FT-RAC-05) salen del mismo veredicto del motor: hay una sola lista de reglas. Por qué: Si el motivo visible y el candado se calcularan por separado, dirían cosas distintas. Se apoya en RF-PUB-09, FT-RAC-05.

Qué falta decidir

Nada propio de esta épica: lo que sigue abierto está en las decisiones del programa.

También siguen abiertos: PEN-01, Firmar con negocio y sistemas las listas de obligatorios por negocio y por destino que alimentan la vista efectiva; PEN-03, Ratificar la política por negocio (prevenir antes o corregir después); aquí arranca como en D-RAC-01-5; PEN-70, Encontrar la causa de la pérdida de obligatorios entre aprobación y envío, para probar que el candado la cubre; PEN-63, Depurar la matriz de validaciones de MM41 que se replica como candado de SAP.

Fuentes

  1. [D] trazabilidad/features/FT-RAC-01-motor-de-validacion-en-linea.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.