← Arquitectura por épica

FT-PLT-07 · Reglas de atributos

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-PLT-07: 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-PLT-07.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PLT-07-reglas-atributos-calculados-calidad.md.

En 30 segundos

Muchas reglas de hoy están escondidas en el código de P360: la talla normalizada, el envase, el impuesto y los datos maestros que exige SAP. Esta épica las vuelve reglas explícitas de Catálogo, con versión, vigencia y prueba previa, para que el sistema calcule lo que el proveedor no debe capturar y bloquee lo incoherente al guardar, igual en pantalla, en archivo o por API.

  • Módulo dueño: MS-01 Catálogo. También participan: MS-02 Producto, MS-05 Auditoría, MS-11 Activos digitales.
  • Etapa 3 · Captura. Recibe «PE-3 · Plantilla asignada» y entrega «PE-C · Catálogo vigente».
  • APIs: construye 4 y usa 7 que construyen otras épicas.
  • Eventos: publica 2 y consume 2.

1. Dónde encaja

Recibe

DeQué
PE-3 · Plantilla asignadaEl producto con plantilla y negocio: con ellos se elige el conjunto de reglas que le aplica.
FT-PLT-01 · Fundamentos de gobierno de plantillasLa confirmación común de planes (API-01-004) y, para las reglas que piden aprobación, la solicitud y su decisión (API-01-103).
FT-PLT-06 · Configuración de atributos por plantilla y por negocio…La vista efectiva por plantilla y negocio, que dice qué atributos existen y cuáles son obligatorios.
FT-REF-01 · Datos de referencia administrablesLos diccionarios que leen las reglas: TallaNormalizada, GpoArtVsEnvase, MargenVsIndicadorImp e impuestos.

Entrega

AQué
FT-RAC-01 · Motor de validación en línea y candados de datos…El conjunto de reglas vigente por plantilla y negocio, con su versión, su mensaje, sus campos y su efecto por negocio (bloquea o avisa), que su motor corre en cada plan.
PE-C · Catálogo vigenteLas reglas vigentes de captura, calidad y relación, legibles por la API de MS-01 y avisadas con RULE_CHANGED.
FT-PRD-02 · Creación de SKU con SAPLos datos maestros derivados (envase, talla hacia SAP, impuesto) ya guardados en el producto, que viajan en los 4 TXT.
FT-PRD-04 · Propuesta del proveedor de MercaderíasLos campos calculados del placeholder que viajan a o9 con sus datos maestros.
FT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y ForoLas marcas y grupos de artículos permitidos por plantilla, negocio y proveedor, que la pantalla de captura pide por el BFF.

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

Preparar un cambio de reglas
Confirmar un plan del catálogo
y 1 más

POST /internal/product/rules/dry-runs

RULE_CHANGED

RULE_CHANGED

Consultar reglas

Revisar valores en el momento
Confirmar un plan de Producto

PRODUCT_UPDATED

PRODUCT_UPDATED

Catálogo de tipos de activo

Pedir permiso para subir un archivo

bitácora

Administración del catálogo

Proveedor

Compras

Entrada Única · Vendor Center

BFF del portal

★ MS-01 Catálogo

MS-02 Producto

MS-05 Auditoría

MS-11 Activos digitales

Base pim

Eventos

Contexto de FT-PLT-07

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-02 ProductoMS-01 CatálogoEntrada Única · Vendor CenterEventosBase·pimMS-02 ProductoMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFFProveedor1. Escribe una regla de cálculo o de calidad2. Pide la vista previa de la reglaPOST /api/v2/rules/plans3. Pide probarla sobre una muestra de productosPOST /internal/product/rules/dry-runs4. Confirma el plan: queda por aprobarPOST /api/v2/catalog-plans/{planId}/apply5. Otra persona de Gobierno revisa la prueba y aprueba6. Registra la aprobación de la solicitudPOST /api/v2/catalog-change-requests/{changeRequestId}/decision7. Guarda la regla con versión y vigencia8. Avisa que cambió la reglaRULE_CHANGED9. Entrega el cambio para refrescar su cachéRULE_CHANGED10. Lee el conjunto vigente de la plantilla y negocioGET /api/v2/rules?type=11. Captura precio, costo, marca y talla12. Pide el plan de valores: calcula y revisaPOST /api/v2/products/{id}/values/plans13. Confirma el plan de valoresPOST /api/v2/product-plans/{planId}/apply14. Guarda los calculados con su regla y versiónAdministración del catálogoBFFProveedor
Flujo principal de FT-PLT-07
Los pasos en texto
PasoDeAQué haceAPI o evento
1Administración del catálogoEntrada Única · Vendor CenterEscribe una regla de cálculo o de calidad—
2Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Pide la vista previa de la reglaAPI-01-017
3MS-01 CatálogoMS-02 ProductoPide probarla sobre una muestra de productosAPI-02-118
4Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Confirma el plan: queda por aprobarAPI-01-004
5Administración del catálogoEntrada Única · Vendor CenterOtra persona de Gobierno revisa la prueba y aprueba—
6Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Registra la aprobación de la solicitudAPI-01-103
7MS-01 CatálogoBase pimGuarda la regla con versión y vigencia—
8MS-01 CatálogoEventosAvisa que cambió la reglacatalog.governance.changed/RULE_CHANGED
9EventosMS-02 ProductoEntrega el cambio para refrescar su cachécatalog.governance.changed/RULE_CHANGED
10MS-02 ProductoMS-01 CatálogoLee el conjunto vigente de la plantilla y negocioAPI-01-016
11ProveedorEntrada Única · Vendor CenterCaptura precio, costo, marca y talla—
12Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de valores: calcula y revisaAPI-02-012
13Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el plan de valoresAPI-02-057
14MS-02 ProductoBase pimGuarda los calculados con su regla y versión—

3.1 El comprador corrige el envase calculado

MS-05 AuditoríaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterMS-05 AuditoríaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterComprasBFF1. Cambia el envase que calculó la regla2. Pide el plan del cambio de valorPOST /api/v2/products/{id}/values/plans3. Confirma el cambio sin levantar ticketPOST /api/v2/product-plans/{planId}/apply4. Guarda el valor a mano y lo marca corregido5. Avisa el cambio con antes y despuésPRODUCT_UPDATED6. Registra quién corrigió el envasePRODUCT_UPDATEDComprasBFF
El comprador corrige el envase calculado

3.2 Tendencias: alta, cambio y baja

Base·pimMS-02 ProductoEventosMS-01 CatálogoEntrada Única · Vendor CenterBase·pimMS-02 ProductoEventosMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Define la tendencia con atributos y valores2. Pide la vista previa de la tendenciaPOST /api/v2/rules/plans3. Confirma la tendenciaPOST /api/v2/catalog-plans/{planId}/apply4. Avisa la tendencia nueva, cambiada o dada de bajaRULE_CHANGED5. Entrega el cambio de tendenciaRULE_CHANGED6. Recalcula qué productos y placeholders la cumplen7. Avisa los productos que cambiaron de tendenciaPRODUCT_UPDATEDAdministración del catálogoBFF
Tendencias: alta, cambio y baja

3.3 Activo que depende de un atributo

MS-02 ProductoMS-11 Activos digitalesMS-01 CatálogoEntrada Única · Vendor CenterMS-02 ProductoMS-11 Activos digitalesMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFFProveedor1. Pide el certificado cuando el atributo 485 aplique2. Pide la vista previa de la regla de activoPOST /api/v2/rules/plans3. Revisa que exista el tipo de activoGET /api/v2/asset-types4. Confirma la regla: queda por aprobarPOST /api/v2/catalog-plans/{planId}/apply5. Otra persona de Gobierno la apruebaPOST /api/v2/catalog-change-requests/{changeRequestId}/decision6. Marca un certificado en el atributo 4857. Ve que el certificado ahora es obligatorioPOST /api/v2/products/{id}/values/plans8. Pide subir el certificado en PDFPOST /api/v2/assets/uploadsAdministración del catálogoBFFProveedor
Activo que depende de un atributo

4. Si algo sale mal

  • Una regla de calidad no se cumple (precio de venta menor que el de compra). El plan de MS-02 responde con el campo y el mensaje de la regla; en Mercaderías y Suburbia no deja guardar, en Marketplace avisa y baja el score. La pantalla lo marca en el momento.
  • La prueba previa muestra que una regla de paridad no da lo mismo que calculó P360. El plan lista los productos y los dos valores; Gobierno de Producto corrige la regla. Una regla de paridad no se activa con diferencias sin justificar.
  • MS-02 no puede correr la prueba sobre la muestra. El plan responde 503 y no se confirma una regla sin probar; Gobierno de Producto la reintenta.
  • La regla nueva depende de otro calculado y forma un ciclo. El plan responde 422 con la cadena del ciclo y no se puede confirmar.
  • Una regla cambia mientras un proveedor tiene un plan abierto. La confirmación responde 409 VERSION_CONFLICT porque el plan se armó con otra versión del conjunto de reglas; la pantalla pide el plan otra vez.

5. APIs

Las que construye esta épica (4)

GET /api/v2/rules?type= · Consultar reglas
CampoValor
APIAPI-01-016 · MS-01 Catálogo
Para quéLista las reglas del catálogo por tipo, plantilla, negocio o atributo, con su efecto por negocio (bloquea o avisa), su versión y su vigencia. Gobierno de Producto las administra con ella; MS-02 carga en caché el conjunto vigente de cada plantilla y negocio para correrlo en sus planes, y MS-06 la lista negra; los dos refrescan cuando llega RULE_CHANGED.
En esta épicaConsultar reglas; MS-02 carga y refresca su caché por plantilla y negocio
Quién la llamaBFF del portal, MS-02 Producto, MS-06 Evaluación
PermisoCAT-L; MS-02 y MS-06 con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
Parámetrostype = DERIVED_VALUE,QUALITY_CHECK, templateId = EU4-0412, business = MER, status = ACTIVE, asOf = 2026-11-01T06:00:00Z, page = 1, size = 50
También la usanFT-ACT-01, FT-CAT-05, FT-FLU-03, FT-FLU-05, FT-RAC-01, FT-REF-02, FT-REF-03

Request

null

Response · 200

{
  "success": true,
  "data": {
    "rulesetVersion": "rs-EU4-0412-MER-41",
    "items": [
      {
        "ruleId": "rul-000231",
        "type": "DERIVED_VALUE",
        "target": {
          "attribute": "TamanoUnicoSTD"
        },
        "scope": {
          "business": [
            "MER",
            "SUB"
          ],
          "templateIds": [
            "EU4-0412"
          ],
          "productKinds": [
            "PROPOSAL",
            "PLACEHOLDER"
          ]
        },
        "expression": {
          "op": "LOOKUP",
          "table": "TallaNormalizada",
          "key": [
            "MARCA",
            "TamanoUnico"
          ],
          "separator": "<::>"
        },
        "overridableBy": [],
        "version": 3,
        "status": "ACTIVE",
        "validFrom": "2026-11-01T06:00:00Z",
        "validTo": null,
        "origin": "PARIDAD_P360"
      },
      {
        "ruleId": "rul-000245",
        "type": "QUALITY_CHECK",
        "target": {
          "attribute": "PrecioVenta"
        },
        "scope": {
          "business": [
            "MER",
            "SUB",
            "MKP"
          ],
          "templateIds": [
            "*"
          ],
          "productKinds": [
            "PROPOSAL"
          ]
        },
        "expression": {
          "op": "GTE",
          "left": "PrecioVenta",
          "right": "PrecioCompra"
        },
        "effect": {
          "MER": "BLOCK",
          "SUB": "BLOCK",
          "MKP": "WARN"
        },
        "message": {
          "es": "El precio de venta no puede ser menor que el de compra"
        },
        "fields": [
          "PrecioVenta",
          "PrecioCompra"
        ],
        "version": 1,
        "status": "ACTIVE",
        "validFrom": "2026-11-01T06:00:00Z",
        "validTo": null,
        "origin": "ERF_1_1"
      }
    ],
    "page": 1,
    "size": 50,
    "total": 2
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl tipo de regla, el negocio o la fecha de consulta no son válidos
403AUTHORIZATION_ERRORQuien llama no tiene CAT-L
POST /api/v2/rules/plans · Preparar un cambio de reglas
CampoValor
APIAPI-01-017 · MS-01 Catálogo
Para quéRevisa sin guardar el alta, el cambio, la activación o la baja de reglas: las 9 de relación de hoy (marcas y grupos por plantilla, alcance del proveedor, clasificación y grupos vetados en Marketplace), las nuevas de cálculo, calidad, activo condicionado y tendencia, y los tipos que agregan otras épicas (sitios por negocio de FT-CAT-05, lista negra y blanca de FT-REF-02). Valida referencias y ciclos y pide a MS-02 que pruebe la regla con su motor sobre sus casos y una muestra de productos, comparando con el valor que ya tienen. Se confirma con API-01-004.
En esta épicaVista previa de reglas con su prueba sobre casos y muestra
Quién la llamaBFF del portal
PermisoCAT-E (Gobierno de Producto); el equipo de Tendencias sólo para reglas TREND
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
También la usanFT-ACT-01, FT-CAT-03, FT-CAT-04, FT-CAT-05, FT-RAC-01, FT-REF-02

Request

{
  "operation": "CREATE",
  "items": [
    {
      "type": "DERIVED_VALUE",
      "target": {
        "attribute": "TamanoUnicoSTD"
      },
      "scope": {
        "business": [
          "MER",
          "SUB"
        ],
        "templateIds": [
          "EU4-0412"
        ],
        "productKinds": [
          "PROPOSAL",
          "PLACEHOLDER"
        ]
      },
      "expression": {
        "op": "LOOKUP",
        "table": "TallaNormalizada",
        "key": [
          "MARCA",
          "TamanoUnico"
        ],
        "separator": "<::>"
      },
      "validFrom": "2026-11-01T06:00:00Z",
      "origin": "PARIDAD_P360"
    }
  ],
  "test": {
    "cases": [
      {
        "values": {
          "MARCA": "MARCA01",
          "TamanoUnico": "M"
        },
        "expect": {
          "TamanoUnicoSTD": "MED"
        }
      }
    ],
    "sample": {
      "templateIds": [
        "EU4-0412"
      ],
      "business": "MER",
      "size": 1000,
      "compareWithStored": true
    }
  }
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-r81c20",
    "expiresAt": "2026-10-18T15:14:05Z",
    "items": [
      {
        "ruleId": "rul-000231",
        "operation": "CREATE",
        "version": 1,
        "readsAttributes": [
          "MARCA",
          "TamanoUnico"
        ],
        "readsTables": [
          "TallaNormalizada"
        ],
        "cases": {
          "passed": 1,
          "failed": 0
        },
        "sample": {
          "evaluated": 1000,
          "sameAsStored": 1000,
          "different": 0,
          "examples": []
        }
      }
    ],
    "applyUrl": "/api/v2/catalog-plans/pln-r81c20/apply"
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORUna lista o diccionario destino está inactivo, un código no existe, está repetido o inactivo, o hay más de 100 códigos
409VERSION_CONFLICTLa regla cambió desde que se leyó
422BUSINESS_ERRORLa regla forma un ciclo (un calculado que depende de sí mismo) o choca con otra del mismo alcance
503DEPENDENCY_UNAVAILABLEMS-02 no pudo correr la prueba sobre la muestra; sin ella no se arma el plan
GET /api/v2/rules/allowed-values · Marcas y grupos permitidos
CampoValor
APIAPI-01-202 · MS-01 Catálogo
Para quéResuelve, para una plantilla, un negocio y un proveedor o seller, las marcas y los grupos de artículos permitidos: el alcance del proveedor, las marcas y grupos de la plantilla y, en Marketplace, los grupos vetados. Si se manda la sección, dice si la plantilla está ligada a ella. Una lista vacía quiere decir que no puede catalogar ese producto.
En esta épicaMarcas y grupos de artículos permitidos por plantilla, negocio y proveedor (alcance del proveedor)
Quién la llamaBFF del portal, MS-02 Producto, Gateway de terceros /partner/v1
PermisoEl proveedor o seller sólo para sí mismo; ENT-L para usuarios internos; MS-02 con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
ParámetrostemplateId = EU4-0412, business = MER, supplierId = PROV-0001, section = 424
También la usanFT-PLT-10, FT-REF-01

Request

null

Response · 200

{
  "success": true,
  "data": {
    "templateId": "EU4-0412",
    "business": "MER",
    "supplierId": "PROV-0001",
    "canCatalog": true,
    "brands": [
      {
        "code": "MARCA01",
        "label": "Marca Uno"
      }
    ],
    "itemGroups": [
      {
        "ecc": "424104421",
        "s4h": "424104421",
        "section": "424",
        "direction": "9",
        "label": "Camisas de caballero"
      }
    ],
    "section": {
      "code": "424",
      "linked": true
    },
    "rules": [
      {
        "ruleId": "rul-000771",
        "type": "SUPPLIER_SCOPE",
        "version": 4
      },
      {
        "ruleId": "rul-000112",
        "type": "ALLOWED_BRANDS_BY_TEMPLATE",
        "version": 9
      },
      {
        "ruleId": "rul-000113",
        "type": "ALLOWED_ITEM_GROUPS_BY_TEMPLATE",
        "version": 6
      }
    ],
    "rulesetVersion": "rs-EU4-0412-MER-41"
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDLa plantilla o el proveedor no existen
403AUTHORIZATION_ERRORUn proveedor o seller pide el alcance de otro
400VALIDATION_ERROREl negocio no es MER, SUB ni MKP
POST /internal/product/rules/dry-runs · Prueba una regla candidata sin guardar nada: el motor de MS-
CampoValor
APIAPI-02-118 · MS-02 Producto
Para quéPrueba una regla candidata sin guardar nada: el motor de MS-02 la corre sobre sus casos y sobre una muestra de productos de esa plantilla y negocio, y compara con el valor que ya tienen (en lo migrado, el que calculó P360).
En esta épicaQue el motor de MS-02 pruebe la regla candidata sobre una muestra

Request

{
  "rule": {
    "type": "DERIVED_VALUE",
    "target": {
      "attribute": "TamanoUnicoSTD"
    },
    "expression": {
      "op": "LOOKUP",
      "table": "TallaNormalizada",
      "key": [
        "MARCA",
        "TamanoUnico"
      ],
      "separator": "<::>"
    }
  },
  "cases": [
    {
      "values": {
        "MARCA": "MARCA01",
        "TamanoUnico": "M"
      },
      "expect": {
        "TamanoUnicoSTD": "MED"
      }
    }
  ],
  "sample": {
    "templateIds": [
      "EU4-0412"
    ],
    "business": "MER",
    "productKinds": [
      "PROPOSAL"
    ],
    "size": 1000,
    "compareWithStored": true
  }
}

Response · 200

{
  "success": true,
  "data": {
    "cases": {
      "passed": 1,
      "failed": 0
    },
    "sample": {
      "evaluated": 1000,
      "sameAsStored": 1000,
      "different": 0,
      "wouldBlock": 0,
      "examples": []
    }
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene el permiso o no es el módulo autorizado
422VALIDATION_ERRORFalta un dato o viene con un formato inválido; el detalle dice qué campo
409IDEMPOTENCY_MISMATCHSe repite la llave de idempotencia con otro cuerpo

Las que usa y construye otra épica (7)

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-004POST /api/v2/catalog-plans/{planId}/applyConfirmar el plan de reglas: aplica o deja la solicitud por aprobarFT-PLT-01 · Fundamentos de gobierno de plantillas
API-01-103POST /api/v2/catalog-change-requests/{changeRequestId}/decisionAprobar o rechazar la solicitud de una regla de cálculo, calidad o activoFT-PLT-01 · Fundamentos de gobierno de plantillas
API-01-034GET /api/v2/catalog-receipts/{requestId}Recibo de la confirmaciónFT-PLT-01 · Fundamentos de gobierno de plantillas
API-02-012POST /api/v2/products/{id}/values/plansPlan de valores: ahí MS-02 corre las reglas, calcula y bloqueaFT-RAC-01 · Motor de validación en línea y candados de datos…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar el plan de productoFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-11-001GET /api/v2/asset-typesTipos de activo que puede pedir una reglaFT-ACT-01 · Tipos de activo digital y reglas de imágenes por…
API-11-004POST /api/v2/assets/uploadsSubir el activo que pidió la reglaFT-ACT-02 · Registro, congelado y publicación de URLs de activos

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.governance.changed/RULE_CHANGEDSe confirma el alta, el cambio, la activación o la baja de una regla o de una tendenciaFT-ACT-01, FT-CAT-03, FT-CAT-05, FT-RAC-01, FT-REF-02
catalog.product.changed/PRODUCT_UPDATEDMS-02 guarda un envase corregido a mano o recalcula la tendencia de un productoFT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PRD-05, FT-RAC-06

Consume

EventoPara quéQuién lo publica
catalog.governance.changed/RULE_CHANGEDMS-02 refresca su caché de reglas y, si es una tendencia, recalcula qué productos y placeholders la cumplenesta misma épica
catalog.product.changed/PRODUCT_UPDATEDMS-05 registra quién corrigió el envase, con el antes y el despuésesta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
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.escribe
governance_receiptsMS-01El recibo de cada escritura confirmada en el catálogo (antes operation_receipts).escribe
governance_outboxMS-01Los cambios del catálogo que esperan salir como evento (antes outbox).escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.lee
reference_table_defsMS-01Definición de cada diccionario.lee
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.lee
attributesMS-01Cada atributo: tipo, lista, restricciones, grupos e identificadores externos.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-PLT-07·H1 · Paridad de calculadosP1pasos 1, 2, 3, 4, 5, 6, 7; API-01-017, API-02-118
FT-PLT-07·H2 · Calidad que bloqueaP1pasos 11, 12, 13; API-02-012, API-01-016
FT-PLT-07·H3 · Datos maestros inferidosP1pasos 10, 12, 13, 14; API-02-012, API-01-202
FT-PLT-07·H4 · Impuesto de MarketplaceP2pasos 12, 14; API-01-016
FT-PLT-07·H5 · Envase granularP2flujo «El comprador corrige el envase calculado»
FT-PLT-07·H6 · Activo condicionado por un atributoP2flujo «Activo que depende de un atributo»; API-11-001, API-11-004
FT-PLT-07·H7 · Calculados del placeholder para o9P2pasos 2, 4, 12, 13, 14; API-01-017
FT-PLT-07·H8 · Administrar tendencias por atributos y valoresP2flujo «Tendencias: alta, cambio y baja»

9. Decisiones de esta épica

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

  • D-PLT-07-1. MS-01 define las reglas y MS-02 las ejecuta con su único motor, el de FT-RAC-01: no hay evaluador ni servicio de reglas en MS-01. MS-01 guarda tipo, alcance, efecto por negocio, vigencia, versión y casos de prueba, revisa que la regla esté bien armada y avisa RULE_CHANGED; MS-02 la lee con API-01-016, la guarda en caché y la corre en cada plan. La prueba previa también la corre MS-02, para que lo probado sea lo que se aplicará. Por qué: Una regla con dos implementaciones se desincroniza. Y no hay llamada de red al guardar: el motor tiene las reglas en caché. Se apoya en DMS-68, DEC-PRD-08, FT-RAC-01, ADR-12.
  • D-PLT-07-2. Cuatro tipos nuevos en governance_rules, junto a los 9 de relación: DERIVED_VALUE (calculados y datos maestros inferidos), QUALITY_CHECK (calidad, con efecto BLOCK o WARN por negocio), ASSET_REQUIREMENT (un activo que se pide según el valor de un atributo) y TREND (tendencias). Cada regla lleva alcance por negocio, plantilla y tipo de producto (propuesta o placeholder), vigencia, versión, mensaje y casos de prueba. Por qué: Convierte las reglas escondidas en datos con dueño, como pide el diseño de plantillas, sin inventar un lenguaje nuevo por cada caso. Se apoya en DEC-PLT-14, DEC-PLT-08, S36-RF-05, S36-RF-06.
  • D-PLT-07-3. Paridad primero: los calculados de CreateProposal (talla normalizada, color de Suburbia, talla hacia SAP, envase e impuesto por negocio, con E2 fijo en Marketplace) se cargan como reglas DERIVED_VALUE y no se activan hasta que la prueba sobre 1,000 productos migrados dé lo mismo que guardó P360. Por qué: Si el PIM calcula distinto que P360, la creación del SKU se rompe al apagarlo; la muestra migrada trae el valor de P360 para comparar. Se apoya en RF-PLA-13, RN-PLA-14, DEC-ARQ-02.
  • D-PLT-07-4. Un cambio de regla aplica hacia adelante, desde su vigencia: no recalcula productos ya guardados. La excepción son las tendencias: al crearse, cambiar o darse de baja, MS-02 recalcula en segundo plano qué productos y placeholders la cumplen. Por qué: Recalcular lo guardado cambiaría datos que ya están en SAP o en la tienda sin que nadie los revise; la tendencia es informativa y debe reflejar siempre su definición vigente. Se apoya en S36-RF-06, DEC-PLT-14.
  • D-PLT-07-5. El comprador dueño del dato corrige el envase calculado sin ticket ni aprobación: MS-02 guarda el valor a mano, lo marca como corregido y no lo vuelve a calcular hasta que el comprador lo libere. La corrección queda en la bitácora con el antes y el después. Por qué: Hoy el envase se corrige por ticket después de publicar; el taller pidió que el dueño del dato lo cambie y que quede detectado. Se apoya en RN-CAL-05, DEC-21, PEN-11.
  • D-PLT-07-6. El margen es un calculado DERIVED_VALUE con la tabla MargenVsIndicadorImp: desde R2 lo devuelve el plan de valores de MS-02 y deja de calcularse en el navegador. En R1 la pantalla sólo cambia de dónde lee los factores (API-BFF-105 en vez de P360). Por qué: El cálculo es una regla y su lugar es el motor; en R1 todavía no existe MS-02 y no se construye un evaluador temporal en MS-01. Se apoya en ADR-12, FT-RAC-01.
  • D-PLT-07-7. El alcance del proveedor (SUPPLIER_SCOPE) y las marcas y grupos permitidos por plantilla, negocio y proveedor se resuelven en un solo lugar, API-01-202, que usan la captura por el BFF, MS-02 al validar y el gateway de terceros. Por qué: Hoy la misma resolución vive en P360 y se pide desde el navegador y desde el backend de Entrada Única; con un dueño no hay dos respuestas distintas. Se apoya en DEC-PLT-14, PD-05.
  • D-PLT-07-8. Qué reglas piden aprobación al confirmar (API-01-004): las que cambian lo que el sistema calcula, bloquea o exige (DERIVED_VALUE, QUALITY_CHECK y ASSET_REQUIREMENT) quedan como solicitud y las aprueba otra persona de Gobierno de Producto (API-01-103). Se aplican al confirmar las de relación que acotan o clasifican (las 9 de hoy, sitios por negocio y lista negra) y las tendencias. Por qué: Una regla de cálculo mal escrita cambia miles de productos y merece dos manos; un veto de marca o una tendencia no pueden esperar una aprobación. Es lo que FT-PLT-01 deja a esta épica. Se apoya en DEC-ARQ-12, FT-PLT-01.

Qué falta decidir

IDQué falta
PD-05Se cierra con ADR-12 y D-RAC-01-1: MS-01 define las reglas y MS-02 las ejecuta.
DUD-34Decidir con Gobierno de Producto qué diccionarios se migran tal cual, cuáles se vuelven regla y cuáles se retiran.
DUD-25Inventario de las reglas de P360 sin lector en el código vivo, antes de dar la paridad por completa.
DUD-02Actualizar el ejemplo de regla de calidad al de la ERF: precio de venta contra precio de compra.

También siguen abiertos: PEN-11, Confirmar con Mercaderías la regla fina del envase y qué roles la pueden corregir.

Fuentes

  1. [D] trazabilidad/features/FT-PLT-07-reglas-atributos-calculados-calidad.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.