Files
whatsapp/api/lab/save_servicio_extra.php
T
2026-03-10 18:42:51 -05:00

83 lines
3.7 KiB
PHP

<?php
/**
* POST /api/lab/save_servicio_extra.php
* El enfermero agrega (o actualiza/elimina) un servicio extra a un domicilio.
*
* Body JSON:
* { domicilio_id, descripcion, tipo, notas?, requiere_pago?, valor? } -- crear
* { id, descripcion?, tipo?, notas?, requiere_pago?, valor? } -- editar
* { id, eliminar: true } -- borrar
*/
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
$TIPOS_VALIDOS = ['inyeccion','cura','nebulizacion','toma_muestra',
'tension_arterial','glucometria','otro'];
try {
$datos = inputJson();
$db = Database::getInstance();
// ── Eliminar ───────────────────────────────────────────────────────────
if (!empty($datos['id']) && !empty($datos['eliminar'])) {
$se = $db->fetch('SELECT * FROM lab_servicios_extra WHERE id = ?', [(int)$datos['id']]);
if (!$se) jsonError('Servicio no encontrado', 404);
if (userRole() === 'enfermero') {
requireEnfermeroAccess((int)$se['realizado_por']);
}
$db->delete('lab_servicios_extra', 'id = ?', [(int)$datos['id']]);
jsonOk(['id' => (int)$datos['id']], 'Servicio eliminado');
}
// ── Editar ─────────────────────────────────────────────────────────────
if (!empty($datos['id'])) {
$id = (int)$datos['id'];
$se = $db->fetch('SELECT * FROM lab_servicios_extra WHERE id = ?', [$id]);
if (!$se) jsonError('Servicio no encontrado', 404);
if (userRole() === 'enfermero') {
requireEnfermeroAccess((int)$se['realizado_por']);
}
$permitidos = ['descripcion','tipo','notas','requiere_pago','valor'];
$campos = array_intersect_key($datos, array_flip($permitidos));
if (isset($campos['tipo']) && !in_array($campos['tipo'], $TIPOS_VALIDOS)) {
jsonError('Tipo de servicio inválido');
}
$db->update('lab_servicios_extra', $campos, 'id = ?', [$id]);
jsonOk(['id' => $id], 'Servicio actualizado');
}
// ── Crear ──────────────────────────────────────────────────────────────
foreach (['domicilio_id', 'descripcion', 'tipo'] as $req) {
if (empty($datos[$req])) jsonError("El campo $req es obligatorio");
}
if (!in_array($datos['tipo'], $TIPOS_VALIDOS)) {
jsonError('Tipo de servicio inválido');
}
// Verificar que el domicilio existe y que el enfermero le pertenece
$domId = (int)$datos['domicilio_id'];
if (userRole() === 'enfermero') {
$eid = enfermeraId();
$asig = $db->fetch(
'SELECT a.id FROM lab_asignaciones a WHERE a.domicilio_id = ? AND a.enfermera_id = ?',
[$domId, $eid]
);
if (!$asig) jsonError('No tienes permiso para este domicilio', 403);
}
$id = $db->insert('lab_servicios_extra', [
'domicilio_id' => $domId,
'descripcion' => trim($datos['descripcion']),
'tipo' => $datos['tipo'],
'notas' => $datos['notas'] ?? null,
'requiere_pago' => !empty($datos['requiere_pago']) ? 1 : 0,
'valor' => !empty($datos['valor']) ? (float)$datos['valor'] : null,
'realizado_por' => enfermeraId() ?? (userRole() === 'admin' ? null : null),
]);
jsonOk(['id' => $id], 'Servicio extra registrado');
} catch (Exception $e) {
jsonError($e->getMessage(), 500);
}