← Arquitectura por épica

FT-REF-01 · Datos de referencia administrables

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

En 30 segundos

Las reglas de alta, el archivo a SAP y la publicación consultan tablas que no son productos ni plantillas: tallas normalizadas, impuestos y márgenes, excepciones de publicación, proveedores exentos de EAN, la secuencia de variantes. Hoy se cargan con programas de un solo uso y se editan a mano. Esta épica las vuelve diccionarios administrables, cada uno con su llave, su área dueña y su bitácora, cargados tal cual desde P360, y deja los catálogos de SAP como copia de consulta que sólo escribe SAP.

  • Módulo dueño: MS-01 Catálogo. También participan: MS-13 Identidad y acceso, MS-02 Producto, MS-03 Migración y convivencia, MS-05 Auditoría, MS-06 Evaluación, MS-07 Ingesta de archivos.
  • Etapa C · Configura el catálogo. Recibe «PE-T · Usuario con permisos y bitácora» y entrega «PE-C · Catálogo vigente».
  • APIs: construye 8 y usa 11 que construyen otras épicas.
  • Eventos: publica 2 y consume 5.

1. Dónde encaja

Recibe

DeQué
PE-T · Usuario con permisos y bitácoraEl analista del área dueña de cada tabla ya identificado, con sus roles del directorio de MS-13.
FT-INT-04 · Catálogos maestros, precios y costos desde SAP/S4HLos catálogos maestros de SAP (marcas, grupos de artículo, impuestos y proveedores, de ECC y de S4H) ya leídos del archivo por MS-07.
FT-MIG-02 · Migración de plantillas, atributos y listas de valoresLos diccionarios que se conservan, leídos de la base de P360 productivo y entregados por lote con sus llaves de P360.

Entrega

AQué
PE-C · Catálogo vigenteLos diccionarios vigentes con su llave, sus valores y sólo las entradas activas para las reglas; cada cambio sale en REFERENCE_TABLE_CHANGED.
FT-PLT-07 · Reglas de atributosLas tablas que leen los calculados y las reglas: talla normalizada, margen por indicador de impuesto, impuesto por negocio y envase.
FT-CAT-04 · Clasificación SAP derivadaLa tabla de Gobierno de Producto para derivar el grupo de artículo y los catálogos de grupos de ECC y S4H.
FT-CAT-01 · Administración del árbol de categorías webEl catálogo único de sitios (los 14 y el reservado UNLINKED) con su código de departamento y su ID de catálogo, que administra Category (API-01-046 a API-01-049).
FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocioLa lista oficial de sitios con sus códigos y su ID de catálogo (API-01-046), que usa la regla de sitios por negocio.
FT-PRD-03 · EANLa tabla de proveedores y sellers exentos de EAN, de la que sólo responden las entradas activas.
FT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…Los catálogos de marcas y de grupos de artículo a los que apuntan las reglas de la lista negra.
FT-REF-03 · Servicio de matchingLos catálogos de marcas, grupos y proveedores que usa la búsqueda de coincidencias.
FT-INT-03 · Entrada de SKUs creados en SAPLa tabla de exclusiones de SKU de SAP por grupo de artículo y negocio, que MS-07 lee en memoria.
FT-FLU-07 · Excepciones de catalogación y preventas con publicación…Las seis tablas de excepciones por negocio (sección y negocio, sección y marca, sección y proveedor, grupo de artículo, SKU y anuladas), con sus llaves de P360.
FT-INT-04 · Catálogos maestros, precios y costos desde SAP/S4HLas tablas de referencia de proveedores, grupos de artículo e impuestos, con SAP como dueño y la copia de consulta en MS-01.

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

Qué puede capturar el proveedor con e…
Factores de margen por indicador de i…

Diccionarios
Entradas de un diccionario
y 5 más

Roles efectivos de quien llama

REFERENCE_TABLE_CHANGED
LOV_VALUE_CHANGED

REFERENCE_TABLE_CHANGED

REFERENCE_TABLE_CHANGED

REFERENCE_TABLE_CHANGED

OBJECT_FINALIZE

Proveedores que manda SAP
Listas que manda SAP

Lee los diccionarios que se conservan…

Carga de la migración
Entradas de un diccionario

Entradas de un diccionario

permisos

bitácora

Administración del catálogo

Proveedor

QA y Category

Entrada Única · Vendor Center

BFF del portal

★ MS-01 Catálogo

MS-13 Identidad y acceso

MS-02 Producto

MS-03 Migración y convivencia

MS-05 Auditoría

MS-06 Evaluación

MS-07 Ingesta de archivos

Base pim

Eventos

Archivos e imágenes

P360

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

MS-02 ProductoMS-06 EvaluaciónMS-05 AuditoríaEventosBase·pimMS-13 Identidad y accesoMS-01 CatálogoEntrada Única · Vendor CenterMS-02 ProductoMS-06 EvaluaciónMS-05 AuditoríaEventosBase·pimMS-13 Identidad y accesoMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Abre el diccionario de tallas normalizadas2. Pide la definición con su llave compuestaGET /api/v2/reference-tables3. Busca las entradas vigentes de una marcaGET /api/v2/reference-tables/{t}/entries4. Agrega una talla con la llave marca y talla5. Pide el plan de la entrada nuevaPOST /api/v2/reference-tables/{t}/entries/plans6. Revisa que su área sea dueña de la tablaGET /internal/identity/permissions?userId=7. Confirma el plan, esta tabla no pide aprobaciónPOST /api/v2/catalog-plans/{planId}/apply8. Guarda la entrada con quién y cuándo9. Avisa el cambio del diccionarioREFERENCE_TABLE_CHANGED10. Entrega el cambio para la bitácoraREFERENCE_TABLE_CHANGED11. Entrega el cambio para sus reglas de evaluaciónREFERENCE_TABLE_CHANGED12. Entrega el cambio: sus reglas usan ya el valor vigenteREFERENCE_TABLE_CHANGEDAdministración del catálogoBFF
Flujo principal de FT-REF-01
Los pasos en texto
PasoDeAQué haceAPI o evento
1Administración del catálogoEntrada Única · Vendor CenterAbre el diccionario de tallas normalizadas—
2Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Pide la definición con su llave compuestaAPI-01-011
3Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Busca las entradas vigentes de una marcaAPI-01-012
4Administración del catálogoEntrada Única · Vendor CenterAgrega una talla con la llave marca y talla—
5Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Pide el plan de la entrada nuevaAPI-01-013
6MS-01 CatálogoMS-13 Identidad y accesoRevisa que su área sea dueña de la tablaAPI-13-001
7Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Confirma el plan; esta tabla no pide aprobaciónAPI-01-004
8MS-01 CatálogoBase pimGuarda la entrada con quién y cuándo—
9MS-01 CatálogoEventosAvisa el cambio del diccionariocatalog.governance.changed/REFERENCE_TABLE_CHANGED
10EventosMS-05 AuditoríaEntrega el cambio para la bitácoracatalog.governance.changed/REFERENCE_TABLE_CHANGED
11EventosMS-06 EvaluaciónEntrega el cambio para sus reglas de evaluacióncatalog.governance.changed/REFERENCE_TABLE_CHANGED
12EventosMS-02 ProductoEntrega el cambio: sus reglas usan ya el valor vigentecatalog.governance.changed/REFERENCE_TABLE_CHANGED

3.1 Catálogos de SAP y sitios

Entrada Única · Vendor CenterEventosBase·pimMS-01 CatálogoMS-07 Ingesta de archivosArchivosEntrada Única · Vendor CenterEventosBase·pimMS-01 CatálogoMS-07 Ingesta de archivosArchivosQA y CategoryBFF1. Avisa que llegó el archivo de proveedores de SAPOBJECT_FINALIZE2. Entrega los proveedores leídos, por lotePOST /internal/governance/sap/suppliers3. Entrega marcas, grupos e impuestos de ECC y S4HPOST /internal/governance/sap/lov4. Aplica sin aprobación las listas cuyo dueño es SAP5. Avisa los valores nuevos o dados de bajaLOV_VALUE_CHANGED6. Category da de alta un sitio con su ID de catálogo7. Guarda el sitio nuevo, que nunca se borraPOST /api/v2/brands8. Avisa el sitio nuevo a quienes lo usanREFERENCE_TABLE_CHANGEDQA y CategoryBFF
Catálogos de SAP y sitios

3.2 Carga tal cual desde P360

Base·pimMS-01 CatálogoP360MS-03 Migración y convivenciaBase·pimMS-01 CatálogoP360MS-03 Migración y convivencia1. Lee los diccionarios que se conservan, del mismo día2. Carga las definiciones con su llave declaradaPOST /internal/governance/bulk-load/{coleccion}3. Carga las entradas con sus llaves de P360POST /internal/governance/bulk-load/{coleccion}4. Guarda sin eventos, lo dudoso queda inactivo5. Cuenta las entradas vivas para conciliar con la base de P360GET /api/v2/reference-tables/{t}/entries
Carga tal cual desde P360

3.3 Lo que consulta la captura

MS-02 ProductoMS-01 CatálogoEntrada Única · Vendor CenterMS-02 ProductoMS-01 CatálogoEntrada Única · Vendor CenterProveedorBFF1. Elige su plantilla y pulsa «Siguiente»2. Pide las marcas y grupos que puede catalogarGET /bff/v1/catalog/capture-scope3. Resuelve el alcance con los catálogos de su negocioGET /api/v2/rules/allowed-values4. Pide los factores de margen por indicador de impuestoGET /bff/v1/catalog/margin-factors5. Lee la tabla de margen por indicador vigenteGET /api/v2/reference-tables/{t}/entries6. Lee las etiquetas de los indicadores de impuestoGET /api/v2/lovs/{id}/values7. Lee los sellers exentos de EAN activosGET /api/v2/reference-tables/{t}/entriesProveedorBFF
Lo que consulta la captura

4. Si algo sale mal

  • La llave no sigue el esquema declarado de la tabla. El plan responde 422 VALIDATION_ERROR con la parte de la llave que falta o sobra; no se guarda nada.
  • Alguien intenta editar en el PIM un catálogo de SAP. El plan responde 422 BUSINESS_ERROR: esas listas sólo las escribe la ingesta de MS-07; el cambio se pide a SAP por el área de SAP.
  • Llega otra vez el mismo archivo de SAP. La carga es idempotente por archivo y por registro y no duplica nada; si trae otro contenido, responde 409 IDEMPOTENCY_MISMATCH y MS-07 lo deja para revisión.
  • La migración trae un diccionario dudoso, vacío o de operación interna. No entra (diccionario 17, Dos, vacíos y de operación) o entra inactivo; ninguna regla lo lee hasta que Gobierno de Producto lo active, y queda en la lista de DUD-34.
  • Un módulo no alcanzó a refrescar su copia en memoria. Cada aviso lleva versión: el consumidor aplica en orden y descarta lo viejo; al arrancar vuelve a leer las tablas completas. Ninguna regla lee la base de P360 ni archivos en disco.

5. APIs

Las que construye esta épica (8)

GET /api/v2/reference-tables · Diccionarios
CampoValor
APIAPI-01-011 · MS-01 Catálogo
Para quéLista los diccionarios que se conservan, cada uno con su llave compuesta declarada, sus columnas, el área dueña, si sus cambios piden aprobación, quién lo consume y cuántas entradas vivas tiene.
En esta épicaVer los diccionarios con su llave, su área dueña y quién los consume
Quién la llamaBFF del portal, MS-02 Producto, MS-03 Migración y convivencia
PermisoCAT-L; los módulos, con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
Parámetrosq = talla, ownerArea = GOBIERNO-PRODUCTO, status = ACTIVE

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "table": "TALLA_NORMALIZADA",
        "name": {
          "es": "Talla normalizada por marca"
        },
        "keySchema": [
          "marca",
          "talla"
        ],
        "keySeparator": "<::>",
        "valueSchema": [
          {
            "name": "tallaNormalizada",
            "type": "STRING"
          }
        ],
        "ownerArea": "GOBIERNO-PRODUCTO",
        "changesRequireApproval": false,
        "consumers": [
          "MS-02"
        ],
        "entries": 30,
        "activeEntries": 30,
        "status": "ACTIVE",
        "version": 4
      }
    ],
    "page": 1,
    "size": 50,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORUn filtro trae un valor que no existe
GET /api/v2/reference-tables/{t}/entries · Entradas de un diccionario
CampoValor
APIAPI-01-012 · MS-01 Catálogo
Para quéDevuelve las entradas de un diccionario por llave completa o parcial. Por omisión sólo las activas, que son las únicas que deben usar las reglas; MS-02, MS-06, MS-07 y MS-08 las cargan en memoria y las refrescan con el aviso de cambio.
En esta épicaLeer las entradas vigentes de un diccionario
Quién la llamaBFF del portal, MS-02 Producto, MS-03 Migración y convivencia, MS-06 Evaluación, MS-07 Ingesta de archivos, MS-08 Adaptadores de salida
PermisoCAT-L; los módulos, con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
Parámetrost = TALLA_NORMALIZADA, key = MARCA01<::>, active = True, page = 1, size = 100
También la usanFT-ACT-05, FT-INT-03, FT-PLT-05, FT-PLT-10, FT-PRD-03

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "key": "MARCA01<::>CH",
        "keyParts": {
          "marca": "MARCA01",
          "talla": "CH"
        },
        "values": {
          "tallaNormalizada": "S"
        },
        "active": true,
        "version": 2,
        "updatedAt": "2027-01-10T14:00:00Z",
        "updatedBy": {
          "area": "GOBIERNO-PRODUCTO"
        }
      }
    ],
    "page": 1,
    "size": 100,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl diccionario no existe
POST /api/v2/reference-tables/{t}/entries/plans · Plan de cambio de entradas
CampoValor
APIAPI-01-013 · MS-01 Catálogo
Para quéRevisa sin escribir altas, cambios y bajas lógicas de entradas: la llave debe seguir el esquema de la tabla y sólo el área dueña puede cambiarla. Dice si el cambio se aplica al confirmar o si la tabla pide aprobación.
En esta épicaAlta, cambio y baja lógica de entradas
Quién la llamaBFF del portal
PermisoCAT-E del área dueña del diccionario
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Parámetrost = TALLA_NORMALIZADA
También la usanFT-INT-03

Request

{
  "operation": "CREATE",
  "items": [
    {
      "key": "MARCA01<::>XCH",
      "values": {
        "tallaNormalizada": "XS"
      },
      "active": true
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-0c8a5e",
    "expiresAt": "2027-01-12T17:10:00Z",
    "requiresApproval": false,
    "summary": {
      "create": 1,
      "update": 0,
      "deactivate": 0
    },
    "items": [
      {
        "key": "MARCA01<::>XCH",
        "action": "CREATE"
      }
    ],
    "applyUrl": "/api/v2/catalog-plans/pln-0c8a5e/apply"
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERRORLa llave no sigue el esquema declarado o falta una columna obligatoria
409ID_ALREADY_EXISTSLa llave ya existe: se pide como cambio, no como alta
403AUTHORIZATION_ERROREl área de quien llama no es dueña de la tabla
POST /internal/governance/sap/suppliers · Proveedores que manda SAP
CampoValor
APIAPI-01-052 · MS-01 Catálogo
Para quéMS-07 entrega, ya leído del archivo, un lote de proveedores de SAP (código, nombre, tipo y activo) que se guardan en la lista de proveedores, con dueño SAP. Sus grupos de artículo, marcas y negocios no vienen de SAP: los mantiene Gobierno de Producto como reglas.
En esta épicaRecibir los proveedores que manda SAP
Quién la llamaMS-07 Ingesta de archivos
PermisoSólo MS-07 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enlov_values, governance_receipts, governance_outbox
Publicacatalog.governance.changed/LOV_VALUE_CHANGED
También la usanFT-INT-04

Request

{
  "fileId": "prov-ecc-20270112-01",
  "system": "ECC",
  "records": [
    {
      "recordNo": 1,
      "supplierId": "PROV-0001",
      "name": "Proveedor uno",
      "supplierType": "NACIONAL",
      "active": true
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "fileId": "prov-ecc-20270112-01",
    "applied": 1,
    "rejected": 0,
    "items": [
      {
        "recordNo": 1,
        "supplierId": "PROV-0001",
        "result": "UPDATED"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
409IDEMPOTENCY_MISMATCHEl mismo archivo llega otra vez con contenido distinto
422VALIDATION_ERRORUn registro llega sin código o con un tipo de proveedor desconocido
GET /api/v2/brands · Los sitios
CampoValor
APIAPI-01-046 · MS-01 Catálogo
Para quéLista los 14 sitios (banners) más el reservado UNLINKED, con su código de departamento de P360 y el ID de catálogo que reconoce la tienda. Los sitios no se borran.
En esta épicaLa lista oficial de sitios con su código de departamento y su ID de catálogo
Quién la llamaBFF del portal, MS-02 Producto, MS-04 Reportes
PermisoENT-L
CabecerasAuthorization, X-Request-Id
Parámetrosstatus = ACTIVE
También la usanFT-CAT-01, FT-CAT-05

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "code": "LIVERPOOL",
        "departmentCode": "NA",
        "name": "Liverpool",
        "slug": "liverpool",
        "catalogId": "ICatalog1000",
        "status": "ACTIVE",
        "reserved": false,
        "version": 2
      },
      {
        "code": "SUBURBIA",
        "departmentCode": "SB",
        "name": "Suburbia",
        "slug": "suburbia",
        "catalogId": "catalogSB",
        "status": "ACTIVE",
        "reserved": false,
        "version": 1
      },
      {
        "code": "UNLINKED",
        "departmentCode": null,
        "name": "Categorías desligadas",
        "slug": "unlinked",
        "catalogId": null,
        "status": "ACTIVE",
        "reserved": true,
        "version": 1
      }
    ],
    "page": 1,
    "size": 50,
    "total": 15
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene ENT-L
POST /api/v2/brands · Dar de alta un sitio
CampoValor
APIAPI-01-047 · MS-01 Catálogo
Para quéDa de alta un sitio nuevo con su código de departamento y su ID de catálogo, para que sus categorías puedan viajar a la tienda.
En esta épicaCategory da de alta un sitio
Quién la llamaBFF del portal
PermisoCAT-E
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enbrands, governance_outbox
Publicacatalog.governance.changed/REFERENCE_TABLE_CHANGED

Request

{
  "code": "SITIO15",
  "departmentCode": "S15",
  "name": "Sitio de ejemplo",
  "slug": "sitio-ejemplo",
  "catalogId": "catalogS15"
}

Response · 201

{
  "success": true,
  "data": {
    "code": "SITIO15",
    "status": "ACTIVE",
    "version": 1
  }
}

Errores

HTTPCódigoCuándo
409ID_ALREADY_EXISTSYa existe un sitio con ese código, departamento o ID de catálogo
400VALIDATION_ERRORFalta el código, el nombre o el ID de catálogo
GET /api/v2/brands/{id} · Ver un sitio
CampoValor
APIAPI-01-048 · MS-01 Catálogo
Para quéDevuelve un sitio con su código de departamento, su ID de catálogo y su versión.
En esta épicaVer un sitio con su versión
Quién la llamaBFF del portal, MS-02 Producto
PermisoENT-L
CabecerasAuthorization, X-Request-Id
Parámetrosid = LIVERPOOL

Request

null

Response · 200

{
  "success": true,
  "data": {
    "code": "LIVERPOOL",
    "departmentCode": "NA",
    "name": "Liverpool",
    "slug": "liverpool",
    "catalogId": "ICatalog1000",
    "status": "ACTIVE",
    "reserved": false,
    "version": 2
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl sitio no existe
PUT /api/v2/brands/{id} · Cambiar un sitio
CampoValor
APIAPI-01-049 · MS-01 Catálogo
Para quéCambia el nombre, el slug o el ID de catálogo de un sitio, con su versión. No hay baja: un sitio que deja de usarse se marca inactivo.
En esta épicaCategory cambia un sitio o lo marca inactivo; nunca se borra
Quién la llamaBFF del portal
PermisoCAT-E
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Parámetrosid = SITIO15
Escribe enbrands, governance_outbox
Publicacatalog.governance.changed/REFERENCE_TABLE_CHANGED

Request

{
  "name": "Sitio de ejemplo 2",
  "catalogId": "catalogS15",
  "status": "INACTIVE"
}

Response · 200

{
  "success": true,
  "data": {
    "code": "SITIO15",
    "status": "INACTIVE",
    "version": 2
  }
}

Errores

HTTPCódigoCuándo
409VERSION_CONFLICTEl sitio cambió desde que se leyó
422BUSINESS_ERRORSe intenta inactivar un sitio con categorías aprobadas o cambiar el reservado UNLINKED

Las que usa y construye otra épica (11)

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-050POST /internal/governance/sap/lovRecibir marcas, grupos e impuestos que manda SAPFT-PLT-03 · Listas de valores y modelo canónico con equivalencias por…
API-01-004POST /api/v2/catalog-plans/{planId}/applyConfirmar el plan: aplica directo si la tabla no pide aprobaciónFT-PLT-01 · Fundamentos de gobierno de plantillas
API-13-001GET /internal/identity/permissions?userId=Saber si el área de quien llama es dueña de la tablaFT-USR-01 · Identidad y autenticación de usuarios internos…
API-01-053POST /internal/governance/bulk-load/{coleccion}Cargar tal cual los diccionarios que se conservanFT-PLT-01 · Fundamentos de gobierno de plantillas
API-BFF-103GET /bff/v1/catalog/capture-scopeLa pantalla de captura pide marcas y grupos permitidos por el BFF, ya no por /public/rtFT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro
API-01-202GET /api/v2/rules/allowed-valuesMarcas y grupos permitidos por plantilla, negocio y proveedor (FT-PLT-07)FT-PLT-07 · Reglas de atributos
API-BFF-105GET /bff/v1/catalog/margin-factorsLa pantalla pide por el BFF los factores de margen por indicador de impuestoFT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro
API-01-007GET /api/v2/lovs/{id}/valuesLas etiquetas de los indicadores de impuesto (lista de SAP)FT-PLT-03 · Listas de valores y modelo canónico con equivalencias por…
API-01-001GET /api/v2/attributesEl catálogo de atributos que administra el mismo móduloFT-PLT-02 · Catálogo de atributos
API-01-025POST /api/v2/taxonomies/PRODUCT/nodes/{id}/bindings/plansLa configuración global de atributos en la raíz del árbolFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveLa vista efectiva donde aparece lo configuradoFT-PLT-06 · Configuración de atributos por plantilla y por negocio…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.governance.changed/REFERENCE_TABLE_CHANGEDSe confirma un alta, un cambio o una baja de entradas, o el alta o cambio de una definiciónFT-INT-03
catalog.governance.changed/LOV_VALUE_CHANGEDLlegan de SAP proveedores, marcas, grupos o impuestos nuevos o dados de bajaFT-ARQ-02, FT-PLT-03, FT-PLT-06, FT-RAC-07

Consume

EventoPara quéQuién lo publica
catalog.governance.changed/REFERENCE_TABLE_CHANGEDMS-02 refresca en memoria las tablas que leen sus reglas de alta, el EAN y las excepcionesesta misma épica
catalog.governance.changed/REFERENCE_TABLE_CHANGEDMS-06 refresca las tablas que usa al evaluaresta misma épica
catalog.governance.changed/REFERENCE_TABLE_CHANGEDMS-05 guarda quién cambió qué entrada, con el antes y el despuésesta misma épica
catalog.governance.changed/REFERENCE_TABLE_CHANGEDMS-07 refresca la tabla de exclusiones de SKU de SAPesta misma épica
catalog.egress.files/OBJECT_FINALIZEMS-07 lee el archivo de catálogos de SAPD-ARCHIVOS

7. Datos

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

ColecciónDueñoQué guardaEsta épica
reference_table_defsMS-01Definición de cada diccionario.escribe
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.escribe
lovsMS-01Cabecera de cada lista de valores.escribe
lov_valuesMS-01Cada valor de lista: código, etiqueta, orden y equivalencias por sistema.escribe
brandsMS-01Los sitios (banners): Liverpool, Suburbia y los demás.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
reference_table_defsMS-01Definición de cada diccionario.lee
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.lee
lovsMS-01Cabecera de cada lista de valores.lee
lov_valuesMS-01Cada valor de lista: código, etiqueta, orden y equivalencias por sistema.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-01·H1 · Mantener tablas sin TIP1pasos 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; API-01-011, API-01-012, API-01-013
FT-REF-01·H2 · Paridad desde el día unoP1flujo «Carga tal cual desde P360»; API-01-053
FT-REF-01·H3 · Lo que hoy consulta el portalP1flujo «Catálogos de SAP y sitios», «Lo que consulta la captura»; API-BFF-103, API-01-202, API-01-012
FT-REF-01·H4 · Impuesto y margenP2flujo «Lo que consulta la captura»; API-BFF-105, API-01-012, API-01-007
FT-REF-01·H5 · Excepciones por negocioP2flujo «Carga tal cual desde P360»; API-01-011, API-01-053
FT-REF-01·H6 · Módulo de administración del modeloP1API-01-001, API-01-025, API-01-028. Fuera: La administración de atributos, listas, estructuras y secciones la construyen FT-PLT-02 a FT-PLT-06; el «diccionario de configuración» global es la configuración de la raíz del árbol (FT-PLT-06), que heredan todas las plantillas y aparece en la vista efectiva con la que cataloga el proveedor.

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-01-1. Un solo modelo de diccionario: una definición con llave compuesta declarada (sus partes y el separador), columnas con tipo, área dueña, si sus cambios piden aprobación (por omisión no) y quién lo consume; las entradas tienen baja lógica y las reglas sólo reciben las activas. Por qué: Reemplaza los programas de un solo uso por una tabla que administra su área, con bitácora, y deja la aprobación donde el área la pida (por ejemplo, excepciones). Se apoya en DEC-PLT-08, DUD-34.
  • D-REF-01-2. Paridad desde el día uno: se carga tal cual, desde la base de P360 productivo del mismo día, sólo lo que el inventario marca para conservar. No entran el diccionario 17, Dos, los vacíos ni los de operación interna; lo dudoso de DUD-34 entra inactivo hasta que Gobierno de Producto lo active. Por qué: Si una tabla que usa una regla no se migra, el producto se crea mal y nadie ve el error; si se migra una copia vencida, se contradicen dos fuentes. Se apoya en DUD-34, DEC-ARQ-06, PD-19.
  • D-REF-01-3. Los catálogos de SAP (marcas, grupos de artículo, impuestos y proveedores) son listas con dueño SAP: sólo las escribe la ingesta de MS-07 (API-01-050 y API-01-052) y el PIM guarda la copia de consulta, sin administrarlas. Suburbia usa los de S4H y Liverpool y Marketplace los de ECC; la lista se elige por negocio en el atributo. Por qué: SAP sigue siendo el maestro de marcas y de proveedores; el PIM sólo los consulta, como propone DUD-21. Se apoya en DUD-21, DUD-23.
  • D-REF-01-4. Impuesto y margen viven en diccionarios del PIM por negocio: en Marketplace el indicador es siempre E2 y el multiplicador por indicador es una tabla de P360 que se conserva (G5 = 1.2528). En R1 la pantalla pide los factores por el BFF (API-BFF-105, que junta este diccionario con la lista de impuestos de SAP); desde R2 el margen lo devuelve calculado el plan de valores de MS-02. Por qué: Un solo lugar para la tabla y un cálculo en el servidor con el valor vigente, igual para la pantalla, la carga masiva y la API. Se apoya en RF-PLA-13, RN-PLA-14, DUD-23.
  • D-REF-01-5. Las seis tablas de excepciones se conservan separadas para Liverpool y para Suburbia, con sus llaves de P360. MS-01 sólo las guarda; las evalúa FT-FLU-07 en MS-02, con la cascada de hoy y la anulación. Por qué: Un dueño para el dato (MS-01) y otro para la regla que lo usa (MS-02), sin cambiar la cascada en el corte. Se apoya en DUD-34, DEC-PLT-08.
  • D-REF-01-6. Lo que hoy el portal pide a P360 por /public/rt (marcas y grupos permitidos, sellers sin EAN, margen por indicador) no se construye: desde R1 la pantalla lo pide por el BFF a la API v2 de MS-01, y lo que es de producto (sellers sin EAN) se lee en MS-02 desde este diccionario. Por qué: Decisión 20 del backend compartido que adopta ADR-12: sin capa de compatibilidad para los fronts; cada pantalla se cambia una sola vez. Se apoya en ADR-12, PD-06.
  • D-REF-01-7. MS-02, MS-06, MS-07 y MS-08 consultan los diccionarios desde su copia en memoria: la cargan al arrancar y la refrescan con REFERENCE_TABLE_CHANGED. La secuencia de variantes por plantilla es uno más de estos diccionarios. Por qué: Hoy las reglas leen copias en disco que nadie refresca; con el aviso, todos usan el valor vigente sin consultar la base en cada regla. Se apoya en RSG-52, DEC-PLT-08.
  • D-REF-01-8. Los sitios (los 14 banners y el reservado UNLINKED) son datos de referencia del catálogo en la colección brands: los administra Category con API-01-046 a API-01-049, con versión y sin borrado (un sitio que se deja de usar queda inactivo). Esta épica los construye; categorías y regla de sitios sólo los leen. Las marcas comerciales no son sitios: son la lista de SAP. Por qué: La lista oficial de sitios necesita un solo dueño y una sola tabla con sus tres códigos, como propone DUD-21, y no debe confundirse con las 40,910 marcas. Se apoya en DUD-21.

Qué falta decidir

IDQué falta
DUD-34Gobierno de Producto decide tabla por tabla qué se migra, qué se convierte en configuración y qué se retira.
DUD-21Category y Gobierno de Producto ratifican que SAP sigue como maestro de marcas y el PIM guarda la copia.
DUD-23SAP confirma el contrato de los catálogos sin broker y qué viaja por archivo.
DUD-25Revisar en el cliente de P360 las reglas de tallas por división que no aparecen en el código.
PD-15Gobierno de Producto con Publicación y Foro ratifican Conjunto Look y proveedores como reglas, no como árboles.

Fuentes

  1. [D] trazabilidad/features/FT-REF-01-datos-de-referencia-administrables.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.