← Arquitectura por épica

FT-PLT-05 · Taxonomía de plantillas por familia, metadatos de…

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-05: 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-05.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PLT-05-taxonomia-y-metadatos-de-plantilla.md.

En 30 segundos

Hay más de 3,000 plantillas y el proveedor se pierde buscando la suya; además, lo que se configura en una plantilla no pasa a las de su misma familia. Esta épica ordena el árbol de plantillas: plantillas generales por familia para que siempre haya una que sirva, búsqueda por nombre y palabra clave acotada a lo que permite el grupo de artículo del producto, metadatos (nombre, orden de grupos, imágenes mínimas) que se heredan del ancestro más cercano, y jerarquías con tipo y número de niveles.

  • Módulo dueño: MS-01 Catálogo. También participan: MS-02 Producto, MS-07 Ingesta de archivos, MS-15 IA y enriquecimiento.
  • Etapa 2 · Plantilla. Recibe «PE-2 · Sin duplicado» y entrega «PE-3 · Plantilla asignada».
  • APIs: construye 8 y usa 9 que construyen otras épicas.
  • Eventos: publica 3 y consume 4.

1. Dónde encaja

Recibe

DeQué
PE-2 · Sin duplicadoLa propuesta sin duplicado y fuera de la lista negra, con su negocio, su proveedor y su grupo de artículo, que todavía necesita plantilla.
FT-PLT-01 · Fundamentos de gobierno de plantillasEl mecanismo común de escritura para el árbol: plan, solicitud con aprobación e ID EU{nivel+1}-{número} asignado al aprobar.
FT-INT-04 · Catálogos maestros, precios y costos desde SAP/S4HLa jerarquía de grupos de artículo de ECC y de S4H, ya leída del archivo por MS-07.
FT-IA-02 · Sugerencia de plantilla por IA a partir del producto…La plantilla general de familia que sugiere la IA a partir del producto homólogo, con su confianza.

Entrega

AQué
PE-3 · Plantilla asignadaEl producto queda con una sola plantilla hoja, activa y permitida para su grupo de artículo y negocio; desde ahí la vista efectiva dice qué pedir.
FT-PLT-06 · Configuración de atributos por plantilla y por negocio…El árbol con su herencia: de qué ancestro toma cada nodo sus metadatos y su configuración, y qué nodos reciben productos.
FT-PLT-08 · Títulos, nombres y descripciones de productoLos metadatos del nombre de cada plantilla (guía, excepciones y orden de atributos para el título), resueltos con herencia.
FT-IA-02 · Sugerencia de plantilla por IA a partir del producto…El árbol, las palabras clave y las plantillas de familia en las que busca la sugerencia de la IA.
FT-IA-04 · Integración de los modelos de IA existentesEl árbol de plantillas y los grupos de artículo que usan los modelos de IA que ya existen.
FT-ACT-01 · Tipos de activo digital y reglas de imágenes por…El mínimo por tipo de imagen de cada plantilla (assetRequirements), heredado del ancestro cuando la plantilla no lo define.
FT-CAT-03 · Categorización de productosEl árbol de plantillas para mapear cada plantilla con su categoría web.
FT-CAT-04 · Clasificación SAP derivadaLas jerarquías de grupos de artículo de ECC y S4H en las que la clasificación crea sus hojas por tipo de producto.

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

Buscar plantillas

Sugerir la plantilla por el producto…

Selector de plantillas
Metadatos de una plantilla
y 6 más

Asignar plantilla o categorías web
Confirmar un plan de Producto

CLASSIFICATION_CHANGED

POST /internal/product/catalog-usage

TAXONOMY_NODE_CHANGED
TEMPLATE_VIEW_CHANGED

TAXONOMY_NODE_CHANGED

OBJECT_FINALIZE

Jerarquías que manda SAP

Clasificar lo que llega de SAP

Proveedor

Administración del catálogo

Entrada Única · Vendor Center

BFF del portal

★ MS-01 Catálogo

MS-02 Producto

MS-07 Ingesta de archivos

MS-15 IA y enriquecimiento

Base pim

Eventos

Archivos e imágenes

Contexto de FT-PLT-05

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-02 ProductoBase·pimMS-01 CatálogoMS-15 IA y enriquecimientoEntrada Única · Vendor CenterEventosMS-02 ProductoBase·pimMS-01 CatálogoMS-15 IA y enriquecimientoEntrada Única · Vendor CenterProveedorBFF1. Abre su propuesta, que todavía no tiene plantilla2. Pide la plantilla sugerida por el producto homólogoPOST /api/v2/ai/template-suggestions3. La sugerencia no le sirve y busca «licuadora»4. Busca plantillas por textoGET /bff/v1/catalog/templates5. Pide las hojas permitidas para su grupo de artículoGET /api/v2/structures/{id}/leaves6. Acota por reglas de grupo, alcance y palabras clave7. Elige la plantilla general de su familia8. Abre la ruta y los metadatos heredadosGET /api/v2/taxonomies/{t}/nodes/{id}/metadata9. Pide el plan de asignar la plantilla al productoPOST /api/v2/products/classifications/plans10. Confirma la asignaciónPOST /api/v2/product-plans/{planId}/apply11. Avisa la plantilla asignada al productoCLASSIFICATION_CHANGEDProveedorBFF
Flujo principal de FT-PLT-05
Los pasos en texto
PasoDeAQué haceAPI o evento
1ProveedorEntrada Única · Vendor CenterAbre su propuesta, que todavía no tiene plantilla—
2Entrada Única · Vendor CenterMS-15 IA y enriquecimiento (por el BFF)Pide la plantilla sugerida por el producto homólogoAPI-15-001
3ProveedorEntrada Única · Vendor CenterLa sugerencia no le sirve y busca «licuadora»—
4Entrada Única · Vendor CenterBFF del portalBusca plantillas por textoAPI-BFF-107
5BFF del portalMS-01 CatálogoPide las hojas permitidas para su grupo de artículoAPI-01-022
6MS-01 CatálogoBase pimAcota por reglas de grupo, alcance y palabras clave—
7ProveedorEntrada Única · Vendor CenterElige la plantilla general de su familia—
8Entrada Única · Vendor CenterMS-01 Catálogo (por el BFF)Abre la ruta y los metadatos heredadosAPI-01-026
9Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de asignar la plantilla al productoAPI-02-016
10Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma la asignaciónAPI-02-057
11MS-02 ProductoEventosAvisa la plantilla asignada al productocatalog.product.changed/CLASSIFICATION_CHANGED

3.1 Gobierno de Producto edita metadatos y mueve una plantilla

MS-15 IA y enriquecimientoEventosMS-02 ProductoMS-01 CatálogoEntrada Única · Vendor CenterMS-15 IA y enriquecimientoEventosMS-02 ProductoMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Abre los metadatos de una plantilla2. Lee cada metadato con el nodo de donde vieneGET /api/v2/taxonomies/{t}/nodes/{id}/metadata3. Pide el plan de palabras clave e imágenes mínimasPOST /api/v2/taxonomies/{t}/nodes/{id}/metadata/plans4. Pide el plan de mover la plantilla a otra ramaPOST /api/v2/structures/{id}/nodes/plans5. Cuenta los productos que cambian de vistaPOST /internal/product/catalog-usage6. Confirma los dos planes y abre la solicitudPOST /api/v2/catalog-plans/{planId}/apply7. Otro administrador aprueba la solicitudPOST /api/v2/catalog-change-requests/{changeRequestId}/decision8. Avisa el nodo movido con las reglas que adoptaTAXONOMY_NODE_CHANGED9. Avisa las vistas recalculadas de esa plantillaTEMPLATE_VIEW_CHANGED10. Entrega el cambio para su índice de plantillasTAXONOMY_NODE_CHANGEDAdministración del catálogoBFF
Gobierno de Producto edita metadatos y mueve una plantilla

3.2 Crear una jerarquía con tipo y niveles

EventosBase·pimMS-01 CatálogoEntrada Única · Vendor CenterEventosBase·pimMS-01 CatálogoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Crea una jerarquía principal de cuatro niveles2. Lista las jerarquías con su tipoGET /api/v2/structures3. Pide el plan, la principal anterior pasa a secundariaPOST /api/v2/structures/plans4. Confirma y abre la solicitudPOST /api/v2/catalog-plans/{planId}/apply5. Otro administrador aprueba la solicitudPOST /api/v2/catalog-change-requests/{changeRequestId}/decision6. Guarda la jerarquía y cambia el tipo de la anterior7. Avisa el cambio de tipo de las dos jerarquíasTAXONOMY_NODE_CHANGED8. Pide un nodo bajo el cuarto nivel y se rechazaPOST /api/v2/structures/{id}/nodes/plansAdministración del catálogoBFF
Crear una jerarquía con tipo y niveles

3.3 Jerarquía de grupos de artículo que manda SAP

MS-02 ProductoEventosBase·pimMS-01 CatálogoMS-07 Ingesta de archivosArchivosMS-02 ProductoEventosBase·pimMS-01 CatálogoMS-07 Ingesta de archivosArchivos1. Avisa que llegó la jerarquía comercial de SAPOBJECT_FINALIZE2. Entrega los nodos de grupo de artículo, por lotePOST /internal/governance/sap/hierarchy3. Actualiza el árbol de grupos sin aprobación4. Avisa los nodos nuevos o cambiadosTAXONOMY_NODE_CHANGED5. Al llegar un SKU, pide su plantilla y su hojaPOST /api/v2/rules/classify
Jerarquía de grupos de artículo que manda SAP

4. Si algo sale mal

  • Ninguna plantilla especializada sirve. El selector ofrece la plantilla general de la familia, marcada como tal, y si tampoco aplica, «otros» de la familia; siempre hay un papá y la propuesta no se detiene.
  • Se intenta asignar un producto a un nodo que no es hoja (por ejemplo, un EU3). El plan de MS-02 lo rechaza: en una jerarquía principal o secundaria sólo los nodos del último nivel reciben productos, y uno solo por producto.
  • El grupo de artículo del producto no permite ninguna plantilla. El selector responde vacío con cuántas quedaron fuera por grupo y por alcance del proveedor; la pantalla explica que debe pedir a Gobierno de Producto ampliar la regla.
  • Mover una plantilla cambiaría la vista de productos en captura. El plan muestra cuántos productos y vistas cambian; al aprobarse, los productos no se reescriben y los que ya se enviaron no se bloquean por lo nuevo.
  • El árbol queda inválido (un ciclo o un padre de otra jerarquía). El plan responde HIERARCHY_CYCLE o INVALID_PARENT y no se abre solicitud; un árbol inválido nunca se sirve a medias (INVALID_TREE).

5. APIs

Las que construye esta épica (8)

GET /api/v2/structures · Jerarquías
CampoValor
APIAPI-01-019 · MS-01 Catálogo
Para quéLista las jerarquías (árbol de plantillas, grupos de artículo de ECC y de S4H, sitios web y las que se creen) con su tipo, sus niveles, en qué nivel van los productos, si un producto puede ir en varios nodos y quién las escribe.
En esta épicaVer las jerarquías con su tipo y sus niveles
Quién la llamaBFF del portal, MS-02 Producto, MS-15 IA y enriquecimiento
PermisoCAT-L; los módulos, con su cuenta de servicio
CabecerasAuthorization, X-Request-Id

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "structureId": "PRODUCT",
        "name": {
          "es": "Árbol de plantillas"
        },
        "type": "PRINCIPAL",
        "levels": 4,
        "productLevel": 4,
        "multiNodePerProduct": false,
        "readOnly": false,
        "masterSystem": "PIM",
        "nodes": 4086
      },
      {
        "structureId": "GA_ECC",
        "name": {
          "es": "Grupos de artículo ECC"
        },
        "type": "SECUNDARIA",
        "levels": 4,
        "productLevel": 4,
        "multiNodePerProduct": false,
        "readOnly": true,
        "masterSystem": "SAP",
        "nodes": 76856
      },
      {
        "structureId": "WEB",
        "name": {
          "es": "Sitios web"
        },
        "type": "OPERATIVA",
        "levels": 5,
        "productLevel": null,
        "multiNodePerProduct": true,
        "readOnly": false,
        "masterSystem": "PIM",
        "nodes": 18783
      }
    ],
    "page": 1,
    "size": 50,
    "total": 3
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene CAT-L
POST /api/v2/structures/plans · Plan de alta de una jerarquía
CampoValor
APIAPI-01-020 · MS-01 Catálogo
Para quéRevisa sin escribir una jerarquía nueva con nombre, descripción, tipo y número de niveles. Si se crea otra principal, exige decir a qué tipo pasa la anterior: nunca quedan dos principales.
En esta épicaCrear una jerarquía con tipo y niveles
Quién la llamaBFF del portal
PermisoCAT-E
CabecerasAuthorization, X-Request-Id, Idempotency-Key

Request

{
  "operation": "CREATE",
  "identifier": "JERARQUIA_FAMILIAS",
  "labels": {
    "es": "Familias de producto",
    "en": "Product families"
  },
  "description": "Árbol de plantillas generales por familia",
  "type": "PRINCIPAL",
  "levels": 4,
  "currentPrincipalBecomes": "SECUNDARIA"
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-55f1aa",
    "expiresAt": "2027-01-14T16:00:00Z",
    "requiresApproval": true,
    "items": [
      {
        "structureId": "JERARQUIA_FAMILIAS",
        "action": "CREATE",
        "type": "PRINCIPAL",
        "levels": 4
      },
      {
        "structureId": "PRODUCT",
        "action": "UPDATE",
        "changes": [
          {
            "path": "type",
            "before": "PRINCIPAL",
            "after": "SECUNDARIA"
          }
        ]
      }
    ],
    "applyUrl": "/api/v2/catalog-plans/pln-55f1aa/apply"
  }
}

Errores

HTTPCódigoCuándo
409ID_ALREADY_EXISTSYa hay una jerarquía con ese identificador
422BUSINESS_ERRORPide otra principal sin decir a qué tipo pasa la actual
400VALIDATION_ERRORFalta la etiqueta en español o el número de niveles no es válido
GET /api/v2/structures/{id}/tree · Árbol validado
CampoValor
APIAPI-01-021 · MS-01 Catálogo
Para quéDevuelve el árbol completo y validado (sin ciclos, padre del mismo árbol, niveles dentro del límite), con la ruta legible de cada nodo y si recibe productos. Un árbol inválido no se sirve a medias.
En esta épicaEl árbol validado, con qué nodos reciben productos
Quién la llamaBFF del portal, MS-02 Producto, MS-15 IA y enriquecimiento
PermisoCAT-L; los módulos, con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
Parámetrosid = PRODUCT, q = licuadora, lang = es, expand = 4
También la usanFT-IA-02

Request

null

Response · 200

{
  "success": true,
  "data": {
    "structureId": "PRODUCT",
    "version": 88,
    "nodes": [
      {
        "nodeId": "EU1-0001",
        "level": 1,
        "parentId": null,
        "label": "Hogar",
        "order": 1,
        "acceptsProducts": false,
        "children": [
          {
            "nodeId": "EU2-0040",
            "level": 2,
            "label": "Electrodomésticos",
            "acceptsProducts": false,
            "children": [
              {
                "nodeId": "EU3-0398",
                "level": 3,
                "label": "Cocina",
                "acceptsProducts": false,
                "children": [
                  {
                    "nodeId": "EU4-0412",
                    "level": 4,
                    "label": "Licuadoras",
                    "path": "Hogar > Electrodomésticos > Cocina > Licuadoras",
                    "acceptsProducts": true,
                    "children": []
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
409INVALID_TREEEl árbol no pasa la validación completa: no se sirve ni se exporta
GET /api/v2/structures/{id}/leaves · Selector de plantillas
CampoValor
APIAPI-01-022 · MS-01 Catálogo
Para quéBusca las hojas que reciben productos por nombre o palabra clave y las acota por las reglas del catálogo: grupos de artículo permitidos por plantilla y alcance del proveedor. Pone primero la plantilla general de la familia cuando ninguna especializada aplica.
En esta épicaEl selector de plantillas acotado por reglas y palabras clave
Quién la llamaBFF del portal, Gateway de terceros /partner/v1, MS-15 IA y enriquecimiento
PermisoENT-L: quien captura una propuesta; los módulos, con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
Parámetrosid = PRODUCT, q = licuadora, itemGroup = GA-4410, business = MER, supplierId = PROV-0001, page = 1, size = 20
También la usanFT-FLU-02, FT-IA-02, FT-PLT-10, FT-PRD-10, FT-USR-02

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "nodeId": "EU4-0412",
        "label": "Licuadoras",
        "path": "Hogar > Electrodomésticos > Cocina > Licuadoras",
        "matchedBy": "KEYWORD",
        "familyTemplate": false
      },
      {
        "nodeId": "EU4-0400",
        "label": "Cocina general",
        "path": "Hogar > Electrodomésticos > Cocina > Cocina general",
        "matchedBy": "FAMILY",
        "familyTemplate": true
      }
    ],
    "filteredOut": {
      "byItemGroup": 7,
      "bySupplierScope": 2
    },
    "page": 1,
    "size": 20,
    "total": 2
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl negocio o el grupo de artículo no existen
404NOT_FOUNDLa jerarquía no existe
POST /api/v2/structures/{id}/nodes/plans · Plan de cambio de nodos
CampoValor
APIAPI-01-023 · MS-01 Catálogo
Para quéRevisa sin escribir el alta, el renombre, el movimiento, la herencia del padre o el desligue de nodos. Al mover, dice qué reglas del destino adopta y cuántos productos y vistas cambian. Un nodo nuevo sin ID recibe el siguiente EU{nivel+1}-{número} al aprobarse.
En esta épicaCrear, renombrar, mover, heredar o desligar nodos
Quién la llamaBFF del portal, MS-15 IA y enriquecimiento
PermisoCAT-E para crear y renombrar; CLA-E para mover, heredar y desligar
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Parámetrosid = PRODUCT
También la usanFT-PLT-01

Request

{
  "operation": "MOVE",
  "items": [
    {
      "nodeId": "EU4-0412",
      "version": 9,
      "newParentId": "EU3-0401"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-7a3c11",
    "expiresAt": "2027-01-14T16:40:00Z",
    "requiresApproval": true,
    "items": [
      {
        "nodeId": "EU4-0412",
        "action": "MOVE",
        "from": "EU3-0398",
        "to": "EU3-0401",
        "adoptsFromDestination": [
          "NameGuide",
          "assetRequirements"
        ],
        "inheritedBindingsChanged": 6,
        "impact": {
          "products": 312,
          "draftOrInReview": 41,
          "views": 3
        }
      }
    ],
    "applyUrl": "/api/v2/catalog-plans/pln-7a3c11/apply"
  }
}

Errores

HTTPCódigoCuándo
409HIERARCHY_CYCLEEl movimiento deja al nodo bajo sí mismo o bajo un descendiente
409INVALID_PARENTEl padre es de otra jerarquía
422MAX_DEPTH_EXCEEDEDEl nodo quedaría debajo del último nivel que define la jerarquía
409READ_ONLY_TAXONOMYLa jerarquía es de grupos de artículo: no se edita a mano
409IMMUTABLE_IDIntenta cambiar el ID de un nodo existente
GET /api/v2/taxonomies/{t}/nodes/{id}/metadata · Metadatos de una plantilla
CampoValor
APIAPI-01-026 · MS-01 Catálogo
Para quéMuestra los metadatos de un nodo (guía y excepciones del nombre, orden de atributos para el título, orden de grupos, descripción, palabras clave, mínimo por tipo de imagen y medidas por omisión), cada uno con el nodo del que viene si es heredado.
En esta épicaLos metadatos de una plantilla con su origen
Quién la llamaBFF del portal, MS-02 Producto, MS-15 IA y enriquecimiento
PermisoCAT-L o ENT-L; los módulos, con su cuenta de servicio
CabecerasAuthorization, X-Request-Id
Parámetrost = PRODUCT, id = EU4-0412, lang = es
También la usanFT-IA-04, FT-PLT-08

Request

null

Response · 200

{
  "success": true,
  "data": {
    "nodeId": "EU4-0412",
    "version": 9,
    "metadata": [
      {
        "code": "NameGuide",
        "value": "Producto + Marca + Modelo",
        "inheritedFrom": null
      },
      {
        "code": "NameExceptions",
        "value": "Sin capacidad en el título",
        "inheritedFrom": "EU3-0398"
      },
      {
        "code": "OrderOfAtributesForName",
        "value": [
          "TIPO_PRODUCTO",
          "MARCA",
          "MODELO"
        ],
        "inheritedFrom": "EU2-0040"
      },
      {
        "code": "DisplayGroupOrder",
        "value": [
          "GENERAL",
          "CARACTERISTICAS"
        ],
        "inheritedFrom": null
      },
      {
        "code": "KeyWords",
        "value": [
          "licuadora",
          "blender"
        ],
        "inheritedFrom": null
      },
      {
        "code": "assetRequirements",
        "value": {
          "PRINCIPAL": {
            "min": 1
          },
          "DETALLE": {
            "min": 3
          }
        },
        "inheritedFrom": "EU3-0398"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl nodo no existe
POST /api/v2/taxonomies/{t}/nodes/{id}/metadata/plans · Plan de cambio de metadatos
CampoValor
APIAPI-01-027 · MS-01 Catálogo
Para quéRevisa sin escribir el cambio de metadatos de un nodo por idioma. Lo que el nodo hereda se puede volver propio, pero sólo para pedir más, nunca menos; lo copiado con «heredar del padre» no se edita en el hijo.
En esta épicaCambiar metadatos: nombre, palabras clave e imágenes mínimas
Quién la llamaBFF del portal
PermisoCAT-E
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Parámetrost = PRODUCT, id = EU4-0412
También la usanFT-ACT-01, FT-PLT-08

Request

{
  "version": 9,
  "items": [
    {
      "code": "KeyWords",
      "language": "es",
      "value": [
        "licuadora",
        "blender",
        "batidora de vaso"
      ]
    },
    {
      "code": "assetRequirements",
      "value": {
        "PRINCIPAL": {
          "min": 1
        },
        "DETALLE": {
          "min": 4
        }
      }
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-2f9d03",
    "expiresAt": "2027-01-14T17:00:00Z",
    "requiresApproval": true,
    "items": [
      {
        "code": "KeyWords",
        "changes": [
          {
            "path": "KeyWords.es",
            "before": [
              "licuadora",
              "blender"
            ],
            "after": [
              "licuadora",
              "blender",
              "batidora de vaso"
            ]
          }
        ]
      },
      {
        "code": "assetRequirements",
        "changes": [
          {
            "path": "assetRequirements.DETALLE.min",
            "before": 3,
            "after": 4
          }
        ],
        "inheritedFromBefore": "EU3-0398"
      }
    ],
    "impact": {
      "views": 3
    },
    "applyUrl": "/api/v2/catalog-plans/pln-2f9d03/apply"
  }
}

Errores

HTTPCódigoCuándo
422INHERITED_VALUEEdita en el hijo un valor copiado con «heredar del padre»
422BUSINESS_ERROREl valor propio relaja lo heredado (pide menos imágenes que el padre)
422UNSUPPORTED_LANGUAGEEl idioma no es español, inglés ni «sin idioma»
409VERSION_CONFLICTEl nodo cambió desde que se leyó
POST /internal/governance/sap/hierarchy · Jerarquías que manda SAP
CampoValor
APIAPI-01-051 · MS-01 Catálogo
Para quéMS-07 entrega, ya leído del archivo, un lote de nodos de la jerarquía de grupos de artículo de ECC o de S4H. Nadie los edita a mano: los nodos llegan por esta ruta, sin aprobación, con recibo por archivo y por registro, y las hojas por tipo de producto las crea la clasificación de lo que llega de SAP (API-01-018).
En esta épicaRecibir la jerarquía de grupos de artículo de SAP
Quién la llamaMS-07 Ingesta de archivos
PermisoSólo MS-07 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe entaxonomy_nodes, governance_receipts, governance_outbox
Publicacatalog.governance.changed/TAXONOMY_NODE_CHANGED
También la usanFT-INT-04

Request

{
  "fileId": "ga-ecc-20270112-01",
  "structureId": "GA_ECC",
  "records": [
    {
      "recordNo": 1,
      "nodeId": "GA-4410",
      "parentId": "GA-44",
      "label": "Licuadoras y batidoras",
      "active": true
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "fileId": "ga-ecc-20270112-01",
    "applied": 1,
    "rejected": 0,
    "items": [
      {
        "recordNo": 1,
        "nodeId": "GA-4410",
        "result": "CREATED"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
409IDEMPOTENCY_MISMATCHEl mismo archivo llega otra vez con contenido distinto
409INVALID_PARENTEl padre no existe en esa jerarquía: el registro queda rechazado en el recibo

Las que usa y construye otra épica (9)

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-BFF-107GET /bff/v1/catalog/templatesLa pantalla busca plantillas por texto en el BFFFT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro
API-15-001POST /api/v2/ai/template-suggestionsLa sugerencia de plantilla de familia por el producto homólogoFT-IA-02 · Sugerencia de plantilla por IA a partir del producto…
API-02-016POST /api/v2/products/classifications/plansAsignar la plantilla al producto (una sola, sólo hojas)FT-CAT-03 · Categorización de productos
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar la asignación en ProductoFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-01-004POST /api/v2/catalog-plans/{planId}/applyConfirmar los planes del árbol y abrir la solicitudFT-PLT-01 · Fundamentos de gobierno de plantillas
API-01-103POST /api/v2/catalog-change-requests/{changeRequestId}/decisionAprobar los cambios del árbolFT-PLT-01 · Fundamentos de gobierno de plantillas
API-01-018POST /api/v2/rules/classifyLa clasificación de lo que llega de SAP crea las hojas por tipo de producto (FT-CAT-04)FT-CAT-04 · Clasificación SAP derivada
API-01-012GET /api/v2/reference-tables/{t}/entriesLa secuencia de variantes por plantilla es un diccionario de FT-REF-01FT-REF-01 · Datos de referencia administrables
API-02-113POST /internal/product/catalog-usageCuántos productos cambian de vista al mover una plantillaFT-PLT-02 · Catálogo de atributos

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.governance.changed/TAXONOMY_NODE_CHANGEDSe aprueba el alta, el movimiento, la herencia o el desligue de un nodo, cambia el tipo de una jerarquía o llegan nodos de SAPFT-CAT-04, FT-IA-02, FT-PLT-06
catalog.governance.changed/TEMPLATE_CHANGEDSe aprueba un cambio en la cabecera o en los metadatos de una plantillaFT-ARQ-02, FT-PLT-01, FT-PLT-08
catalog.governance.changed/TEMPLATE_VIEW_CHANGEDMover o heredar cambia la vista efectiva de las plantillas de la ramaFT-ACT-01, FT-ACT-05, FT-IA-03, FT-PLT-06, FT-PLT-09, FT-PRD-01, FT-RAC-01, FT-RAC-02

Consume

EventoPara quéQuién lo publica
catalog.governance.changed/TAXONOMY_NODE_CHANGEDMS-15 refresca el índice de plantillas, familias y palabras clave en el que busca sus sugerenciasesta misma épica
catalog.governance.changed/TAXONOMY_NODE_CHANGEDMS-02 refresca qué nodos reciben productos y los grupos de artículo con que clasifica lo que llega de SAPesta misma épica
catalog.governance.changed/TAXONOMY_NODE_CHANGEDMS-01 recalcula las vistas efectivas de la rama movida o heredadaesta misma épica
catalog.egress.files/OBJECT_FINALIZEMS-07 lee el archivo de la jerarquía comercial de SAPD-ARCHIVOS

7. Datos

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

ColecciónDueñoQué guardaEsta épica
taxonomiesMS-01Los árboles: plantillas, grupos de artículo y sitios web.escribe
taxonomy_nodesMS-01Plantillas y nodos de grupo de artículo, con la configuración de atributos de cada plantilla.escribe
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.escribe
id_sequencesMS-01El siguiente identificador de plantillas y catálogos.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
taxonomiesMS-01Los árboles: plantillas, grupos de artículo y sitios web.lee
taxonomy_nodesMS-01Plantillas y nodos de grupo de artículo, con la configuración de atributos de cada plantilla.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-PLT-05·H1 · Navegar y buscarP1pasos 3, 4, 5, 6, 9; API-01-022, API-01-021, API-BFF-107
FT-PLT-05·H2 · Metadatos de plantillaP1pasos 8; flujo «Gobierno de Producto edita metadatos y mueve una plantilla»; API-01-026, API-01-027
FT-PLT-05·H3 · Plantillas por familiaP1pasos 2, 7; API-01-022, API-15-001
FT-PLT-05·H4 · Herencia y reubicaciónP2flujo «Gobierno de Producto edita metadatos y mueve una plantilla»; API-01-023, API-02-113
FT-PLT-05·H5 · Imágenes y secuencia de variantesP2API-01-027, API-01-012. Fuera: La secuencia de variantes por plantilla es un diccionario de FT-REF-01 que se usa al publicar; aquí sólo vive el mínimo por tipo de imagen.
FT-PLT-05·H6 · Pocas plantillas para elegirP1pasos 5, 6; flujo «Jerarquía de grupos de artículo que manda SAP»; API-01-022, API-01-051
FT-PLT-05·H7 · Crear jerarquías con tipo y nivelesP2flujo «Crear una jerarquía con tipo y niveles»; API-01-019, API-01-020, API-01-023

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-05-1. Plantillas por familia sin romper la regla de hoja: cada familia de nivel 3 tiene una plantilla general de nivel 4 marcada «de familia». El selector la ofrece cuando ninguna especializada aplica, y la IA la propone primero; así siempre hay un papá y los productos siguen sólo en el último nivel. Por qué: Concilia lo acordado en taller (plantillas generales por familia, menos rechazo) con la ERF §3.3, que sólo deja productos en el nivel 4. Se apoya en RN-PLA-10, RF-PLA-03, DEC-44.
  • D-PLT-05-2. Herencia viva: un metadato o una configuración sin valor propio se resuelve del ancestro más cercano y se muestra con su nodo de origen. El hijo sólo endurece (pide más, nunca menos). Lo migrado se carga explícito en cada plantilla, para que la vista del corte quede igual que P360. Por qué: DEC-ARQ-12 mete la herencia; la regla de endurecer cabe en una frase y se valida sin excepciones, como propone PD-14. Se apoya en PD-14, DEC-ARQ-12, DEC-PLT-01.
  • D-PLT-05-3. Mover un nodo es una solicitud con impacto: el plan dice qué reglas del destino adopta y cuántos productos y vistas cambian. Al aprobarse, los productos no se reescriben, su vista sí, y lo ya enviado o aprobado no se bloquea por lo nuevo. Por qué: Reubicar una rama no debe tocar datos de producto ni frenar propuestas en curso. Se apoya en PD-14, DEC-ARQ-12, RN-MIG-03.
  • D-PLT-05-4. Cada jerarquía tiene tipo y número de niveles: principal (una sola; el producto va en un nodo del último nivel), secundaria (igual, puede haber varias) y operativa (el producto puede ir en varios nodos, como las categorías por sitio). Crear otra principal obliga a decir a qué tipo pasa la anterior. Los árboles de grupos de artículo no se editan a mano: los nodos los manda SAP y las hojas por tipo de producto las crea la clasificación (API-01-018). Por qué: Que el tipo imponga desde el inicio dónde pueden ir los productos, como pidió el taller de plantillas. Se apoya en S31-RF-03.
  • D-PLT-05-5. El selector de plantillas acota por las reglas de MS-01 (grupos de artículo permitidos por plantilla y alcance del proveedor) y por nombre y palabra clave. La sugerencia de la IA se muestra junto, pero el proveedor siempre puede buscar en todo lo que tiene permitido. Por qué: Menos plantillas para elegir sin que la IA decida sola: el seller confirma, cambia o busca. Se apoya en RN-PLA-12, P-18.
  • D-PLT-05-6. El mínimo por tipo de imagen es el metadato assetRequirements de la plantilla: se migra de los mínimos y máximos vivos del atributo de imagen y, sólo donde no los hay, del número de imágenes de detalle. La ficha técnica de cada tipo (medidas, formato) es de MS-11 y la secuencia de variantes es un diccionario por plantilla de FT-REF-01. Por qué: Una sola fuente para «cuántas fotos pide esta plantilla», tomada de la regla que hoy sí se aplica. Se apoya en DEC-ARQ-12, DUD-02.
  • D-PLT-05-7. Una plantilla nueva la crea Gobierno de Producto en el PIM, con aprobación. La IA puede proponerla como solicitud con canal IA, nunca crearla directo. Por qué: Responde quién crea una plantilla nueva sin perder el control del catálogo. Se apoya en P-19, DEC-PLT-05.

Qué falta decidir

IDQué falta
PD-15Gobierno de Producto con Publicación y Foro ratifican que Conjunto Look y proveedores son reglas, no jerarquías.
PD-19Gobierno de Producto con Entrada Única deciden si entran las plantillas sin atributos.
P-18Gobierno de Producto con Compras y SAP ratifican cómo se acota el número de plantillas por producto.

También siguen abiertos: PEN-30, Definir quién define las familias de plantillas (Compras, Gobierno de Producto o un estándar externo).

Fuentes

  1. [D] trazabilidad/features/FT-PLT-05-taxonomia-y-metadatos-de-plantilla.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.