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
| De | Qué |
|---|---|
| PE-3 · Plantilla asignada | El producto con plantilla y negocio: con ellos se elige el conjunto de reglas que le aplica. |
| FT-PLT-01 · Fundamentos de gobierno de plantillas | La 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 administrables | Los diccionarios que leen las reglas: TallaNormalizada, GpoArtVsEnvase, MargenVsIndicadorImp e impuestos. |
Entrega
| A | Qué |
|---|---|
| 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 vigente | Las 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 SAP | Los 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ías | Los campos calculados del placeholder que viajan a o9 con sus datos maestros. |
| FT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro | Las 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
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 | Administración del catálogo | Entrada Única · Vendor Center | Escribe una regla de cálculo o de calidad | — |
| 2 | Entrada Única · Vendor Center | MS-01 Catálogo (por el BFF) | Pide la vista previa de la regla | API-01-017 |
| 3 | MS-01 Catálogo | MS-02 Producto | Pide probarla sobre una muestra de productos | API-02-118 |
| 4 | Entrada Única · Vendor Center | MS-01 Catálogo (por el BFF) | Confirma el plan: queda por aprobar | API-01-004 |
| 5 | Administración del catálogo | Entrada Única · Vendor Center | Otra persona de Gobierno revisa la prueba y aprueba | — |
| 6 | Entrada Única · Vendor Center | MS-01 Catálogo (por el BFF) | Registra la aprobación de la solicitud | API-01-103 |
| 7 | MS-01 Catálogo | Base pim | Guarda la regla con versión y vigencia | — |
| 8 | MS-01 Catálogo | Eventos | Avisa que cambió la regla | catalog.governance.changed/RULE_CHANGED |
| 9 | Eventos | MS-02 Producto | Entrega el cambio para refrescar su caché | catalog.governance.changed/RULE_CHANGED |
| 10 | MS-02 Producto | MS-01 Catálogo | Lee el conjunto vigente de la plantilla y negocio | API-01-016 |
| 11 | Proveedor | Entrada Única · Vendor Center | Captura precio, costo, marca y talla | — |
| 12 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el plan de valores: calcula y revisa | API-02-012 |
| 13 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma el plan de valores | API-02-057 |
| 14 | MS-02 Producto | Base pim | Guarda los calculados con su regla y versión | — |
3.1 El comprador corrige el envase calculado
3.2 Tendencias: alta, cambio y baja
3.3 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Consultar reglas; MS-02 carga y refresca su caché por plantilla y negocio |
| Quién la llama | BFF del portal, MS-02 Producto, MS-06 Evaluación |
| Permiso | CAT-L; MS-02 y MS-06 con su cuenta de servicio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | type = DERIVED_VALUE,QUALITY_CHECK, templateId = EU4-0412, business = MER, status = ACTIVE, asOf = 2026-11-01T06:00:00Z, page = 1, size = 50 |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El tipo de regla, el negocio o la fecha de consulta no son válidos |
| 403 | AUTHORIZATION_ERROR | Quien llama no tiene CAT-L |
POST /api/v2/rules/plans · Preparar un cambio de reglas
| Campo | Valor |
|---|---|
| API | API-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 épica | Vista previa de reglas con su prueba sobre casos y muestra |
| Quién la llama | BFF del portal |
| Permiso | CAT-E (Gobierno de Producto); el equipo de Tendencias sólo para reglas TREND |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key, If-Match |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | Una lista o diccionario destino está inactivo, un código no existe, está repetido o inactivo, o hay más de 100 códigos |
| 409 | VERSION_CONFLICT | La regla cambió desde que se leyó |
| 422 | BUSINESS_ERROR | La regla forma un ciclo (un calculado que depende de sí mismo) o choca con otra del mismo alcance |
| 503 | DEPENDENCY_UNAVAILABLE | MS-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
| Campo | Valor |
|---|---|
| API | API-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 épica | Marcas y grupos de artículos permitidos por plantilla, negocio y proveedor (alcance del proveedor) |
| Quién la llama | BFF del portal, MS-02 Producto, Gateway de terceros /partner/v1 |
| Permiso | El proveedor o seller sólo para sí mismo; ENT-L para usuarios internos; MS-02 con su cuenta de servicio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | templateId = EU4-0412, business = MER, supplierId = PROV-0001, section = 424 |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La plantilla o el proveedor no existen |
| 403 | AUTHORIZATION_ERROR | Un proveedor o seller pide el alcance de otro |
| 400 | VALIDATION_ERROR | El negocio no es MER, SUB ni MKP |
POST /internal/product/rules/dry-runs · Prueba una regla candidata sin guardar nada: el motor de MS-
| Campo | Valor |
|---|---|
| API | API-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 épica | Que 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
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Quien llama no tiene el permiso o no es el módulo autorizado |
| 422 | VALIDATION_ERROR | Falta un dato o viene con un formato inválido; el detalle dice qué campo |
| 409 | IDEMPOTENCY_MISMATCH | Se 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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-01-004 | POST /api/v2/catalog-plans/{planId}/apply | Confirmar el plan de reglas: aplica o deja la solicitud por aprobar | FT-PLT-01 · Fundamentos de gobierno de plantillas |
| API-01-103 | POST /api/v2/catalog-change-requests/{changeRequestId}/decision | Aprobar o rechazar la solicitud de una regla de cálculo, calidad o activo | FT-PLT-01 · Fundamentos de gobierno de plantillas |
| API-01-034 | GET /api/v2/catalog-receipts/{requestId} | Recibo de la confirmación | FT-PLT-01 · Fundamentos de gobierno de plantillas |
| API-02-012 | POST /api/v2/products/{id}/values/plans | Plan de valores: ahí MS-02 corre las reglas, calcula y bloquea | FT-RAC-01 · Motor de validación en línea y candados de datos… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar el plan de producto | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-11-001 | GET /api/v2/asset-types | Tipos de activo que puede pedir una regla | FT-ACT-01 · Tipos de activo digital y reglas de imágenes por… |
| API-11-004 | POST /api/v2/assets/uploads | Subir el activo que pidió la regla | FT-ACT-02 · Registro, congelado y publicación de URLs de activos |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.governance.changed/RULE_CHANGED | Se confirma el alta, el cambio, la activación o la baja de una regla o de una tendencia | FT-ACT-01, FT-CAT-03, FT-CAT-05, FT-RAC-01, FT-REF-02 |
catalog.product.changed/PRODUCT_UPDATED | MS-02 guarda un envase corregido a mano o recalcula la tendencia de un producto | FT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PRD-05, FT-RAC-06 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.governance.changed/RULE_CHANGED | MS-02 refresca su caché de reglas y, si es una tendencia, recalcula qué productos y placeholders la cumplen | esta misma épica |
catalog.product.changed/PRODUCT_UPDATED | MS-05 registra quién corrigió el envase, con el antes y el después | 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 |
|---|---|---|---|
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. | escribe |
governance_receipts | MS-01 | El recibo de cada escritura confirmada en el catálogo (antes operation_receipts). | escribe |
governance_outbox | MS-01 | Los cambios del catálogo que esperan salir como evento (antes outbox). | escribe |
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | escribe |
reference_tables | MS-01 | Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia. | lee |
reference_table_defs | MS-01 | Definición de cada diccionario. | lee |
template_views | MS-01 | La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios. | lee |
attributes | MS-01 | Cada atributo: tipo, lista, restricciones, grupos e identificadores externos. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-PLT-07·H1 · Paridad de calculados | P1 | pasos 1, 2, 3, 4, 5, 6, 7; API-01-017, API-02-118 |
| FT-PLT-07·H2 · Calidad que bloquea | P1 | pasos 11, 12, 13; API-02-012, API-01-016 |
| FT-PLT-07·H3 · Datos maestros inferidos | P1 | pasos 10, 12, 13, 14; API-02-012, API-01-202 |
| FT-PLT-07·H4 · Impuesto de Marketplace | P2 | pasos 12, 14; API-01-016 |
| FT-PLT-07·H5 · Envase granular | P2 | flujo «El comprador corrige el envase calculado» |
| FT-PLT-07·H6 · Activo condicionado por un atributo | P2 | flujo «Activo que depende de un atributo»; API-11-001, API-11-004 |
| FT-PLT-07·H7 · Calculados del placeholder para o9 | P2 | pasos 2, 4, 12, 13, 14; API-01-017 |
| FT-PLT-07·H8 · Administrar tendencias por atributos y valores | P2 | flujo «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
| ID | Qué falta |
|---|---|
| PD-05 | Se cierra con ADR-12 y D-RAC-01-1: MS-01 define las reglas y MS-02 las ejecuta. |
| DUD-34 | Decidir con Gobierno de Producto qué diccionarios se migran tal cual, cuáles se vuelven regla y cuáles se retiran. |
| DUD-25 | Inventario de las reglas de P360 sin lector en el código vivo, antes de dar la paridad por completa. |
| DUD-02 | Actualizar 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
- [D]
trazabilidad/features/FT-PLT-07-reglas-atributos-calculados-calidad.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.