Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-RAC-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-RAC-05.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-RAC-05-estatus-motivos-seller-proveedor.md.
En 30 segundos
Hoy el seller y el proveedor dependen de alguien que les explique en qué va su producto, qué les falta o por qué se rechazó. Esta épica les da una vista propia: la etiqueta de su producto, en qué paso va, qué quedó a medias, los motivos de rechazo por campo y, por SKU, por qué no se creó o no se ve en la tienda. Producto la calcula con una sola tabla; el portal y la API de terceros sólo la muestran.
- Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-14 Avisos y ayuda.
- Etapa T · Transversal. Recibe «PE-T · Usuario con permisos y bitácora» y entrega a otras épicas.
- APIs: construye 10 y usa 7 que construyen otras épicas.
- Eventos: publica 3 y consume 3.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… | El estado, las tareas abiertas y el origen de cada rechazo, de donde sale la etiqueta. |
| PE-T · Usuario con permisos y bitácora | Quien consulta ya se identificó y sólo ve sus productos. |
| FT-ACT-06 · Recepción del trabajo de Foro y control de edición… | La marca de que el estudio enriqueció el producto, para que el proveedor vea «En proceso Liverpool» si QA lo regresa al estudio. |
| FT-FLU-02 · Alta individual de Marketplace | En qué paso del alta va cada propuesta de Marketplace, para el estatus que ve el seller. |
Entrega
| A | Qué |
|---|---|
| FT-PRD-06 · Bandeja de pendientes y depuración de borradores… | La etiqueta y el paso en que quedó cada producto, para la bandeja de pendientes. |
| FT-IA-06 · Asistente conversacional para que el seller reporte errores | El estatus y los motivos sobre los que el asistente ayuda al seller a reportar un error. |
| FT-INT-06 · Avisos de cambios a Entrada Única y consumidores | La tabla de etiquetas con su código de P360, para que el aviso a Entrada Única diga lo mismo que el portal. |
Tareas que abre o cierra: Corrección, 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 | Seller | Entrada Única · Vendor Center | Abre la lista de sus productos | — |
| 2 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el estatus visible de sus productos | API-02-302 |
| 3 | MS-02 Producto | Base pim | Lee estado, tareas abiertas, rechazos y canales | — |
| 4 | MS-02 Producto | MS-01 Catálogo | Lee los pasos y obligatorios de cada plantilla | API-01-028 |
| 5 | MS-02 Producto | Base pim | Traduce estado y tarea a la etiqueta de la tabla | — |
| 6 | Seller | Entrada Única · Vendor Center | Abre un producto que dice «Rechazada» | — |
| 7 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide los motivos de rechazo por campo | API-02-029 |
| 8 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el estado de cada canal | API-02-042 |
| 9 | Seller | Entrada Única · Vendor Center | Ve el paso incompleto, el motivo y qué hacer | — |
3.1 Por qué un SKU no se creó o no se ve, por negocio
3.2 Los cuatro avisos al proveedor
3.3 Gobierno de Producto ajusta una etiqueta
4. Si algo sale mal
- Un producto tiene varias tareas abiertas a la vez. Gana la que pide algo al proveedor: Corrección, luego Carga de imagen, luego En proceso Liverpool y luego En revisión. La etiqueta nunca sale vacía: si ninguna regla aplica, se muestra la del estado y el caso queda en el registro para revisar la tabla.
- QA rechaza un producto que enriqueció Foro. La Corrección va a Foro, no al proveedor, y el proveedor ve «En proceso Liverpool»; si el que enriqueció fue el proveedor, ve «Rechazada» con el motivo por campo. La regla deja de vivir en Entrada Única y queda en la tabla.
- SAP devuelve un error al crear el SKU. El mensaje del programa 141 (hasta 220 caracteres) se guarda en el producto y aparece en los motivos del SKU por negocio, con Gobierno de Datos como quien lo corrige. El proveedor ve «En revisión» mientras tanto.
- El correo no llega. El aviso queda en la pantalla de avisos (MS-14) y la etiqueta en el portal ya cambió, así que el proveedor se entera al entrar aunque falle el correo.
5. APIs
Las que construye esta épica (10)
GET /api/v2/workflow/status-views · Estatus visible para el proveedor o seller
| Campo | Valor |
|---|---|
| API | API-02-302 · MS-02 Producto |
| Para qué | Calcula, por producto, lo que ve el proveedor o seller: la etiqueta de la tabla, en qué paso va y cuáles están completos o a medias, qué le toca hacer y para cuándo, cuántos motivos tiene abiertos y el resumen por canal. El portal (por el BFF) y la API de terceros sólo lo muestran. |
| En esta épica | Lo que ve el proveedor por producto: etiqueta, pasos, qué le toca y resumen por canal |
| Quién la llama | BFF del portal, Gateway de terceros /partner/v1 |
| Permiso | El proveedor o seller dueño de los productos; las áreas internas con lectura |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | productIds = PRD-0004812, status = `, page = 1, size = 50` |
| También la usan | FT-ACT-06, FT-IA-06, FT-PRD-06 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"productId": "PRD-0004812",
"business": "MKP",
"status": "EN_ENRIQUECIMIENTO",
"openTasks": [
"CORRECCION"
],
"label": "Rechazada",
"p360Code": "1028",
"labelRule": "EN_ENRIQUECIMIENTO+CORRECCION(QA→PROVEEDOR)",
"steps": [
{
"step": 1,
"name": "Datos básicos",
"complete": true
},
{
"step": 2,
"name": "Atributos",
"complete": false,
"missing": [
"MATERIAL",
"CAPACIDAD"
]
},
{
"step": 3,
"name": "Datos logísticos",
"complete": true
},
{
"step": 4,
"name": "Variantes",
"complete": true
},
{
"step": 5,
"name": "Imágenes y documentos",
"complete": true
}
],
"nextAction": {
"code": "CORREGIR",
"text": "Corrige los 2 campos que rechazó QA",
"dueAt": "2026-12-17T15:04:05Z"
},
"openReasons": 2,
"channels": {
"total": 2,
"published": 0,
"summary": "Sin publicar"
},
"updatedAt": "2026-10-18T15:04:07Z"
}
],
"page": 1,
"size": 50,
"total": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | Se piden más de 100 productos o un filtro que no existe |
| 404 | NOT_FOUND | Algún producto no existe o no es de quien llama |
GET /api/v2/workflow/sku-blockers · Por qué un SKU no se creó o no se ve
| Campo | Valor |
|---|---|
| API | API-02-303 · MS-02 Producto |
| Para qué | Dice, por SKU y por negocio, qué detiene su creación o su publicación: el error que devolvió SAP, el dato que falta, la compuerta del canal que no pasa o el canal en error, con quién lo corrige. |
| En esta épica | Por qué un SKU no se creó o no se ve, por negocio |
| Quién la llama | BFF del portal, Gateway de terceros /partner/v1 |
| Permiso | El proveedor o seller dueño del SKU; Gobierno de Datos y las áreas internas con lectura |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | sku = 1000004812, business = MER,SUB |
| También la usan | FT-PRD-02, FT-RAC-03 |
Request
null
Response · 200
{
"success": true,
"data": {
"sku": "1000004812",
"productId": "PRD-0004812",
"items": [
{
"business": "MER",
"stage": "PUBLICACION",
"channel": "TIENDA",
"code": "SIN_IMAGEN_PRINCIPAL",
"message": "Sin imagen principal congelada",
"fixedBy": "PROVEEDOR",
"since": "2026-10-12T10:00:00Z"
},
{
"business": "MER",
"stage": "CREACION_SKU",
"code": "FALTA_DATO",
"message": "Falta el número de proveedor",
"fixedBy": "GOBIERNO_DE_DATOS",
"since": "2026-10-11T08:30:00Z"
},
{
"business": "SUB",
"stage": "CREACION_SKU",
"code": "ERROR_SAP",
"message": "Grupo de artículos no válido para la sociedad",
"source": "Programa 141 de SAP (hasta 220 caracteres)",
"fixedBy": "GOBIERNO_DE_DATOS",
"since": "2026-10-11T08:31:00Z"
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El SKU no existe o no es de quien llama |
GET /api/v2/notifications?unread= · Mis avisos en pantalla
| Campo | Valor |
|---|---|
| API | API-14-001 · MS-14 Avisos y ayuda |
| Para qué | La campana del portal y del estudio: los avisos de quien llama, los más nuevos primero, con el producto o la tarea a la que llevan y si ya los leyó. MS-14 los genera al consumir eventos (rechazos, cambios de estado, tareas, imágenes rechazadas, cargas terminadas) o cuando un módulo le pide un aviso explícito. |
| En esta épica | Los avisos en pantalla del proveedor |
| Quién la llama | BFF del portal |
| Permiso | Cualquier usuario autenticado; sólo ve sus avisos y los de sus áreas |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | unread = true, page = 1, size = 20 |
| También la usan | FT-ACT-06, FT-PRD-10 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"notificationId": "ntf-81c2",
"type": "IMAGE_REJECTED",
"title": "Una imagen de tu producto fue rechazada",
"text": "Detalle 2 de PRD-0004812: se ve un logotipo. Sube otra para seguir.",
"productId": "PRD-0004812",
"link": {
"screen": "carga-de-imagen",
"productId": "PRD-0004812"
},
"channel": "IN_APP",
"createdAt": "2026-10-18T17:20:05Z",
"readAt": null
},
{
"notificationId": "ntf-81c3",
"type": "TASK_AGING",
"title": "Tienes un cambio de plantilla esperando",
"text": "PRD-0004812 lleva 7 días en tu bandeja: Foro sugiere la plantilla EU4-0415.",
"productId": "PRD-0004812",
"link": {
"screen": "bandeja",
"taskId": "tsk-40211"
},
"channel": "IN_APP",
"createdAt": "2026-10-25T14:00:00Z",
"readAt": null
}
],
"unreadCount": 2,
"page": 1,
"size": 20,
"total": 2
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | Un filtro trae un valor que no existe |
POST /api/v2/notifications/read · Marcar avisos como leídos
| Campo | Valor |
|---|---|
| API | API-14-002 · MS-14 Avisos y ayuda |
| Para qué | Marca como leídos unos avisos o todos los anteriores a una fecha. |
| En esta épica | La construye esta épica: marca como leídos unos avisos o todos los anteriores a una fecha |
| Quién la llama | BFF del portal |
| Permiso | El dueño de los avisos |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | notifications |
| También la usan | FT-ACT-06 |
Request
{
"notificationIds": [
"ntf-81c2",
"ntf-81c3"
]
}
Response · 200
{
"success": true,
"data": {
"updated": 2,
"unreadCount": 0
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | Algún aviso no existe o no es de quien llama |
GET /api/v2/notifications/preferences · Mis preferencias de avisos
| Campo | Valor |
|---|---|
| API | API-14-003 · MS-14 Avisos y ayuda |
| Para qué | Qué avisos existen para el perfil de quien llama, por qué canal los recibe (pantalla, correo) y con qué frecuencia (al momento o en un resumen diario). Los avisos obligatorios, como un rechazo o un plazo por vencer, no se pueden apagar. |
| En esta épica | La construye esta épica: qué avisos existen para el perfil de quien llama, por qué canal los recibe (pantalla, correo) y con qué frecuencia (al momento o en un resumen diario). Los avisos obligatorios, como un rechazo o un plazo por vencer, no se pueden apagar |
| Quién la llama | BFF del portal |
| Permiso | Cualquier usuario autenticado, sobre sus propias preferencias |
| Cabeceras | Authorization, X-Request-Id |
| También la usan | FT-ACT-02 |
Request
null
Response · 200
{
"success": true,
"data": {
"version": 4,
"items": [
{
"type": "PRODUCT_REJECTED",
"label": "Rechazo de una propuesta o producto",
"channels": {
"IN_APP": true,
"EMAIL": true
},
"frequency": "IMMEDIATE",
"mandatory": true
},
{
"type": "IMAGE_REJECTED",
"label": "Imagen rechazada",
"channels": {
"IN_APP": true,
"EMAIL": true
},
"frequency": "IMMEDIATE",
"mandatory": true
},
{
"type": "TASK_REMINDER",
"label": "Recordatorio de tarea pendiente",
"channels": {
"IN_APP": true,
"EMAIL": false
},
"frequency": "DAILY_DIGEST",
"mandatory": false
},
{
"type": "ASSET_JOB_FINISHED",
"label": "Terminó una carga masiva de imágenes",
"channels": {
"IN_APP": true,
"EMAIL": true
},
"frequency": "IMMEDIATE",
"mandatory": false
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Se piden las preferencias de otra persona |
PUT /api/v2/notifications/preferences · Cambiar mis preferencias de avisos
| Campo | Valor |
|---|---|
| API | API-14-004 · MS-14 Avisos y ayuda |
| Para qué | Cambia por qué canal y con qué frecuencia recibe cada aviso quien llama. Se guardan como el documento de ajustes de esa persona en notifications, contra la versión que se leyó. |
| En esta épica | La construye esta épica: cambia por qué canal y con qué frecuencia recibe cada aviso quien llama. Se guardan como el documento de ajustes de esa persona en notifications, contra la versión que se leyó |
| Quién la llama | BFF del portal |
| Permiso | Cualquier usuario autenticado, sobre sus propias preferencias |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key, If-Match |
| Escribe en | notifications |
| También la usan | FT-PRD-10 |
Request
{
"version": 4,
"items": [
{
"type": "TASK_REMINDER",
"channels": {
"IN_APP": true,
"EMAIL": true
},
"frequency": "DAILY_DIGEST"
}
]
}
Response · 200
{
"success": true,
"data": {
"version": 5,
"changed": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | VERSION_CONFLICT | Las preferencias cambiaron desde que se leyeron |
| 422 | VALIDATION_ERROR | Se intenta apagar un aviso obligatorio o el tipo no existe |
POST /internal/notifications/messages · Mandar un aviso explícito
| Campo | Valor |
|---|---|
| API | API-14-005 · MS-14 Avisos y ayuda |
| Para qué | Un módulo pide un aviso que no sale de un evento: un recordatorio de plazo, la antigüedad de una tarea, un reporte listo o una invitación. MS-14 resuelve a quién le llega (usuario, área, proveedor o seller) con el directorio de MS-13, respeta sus preferencias, lo deja en pantalla y manda el correo por el servicio de correo. Con la misma llave de duplicado no repite el aviso. |
| En esta épica | La construye esta épica: un módulo pide un aviso que no sale de un evento: un recordatorio de plazo, la antigüedad de una tarea, un reporte listo o una invitación. MS-14 resuelve a quién le llega (usuario, área, proveedor o seller) con el directorio de MS-13, respeta sus preferencias, lo deja en pantalla y manda el correo por el servicio de correo. Con la misma llave de duplicado no repite el aviso |
| Quién la llama | MS-02 Producto, MS-04 Reportes, MS-12 Estudio fotográfico, MS-13 Identidad y acceso |
| Permiso | Sólo módulos internos (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | notifications |
| También la usan | FT-ACT-06, FT-CAT-05, FT-FLU-04, FT-PLT-01, FT-PLT-03, FT-PLT-09, FT-PRD-03, FT-PRD-04, FT-PRD-06, FT-PRD-08, FT-PRD-10, FT-RAC-04, FT-RAC-07, FT-RAC-08, FT-USR-03 |
Request
{
"type": "TASK_AGING",
"dedupKey": "tsk-40211-2026-10-25",
"recipients": [
{
"kind": "TASK_OWNER",
"taskId": "tsk-40211"
}
],
"channels": [
"IN_APP",
"EMAIL"
],
"params": {
"productId": "PRD-0004812",
"ageDays": 7,
"suggestedTemplate": "EU4-0415"
}
}
Response · 202
{
"success": true,
"data": {
"messageId": "msg-5e21",
"status": "ACCEPTED",
"recipients": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | VALIDATION_ERROR | El tipo de aviso no existe o le falta un dato de su plantilla |
| 409 | IDEMPOTENCY_MISMATCH | Se repite la llave con otro contenido |
| 503 | DEPENDENCY_UNAVAILABLE | El directorio no responde; el aviso queda en cola y se reintenta |
GET /api/v2/help/articles?q=&screen= · Buscar ayuda
| Campo | Valor |
|---|---|
| API | API-14-006 · MS-14 Avisos y ayuda |
| Para qué | Busca artículos del centro de ayuda por texto o por la pantalla en la que está la persona (por ejemplo, cómo deben ser las fotos en la carga de imagen), filtrados por su perfil. |
| En esta épica | La construye esta épica: busca artículos del centro de ayuda por texto o por la pantalla en la que está la persona (por ejemplo, cómo deben ser las fotos en la carga de imagen), filtrados por su perfil |
| Quién la llama | BFF del portal |
| Permiso | Cualquier usuario autenticado |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | q = fotos, screen = carga-de-imagen, page = 1, size = 10 |
| También la usan | FT-ACT-02 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"articleId": "hlp-0031",
"title": "Cómo deben ser tus fotos",
"screens": [
"carga-de-imagen"
],
"summary": "Medidas, peso, fondo y nombres de cada tipo de imagen.",
"updatedAt": "2026-10-10T12:00:00Z"
}
],
"page": 1,
"size": 10,
"total": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | La búsqueda viene vacía y no se dio una pantalla |
GET /api/v2/help/articles/{articleId} · Leer un artículo de ayuda
| Campo | Valor |
|---|---|
| API | API-14-007 · MS-14 Avisos y ayuda |
| Para qué | El contenido completo de un artículo de ayuda, con las pantallas a las que aplica y para qué perfiles es. |
| En esta épica | La construye esta épica: el contenido completo de un artículo de ayuda, con las pantallas a las que aplica y para qué perfiles es |
| Quién la llama | BFF del portal |
| Permiso | Cualquier usuario autenticado del perfil al que va dirigido |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | articleId = hlp-0031 |
| También la usan | FT-ACT-02 |
Request
null
Response · 200
{
"success": true,
"data": {
"articleId": "hlp-0031",
"title": "Cómo deben ser tus fotos",
"audience": [
"PROVEEDOR",
"SELLER"
],
"screens": [
"carga-de-imagen"
],
"body": "La principal mide 940 × 1215 px, a 72 DPI, en JPG y pesa hasta 1 MB. Se llama como el SKU…",
"version": 3,
"updatedAt": "2026-10-10T12:00:00Z"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El artículo no existe o no es para el perfil de quien llama |
PUT /api/v2/help/articles/{articleId} · Escribir un artículo de ayuda
| Campo | Valor |
|---|---|
| API | API-14-008 · MS-14 Avisos y ayuda |
| Para qué | Da de alta o cambia un artículo del centro de ayuda contra la versión que se leyó. |
| En esta épica | La construye esta épica: da de alta o cambia un artículo del centro de ayuda contra la versión que se leyó |
| Quién la llama | BFF del portal |
| Permiso | Gobierno de Producto o administración del centro de ayuda |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key, If-Match |
| Parámetros | articleId = hlp-0031 |
| Escribe en | help_articles |
| También la usan | FT-ACT-01 |
Request
{
"version": 3,
"title": "Cómo deben ser tus fotos",
"audience": [
"PROVEEDOR",
"SELLER"
],
"screens": [
"carga-de-imagen"
],
"body": "La principal mide 940 × 1215 px, a 72 DPI, en JPG y pesa hasta 1 MB…"
}
Response · 200
{
"success": true,
"data": {
"articleId": "hlp-0031",
"version": 4
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | VERSION_CONFLICT | Otra persona cambió el artículo desde que se leyó |
| 422 | VALIDATION_ERROR | Falta el título o la pantalla no existe |
Las que usa y construye otra épica (7)
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-029 | GET /api/v2/workflow/comments?productIds= | Motivos de rechazo por campo, con quién rechazó y a quién le toca corregir | FT-PRD-04 · Propuesta del proveedor de Mercaderías |
| API-02-042 | GET /api/v2/delivery-status?productId=&sku= | Estado de cada canal del producto (lo construye FT-CAT-05) | FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio |
| API-01-028 | GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective | Pasos y obligatorios de la plantilla, para saber qué quedó a medias | FT-PLT-06 · Configuración de atributos por plantilla y por negocio… |
| API-02-026 | GET /api/v2/workflow/statuses | Catálogo de etiquetas con su código de P360 equivalente | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-030 | GET /api/v2/workflow/config/{type} | Leer la tabla SUPPLIER_LABELS | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-031 | POST /api/v2/workflow/config/{type}/plans | Cambiar una etiqueta de la tabla con vista previa | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar el cambio de la tabla | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/STATUS_CHANGED | Cambia el estado o un canal pasa a Publicado; el cuerpo lleva la etiqueta visible y el dueño del producto | 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-06 |
catalog.product.changed/TASK_CHANGED | Se abre una tarea que le toca al proveedor, como Carga de imagen | 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-06 |
catalog.product.changed/REJECTION_ADDED | Un revisor rechaza con motivo por campo | FT-INT-07, FT-PRD-04, FT-PRD-05, FT-PRD-10, FT-RAC-01, FT-RAC-03, FT-RAC-06 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.product.changed/STATUS_CHANGED | MS-14 avisa «cancelada», «eliminada» o «publicada» con la etiqueta que trae el evento | esta misma épica |
catalog.product.changed/TASK_CHANGED | MS-14 avisa que falta la foto | esta misma épica |
catalog.product.changed/REJECTION_ADDED | MS-14 avisa el rechazo con su motivo | 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 |
|---|---|---|---|
product_reference_tables | MS-02 | Configuración del motor de estados y del matching: transiciones, estados externos y pesos. | 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 |
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | lee |
tasks | MS-02 | Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento. | lee |
product_delivery_status | MS-02 | El estado de publicación por producto y canal: Pendiente, Enviado, Publicado, Error o Retirado. | 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-RAC-05·H1 · Ver en qué paso está cada producto y qué quedó a medias | P1 | pasos 2, 3, 4, 5, 9; API-02-302 |
| FT-RAC-05·H2 · Ver los motivos de rechazo por atributo | P1 | pasos 6, 7; API-02-029 |
| FT-RAC-05·H3 · Consultar por SKU por qué no se creó o no es visible, por negocio | P1 | flujo «Por qué un SKU no se creó o no se ve, por negocio»; API-02-303 |
| FT-RAC-05·H4 · Saber por qué un producto aprobado no se publicó o no es visible | P2 | flujo «Por qué un SKU no se creó o no se ve, por negocio»; API-02-303, API-02-042 |
| FT-RAC-05·H5 · Ver tras la creación del SKU el mismo estatus que vería en Liverpool | P2 | pasos 5; API-02-302 |
| FT-RAC-05·H6 · Enterarme del cambio de estatus sin entrar a buscarlo | P3 | flujo «Los cuatro avisos al proveedor»; API-14-001 |
| FT-RAC-05·H7 · Cuatro avisos al proveedor | P1 | flujo «Los cuatro avisos al proveedor» |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-RAC-05-1. Lo que ve el proveedor sale de una sola tabla en MS-02 (SUPPLIER_LABELS): estado más tarea abierta más origen dan la etiqueta y su código de P360, con el orden de precedencia de la máquina de estados (Corrección, Carga de imagen, En proceso Liverpool, En revisión). El portal, por el BFF, y la API de terceros la muestran tal cual. Nunca sale vacía: por omisión vale la del estado. Por qué: Hoy el externo se deduce de una tabla de P360 y Entrada Única lo corrige por su cuenta: hay más de 114 mil productos con estatus nulo y casi 17 mil «Status Desconocido». Una sola tabla y un solo cálculo lo evitan. Se apoya en PD-29, ADR-12, RF-REP-01.
- D-RAC-05-2. «En proceso Liverpool» o «Rechazada» depende de a quién va la Corrección: si QA rechaza lo que enriqueció Foro, la Corrección va a Foro y el proveedor ve «En proceso Liverpool»; si va al proveedor, ve «Rechazada» con el motivo por campo. Por qué: Es la regla que hoy aplica Entrada Única con el previo; en el modelo B el destino del rechazo ya viaja en la tarea, así que no hace falta el estado previo. Se apoya en PD-29.
- D-RAC-05-3. Suburbia y Liverpool ven la misma etiqueta después del 122, porque la etiqueta depende del estado y de la tarea, no del negocio ni del sistema de SAP que respondió. Por qué: Hoy en S4H el estatus se calcula antes de asignar el negocio; aquí se corrige sin replicar el defecto. Se apoya en PD-01, DEC-ARQ-12.
- D-RAC-05-4. Los motivos por SKU salen de un solo endpoint de MS-02 (API-02-303) con datos que ya son de Producto: el error 141 que guarda la creación del SKU, el dato maestro que falta por negocio, la compuerta del canal que no pasa y el canal en Error. La visibilidad real en el sitio se agrega cuando el monitoreo de FT-RAC-08 la mida. Por qué: El servicio de motivos que Entrada Única liberó el 23-sep resolvió el caso de los SKU que no se creaban; aquí queda en el dueño del dato, sin copias. Se apoya en RF-PUB-09, PD-09.
- D-RAC-05-5. Los eventos de estado y de tarea llevan la etiqueta visible y el dueño del producto, para que Avisos (MS-14) y los reportes no la recalculen. El paso de un canal a Publicado sale como STATUS_CHANGED con el cambio en channels.<destino>.status; no hace falta un tipo nuevo. Por qué: Un solo cálculo de la etiqueta; el sobre del evento ya permite decir qué ruta cambió. Se apoya en ADR-12, DMS-08.
- D-RAC-05-6. Arrancan cuatro avisos al proveedor y al seller (rechazo, cancelación o eliminación, falta de foto y publicado) en pantalla y por correo según sus preferencias en MS-14. Los avisos a cada dueño de sección se suman cuando se confirme ese reparto. Por qué: Es la propuesta del tablero para el pendiente de avisos y responde la duda de canal: las dos, a elección del usuario. Se apoya en P-02, PEN-17, P-22.
Qué falta decidir
| ID | Qué falta |
|---|---|
| DUD-09 | Sin ERF de Flujos no hay nombres oficiales de los pasos para Marketplace; aquí se usan los cinco pasos de la captura. |
| P-02 | Gobierno de Producto confirma los cuatro avisos de arranque y cuándo se suman los de cada dueño de sección. |
| PD-09 | De dónde se obtiene la visibilidad real en el sitio para decir «no se ve» con certeza. |
| DUD-25 | El aviso de estatus al seller por la API de Marketplace (hoy cada 5 minutos por el bus, sin llave): se reemplaza por la misma etiqueta de API-02-302. |
También siguen abiertos: PEN-17, Validar con UX y Marketplace que pantalla más correo, a elección del usuario, resuelve cómo se entera el seller.
Fuentes
- [D]
trazabilidad/features/FT-RAC-05-estatus-motivos-seller-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.