Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-PRD-04: 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-PRD-04.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PRD-04-ciclo-de-vida-propuesta-proveedor.md.
En 30 segundos
Cuando un proveedor de Mercaderías envía una propuesta, Compras tiene que aceptarla, rechazarla o cancelarla antes de que se pida el SKU a SAP. Esta épica cuida ese tramo: la bandeja de Compras, el rechazo con motivo por campo, los avisos al proveedor, los plazos que vencen solos y el historial de lo que se canceló, para que ninguna propuesta se pierda sin explicación.
- Módulo dueño: MS-02 Producto. También participan: MS-14 Avisos y ayuda, MS-07 Ingesta de archivos, MS-08 Adaptadores de salida, MS-13 Identidad y acceso.
- Etapa 4 · Visto bueno. Recibe «PE-4 · Propuesta enviada» y entrega «PE-5 · Visto bueno dado».
- APIs: construye 2 y usa 9 que construyen otras épicas.
- Eventos: publica 6 y consume 4.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| PE-4 · Propuesta enviada | La propuesta en En revisión, con la Validación automática aprobada y la tarea Visto bueno de Compras abierta. |
| FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… | Las transiciones, las tareas y los plazos configurados en el motor de estados. |
| FT-RAC-01 · Motor de validación en línea y candados de datos… | La propuesta enviada con los obligatorios completos. |
| FT-PLT-07 · Reglas de atributos | Los campos calculados del placeholder que viajan a o9 con sus datos maestros. |
| FT-RAC-02 · Score de calidad del producto | En Mercaderías y Suburbia, la calificación informativa que Compras ve al decidir. |
| FT-RAC-06 · Métricas de tiempos por paso y clasificación de errores | La antigüedad y el tiempo de la revisión de Compras, con los que se ratifican sus plazos. |
Entrega
| A | Qué |
|---|---|
| PE-5 · Visto bueno dado | La propuesta en Creación de SKU, con el visto bueno de Compras registrado y SAP_CREATION_REQUESTED publicado. |
| FT-PRD-02 · Creación de SKU con SAP | La petición de crear el artículo en SAP. |
| FT-PRD-08 · Plazos de enriquecimiento de Mercaderías hasta la… | La fecha del visto bueno, desde la que corren los plazos de enriquecimiento. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T04 | En revisión → Borrador | Rechazo de Compras o de las reglas; se abre Corrección. |
| T05 | En revisión → Creación de SKU | Visto bueno: Compras en Mercaderías; en Marketplace, la Calificación de IA confirma que tiene lo que el SKU necesita (el score decide después la publicación). |
| T11 | Borrador → Cancelado | Vence el plazo del rechazo (P-01) o se elimina. |
| T12 | En revisión → Cancelado | Compras cancela. |
Tareas que abre o cierra: Visto bueno de Compras, Corrección.
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 | Compras | Entrada Única · Vendor Center | Abre su bandeja de visto bueno | — |
| 2 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide las tareas de visto bueno de su área | API-02-032 |
| 3 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Abre la propuesta con sus datos e imágenes | API-02-002 |
| 4 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pregunta qué botones puede usar | API-02-027 |
| 5 | Compras | Entrada Única · Vendor Center | Acepta la propuesta | — |
| 6 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el plan de la acción ACCEPT | API-02-028 |
| 7 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma el plan | API-02-057 |
| 8 | MS-02 Producto | Base pim | Cierra la tarea y pasa a Creación de SKU | — |
| 9 | MS-02 Producto | Eventos | Avisa el cambio de estado | catalog.product.changed/STATUS_CHANGED |
| 10 | MS-02 Producto | Eventos | Pide crear el artículo en SAP | catalog.product.publication/SAP_CREATION_REQUESTED |
| 11 | Eventos | MS-14 Avisos y ayuda | Entrega el cambio de estado para avisar | catalog.product.changed/STATUS_CHANGED |
| 12 | MS-14 Avisos y ayuda | Servicio de correo | Avisa al proveedor que su propuesta fue aceptada | — |
3.1 Si Compras rechaza y nadie corrige
3.2 Placeholders de pre-compra con o9
4. Si algo sale mal
- Compras rechaza. La propuesta regresa a Borrador con una tarea de Corrección. El proveedor ve «Rechazada» con el motivo de cada campo y recibe un aviso; al reenviar, vuelve a la bandeja de Compras.
- El proveedor no corrige a tiempo. El reloj de plazos de MS-02 le recuerda cada semana. Al vencer el plazo de corrección, la propuesta pasa a Cancelado, sus EAN quedan libres y el proveedor la ve en su historial con el motivo «Venció el plazo de corrección».
- Compras no responde a tiempo. La propuesta no se cancela. A los 15 días se le recuerda a Compras y a los 30 la tarea pasa a la cola del área de Gobierno de Producto para reasignarla; el proveedor ve «Revisión de compras» con la fecha en que entró.
- Otra persona cambió la propuesta mientras Compras la revisaba. La confirmación responde 409 VERSION_CONFLICT; el portal recarga la propuesta y Compras vuelve a decidir sobre la versión nueva.
- El archivo de o9 trae renglones en otro orden o desconocidos. Cada renglón se aplica por su placeholderId, nunca por posición; los desconocidos quedan en el recibo del archivo como rechazados y no se tocan otros productos.
5. APIs
Las que construye esta épica (2)
GET /api/v2/workflow/comments?productIds= · Motivos de rechazo
| Campo | Valor |
|---|---|
| API | API-02-029 · MS-02 Producto |
| Para qué | Devuelve los motivos de rechazo de una o varias propuestas, por campo, con quién rechazó (por área), a quién le toca corregir y cuándo vence la corrección. |
| En esta épica | Leer los motivos de rechazo de varias propuestas |
| Quién la llama | BFF del portal, Gateway de terceros /partner/v1 |
| Permiso | El proveedor o seller dueño, y las áreas internas con lectura |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | productIds = PRD-0004812 |
| También la usan | FT-IA-06, FT-PRD-05, FT-PRD-09, FT-PRD-10, FT-RAC-05 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"productId": "PRD-0004812",
"rejectedAt": "2026-10-18T15:04:07Z",
"rejectedBy": {
"area": "COMPRAS-HOGAR",
"role": "COMPRAS"
},
"target": "PROVEEDOR",
"reason": {
"code": "DATOS_INCOMPLETOS",
"comment": "Faltan medidas del empaque"
},
"fields": [
{
"attribute": "ALTO_EMPAQUE",
"label": "Alto del empaque",
"code": "REQUIRED",
"comment": "Captura el alto en centímetros"
}
],
"correctionDueAt": "2026-12-17T15:04:05Z"
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La propuesta no existe o no es visible para quien llama |
POST /internal/product/planning/o9-status · Estatus de o9 por placeholder
| Campo | Valor |
|---|---|
| API | API-02-301 · MS-02 Producto |
| Para qué | MS-07 entrega el archivo de respuesta de o9 ya leído; Producto aplica el estatus a cada placeholder por su identificador y vuelve propuesta a los aceptados. |
| En esta épica | Recibir el estatus de o9 por placeholder |
| Quién la llama | MS-07 Ingesta de archivos |
| Permiso | Sólo MS-07 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | products, product_receipts, product_outbox |
| Publica | catalog.product.changed/STATUS_CHANGED |
Request
{
"fileId": "o9-resp-20261018-01",
"records": [
{
"placeholderId": "PRD-0007710",
"status": "ACCEPTED"
},
{
"placeholderId": "PRD-0007711",
"status": "NOT_RECOMMENDED"
}
]
}
Response · 200
{
"success": true,
"data": {
"fileId": "o9-resp-20261018-01",
"applied": 2,
"rejected": 0,
"items": [
{
"placeholderId": "PRD-0007710",
"result": "APPLIED",
"nowStatus": "BORRADOR"
},
{
"placeholderId": "PRD-0007711",
"result": "APPLIED",
"nowStatus": "PLACEHOLDER_NO_RECOMENDADO"
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | IDEMPOTENCY_MISMATCH | El mismo archivo llega otra vez con contenido distinto |
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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-02-032 | GET /api/v2/tasks | La bandeja: tareas de visto bueno por área, estado y antigüedad | FT-PRD-06 · Bandeja de pendientes y depuración de borradores… |
| API-02-002 | GET /api/v2/products/{id} | Ver la propuesta completa antes de decidir | FT-PRD-01 · Modelo canónico de producto |
| API-02-027 | GET /api/v2/workflow/capabilities?productIds= | Saber si puede aceptar, rechazar o cancelar | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-028 | POST /api/v2/workflow/actions/plans | Vista previa de ACCEPT, REJECT o CANCEL, con el motivo por campo | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar la acción | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-030 | GET /api/v2/workflow/config/{type} | Leer los plazos de corrección y de revisión por negocio | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-031 | POST /api/v2/workflow/config/{type}/plans | Cambiar los plazos (Gobierno de Producto) | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-001 | POST /api/v2/products/search | Historial del proveedor: sus propuestas canceladas o vencidas | FT-PRD-01 · Modelo canónico de producto |
| API-14-005 | POST /internal/notifications/messages | Mandar el recordatorio semanal al proveedor | FT-RAC-05 · Estatus del producto y motivos visibles para seller y… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/STATUS_CHANGED | Compras acepta o cancela, o vence el plazo de corrección | FT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-02, FT-PRD-06, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06 |
catalog.product.changed/REJECTION_ADDED | Compras rechaza con motivo por campo | FT-INT-07, FT-PRD-05, FT-PRD-10, FT-RAC-01, FT-RAC-03, FT-RAC-05, FT-RAC-06 |
catalog.product.changed/TASK_CHANGED | Se cierra el visto bueno, se abre Corrección o una tarea se escala | 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/EAN_CHANGED | Una cancelación libera los EAN de la propuesta | FT-ARQ-02, FT-PRD-03 |
catalog.product.publication/SAP_CREATION_REQUESTED | Compras acepta: se pide el artículo a SAP | FT-PRD-02 |
catalog.product.publication/PLANNING_EXPORT_REQUESTED | Hay placeholders listos para mandar a o9 | MS-05 (bitácora) |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.product.changed/STATUS_CHANGED | MS-14 avisa al proveedor que su propuesta fue aceptada o cancelada | esta misma épica |
catalog.product.changed/REJECTION_ADDED | MS-14 manda el motivo del rechazo al proveedor | esta misma épica |
catalog.product.publication/PLANNING_EXPORT_REQUESTED | MS-08 arma el archivo de placeholders para o9 | esta misma épica |
catalog.egress.files/OBJECT_FINALIZE | MS-07 lee el archivo de respuesta de o9 | D-ARCHIVOS |
7. Datos
Cada colección tiene un solo dueño, el único que escribe en ella.
| Colección | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
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 |
identifier_registry | MS-02 | Unicidad de SKU y de EAN por negocio. | 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 |
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-PRD-04·H1 · Rechazo con aviso | P1 | flujo «Si Compras rechaza y nadie corrige»; API-02-028, API-02-029, API-14-005 |
| FT-PRD-04·H2 · Historial | P1 | flujo «Si Compras rechaza y nadie corrige»; API-02-001 |
| FT-PRD-04·H3 · Vigencia en revisión de Compras | P1 | pasos 1, 2, 6, 7, 10; API-02-030, API-02-031 |
| FT-PRD-04·H4 · Borrador de pre-compra | P2 | API-02-030. Fuera: Guardar el borrador lo resuelve FT-PRD-07 (captura guiada); aquí sólo se fija su vigencia (D-PRD-04-6). |
| FT-PRD-04·H5 · Cancelación | P3 | API-02-028, API-02-057 |
| FT-PRD-04·H6 · Cancelación automática del rechazo | P1 | flujo «Si Compras rechaza y nadie corrige» |
| FT-PRD-04·H7 · Intercambiar placeholders con o9 por buckets | P2 | flujo «Placeholders de pre-compra con o9»; API-02-301 |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-PRD-04-1. La propuesta vive en el PIM (colección products de MS-02) desde que se guarda; el portal de catalogación sólo la muestra y la edita por la API v2. Por qué: Un solo sistema y un solo dueño del dato: si la propuesta se quedara en Entrada Única habría dos copias que reconciliar y dos máquinas de estados. Se apoya en ADR-12, PD-06.
- D-PRD-04-2. Plazo de corrección de 60 días por omisión, configurable por negocio en el motor (workflow/config tipo DEADLINES), con recordatorio semanal. Al vencer, se cancela sola y libera sus EAN. Por qué: Hoy ningún sistema cancela solo y las propuestas muertas se acumulan; 60 días es el arranque que propone backend compartido y deja margen al proveedor. El valor final lo ratifica el negocio. Se apoya en PEN-211, DUD-24.
- D-PRD-04-3. La revisión de Compras no cancela nunca: recuerda a los 15 días y a los 30 pasa la tarea a la cola de Gobierno de Producto para reasignarla. Por qué: Cancelar por inacción de Liverpool castigaría al proveedor; escalar hace visible el atraso sin perder la propuesta. Se apoya en DEC-24.
- D-PRD-04-4. Todos los plazos los vigila un solo reloj en MS-02 que revisa las tareas abiertas y su vencimiento; los avisos los manda MS-14 por pantalla y correo. Por qué: Un solo lugar para plazos evita crons sueltos por sistema, como hoy en Entrada Única y P360. Se apoya en PEN-12, PD-29.
- D-PRD-04-5. Al cancelar, los EAN se liberan en la misma transacción que el cambio de estado (identifier_registry es de MS-02). Por qué: Si la liberación fuera por evento, un fallo dejaría EAN bloqueados sin propuesta viva. Se apoya en ADR-12.
- D-PRD-04-6. Un borrador vence a los 90 días sin actividad y el de pre-compra a los 300, con aviso 7 días antes; la depuración la hace FT-PRD-06. Por qué: Concilia la depuración de 30 días de hoy con la pre-compra de unos 9 meses que pidió el taller. Se apoya en RF-ALT-08.
Qué falta decidir
| ID | Qué falta |
|---|---|
| DUD-24 | Confirmar si hoy algún proceso borra propuestas a los 30 días, para migrar su efecto. |
| PD-06 | Se cierra con ADR-12 cuando la TDA lo registre: la propuesta vive en el PIM. |
También siguen abiertos: PEN-211, Ratificar con el negocio el plazo de corrección por negocio (aquí arranca en 60 días); PEN-12, Confirmar el canal y la frecuencia de los avisos al proveedor.
Fuentes
- [D]
trazabilidad/features/FT-PRD-04-ciclo-de-vida-propuesta-proveedor.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.