← Arquitectura por épica

FT-PRD-06 · Bandeja de pendientes y depuración de borradores…

Arquitectura del Nuevo PIM por épica · corte del 18-oct-2026

Propuesta del TL: no sustituye la spec de cada épica

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

DeQué
PE-1 · Propuesta en BorradorLas 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

AQué
FT-PRD-07 · Captura guiada por pasos con los mínimos primeroEl borrador que la persona retoma, abierto en el paso que le falta.

Cambios de estado que hace

TransiciónDe → aCuándo
T11Borrador → CanceladoVence 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

Sistemas externos

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Mi bandeja de pendientes
Pantalla de propuesta
y 1 más

Bandeja de tareas
Estatus visible para el proveedor o s…
y 6 más

Nombres visibles

Mandar un aviso explícito

Manda el aviso al proveedor
Avisa al nuevo responsable cuántas he…

STATUS_CHANGED
TASK_CHANGED

STATUS_CHANGED

TASK_CHANGED

USER_CHANGED

USER_CHANGED

permisos

bitácora

Proveedor

QA y Category

Compras

Entrada Única · Vendor Center

BFF del portal

★ MS-02 Producto

MS-13 Identidad y acceso

MS-14 Avisos y ayuda

MS-05 Auditoría

Base pim

Eventos

Servicio de correo

Contexto de FT-PRD-06

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.

MS-13 Identidad y accesoMS-02 ProductoEntrada Única · Vendor CenterMS-13 Identidad y accesoMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Entra al portal y ve su inicio2. Pide su bandeja de pendientesGET /bff/v1/bandejas/pendientes3. Pide las tareas abiertas que le tocanGET /api/v2/tasks4. Pide la etiqueta y el paso de sus borradoresGET /api/v2/workflow/status-views5. Pide los nombres de áreas y responsablesGET /api/v2/directory/display-names6. Ve cuatro pendientes ordenados por vencimiento7. Retoma el alta que tiene incompleto el paso 28. Abre la propuesta en el paso que faltaGET /bff/v1/proposals/{productId}ProveedorBFF
Flujo principal de FT-PRD-06
Los pasos en texto
PasoDeAQué haceAPI o evento
1ProveedorEntrada Única · Vendor CenterEntra al portal y ve su inicio—
2Entrada Única · Vendor CenterBFF del portalPide su bandeja de pendientesAPI-BFF-301
3BFF del portalMS-02 ProductoPide las tareas abiertas que le tocanAPI-02-032
4BFF del portalMS-02 ProductoPide la etiqueta y el paso de sus borradoresAPI-02-302
5BFF del portalMS-13 Identidad y accesoPide los nombres de áreas y responsablesAPI-13-018
6ProveedorEntrada Única · Vendor CenterVe cuatro pendientes ordenados por vencimiento—
7ProveedorEntrada Única · Vendor CenterRetoma el alta que tiene incompleto el paso 2—
8Entrada Única · Vendor CenterBFF del portalAbre la propuesta en el paso que faltaAPI-BFF-201

3.1 Descartar un pendiente o depurarlo por abandono

MS-05 AuditoríaEventosServicio de correoMS-14 Avisos y ayudaBase·pimMS-02 ProductoEntrada Única · Vendor CenterMS-05 AuditoríaEventosServicio de correoMS-14 Avisos y ayudaBase·pimMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Descarta un borrador que ya no quiere2. Pide el plan DISCARD con su motivoPOST /api/v2/workflow/actions/plans3. Confirma el descartePOST /api/v2/product-plans/{planId}/apply4. Lo pasa a Cancelado y libera sus EAN5. El reloj busca borradores sin actividad fuera de plazo6. Avisa siete días antes de depurarlosPOST /internal/notifications/messages7. Manda el aviso al proveedor8. Al vencer, los cancela con motivo «Borrador abandonado»9. Avisa la depuración con su motivoSTATUS_CHANGED10. Entrega la depuración para la bitácoraSTATUS_CHANGEDProveedorBFF
Descartar un pendiente o depurarlo por abandono

3.2 Colas por etapa con dueño

MS-14 Avisos y ayudaEventosMS-13 Identidad y accesoEntrada Única · Vendor CenterBase·pimMS-02 ProductoMS-14 Avisos y ayudaEventosMS-13 Identidad y accesoEntrada Única · Vendor CenterBase·pimMS-02 ProductoQA y CategoryBFF1. Abre QA manual en su cola si la IA no alcanza2. El líder abre la bolsa de su cola3. Pide la bolsa con sus responsablesGET /bff/v1/bandejas/colas/{cola}4. Pide la bolsa de 100 en 100GET /api/v2/task-queues/{cola}/pool5. Pide los nombres de las personasGET /api/v2/directory/display-names6. Asigna veinte casos a una persona7. Pide el plan de asignación, todo o nadaPOST /api/v2/task-queues/{cola}/assignments/plans8. Confirma la asignaciónPOST /api/v2/product-plans/{planId}/apply9. Avisa las tareas asignadasTASK_CHANGED10. Entrega la asignación para avisar a la personaTASK_CHANGED11. La persona abre sus tareas de la colaGET /api/v2/task-queues/{cola}/my12. Abre el detalle de una tareaGET /api/v2/tasks/{id}QA y CategoryBFF
Colas por etapa con dueño

3.3 Pendientes heredados al cambiar de responsable

Servicio de correoMS-14 Avisos y ayudaEntrada Única · Vendor CenterBase·pimMS-02 ProductoEventosMS-13 Identidad y accesoServicio de correoMS-14 Avisos y ayudaEntrada Única · Vendor CenterBase·pimMS-02 ProductoEventosMS-13 Identidad y accesoComprasBFF1. Avisa que una persona dejó su áreaUSER_CHANGED2. Entrega el cambio de membresíaUSER_CHANGED3. Regresa sus tareas abiertas a la bolsa del área4. El líder reasigna la cartera al nuevo responsable5. Pide el plan de reasignación de la carteraPOST /api/v2/task-queues/{cola}/assignments/plans6. Confirma la reasignaciónPOST /api/v2/product-plans/{planId}/apply7. Avisa las tareas heredadasTASK_CHANGED8. Entrega las heredadas para avisarTASK_CHANGED9. Avisa al nuevo responsable cuántas heredó10. El nuevo ve sus heredadas con su antigüedadGET /bff/v1/bandejas/pendientesComprasBFF
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
CampoValor
APIAPI-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 épicaLa bandeja de pendientes: borradores y tareas en una lista, con nombres
Quién la llamaEntrada Única · Vendor Center (por el BFF), Foro · portal del estudio (por el BFF)
PermisoCualquier usuario del portal: el BFF decide qué columnas y acciones ve cada perfil; los datos ya llegan filtrados por Producto
CabecerasAuthorization, X-Request-Id
Parámetrosinclude = 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

HTTPCódigoCuándo
503DEPENDENCY_UNAVAILABLEProducto no responde: la bandeja no se arma a medias. Si sólo falla Identidad, se muestran los códigos de área sin nombre
403AUTHORIZATION_ERROREl 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
CampoValor
APIAPI-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 épicaLa bolsa de una cola con el nombre de quien tiene cada tarea
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoLíder de la cola (permiso de pantalla); Producto vuelve a revisar el permiso de dominio
CabecerasAuthorization, X-Request-Id
Parámetroscola = 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

HTTPCódigoCuándo
403AUTHORIZATION_ERROREl perfil no es líder de esa cola
503DEPENDENCY_UNAVAILABLEProducto no responde
GET /api/v2/tasks · Bandeja de tareas
CampoValor
APIAPI-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 épicaLas tareas abiertas de quien entra o de sus áreas
Quién la llamaBFF del portal
PermisoCualquier usuario interno: ve las tareas de sus áreas; el proveedor o seller sólo las suyas
CabecerasAuthorization, X-Request-Id
Parámetrostype = VISTO_BUENO_COMPRAS, status = OPEN, business = MER, olderThanDays = 7, page = 1, size = 50
También la usanFT-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

HTTPCódigoCuándo
400VALIDATION_ERRORUn filtro trae un valor que no existe
GET /api/v2/tasks/{id} · Detalle de una tarea
CampoValor
APIAPI-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 épicaEl detalle de una tarea
Quién la llamaBFF del portal
PermisoQuien participa en la tarea: su área, la persona asignada o el proveedor dueño si la tarea es suya
CabecerasAuthorization, X-Request-Id
Parámetrosid = 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

HTTPCódigoCuándo
404NOT_FOUNDLa tarea no existe
403AUTHORIZATION_ERRORQuien llama no participa en la tarea
GET /api/v2/tasks/{id}/activity · Actividad de una tarea
CampoValor
APIAPI-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 épicaLo que pasó con una tarea: quién la tomó, la soltó o la comentó
Quién la llamaBFF del portal
PermisoQuien participa en la tarea
CabecerasAuthorization, X-Request-Id
Parámetrosid = 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

HTTPCódigoCuándo
404NOT_FOUNDLa tarea no existe o no es visible para quien llama
GET /api/v2/task-queues/{cola}/pool · Bolsa de una cola
CampoValor
APIAPI-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 épicaLa bolsa de una cola de 100 en 100
Quién la llamaBFF del portal
PermisoLíder de la cola
CabecerasAuthorization, X-Request-Id
Parámetroscola = QA, business = MER, assigned = False, page = 1
También la usanFT-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

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no es líder de esa cola
404NOT_FOUNDLa cola no existe
POST /api/v2/task-queues/{cola}/assignments/plans · Asignar tareas de una cola
CampoValor
APIAPI-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 épicaAsignar todo o nada y reasignar la cartera de alguien
Quién la llamaBFF del portal
PermisoLíder de la cola
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Parámetroscola = 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

HTTPCódigoCuándo
422BUSINESS_ERRORAsignación parcial: alguna tarea ya no está abierta o es de otra cola, y no se asigna ninguna
403AUTHORIZATION_ERRORQuien llama no es líder de esa cola
GET /api/v2/task-queues/{cola}/my · Mis tareas de una cola
CampoValor
APIAPI-02-038 · MS-02 Producto
Para quéLista las tareas de una cola asignadas a quien llama, ordenadas por vencimiento.
En esta épicaLas tareas de una cola asignadas a quien llama
Quién la llamaBFF del portal
PermisoLa persona asignada; nadie ve la lista de otra persona
CabecerasAuthorization, X-Request-Id
Parámetroscola = QA, page = 1, size = 50
También la usanFT-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

HTTPCódigoCuándo
403AUTHORIZATION_ERRORSe 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.

APIMétodo y rutaPara qué, aquíLa construye
API-02-302GET /api/v2/workflow/status-viewsLa 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-201GET /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-028POST /api/v2/workflow/actions/plansVista previa de DISCARDFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar el descarte o la asignaciónFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-035POST /api/v2/tasks/plansTomar o soltar una tarea desde la bandejaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-14-005POST /internal/notifications/messagesEl aviso siete días antes de depurar y el resumen de pendientes sin movimientoFT-RAC-05 · Estatus del producto y motivos visibles para seller y…
API-13-018GET /api/v2/directory/display-namesNombres visibles de personas, áreas y proveedores para la bandejaFT-USR-01 · Identidad y autenticación de usuarios internos…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/STATUS_CHANGEDUn 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_CHANGEDEl descarte o la depuración liberan los EAN del borradorFT-ARQ-02, FT-PRD-03
catalog.product.changed/TASK_CHANGEDSe asigna, se reasigna, se hereda o se toma una tareaFT-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

EventoPara quéQuién lo publica
catalog.identity.changed/USER_CHANGEDMS-02 regresa a la bolsa del área las tareas de quien dejó el área o fue dado de bajaFT-USR-01, FT-USR-02
catalog.product.changed/STATUS_CHANGEDMS-05 guarda el descarte y la depuración en la bitácoraesta misma épica
catalog.product.changed/TASK_CHANGEDMS-14 avisa a la persona asignada o al nuevo responsableesta misma épica

7. Datos

Cada colección tiene un solo dueño, el único que escribe en ella.

ColecciónDueñoQué guardaEsta épica
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.escribe
identifier_registryMS-02Unicidad de SKU y de EAN por negocio.escribe
product_receiptsMS-02El recibo de cada escritura confirmada en el producto (antes operation_receipts).escribe
product_outboxMS-02Los cambios del producto que esperan salir como evento (antes outbox).escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.lee
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.lee
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-PRD-06·H1 · Ver y retomarP1pasos 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áticaP1flujo «Descartar un pendiente o depurarlo por abandono»
FT-PRD-06·H3 · Pendientes heredadosP2flujo «Pendientes heredados al cambiar de responsable»; API-02-037
FT-PRD-06·H4 · AvisoP2flujo «Descartar un pendiente o depurarlo por abandono»; API-14-005
FT-PRD-06·H5 · Tareas de revisiónP3pasos 3; API-02-032
FT-PRD-06·H6 · Colas por etapa con dueñoP1flujo «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

IDQué falta
DUD-24Confirmar 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-03UX con Entrada Única define el diseño de la bandeja en la pantalla de inicio.
PD-13Si 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

  1. [D] trazabilidad/features/FT-PRD-06-bandeja-pendientes-depuracion-borradores.md: la ficha de la épica, con sus historias, reglas y bloqueos.
  2. [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
  3. [D] docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta.
  4. [D] docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida.
  5. [D] docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md §7: estados, tareas y canales.
  6. [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.