Saltar al contenido principal

hr-reportes-api

Plataforma de reporting HR servida en reporte.matizal.com. Sustituyó al antiguo hr.reportes (eliminado 2026-04-11) el 2026-04-08.

Resumen

Stack

  • Backend: FastAPI + Python 3.11 + Docker
  • Frontend: SPA (sirve estáticos + endpoints internos)
  • BD: SQLite local (10 tablas rpt_*) + sync via sync_db.py

Tabs

Dashboard · Por Empleado / Cliente / Proyecto · Fichajes (Factorial + Kronos) · Ausencias · Vacaciones · Compensación · Actividad · Apps IA · Rentabilidad · Costes personal · Nóminas · Auditoría · Usuarios · Permisos.

Rentabilidad

  • Turno Mercado
  • Licencias Elec / Gas
  • Implantación Elec / Gas
  • Backoffice Elec / Gas con modelo intercompañía ZT → NEUR y PVP histórico

Endpoints internos

Consumidos por Finanzas con X-Internal-Token:

  • /api/internal/hours-by-year
  • /api/internal/personal-cost-monthly — nómina real por empresa y mes
  • /api/internal/hours-monthly — Factorial fichadas + JIRA totales por empresa y mes
  • /api/internal/employees-by-company — empleados agrupados por grupos JIRA (NEUR = "NEURO para reportes" + turno_mercado, ZT = "ZT para reportes")

Endpoints públicos

  • /api/groups — CRUD grupos para gestión UI desde Admin. Los 6 grupos JIRA de sistema (*para reportes*) quedan read-only.

Sync resiliente

Desde 2026-05-01: cada fuente aislada, fallo en una NO aborta las demás. Desbloqueó Insightful tras 15 días sin datos.

  • Columna Employee.source: factorial / jira / kronos / manual
  • CRUD UI empleados manuales con baja/restore (preparación para Factorial+Kronos OFF)
  • Import CSV masivo (upsert por email/factorial_id)
  • Banner de frescura de datos en Fichajes/Ausencias/Vacaciones/Compensación
  • Fix matcher empleados (FactorialDocument no se movía al consolidar duplicados)
  • Fix informe AYF (incluye TODAS las horas JIRA del grupo, no solo project_key=AYF/FIN)
  • Filtro Cliente Global en tab Por Empleado JIRA

Bind mounts

⚠️ El container usa bind mounts a /home/debian/hr-reportes-api-custom/. No editar ahí manualmente — siempre push + redeploy.

Generación de informes

report_hours.py genera HTML autocontenido con JS/CSS y datos JSON embebidos. Usa f-strings de Python con llaves dobles {{ para JS. Soporta _schedule_overrides con day_hours para correcciones por día de semana.

Pendientes

  • Costes salarios (Factorial no expone, vía Kronos cuando vuelva)
  • Saldo negativo Isabel
  • Informe AYF (verificación)
  • Recheck API Dashboard Zataca el 2026-05-01 (bloqueado por bugs API a 2026-04-28)

Dependencias

  • Fenix Finanzas — consume /api/internal/*
  • app-neurofactu — consume /api/reports/billing-by-family
  • Factorial API + Kronos + JIRA + Insightful (sync)