Files
whatsapp/api/lab/get_reporte_enfermero.php
T

85 lines
2.8 KiB
PHP

<?php
/**
* API: Reporte de domicilios agrupado por enfermero, año y mes.
*
* GET params (todos opcionales):
* anio Año a filtrar (ej. 2026). Si se omite, devuelve todos.
* mes Mes 1-12. Sólo funciona junto con anio.
* enfermera_id ID de la enfermera. Si se omite, devuelve todas.
*/
require_once __DIR__ . '/../../config/config.php';
require_once __DIR__ . '/../../classes/Database.php';
header('Content-Type: application/json; charset=utf-8');
header('X-Content-Type-Options: nosniff');
requireAuthentication();
$db = Database::getInstance();
$anio = isset($_GET['anio']) && ctype_digit($_GET['anio']) ? (int)$_GET['anio'] : null;
$mes = isset($_GET['mes']) && ctype_digit($_GET['mes']) ? (int)$_GET['mes'] : null;
$enfermeraId = isset($_GET['enfermera_id'])&& ctype_digit($_GET['enfermera_id']) ? (int)$_GET['enfermera_id']: null;
$wheres = [];
$params = [];
if ($anio !== null) {
$wheres[] = 'YEAR(d.fecha_programada) = ?';
$params[] = $anio;
if ($mes !== null) {
$wheres[] = 'MONTH(d.fecha_programada) = ?';
$params[] = $mes;
}
}
if ($enfermeraId !== null) {
$wheres[] = 'e.id = ?';
$params[] = $enfermeraId;
}
$where = $wheres ? 'WHERE ' . implode(' AND ', $wheres) : '';
$filas = $db->fetchAll(
"SELECT
e.id AS enfermera_id,
e.nombre_completo AS enfermera,
YEAR(d.fecha_programada) AS anio,
MONTH(d.fecha_programada) AS mes,
COUNT(*) AS total,
SUM(d.estado = 'completado') AS completados,
SUM(d.estado = 'cancelado') AS cancelados,
SUM(d.estado NOT IN ('completado','cancelado')) AS en_proceso
FROM lab_domicilios d
JOIN lab_asignaciones a ON a.domicilio_id = d.id
AND a.estado NOT IN ('liberada')
JOIN lab_enfermeras e ON e.id = a.enfermera_id
$where
GROUP BY e.id, YEAR(d.fecha_programada), MONTH(d.fecha_programada)
ORDER BY e.nombre_completo, YEAR(d.fecha_programada) DESC, MONTH(d.fecha_programada) DESC",
$params
);
$meses_es = [
1=>'Ene',2=>'Feb',3=>'Mar',4=>'Abr',5=>'May',6=>'Jun',
7=>'Jul',8=>'Ago',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dic',
];
foreach ($filas as &$f) {
$t = (int)$f['total'];
$f['tasa_pct'] = $t ? round((int)$f['completados'] / $t * 100) : 0;
$f['mes_nombre'] = $meses_es[(int)$f['mes']] ?? $f['mes'];
}
unset($f);
// Lista de enfermeras para el selector del filtro
$enfermeras = $db->fetchAll(
"SELECT id, nombre_completo FROM lab_enfermeras WHERE is_active = 1 ORDER BY nombre_completo"
);
echo json_encode([
'success' => true,
'filas' => $filas,
'enfermeras' => $enfermeras,
], JSON_UNESCAPED_UNICODE);