# Horas del equipo — Etapa 2

## Objetivo

Agregar al Tablero CDC una vista clara para consultar las horas registradas por persona y por día, combinando automáticamente:

- Horas históricas migradas desde `Registro horas`.
- Horas nuevas creadas desde el módulo `Tiempo` de la app.

## Experiencia de usuario

El encabezado del Tablero incorpora el botón **Horas del equipo**. Al abrirlo se muestra un módulo visual integrado con el estilo de la aplicación que incluye:

- Periodos rápidos: hoy, 7 días, 30 días, este mes y todo.
- Rango personalizado desde/hasta.
- Filtro por Equipo actual / Histórico / Todos.
- Búsqueda de personas.
- Orden por más horas, actividad reciente o nombre.
- Resumen del periodo: horas, personas con horas, días con actividad y promedio por persona/día.
- Resumen individual: total, promedio diario y días con registros.
- Desglose diario seleccionable.
- Detalle de proyecto, tarea, país, duración y nota.
- Paginación de actividades.

El promedio diario se calcula sobre los días en los que la persona tiene al menos un registro; no presupone una jornada objetivo ni inventa feriados.

## Identidad de personas

Las horas nuevas traen correo y se vinculan directamente al roster activo. Para el histórico, la app realiza una conciliación conservadora por nombre: coincidencia exacta o al menos dos componentes del nombre coincidentes de forma no ambigua. Esto permite unificar, por ejemplo, variantes del nombre usadas antes y después de la app sin fusionar nombres ambiguos como `Thaía Suplencia Gerardo`.

## Seguridad y datos

- No se modifica `tablero_cdc_projects`.
- No se modifica `tablero_cdc_project_time_entries`.
- No se modifica `tablero_cdc_time_history`.
- No se modifica el workflow de sincronización de Registro horas.
- No se modifica el sistema de métricas.
- El módulo reutiliza `public.tablero_cdc_time_combined`, creada en la Etapa 1.
- El SQL de esta etapa solo crea `public.tablero_cdc_get_team_hours_roster()`, un RPC de lectura mínima que devuelve nombre/correo de usuarios activos después de validar que quien consulta tiene acceso al Tablero.

## Instalación

1. Ejecutar `supabase_tablero_cdc_team_hours_dashboard.sql` en Supabase.
2. Probar el `dist` incluido en el ZIP.
3. Entrar al Tablero y abrir **Horas del equipo**.
4. Confirmar que en **Equipo actual** aparecen también usuarios con 0 horas en el periodo.
5. Probar 7 días, 30 días, este mes y Todo.
6. Seleccionar una persona y un día; comprobar el detalle de actividades.

## Compatibilidad

El `dist` actual contiene `assets/team-hours-dashboard-v1.js` para mantener la misma estrategia de despliegue del ZIP recibido, que ya utiliza módulos complementarios para Tiempo, Listas, Briefs, métricas y persistencia. El código fuente también incluye la implementación nativa React (`TeamHoursDialog.tsx` + `teamHours.ts`) para que una compilación futura conserve la funcionalidad sin depender del parche del `dist`.
