← Arquitectura por épica

FT-FLU-07 · Excepciones de catalogación y preventas con publicación…

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-FLU-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-FLU-07.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-FLU-07-excepciones-catalogacion-preventas.md.

En 30 segundos

Algunos productos se crean en SAP pero no deben llegar a la tienda en línea: los de ciertas secciones, marcas o proveedores, por negocio. Esta épica conserva esas excepciones como una tabla que Gobierno de Producto administra, las evalúa en cascada al crearse el SKU y le avisa al estudio que no les tome foto. También deja marcar una preventa desde el alta para publicarla pronto con imagen genérica, sin avisos por correo.

  • Módulo dueño: MS-02 Producto. También participan: MS-07 Ingesta de archivos, MS-11 Activos digitales, MS-12 Estudio fotográfico, MS-05 Auditoría.
  • Etapa 4 · Visto bueno. Recibe «PE-5 · Visto bueno dado» y entrega «PE-6 · SKU asignado».
  • APIs: construye 3 y usa 5 que construyen otras épicas.
  • Eventos: publica 4 y consume 2.

1. Dónde encaja

Recibe

DeQué
PE-5 · Visto bueno dadoLa propuesta en Creación de SKU, esperando el 122, con su sección, marca, proveedor y negocio.
FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…El momento de salir de Creación de SKU y las tareas que el motor abre con el 122.
FT-REF-01 · Datos de referencia administrablesLas secciones, marcas, proveedores y grupos de artículo con que se arman y se validan las llaves de las excepciones.

Entrega

AQué
PE-6 · SKU asignadoEl producto En enriquecimiento con su marca de excepción: si está exceptuado, sin tarea de foto ni de QA.
FT-ACT-05 · Servicios para Foro FotográficoQué SKU están bajo excepción y con qué motivo, para marcarlos «NO TOMAR».
FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocioLo exceptuado no lleva los canales tienda ni Marketplace; la preventa lleva su bandera y sus fechas.
FT-INT-01 · Publicación a e-commerceLa preventa sale a la tienda con su bandera de preventa y sus fechas, aunque tenga imagen genérica.

Cambios de estado que hace

TransiciónDe → aCuándo
T06Creación de SKU → En enriquecimientoSAP crea el artículo (archivo 122).

Tareas que abre o cierra: Foro: muestra, foto y enriquecimiento, Carga de imagen.

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

Recibir la respuesta 122 de SAP

STATUS_CHANGED
CONFIG_CHANGED
y 1 más

Tomar o no tomar por lote

Evaluar excepciones de un lote de SKU

Marca «NO TOMAR» con el motivo de la…

Consultar excepciones de catalogación
Cambiar excepciones de catalogación
y 2 más

CONFIG_CHANGED

Avisar que terminó la carga

ASSET_VALIDATED

bitácora

Administración del catálogo

Compras

Proveedor

Áreas con sección

Estudio fotográfico

Entrada Única · Vendor Center

Foro · portal del estudio

BFF del portal

★ MS-02 Producto

MS-07 Ingesta de archivos

MS-11 Activos digitales

MS-12 Estudio fotográfico

MS-05 Auditoría

Base pim

Eventos

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

MS-12 Estudio fotográficoForo · portal del estudioEventosBase·pimMS-02 ProductoMS-07 Ingesta de archivosMS-12 Estudio fotográficoForo · portal del estudioEventosBase·pimMS-02 ProductoMS-07 Ingesta de archivosEstudio fotográficoBFF1. Entrega el artículo que SAP creó, con sección y marcaPOST /internal/product/sap/1222. Evalúa en cascada las excepciones de su negocio3. Guarda en el producto el tipo de excepción que ganó4. Pasa a En enriquecimiento sin abrir la tarea de foto5. Avisa el estado nuevo y la excepciónSTATUS_CHANGED6. Revisa el lote de muestras que llegó7. Pide tomar o no tomar por lote de SKUPOST /api/v2/studio/decisions8. Pregunta si esos SKU están bajo excepciónPOST /internal/product/catalog-exceptions/evaluations9. Marca «NO TOMAR» con el motivo de la excepciónEstudio fotográficoBFF
Flujo principal de FT-FLU-07
Los pasos en texto
PasoDeAQué haceAPI o evento
1MS-07 Ingesta de archivosMS-02 ProductoEntrega el artículo que SAP creó, con sección y marcaAPI-02-049
2MS-02 ProductoBase pimEvalúa en cascada las excepciones de su negocio—
3MS-02 ProductoBase pimGuarda en el producto el tipo de excepción que ganó—
4MS-02 ProductoBase pimPasa a En enriquecimiento sin abrir la tarea de foto—
5MS-02 ProductoEventosAvisa el estado nuevo y la excepcióncatalog.product.changed/STATUS_CHANGED
6Estudio fotográficoForo · portal del estudioRevisa el lote de muestras que llegó—
7Foro · portal del estudioMS-12 Estudio fotográfico (por el BFF)Pide tomar o no tomar por lote de SKUAPI-12-002
8MS-12 Estudio fotográficoMS-02 ProductoPregunta si esos SKU están bajo excepciónAPI-02-306
9MS-12 Estudio fotográficoForo · portal del estudioMarca «NO TOMAR» con el motivo de la excepción—

3.1 Gobierno de Producto mantiene las excepciones

MS-05 AuditoríaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterMS-05 AuditoríaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Abre las excepciones de Suburbia2. Consulta las excepciones por tipo y negocioGET /api/v2/catalog-exceptions3. Agrega una sección y marca sólo para Suburbia4. Pide el plan con los SKU que cambiaríanPOST /api/v2/catalog-exceptions/plans5. Confirma el planPOST /api/v2/product-plans/{planId}/apply6. Guarda la excepción con su negocio y su vigencia7. Avisa el cambio de la tabla para la bitácoraCONFIG_CHANGED8. Entrega el cambio con la versión anterior y la nuevaCONFIG_CHANGEDAdministración del catálogoBFF
Gobierno de Producto mantiene las excepciones

3.2 Preventa marcada desde el alta y publicada pronto

EventosMS-11 Activos digitalesBase·pimMS-02 ProductoEntrada Única · Vendor CenterEventosMS-11 Activos digitalesBase·pimMS-02 ProductoEntrada Única · Vendor CenterComprasBFFProveedorÁreas con sección1. Marca la propuesta como preventa con sus fechas2. Pide el plan MARK_PRESALEPOST /api/v2/workflow/actions/plans3. Confirma el planPOST /api/v2/product-plans/{planId}/apply4. Guarda la bandera y sube la prioridad de sus tareas5. Sube la imagen genérica del cosmético6. Termina la carga y la validación técnica de la imagenPOST /api/v2/assets/{assetId}/complete7. Entrega la imagen ya validadaASSET_VALIDATED8. Acepta la genérica por la preventa y cierra Carga de imagen9. Avisa la preventa con sus fechasPRODUCT_UPDATED10. E-commerce consulta las preventas vigentes11. Lista las preventas con sus fechasGET /api/v2/catalog-exceptionsComprasBFFProveedorÁreas con sección
Preventa marcada desde el alta y publicada pronto

4. Si algo sale mal

  • Un SKU coincide con dos tipos de excepción. Gana el primero de la cascada (sección y negocio, luego sección y marca, sección y proveedor, grupo de artículo y SKU) y se guarda su código; el resultado es el mismo que da hoy P360.
  • El SKU está en las excepciones anuladas. Se le quita la excepción (código 6) y sigue el camino normal: se abre la foto y, al aprobarse, sale a la tienda.
  • Gobierno de Producto cambia una excepción que afecta SKU ya evaluados. La vista previa los cuenta. Los que siguen en Creación de SKU se reevalúan al confirmar; los ya aprobados se listan para retirarlos de la tienda con la baja por canal o abrirles un Repoblamiento (FT-PRD-05) si ahora sí deben venderse en línea.
  • Termina la preventa y el producto sigue con imagen genérica. Siete días antes se avisa al proveedor y a E-commerce. Al terminar, la bandera se apaga y la tienda la recibe en la siguiente publicación; la imagen definitiva entra como un cambio a un producto aprobado (FT-PRD-05).
  • Se pide una excepción por precio. El tipo existe pero no se puede dar de alta (422 BUSINESS_ERROR) hasta que se defina su criterio; nada se evalúa por precio mientras tanto.

5. APIs

Las que construye esta épica (3)

GET /api/v2/catalog-exceptions · Consultar excepciones de catalogación
CampoValor
APIAPI-02-304 · MS-02 Producto
Para quéLista las excepciones vigentes o anuladas por tipo, negocio y llave (sección y negocio, sección y marca, sección y proveedor, grupo de artículo, SKU, precio, preventa o lanzamiento), con su efecto y quién las cambió.
En esta épicaConsultar excepciones, preventas y lanzamientos por tipo, negocio y llave
Quién la llamaBFF del portal
PermisoGobierno de Producto; E-commerce y Foro sólo leen
CabecerasAuthorization, X-Request-Id
Parámetrostype = SECTION_BRAND, business = SUB, active = True, page = 1, size = 50

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "exceptionId": "exc-00153",
        "type": "SECTION_BRAND",
        "code": 2,
        "business": "SUB",
        "key": {
          "section": "S-118",
          "brand": "MARCA01"
        },
        "effect": "NO_ECOMMERCE",
        "active": true,
        "validFrom": "2026-11-01T06:00:00Z",
        "validTo": null,
        "version": 1,
        "changedAt": "2026-10-18T15:04:07Z",
        "changedBy": {
          "area": "GOBIERNO-PRODUCTO"
        },
        "legacy": "ExcepcionesPorSeccionYMarca"
      }
    ],
    "page": 1,
    "size": 50,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl tipo o el negocio no existen
POST /api/v2/catalog-exceptions/plans · Cambiar excepciones de catalogación
CampoValor
APIAPI-02-305 · MS-02 Producto
Para quéPrepara altas, bajas o anulaciones de excepciones y dice cuántos SKU cambiarían: los que aún no salen de Creación de SKU se reevalúan solos; los ya aprobados se listan para retirarlos de la tienda o repoblarlos. Se confirma con el plan.
En esta épicaCambiar excepciones con vista previa de los SKU afectados
Quién la llamaBFF del portal
PermisoGobierno de Producto
CabecerasAuthorization, X-Request-Id, Idempotency-Key

Request

{
  "changes": [
    {
      "op": "ADD",
      "type": "SECTION_BRAND",
      "business": "SUB",
      "key": {
        "section": "S-118",
        "brand": "MARCA01"
      },
      "validFrom": "2026-11-01T06:00:00Z",
      "reason": "La marca sólo se vende en tienda física en Suburbia"
    },
    {
      "op": "CANCEL",
      "exceptionId": "exc-00087",
      "version": 2,
      "reason": "La sección ya se vende en línea"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-e5c021",
    "expiresAt": "2026-10-18T15:14:05Z",
    "summary": {
      "add": 1,
      "cancel": 1
    },
    "impact": {
      "skuStillInCreation": 12,
      "skuAlreadyApproved": 3,
      "approvedSample": [
        "1000004812",
        "1000004813",
        "1000005120"
      ]
    },
    "applyUrl": "/api/v2/product-plans/pln-e5c021/apply"
  }
}

Errores

HTTPCódigoCuándo
409VERSION_CONFLICTLa excepción cambió desde que se leyó
422VALIDATION_ERRORLa llave está incompleta o la sección, marca o proveedor no existen en el catálogo
422BUSINESS_ERRORSe da de alta una excepción por precio mientras su criterio no esté definido
POST /internal/product/catalog-exceptions/evaluations · Evaluar excepciones de un lote de SKU
CampoValor
APIAPI-02-306 · MS-02 Producto
Para quéEvalúa en cascada un lote de hasta 1,000 SKU y dice, por cada uno, si está bajo excepción, de qué tipo y con qué motivo. El estudio lo usa para marcar «NO TOMAR» sin copiar las tablas.
En esta épicaQue el estudio pregunte por lote si un SKU está bajo excepción
Quién la llamaMS-12 Estudio fotográfico
PermisoSólo MS-12 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id
También la usanFT-ACT-05

Request

{
  "skus": [
    "1000004812",
    "1000004813",
    "1000005120"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "sku": "1000004812",
        "excepted": true,
        "type": "SECTION_BRAND",
        "code": 2,
        "business": "SUB",
        "reason": "El producto se encuentra bajo excepción de catalogación"
      },
      {
        "sku": "1000004813",
        "excepted": false,
        "code": 6,
        "reason": "Su excepción está anulada"
      },
      {
        "sku": "1000005120",
        "excepted": false
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl lote trae más de 1,000 SKU; no se trunca

Las que usa y construye otra épica (5)

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-02-049POST /internal/product/sap/122El 122 con sección, marca y proveedor del artículo (lo construye FT-PRD-02)FT-PRD-02 · Creación de SKU con SAP
API-12-002POST /api/v2/studio/decisionsTomar o no tomar por lote de SKU (lo construye el grupo del estudio)FT-ACT-05 · Servicios para Foro Fotográfico
API-02-028POST /api/v2/workflow/actions/plansVista previa de MARK_PRESALEFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar la preventa o el cambio de excepcionesFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-11-005POST /api/v2/assets/{assetId}/completeTerminar la carga y validar la imagen genéricaFT-ACT-02 · Registro, congelado y publicación de URLs de activos

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/STATUS_CHANGEDSale de Creación de SKU con su marca de excepción (T06)FT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-02, FT-PRD-04, FT-PRD-06, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06
catalog.product.changed/PRODUCT_UPDATEDSe marca o se apaga la bandera de preventaFT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PLT-07, FT-PRD-05, FT-RAC-06
catalog.product.changed/TASK_CHANGEDCarga de imagen se cierra con la imagen genérica de una preventaFT-ACT-05, FT-ACT-06, FT-ARQ-02, FT-CAT-06, FT-FLU-01, FT-IA-06, FT-PRD-02, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-05, FT-RAC-06
catalog.product.changed/CONFIG_CHANGEDSe confirma un cambio en la tabla de excepcionesFT-ARQ-02, FT-FLU-01

Consume

EventoPara quéQuién lo publica
catalog.asset.changed/ASSET_VALIDATEDMS-02 cierra Carga de imagen con la imagen genérica de una preventaFT-ACT-01, FT-ACT-02, FT-ACT-03
catalog.product.changed/CONFIG_CHANGEDMS-05 guarda el cambio de la tabla de excepcionesesta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
catalog_exceptionsMS-02Excepciones de catalogación: qué no se publica o va por la vía rápida.escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.escribe
product_receiptsMS-02El recibo de cada escritura confirmada en el producto (antes operation_receipts).escribe
product_outboxMS-02Los cambios del producto que esperan salir como evento (antes outbox).escribe
catalog_exceptionsMS-02Excepciones de catalogación: qué no se publica o va por la vía rápida.lee
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-FLU-07·H1 · Cascada de paridadP1pasos 1, 2, 3, 4, 5
FT-FLU-07·H2 · Sin fotos para lo exceptuadoP1pasos 7, 8, 9; API-02-306, API-12-002
FT-FLU-07·H3 · Lo que pide la ERFP2flujo «Gobierno de Producto mantiene las excepciones»; API-02-304, API-02-305
FT-FLU-07·H4 · Preventa desde el altaP2flujo «Preventa marcada desde el alta y publicada pronto»; API-02-304
FT-FLU-07·H5 · Camino corto para lanzamientosP2flujo «Preventa marcada desde el alta y publicada pronto»; API-02-028

9. Decisiones de esta épica

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

  • D-FLU-07-1. Las excepciones viven en catalog_exceptions de MS-02, no en los diccionarios de Catálogo: una tabla por tipo y por negocio con el mismo orden y códigos de hoy (1 a 5, y 6 para las anuladas), más precio, preventa y lanzamiento. Se leen en la misma base al evaluar, sin copias en caché. Por qué: Así lo decidió el diseño de plantillas para los diccionarios de excepciones y de flujo; leer sin caché evita el retraso de hoy, cuando un cambio no se ve hasta refrescar. Se apoya en DEC-PLT-08, RSG-52.
  • D-FLU-07-2. Las excepciones se evalúan al salir de Creación de SKU (T06). Lo exceptuado conserva su estado real con una marca de excepción (no hay estado 1032), no abre Foro, Carga de imagen ni QA, y al aprobarse sale a OMS, Señalización y DWH, pero no a la tienda ni a Marketplace. Por qué: Es el mismo momento y el mismo efecto de P360 («no se publica al e-commerce»); el estado 1032 no lo asigna ningún código y en el modelo B la excepción es un dato, no un estado. Se apoya en PD-29, DUD-24.
  • D-FLU-07-3. El estudio pregunta por lote a MS-02 (API-02-306) para marcar «NO TOMAR» en el producto y todas sus variantes; la regla vive en un solo lugar y MS-12 no copia las tablas. Por qué: Hoy el cálculo de tomar o no tomar lee seis diccionarios de excepción por su cuenta. Se apoya en ADR-12.
  • D-FLU-07-4. Se separan dos sentidos: «excepción de catalogación» (no va a la tienda) y «vía rápida» (preventa o lanzamiento, se publica antes). La preventa la marca Compras con fechas en la propuesta: es la bandera de preventa del producto (valor, inicio y fin), deja cerrar la foto con una imagen genérica y sube la prioridad de sus tareas. No salta pasos. Por qué: Hoy las preventas se avisan por correo o chat aunque la bandera ya existe en P360; marcarla en el sistema la hace visible para Publicación y para la tienda. Se apoya en RN-PUB-04, PEN-09, PD-23.
  • D-FLU-07-5. Un lanzamiento es prioridad, no otro camino: con una excepción de tipo lanzamiento, sus tareas van primero en cada cola, pero el motor no tiene una ruta distinta. Por qué: Un solo flujo con candados por negocio; un camino aparte sería otra máquina que mantener. Se apoya en P-38, RN-GEN-02.
  • D-FLU-07-6. Los cuatro diccionarios que hoy no lee ningún código no se migran como reglas activas: entran como tablas inactivas hasta que Gobierno de Producto confirme si sirven. La excepción por precio se crea inactiva hasta definir su criterio. Por qué: Activar reglas que nadie aplica hoy cambiaría qué se publica sin que nadie lo haya pedido. Se apoya en DUD-34.

Qué falta decidir

IDQué falta
DUD-34Qué hacer con los cuatro diccionarios sin lector y cuál es el criterio de la excepción por precio.
DUD-24Confirmar que nadie asigna hoy el estado 1032 y cómo se migran los productos que lo traen.
PD-23Cómo viaja la bandera de preventa a la tienda (hoy isPreorder con fechas) y quién la mantiene después del alta.
P-38Publicación confirma que un lanzamiento es prioridad en las colas y no un camino distinto.
PD-01La preventa desde el alta es mejora sobre P360 y necesita la excepción firmada de paridad.

También siguen abiertos: PEN-09, Quién marca exactamente la preventa en el alta: aquí la marca Compras y el proveedor sólo la propone.

Fuentes

  1. [D] trazabilidad/features/FT-FLU-07-excepciones-catalogacion-preventas.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.