Files
fn_registry/dev/issues/0093-kanban-daily-report.md

3.2 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
id title status type domain scope priority depends blocks related created updated tags
0093 kanban: reporte diario al pulsar numero del dia en el calendario pendiente feature
kanban
multi-app media
2026-05-17 2026-05-17

Problema

El calendario muestra conteos de creadas/hechas/deadlines por dia pero no permite profundizar. Falta un reporte tipo "retro diaria" con rankings, lista de tareas hechas con enlaces, y metricas operativas (lead time, reabiertas, estancadas).

Solucion

Backend

Endpoint GET /api/reports/daily?date=YYYY-MM-DD&tz=Europe/Madrid con agregaciones sobre cards, card_events, card_column_history, card_lock_history.

Estructura del reporte:

  • kpis: done, created, moves, blocked_ms, deadlines met/missed, reopened, archived_auto, archived_manual.
  • top_assignees_done, top_assignees_created, top_requesters_added, top_requesters_done (top 5).
  • done_cards: lista completa de hechas con id, seq_num, titulo, solicitante, asignado (id+nombre), tags, columna, completed_at, lead_time_ms.
  • reopened_cards: cards que el dia X entraron a una columna no-done viniendo de una previa done. Incluye actor.
  • stale_cards: 3 buckets (7-13d, 14-29d, 30+d) por columnas activas (no done, no archived).
  • lead_time: avg/p50/p95/samples de las hechas del dia.
  • hourly_moves: array de 24 con conteo de movimientos por hora local.
  • deadlines: contadores + lista de vencidas con late_ms.
  • tags_done: top 10 tags trabajadas hoy.
  • archived_today: total archivadas en el dia.

Funcion: db.DailyReportFor(date, tz) en backend/reports.go. Day range = [t, t+24h) en TZ del cliente, convertido a UTC para consultar columnas TEXT ISO.

Frontend

Componente DailyReportView (components/DailyReport.tsx) que recibe date y onJumpToCard. Layout:

  • Header: titulo + fecha formateada en es-ES.
  • 6 KPI cards (SimpleGrid cols 2/4/6).
  • 4 rankings con avatares (SimpleGrid cols 1/2/4).
  • Tabla de tareas hechas (scrollable, click en titulo -> onJumpToCard -> cierra modal -> highlight + scroll al tablero).
  • BarChart (Mantine Charts) con movimientos por hora.
  • Tags trabajadas en chips.
  • Bloque reabiertas (solo si hay).
  • Bloque deadlines (solo si hay actividad).
  • 3 columnas de estancadas con click-to-jump.

Apertura: CalendarView recibe onOpenDailyReport(date) y envuelve el numero del dia en un UnstyledButton (data-test="calendar-day-YYYY-MM-DD"). App abre un modals.open con size="90%" y <DailyReportView /> dentro.

Tests

Playwright e2e/daily-report.spec.ts:

  • Endpoint devuelve estructura esperada (kpis, done_cards, hourly_moves[24], stale_cards.d7/d14/d30).
  • Click en numero del dia del calendario abre el modal con titulo "Reporte diario" y textos "Hechas"/"Movimientos" visibles.

Criterios de aceptacion

  • GET /api/reports/daily?date=...&tz=... responde JSON estructurado.
  • Click en numero del dia en el calendario abre modal full-width con KPIs.
  • Tabla de hechas con click-to-jump funcional.
  • Reabiertas detectadas correctamente (card que viene de columna is_done=1 previa).
  • Estancadas listadas por buckets 7/14/30d.
  • Tests Playwright pasan.

Rama / commits

  • Rama: issue/0093-kanban-daily-report
  • Merge --no-ff a master.