Saltar al contenido principal

hr-reportes-api

Plataforma de reporting HR servida en dashboard.matizal.com (antes reporte.matizal.com, que perdió el DNS en jun-2026). Sustituyó al antiguo hr.reportes (eliminado 2026-04-11) el 2026-04-08.

Resumen​

  • Dominio: dashboard.matizal.com
  • Aliases: ninguno. reporte/reportes.matizal.com ya no existen en DNS; analitica.matizal.com es Fenix Finanzas (:8800), no esta app.
  • Repo: PedroFenixia/hr-reportes-api
  • Path local: /Users/pedrosanchez/DEV/hr-reportes-api
  • VPS: 91.134.43.229 puerto 8500
  • Estado: Producción

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)