be8a61e724
Archivos de issue para el trabajo de kanban de las ultimas iteraciones: - 0089: tiempo maximo por columna con borde rojo (incluye followup popover con seleccion de unidad min/h/d/sem/mes). - 0090: seleccion aleatoria por columna con animacion de ruleta. Ya con fix de no mostrar en columnas Done. - 0092: archivo automatico para cards en columnas Done con +30 dias. - 0093: reporte diario al pulsar el numero del dia en el calendario. Los issues 0088 y 0091 ya estaban registrados.
68 lines
3.1 KiB
Markdown
68 lines
3.1 KiB
Markdown
---
|
|
id: "0093"
|
|
title: "kanban: reporte diario al pulsar numero del dia en el calendario"
|
|
status: open
|
|
created_at: 2026-05-14
|
|
priority: medium
|
|
app: kanban
|
|
---
|
|
|
|
## 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.
|