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); }