Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-FLU-06: 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-06.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-FLU-06-plantilla-en-linea-carga-masiva.md.
En 30 segundos
Para no depender de Excel, el seller puede capturar o pegar columnas en una plantilla en línea dentro del portal. Cada celda le avisa al momento si falta un obligatorio, si el valor no está en la lista o si no corresponde al campo del que depende; lo demás se valida en segundo plano. No es otro flujo: lo capturado entra a la misma carga masiva, con el mismo reporte y la misma creación.
- Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-06 Evaluación.
- Etapa 0 · Entrada. Recibe «PE-C · Catálogo vigente», «PE-T · Usuario con permisos y bitácora» y entrega «PE-1 · Propuesta en Borrador».
- APIs: construye 1 y usa 10 que construyen otras épicas.
- Eventos: publica 2 y consume 1.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| FT-FLU-04 · Carga masiva de productos por archivo | La recepción asíncrona, el trabajo de carga, la evaluación por bloque y el reporte por renglón. |
| PE-C · Catálogo vigente | La vista efectiva con sus capas de obligatoriedad, las listas de valores y las dependencias de un nivel entre atributos. |
| PE-T · Usuario con permisos y bitácora | El seller identificado por el BFF, con sus negocios. |
Entrega
| A | Qué |
|---|---|
| PE-1 · Propuesta en Borrador | Cada renglón válido de la plantilla en línea nace como propuesta en Borrador con origen BULK, igual que si viniera de un archivo; los completos se envían a revisión en la misma confirmación. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T01 | Inicio → Borrador | El proveedor o seller guarda por primera vez (pantalla, archivo, plantilla en línea o API). |
| T03 | Borrador → En revisión | Envía con los obligatorios completos. |
Tareas que abre o cierra: Validación automática.
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 | Seller | Entrada Única · Vendor Center | Elige la categoría y abre la plantilla en línea | — |
| 2 | Entrada Única · Vendor Center | BFF del portal | Pide la cuadrícula con columnas, listas y prellenado | API-BFF-204 |
| 3 | BFF del portal | MS-01 Catálogo | Lee la vista efectiva con capas y dependencias | API-01-028 |
| 4 | BFF del portal | MS-01 Catálogo | Lee las listas de valores cortas | API-01-007 |
| 5 | BFF del portal | MS-02 Producto | Trae los productos a prellenar por SKU o EAN | API-02-001 |
| 6 | Seller | Entrada Única · Vendor Center | Pega columnas completas desde su Excel | — |
| 7 | Entrada Única · Vendor Center | BFF del portal | Busca por texto en listas grandes, como marcas | API-BFF-102 |
| 8 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Guarda los renglones como carga sin crear nada | API-02-046 |
| 9 | MS-02 Producto | MS-06 Evaluación | Evalúa lista negra y coincidencias de los renglones | API-06-002 |
| 10 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Lee el resultado por celda y por renglón | API-02-048 |
| 11 | Seller | Entrada Única · Vendor Center | Corrige las celdas con aviso y envía | — |
| 12 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma los renglones válidos | API-02-047 |
| 13 | MS-02 Producto | Base pim | Crea las propuestas en Borrador y envía las completas | — |
| 14 | MS-02 Producto | Eventos | Avisa cada propuesta nueva con origen BULK | catalog.product.changed/PRODUCT_CREATED |
3.1 Más de 500 renglones: sigue en Excel
3.2 Campo que depende de otro
3.3 Retoma lo que guardó sin enviar
4. Si algo sale mal
- Pega un valor que no está en la lista. La celda se marca al momento con el aviso; si se envía así, la validación de MS-02 lo regresa como «por corregir» con la columna y el motivo, y ese renglón no se crea.
- Intenta guardar más de 500 renglones. MS-02 rechaza el envío completo por el límite (413 LIMIT_EXCEEDED) y el portal le ofrece bajar la plantilla de Excel para seguir fuera de línea.
- Se corta la sesión antes de enviar. Lo guardado como carga sin aplicar sigue en MS-02 y se retoma desde «Mis cargas»; lo que no se guardó se pierde, porque el portal no guarda datos del catálogo.
- La plantilla cambia mientras captura. Los renglones a los que les falta algo de la versión vigente salen con TEMPLATE_VERSION_OUTDATED y el portal recarga la cuadrícula con la versión nueva.
5. APIs
Las que construye esta épica (1)
GET /bff/v1/bulk-loads/online-template · Plantilla en línea
| Campo | Valor |
|---|---|
| API | API-BFF-204 · BFF del portal |
| Para qué | Junta la cuadrícula de la plantilla en línea para una plantilla y un negocio: las columnas salen del mismo formulario de captura de API-BFF-101 (capa de obligatoriedad, tipo, listas cortas y dependencias de un nivel, de MS-01) y se les suman los renglones prellenados si se pidieron por SKU o EAN (MS-02). Las listas grandes, como marcas, se buscan aparte con API-BFF-102. |
| En esta épica | La cuadrícula: columnas con su capa, listas cortas, dependencias y prellenado |
| Quién la llama | Entrada Única · Vendor Center (por el BFF) |
| Permiso | La pantalla de plantilla en línea en el menú del perfil (BFF); al prellenar, sólo productos del proveedor o seller |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | templateId = EU4-0412, business = MKP, prefillSkus = 1000004812,1000004813 |
Request
null
Response · 200
{
"success": true,
"data": {
"templateId": "EU4-0412",
"version": 7,
"business": "MKP",
"maxRows": 500,
"columns": [
{
"code": "MARCA",
"level": "REQUIRED",
"type": "LIST",
"list": "MARCA",
"search": true
},
{
"code": "COLOR",
"level": "REQUIRED",
"type": "LIST",
"list": "COLOR"
},
{
"code": "TONO",
"level": "OPTIONAL",
"type": "LIST",
"list": "TONO",
"dependsOn": "COLOR"
},
{
"code": "CAPACIDAD",
"level": "REQUIRED",
"type": "NUMBER",
"unit": "MAH"
},
{
"code": "MATERIAL",
"level": "RECOMMENDED",
"type": "LIST",
"list": "MATERIAL"
}
],
"lists": {
"COLOR": [
{
"code": "NEGRO",
"label": "Negro"
},
{
"code": "ROJO",
"label": "Rojo"
}
],
"TONO": {
"byParent": {
"ROJO": [
{
"code": "ROJO_VINO",
"label": "Rojo vino"
}
]
}
},
"MATERIAL": [
{
"code": "PLASTICO",
"label": "Plástico"
}
]
},
"rows": [
{
"productId": "PRD-0004812",
"sku": "1000004812",
"cells": {
"MARCA": "MARCA01",
"COLOR": "ROJO",
"CAPACIDAD": 10000
}
}
],
"prefillNote": null
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La plantilla no existe o no es una hoja |
| 422 | VALIDATION_ERROR | Más de 500 productos para prellenar: se ofrece el Excel |
| 403 | AUTHORIZATION_ERROR | El perfil no tiene la pantalla o el negocio no es suyo |
Las que usa y construye otra épica (10)
Su request y su response están en la página de la épica que la construye.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-01-028 | GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective | Vista efectiva con capas y dependencias de un nivel | FT-PLT-06 · Configuración de atributos por plantilla y por negocio… |
| API-01-007 | GET /api/v2/lovs/{id}/values | Listas de valores cortas para la cuadrícula | FT-PLT-03 · Listas de valores y modelo canónico con equivalencias por… |
| API-02-001 | POST /api/v2/products/search | Productos a prellenar por SKU o EAN | FT-PRD-01 · Modelo canónico de producto |
| API-02-046 | POST /api/v2/product-imports | Mandar los renglones a la misma carga masiva (source ROWS, hasta 500) | FT-FLU-04 · Carga masiva de productos por archivo |
| API-06-002 | POST /api/v2/evaluations/batches | Evaluar los renglones por bloque | FT-FLU-05 · Reglas de negocio en la carga masiva |
| API-02-048 | GET /api/v2/product-imports/{id} | Resultado por celda y por renglón | FT-FLU-04 · Carga masiva de productos por archivo |
| API-02-047 | POST /api/v2/product-imports/{id}/apply | Crear los renglones válidos | FT-FLU-04 · Carga masiva de productos por archivo |
| API-02-045 | GET /api/v2/product-imports/profiles/{p}/template | Bajar el Excel cuando la cuadrícula no alcanza | FT-FLU-04 · Carga masiva de productos por archivo |
| API-02-204 | GET /api/v2/product-imports | Retomar una carga guardada sin aplicar | FT-FLU-04 · Carga masiva de productos por archivo |
| API-BFF-102 | GET /bff/v1/catalog/capture-form/values | Valores de un atributo con búsqueda, páginas y dependencia del padre | FT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/PRODUCT_CREATED | Se crea cada renglón válido de la plantilla en línea | FT-ARQ-01 |
catalog.product.changed/STATUS_CHANGED | Un renglón completo se envía a revisión | 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 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.validation.result/EVALUATION_DONE | MS-02 completa el resultado por renglón cuando MS-06 terminó de evaluar | FT-FLU-03, FT-FLU-05, FT-REF-03 |
7. Datos
Cada colección tiene un solo dueño, el único que escribe en ella.
| Colección | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
product_jobs | MS-02 | Trabajos asíncronos: cargas masivas de productos, edición masiva y publicación. | escribe |
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | escribe |
identifier_registry | MS-02 | Unicidad de SKU y de EAN por negocio. | 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 |
template_views | MS-01 | La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios. | lee |
lov_values | MS-01 | Cada valor de lista: código, etiqueta, orden y equivalencias por sistema. | lee |
governance_rules | MS-01 | Reglas de captura y clasificación: marcas por plantilla, grupo de artículo a plantilla, alcance del proveedor y lista negra de Marketplace. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-FLU-06·H1 · Capturar en línea sin descargar | P1 | pasos 1, 2, 3, 4, 5; API-BFF-204 |
| FT-FLU-06·H2 · Pegar columnas desde Excel | P1 | pasos 6, 8, 9, 10, 11; API-02-046, API-02-048 |
| FT-FLU-06·H3 · Campos dependientes en vivo | P2 | flujo «Campo que depende de otro»; API-BFF-102 |
| FT-FLU-06·H4 · Excel para volúmenes grandes | P3 | pasos 12, 13; flujo «Más de 500 renglones: sigue en Excel» |
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-06-1. La plantilla en línea es otra forma de llenar la misma carga masiva: lo capturado se manda a MS-02 como renglones (API-02-046 con source ROWS, origen BULK y canal ONLINE_TEMPLATE), con la misma validación asíncrona, la misma evaluación de MS-06 y el mismo reporte; el SKU se crea con la misma lógica que si viniera de Excel. Por qué: Cumple H4 (misma creación por Excel o en línea) y no agrega un segundo motor de validación que mantener. Se apoya en DEC-55, DEC-54, RN-MAS-02, RN-ALT-12.
- D-FLU-06-2. En vivo sólo los avisos que salen de los datos de MS-01: obligatorio vacío, valor fuera de lista y dependencia de un nivel entre atributos, que la cuadrícula toma de la vista efectiva compuesta por el BFF. Todo lo demás (tipos, reglas de calidad, lista negra, coincidencias) corre en segundo plano al guardar o al enviar. Por qué: Es lo que pide RF-MAS-11 y evita que la regla viva en el navegador: la lista y la dependencia vienen del dueño del catálogo, y la validación que decide es la de MS-02. Se apoya en RF-MAS-11, RN-GEN-04, RF-CAL-03.
- D-FLU-06-3. Guardar sin enviar es una carga con applyWhenValidated = false: los renglones y sus resultados quedan en MS-02 y se retoman desde «Mis cargas». El portal no guarda nada. Por qué: Los fronts no guardan datos del catálogo y así no hace falta otro almacén de borradores para la cuadrícula. Se apoya en ADR-12.
- D-FLU-06-4. Límite de arranque: 500 renglones por envío; para más, Excel. Las listas grandes, como marcas, se buscan por texto contra MS-01 con paginación y nunca se bajan completas. Por qué: Un seller con 12,000 registros sigue con Excel (H4); el valor exacto lo fija la evaluación técnica con la prueba de intermitencia. Se apoya en PEN-58, PEN-91, S10-RF-25.
- D-FLU-06-5. Se construye después del Excel (ola 3) y sólo si la evaluación técnica la aprueba; no bloquea R2 ni agrega nada al núcleo: es una ruta del BFF sobre la carga de FT-FLU-04. Por qué: La propuesta formal está acordada pero su factibilidad no; así su costo queda en la pantalla y en una composición del BFF. Se apoya en DEC-55, PEN-90.
Qué falta decidir
Nada propio de esta épica: lo que sigue abierto está en las decisiones del programa.
También siguen abiertos: PEN-90, Elaborar la propuesta formal de la plantilla en línea; el corpus no le da responsable; PEN-91, El equipo técnico evalúa capacidad e intermitencia de la cuadrícula con la carga esperada; PEN-58, Fijar el límite de renglones de la versión en línea (aquí arranca en 500).
Fuentes
- [D]
trazabilidad/features/FT-FLU-06-plantilla-en-linea-carga-masiva.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.