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
| De | Qué |
|---|---|
| PE-5 · Visto bueno dado | La 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 administrables | Las secciones, marcas, proveedores y grupos de artículo con que se arman y se validan las llaves de las excepciones. |
Entrega
| A | Qué |
|---|---|
| PE-6 · SKU asignado | El 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áfico | Qué SKU están bajo excepción y con qué motivo, para marcarlos «NO TOMAR». |
| FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio | Lo exceptuado no lleva los canales tienda ni Marketplace; la preventa lleva su bandera y sus fechas. |
| FT-INT-01 · Publicación a e-commerce | La preventa sale a la tienda con su bandera de preventa y sus fechas, aunque tenga imagen genérica. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T06 | Creación de SKU → En enriquecimiento | SAP 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
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 | MS-07 Ingesta de archivos | MS-02 Producto | Entrega el artículo que SAP creó, con sección y marca | API-02-049 |
| 2 | MS-02 Producto | Base pim | Evalúa en cascada las excepciones de su negocio | — |
| 3 | MS-02 Producto | Base pim | Guarda en el producto el tipo de excepción que ganó | — |
| 4 | MS-02 Producto | Base pim | Pasa a En enriquecimiento sin abrir la tarea de foto | — |
| 5 | MS-02 Producto | Eventos | Avisa el estado nuevo y la excepción | catalog.product.changed/STATUS_CHANGED |
| 6 | Estudio fotográfico | Foro · portal del estudio | Revisa el lote de muestras que llegó | — |
| 7 | Foro · portal del estudio | MS-12 Estudio fotográfico (por el BFF) | Pide tomar o no tomar por lote de SKU | API-12-002 |
| 8 | MS-12 Estudio fotográfico | MS-02 Producto | Pregunta si esos SKU están bajo excepción | API-02-306 |
| 9 | MS-12 Estudio fotográfico | Foro · portal del estudio | Marca «NO TOMAR» con el motivo de la excepción | — |
3.1 Gobierno de Producto mantiene las excepciones
3.2 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Consultar excepciones, preventas y lanzamientos por tipo, negocio y llave |
| Quién la llama | BFF del portal |
| Permiso | Gobierno de Producto; E-commerce y Foro sólo leen |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | type = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El tipo o el negocio no existen |
POST /api/v2/catalog-exceptions/plans · Cambiar excepciones de catalogación
| Campo | Valor |
|---|---|
| API | API-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 épica | Cambiar excepciones con vista previa de los SKU afectados |
| Quién la llama | BFF del portal |
| Permiso | Gobierno de Producto |
| Cabeceras | Authorization, 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
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | VERSION_CONFLICT | La excepción cambió desde que se leyó |
| 422 | VALIDATION_ERROR | La llave está incompleta o la sección, marca o proveedor no existen en el catálogo |
| 422 | BUSINESS_ERROR | Se 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Que el estudio pregunte por lote si un SKU está bajo excepción |
| Quién la llama | MS-12 Estudio fotográfico |
| Permiso | Sólo MS-12 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El 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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-02-049 | POST /internal/product/sap/122 | El 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-002 | POST /api/v2/studio/decisions | Tomar o no tomar por lote de SKU (lo construye el grupo del estudio) | FT-ACT-05 · Servicios para Foro Fotográfico |
| API-02-028 | POST /api/v2/workflow/actions/plans | Vista previa de MARK_PRESALE | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar la preventa o el cambio de excepciones | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-11-005 | POST /api/v2/assets/{assetId}/complete | Terminar la carga y validar la imagen genérica | FT-ACT-02 · Registro, congelado y publicación de URLs de activos |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/STATUS_CHANGED | Sale 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_UPDATED | Se marca o se apaga la bandera de preventa | FT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PLT-07, FT-PRD-05, FT-RAC-06 |
catalog.product.changed/TASK_CHANGED | Carga de imagen se cierra con la imagen genérica de una preventa | FT-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_CHANGED | Se confirma un cambio en la tabla de excepciones | FT-ARQ-02, FT-FLU-01 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.asset.changed/ASSET_VALIDATED | MS-02 cierra Carga de imagen con la imagen genérica de una preventa | FT-ACT-01, FT-ACT-02, FT-ACT-03 |
catalog.product.changed/CONFIG_CHANGED | MS-05 guarda el cambio de la tabla de excepciones | 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 |
|---|---|---|---|
catalog_exceptions | MS-02 | Excepciones de catalogación: qué no se publica o va por la vía rápida. | escribe |
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | escribe |
tasks | MS-02 | Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento. | escribe |
product_receipts | MS-02 | El recibo de cada escritura confirmada en el producto (antes operation_receipts). | escribe |
product_outbox | MS-02 | Los cambios del producto que esperan salir como evento (antes outbox). | escribe |
catalog_exceptions | MS-02 | Excepciones de catalogación: qué no se publica o va por la vía rápida. | lee |
product_reference_tables | MS-02 | Configuración del motor de estados y del matching: transiciones, estados externos y pesos. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-FLU-07·H1 · Cascada de paridad | P1 | pasos 1, 2, 3, 4, 5 |
| FT-FLU-07·H2 · Sin fotos para lo exceptuado | P1 | pasos 7, 8, 9; API-02-306, API-12-002 |
| FT-FLU-07·H3 · Lo que pide la ERF | P2 | flujo «Gobierno de Producto mantiene las excepciones»; API-02-304, API-02-305 |
| FT-FLU-07·H4 · Preventa desde el alta | P2 | flujo «Preventa marcada desde el alta y publicada pronto»; API-02-304 |
| FT-FLU-07·H5 · Camino corto para lanzamientos | P2 | flujo «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
| ID | Qué falta |
|---|---|
| DUD-34 | Qué hacer con los cuatro diccionarios sin lector y cuál es el criterio de la excepción por precio. |
| DUD-24 | Confirmar que nadie asigna hoy el estado 1032 y cómo se migran los productos que lo traen. |
| PD-23 | Cómo viaja la bandera de preventa a la tienda (hoy isPreorder con fechas) y quién la mantiene después del alta. |
| P-38 | Publicación confirma que un lanzamiento es prioridad en las colas y no un camino distinto. |
| PD-01 | La 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
- [D]
trazabilidad/features/FT-FLU-07-excepciones-catalogacion-preventas.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.