Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-PRD-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-PRD-06.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PRD-06-bandeja-pendientes-depuracion-borradores.md.
En 30 segundos
Al entrar al portal, cada persona ve en una sola bandeja lo que tiene pendiente: las altas que dejó a medias, con el paso en que se quedó, y las tareas que le tocan a ella o a su área, ordenadas por vencimiento. Los líderes reparten su cola sin pisarse, nadie pierde lo que hereda al cambiar de responsable y los borradores abandonados se depuran solos, con aviso antes y sin borrar su historia.
- Módulo dueño: MS-02 Producto. También participan: MS-13 Identidad y acceso, MS-14 Avisos y ayuda, MS-05 Auditoría.
- Etapa T · Transversal. Recibe «PE-1 · Propuesta en Borrador» y entrega a otras épicas.
- APIs: construye 8 y usa 7 que construyen otras épicas.
- Eventos: publica 3 y consume 3.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| PE-1 · Propuesta en Borrador | Las propuestas en Borrador de cada dueño, con su negocio y su origen. |
| FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… | Las tareas abiertas con su cola, su responsable, su vencimiento y su prioridad. |
| FT-RAC-05 · Estatus del producto y motivos visibles para seller y… | La etiqueta y el paso en que quedó cada producto, calculados por Producto. |
Entrega
| A | Qué |
|---|---|
| FT-PRD-07 · Captura guiada por pasos con los mínimos primero | El borrador que la persona retoma, abierto en el paso que le falta. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T11 | Borrador → Cancelado | Vence el plazo del rechazo (P-01) o se elimina. |
Tareas que abre o cierra: Corrección, Carga de imagen, Visto bueno de Compras, Gobierno de Datos, Sección con dueño, QA manual, Category, Revisión del cambio, Repoblamiento.
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 | Proveedor | Entrada Única · Vendor Center | Entra al portal y ve su inicio | — |
| 2 | Entrada Única · Vendor Center | BFF del portal | Pide su bandeja de pendientes | API-BFF-301 |
| 3 | BFF del portal | MS-02 Producto | Pide las tareas abiertas que le tocan | API-02-032 |
| 4 | BFF del portal | MS-02 Producto | Pide la etiqueta y el paso de sus borradores | API-02-302 |
| 5 | BFF del portal | MS-13 Identidad y acceso | Pide los nombres de áreas y responsables | API-13-018 |
| 6 | Proveedor | Entrada Única · Vendor Center | Ve cuatro pendientes ordenados por vencimiento | — |
| 7 | Proveedor | Entrada Única · Vendor Center | Retoma el alta que tiene incompleto el paso 2 | — |
| 8 | Entrada Única · Vendor Center | BFF del portal | Abre la propuesta en el paso que falta | API-BFF-201 |
3.1 Descartar un pendiente o depurarlo por abandono
3.2 Colas por etapa con dueño
3.3 Pendientes heredados al cambiar de responsable
4. Si algo sale mal
- Dos personas intentan tomar la misma tarea. Gana la primera confirmación; la segunda recibe 423 LOCKED o 409 VERSION_CONFLICT y la tarea deja de ofrecérsele. Un caso asignado no aparece en la bolsa de nadie más.
- La asignación incluye una tarea que ya se cerró o es de otra cola. No se asigna ninguna (todo o nada) y la vista previa dice cuáles fallaron y por qué; el líder corrige la selección y vuelve a pedir el plan.
- Un borrador de pre-compra lleva meses sin cambios. No lo depura la regla general: su vigencia es la de pre-compra, de unos diez meses, con el mismo aviso siete días antes. El reloj distingue el tipo de borrador por su origen.
- Producto no responde cuando se arma la bandeja. El BFF responde 503 y no muestra una bandeja a medias. Si sólo falla Identidad, la bandeja sale con los códigos de área en lugar de los nombres.
- Una persona deja su área con tareas asignadas. Sus tareas regresan solas a la bolsa del área y el líder las ve sin asignar; nada queda huérfano aunque nadie reasigne la cartera.
5. APIs
Las que construye esta épica (8)
GET /bff/v1/bandejas/pendientes · Mi bandeja de pendientes
| Campo | Valor |
|---|---|
| API | API-BFF-301 · BFF del portal |
| Para qué | Junta en una sola lista, ordenada por vencimiento, los borradores a medias y las tareas abiertas de quien entra (suyas y de sus áreas), con la etiqueta y el paso que calcula Producto y los nombres de áreas y responsables que da Identidad. No guarda nada ni decide nada. |
| En esta épica | La bandeja de pendientes: borradores y tareas en una lista, con nombres |
| Quién la llama | Entrada Única · Vendor Center (por el BFF), Foro · portal del estudio (por el BFF) |
| Permiso | Cualquier usuario del portal: el BFF decide qué columnas y acciones ve cada perfil; los datos ya llegan filtrados por Producto |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | include = DRAFTS,TASKS, type = `, page = 1, size = 20` |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"kind": "TASK",
"taskId": "tsk-31877",
"type": "CORRECCION",
"productId": "PRD-0004812",
"productName": "Licuadora de 10 velocidades",
"label": "Rechazada",
"openedBy": {
"areaName": "Compras Hogar"
},
"dueAt": "2026-12-17T15:04:05Z",
"ageDays": 8,
"inheritedFrom": null,
"actions": [
"OPEN"
]
},
{
"kind": "DRAFT",
"productId": "PRD-0004901",
"productName": "Juego de sábanas matrimonial",
"label": "Borrador",
"stepToResume": 2,
"stepsComplete": [
1,
3,
4,
5
],
"lastActivityAt": "2026-10-12T18:40:00Z",
"purgeAt": "2027-01-10T18:40:00Z",
"actions": [
"RESUME",
"DISCARD"
]
}
],
"page": 1,
"size": 20,
"total": 4
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 503 | DEPENDENCY_UNAVAILABLE | Producto no responde: la bandeja no se arma a medias. Si sólo falla Identidad, se muestran los códigos de área sin nombre |
| 403 | AUTHORIZATION_ERROR | El token no es válido o el perfil no tiene esta pantalla |
GET /bff/v1/bandejas/colas/{cola} · Bolsa de una cola con sus responsables
| Campo | Valor |
|---|---|
| API | API-BFF-302 · BFF del portal |
| Para qué | Muestra al líder de una cola sus tareas abiertas, de 100 en 100, con el nombre de quien tiene cada una, para repartirlas. Junta la bolsa de Producto con los nombres de Identidad; asignar se hace con el plan de Producto. |
| En esta épica | La bolsa de una cola con el nombre de quien tiene cada tarea |
| Quién la llama | Entrada Única · Vendor Center (por el BFF) |
| Permiso | Líder de la cola (permiso de pantalla); Producto vuelve a revisar el permiso de dominio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | cola = QA, business = MER, assigned = ALL, page = 1 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"taskId": "tsk-60311",
"type": "QA_MANUAL",
"productId": "PRD-0005120",
"productName": "Sartén antiadherente 28 cm",
"priority": "HIGH",
"dueAt": "2026-10-20T09:00:00Z",
"reason": "La revisión con IA no alcanzó el umbral",
"assignee": null
},
{
"taskId": "tsk-60290",
"type": "QA_MANUAL",
"productId": "PRD-0005098",
"productName": "Batidora de inmersión",
"priority": "NORMAL",
"dueAt": "2026-10-21T11:00:00Z",
"reason": "La revisión con IA no alcanzó el umbral",
"assignee": {
"userId": "USR-0193",
"displayName": "Analista de QA 03"
}
}
],
"page": 1,
"size": 100,
"total": 342
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | El perfil no es líder de esa cola |
| 503 | DEPENDENCY_UNAVAILABLE | Producto no responde |
GET /api/v2/tasks · Bandeja de tareas
| Campo | Valor |
|---|---|
| API | API-02-032 · MS-02 Producto |
| Para qué | Lista las tareas abiertas que le tocan a quien llama (o a su área), con filtros por tipo, estado, negocio y antigüedad. El BFF la usa para armar las bandejas con nombres (API-BFF-301). |
| En esta épica | Las tareas abiertas de quien entra o de sus áreas |
| Quién la llama | BFF del portal |
| Permiso | Cualquier usuario interno: ve las tareas de sus áreas; el proveedor o seller sólo las suyas |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | type = VISTO_BUENO_COMPRAS, status = OPEN, business = MER, olderThanDays = 7, page = 1, size = 50 |
| También la usan | FT-ACT-06, FT-CAT-03, FT-CAT-04, FT-PRD-02, FT-PRD-04, FT-PRD-07, FT-RAC-04 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"taskId": "tsk-31877",
"type": "VISTO_BUENO_COMPRAS",
"status": "OPEN",
"productId": "PRD-0004812",
"business": "MER",
"productName": "Licuadora de 10 velocidades",
"supplierId": "PROV-0001",
"area": "COMPRAS-HOGAR",
"assignee": null,
"openedAt": "2026-10-10T16:20:00Z",
"dueAt": "2026-11-09T16:20:00Z",
"ageDays": 8
}
],
"page": 1,
"size": 50,
"total": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | Un filtro trae un valor que no existe |
GET /api/v2/tasks/{id} · Detalle de una tarea
| Campo | Valor |
|---|---|
| API | API-02-033 · MS-02 Producto |
| Para qué | Muestra una tarea con su producto, quién la abrió y por qué, a quién está asignada, cuándo vence, qué bloquea y, si es una Revisión del cambio, lo publicado contra lo propuesto. |
| En esta épica | El detalle de una tarea |
| Quién la llama | BFF del portal |
| Permiso | Quien participa en la tarea: su área, la persona asignada o el proveedor dueño si la tarea es suya |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | id = tsk-52108 |
Request
null
Response · 200
{
"success": true,
"data": {
"taskId": "tsk-52108",
"type": "REVISION_DEL_CAMBIO",
"status": "OPEN",
"version": 3,
"productId": "PRD-0004812",
"business": "MER",
"openedAt": "2026-10-18T15:04:07Z",
"openedBy": {
"area": "COMPRAS-HOGAR",
"role": "COMPRAS"
},
"origin": {
"kind": "CHANGE_REQUEST",
"changeId": "chg-7a10",
"requestId": "req-71d2aa"
},
"queue": "LOGISTICA",
"assignee": null,
"inheritedFrom": null,
"priority": "NORMAL",
"dueAt": "2026-10-25T15:04:07Z",
"blocks": "La republicación",
"returnsTo": "APROBADO",
"changes": [
{
"attribute": "PESO_EMPAQUE",
"label": "Peso del empaque",
"published": "1.2 kg",
"proposed": "1.4 kg",
"owner": "LOGISTICA"
}
],
"allowedCommands": [
"CLAIM",
"APPROVE",
"REJECT",
"COMMENT"
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La tarea no existe |
| 403 | AUTHORIZATION_ERROR | Quien llama no participa en la tarea |
GET /api/v2/tasks/{id}/activity · Actividad de una tarea
| Campo | Valor |
|---|---|
| API | API-02-034 · MS-02 Producto |
| Para qué | Lista lo que pasó con una tarea: quién la abrió, quién la tomó o la soltó, reasignaciones, comentarios y cómo se cerró. La bitácora inmutable de todo el producto está en Auditoría (MS-05). |
| En esta épica | Lo que pasó con una tarea: quién la tomó, la soltó o la comentó |
| Quién la llama | BFF del portal |
| Permiso | Quien participa en la tarea |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | id = tsk-52108, page = 1, size = 50 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"at": "2026-10-18T15:04:07Z",
"command": "OPENED",
"by": {
"system": "MS-02"
},
"note": "Cambio de un campo cuyo dueño es Logística"
},
{
"at": "2026-10-19T14:10:00Z",
"command": "CLAIM",
"by": {
"userId": "USR-0193",
"area": "LOGISTICA"
}
},
{
"at": "2026-10-19T14:25:00Z",
"command": "COMMENT",
"by": {
"userId": "USR-0193",
"area": "LOGISTICA"
},
"comment": "Se confirma con la ficha técnica del proveedor"
}
],
"page": 1,
"size": 50,
"total": 3
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La tarea no existe o no es visible para quien llama |
GET /api/v2/task-queues/{cola}/pool · Bolsa de una cola
| Campo | Valor |
|---|---|
| API | API-02-036 · MS-02 Producto |
| Para qué | Lista de 100 en 100 las tareas abiertas de una cola (QA, Category, Repoblamiento, Gobierno de Datos o un área de Compras) con quién tiene asignada cada una, para que el líder reparta. |
| En esta épica | La bolsa de una cola de 100 en 100 |
| Quién la llama | BFF del portal |
| Permiso | Líder de la cola |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | cola = QA, business = MER, assigned = False, page = 1 |
| También la usan | FT-RAC-03 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"taskId": "tsk-60311",
"type": "QA_MANUAL",
"productId": "PRD-0005120",
"productName": "Sartén antiadherente 28 cm",
"business": "MER",
"priority": "HIGH",
"openedAt": "2026-10-17T09:00:00Z",
"dueAt": "2026-10-20T09:00:00Z",
"assignee": null,
"reason": "La revisión con IA no alcanzó el umbral"
}
],
"page": 1,
"size": 100,
"total": 342
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Quien llama no es líder de esa cola |
| 404 | NOT_FOUND | La cola no existe |
POST /api/v2/task-queues/{cola}/assignments/plans · Asignar tareas de una cola
| Campo | Valor |
|---|---|
| API | API-02-037 · MS-02 Producto |
| Para qué | Prepara la asignación de tareas de una cola a una persona, todo o nada; con fromAssignee reasigna la cartera completa de alguien que dejó el área. Reasignar cierra la asignación anterior y guarda de quién se heredó y desde cuándo está abierta. |
| En esta épica | Asignar todo o nada y reasignar la cartera de alguien |
| Quién la llama | BFF del portal |
| Permiso | Líder de la cola |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Parámetros | cola = QA |
Request
{
"assignee": "USR-0193",
"taskIds": [
"tsk-60311",
"tsk-60315"
],
"fromAssignee": null
}
Response · 200
{
"success": true,
"data": {
"planId": "pln-3c77e1",
"expiresAt": "2026-10-18T15:14:05Z",
"requested": 2,
"eligible": 2,
"outOfState": 0,
"notFound": 0,
"assignedToOthers": 0,
"applyUrl": "/api/v2/product-plans/pln-3c77e1/apply"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | BUSINESS_ERROR | Asignación parcial: alguna tarea ya no está abierta o es de otra cola, y no se asigna ninguna |
| 403 | AUTHORIZATION_ERROR | Quien llama no es líder de esa cola |
GET /api/v2/task-queues/{cola}/my · Mis tareas de una cola
| Campo | Valor |
|---|---|
| API | API-02-038 · MS-02 Producto |
| Para qué | Lista las tareas de una cola asignadas a quien llama, ordenadas por vencimiento. |
| En esta épica | Las tareas de una cola asignadas a quien llama |
| Quién la llama | BFF del portal |
| Permiso | La persona asignada; nadie ve la lista de otra persona |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | cola = QA, page = 1, size = 50 |
| También la usan | FT-INT-07, FT-RAC-03 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"taskId": "tsk-60311",
"type": "QA_MANUAL",
"productId": "PRD-0005120",
"productName": "Sartén antiadherente 28 cm",
"priority": "HIGH",
"dueAt": "2026-10-20T09:00:00Z",
"assignedAt": "2026-10-18T16:00:00Z",
"inheritedFrom": null
}
],
"page": 1,
"size": 50,
"total": 20
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Se pide la lista de otra persona (ASSIGNMENT_WORKLIST_PRIVATE) |
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-302 | GET /api/v2/workflow/status-views | La etiqueta y el paso de cada borrador (lo construye FT-RAC-05) | FT-RAC-05 · Estatus del producto y motivos visibles para seller y… |
| API-BFF-201 | GET /bff/v1/proposals/{productId} | Abrir la propuesta con su vista efectiva para retomarla (lo construye FT-PRD-09) | FT-PRD-09 · Contrato de propuestas con Entrada Única |
| API-02-028 | POST /api/v2/workflow/actions/plans | Vista previa de DISCARD | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar el descarte o la asignación | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-035 | POST /api/v2/tasks/plans | Tomar o soltar una tarea desde la bandeja | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-14-005 | POST /internal/notifications/messages | El aviso siete días antes de depurar y el resumen de pendientes sin movimiento | FT-RAC-05 · Estatus del producto y motivos visibles para seller y… |
| API-13-018 | GET /api/v2/directory/display-names | Nombres visibles de personas, áreas y proveedores para la bandeja | FT-USR-01 · Identidad y autenticación de usuarios internos… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/STATUS_CHANGED | Un borrador se descarta o se depura por abandono (T11) | FT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-02, FT-PRD-04, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06 |
catalog.product.changed/EAN_CHANGED | El descarte o la depuración liberan los EAN del borrador | FT-ARQ-02, FT-PRD-03 |
catalog.product.changed/TASK_CHANGED | Se asigna, se reasigna, se hereda o se toma una tarea | 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-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-05, FT-RAC-06 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.identity.changed/USER_CHANGED | MS-02 regresa a la bolsa del área las tareas de quien dejó el área o fue dado de baja | FT-USR-01, FT-USR-02 |
catalog.product.changed/STATUS_CHANGED | MS-05 guarda el descarte y la depuración en la bitácora | esta misma épica |
catalog.product.changed/TASK_CHANGED | MS-14 avisa a la persona asignada o al nuevo responsable | 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 |
|---|---|---|---|
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 |
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_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-06·H1 · Ver y retomar | P1 | pasos 1, 2, 3, 4, 6, 7, 8; flujo «Descartar un pendiente o depurarlo por abandono»; API-BFF-301 |
| FT-PRD-06·H2 · Depuración automática | P1 | flujo «Descartar un pendiente o depurarlo por abandono» |
| FT-PRD-06·H3 · Pendientes heredados | P2 | flujo «Pendientes heredados al cambiar de responsable»; API-02-037 |
| FT-PRD-06·H4 · Aviso | P2 | flujo «Descartar un pendiente o depurarlo por abandono»; API-14-005 |
| FT-PRD-06·H5 · Tareas de revisión | P3 | pasos 3; API-02-032 |
| FT-PRD-06·H6 · Colas por etapa con dueño | P1 | flujo «Colas por etapa con dueño»; API-02-036, API-02-037, API-02-038, API-BFF-302 |
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-06-1. La bandeja es una composición del BFF (API-BFF-301 y API-BFF-302) sobre las tareas de MS-02, la etiqueta y el paso que calcula Producto y los nombres del directorio. MS-02 no tiene un endpoint de pantalla y el BFF no guarda ni decide nada. Hay una sola bandeja por perfil en la pantalla de inicio, sin otro tablero. Por qué: Las pantallas que juntan varios módulos van en el BFF (decisión 19 que adopta ADR-12) y así el endpoint de tareas sirve igual a todas las bandejas. Se apoya en ADR-12, P-03.
- D-PRD-06-2. Borrar y descartar son la misma acción, DISCARD: el borrador pasa a Cancelado (T11) con el motivo que da el usuario, sus EAN se liberan en la misma transacción y queda en su historial. Nada se borra físicamente. Por qué: Hoy se eliminan propuestas sin aviso y el proveedor regresa semanas después; el taller pidió avisar e historizar lo que se elimina. Se apoya en DEC-23, RF-ALT-09.
- D-PRD-06-3. La depuración la hace el reloj único de MS-02 con los plazos de la tabla DEADLINES: un borrador sin actividad vence a los 90 días y uno de pre-compra a los 300, con aviso siete días antes; al vencer, pasa a Cancelado con el motivo «Borrador abandonado» y el proveedor recibe aviso. Por qué: Concilia la depuración de 30 días que tenía P360, que no se sabe si corre, con la pre-compra de unos nueve meses; son los plazos que fijó FT-PRD-04 y se cambian sin desplegar código. Se apoya en DUD-24, RF-ALT-08, FT-PRD-04.
- D-PRD-06-4. Cada etapa con trabajo humano tiene una cola con líder: la asignación es todo o nada, una tarea asignada no se ofrece a nadie más y un resultado automático que no cumple (por ejemplo, la IA bajo el umbral) entra solo a la cola de su etapa. Por qué: Es lo que pide la cola con asignación por etapa y lo que ya hacen hoy las bolsas de QA, Category y Repoblamiento. Se apoya en RF-CAL-15, PD-29.
- D-PRD-06-5. Al salir alguien de su área (USER_CHANGED de MS-13), sus tareas regresan a la bolsa del área. El líder reasigna la cartera completa con API-02-037 y cada tarea guarda de quién se heredó y su fecha original de apertura, para no perder antigüedad. Por qué: Los pendientes muertos que nadie ve son un dolor de hoy; la antigüedad original evita que lo heredado parezca nuevo. Se apoya en PD-29, ADR-12.
- D-PRD-06-6. El aviso de pendientes es un resumen diario en pantalla y por correo, según las preferencias de cada usuario en MS-14, con lo que lleva más días sin movimiento; no hay un tablero aparte. Por qué: Responde la duda de canal (notificación o tablero) con las dos, a elección del usuario, y reusa lo que ya hace Entrada Única en su inicio. Se apoya en PEN-17, P-03.
Qué falta decidir
| ID | Qué falta |
|---|---|
| DUD-24 | Confirmar si hoy corre alguna depuración de borradores (la de 30 días de P360) para migrar su efecto y depurar antes de migrar. |
| P-03 | UX con Entrada Única define el diseño de la bandeja en la pantalla de inicio. |
| PD-13 | Si alguna parte de las Tareas V1 o los borradores guiados de Omega tiene uso real que deba conservarse. |
También siguen abiertos: PEN-17, Validar con UX que el resumen diario en pantalla y correo es suficiente para el seller.
Fuentes
- [D]
trazabilidad/features/FT-PRD-06-bandeja-pendientes-depuracion-borradores.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.