diff --git a/api/lab/registrar_pago.php b/api/lab/registrar_pago.php new file mode 100644 index 0000000..efbc945 --- /dev/null +++ b/api/lab/registrar_pago.php @@ -0,0 +1,65 @@ +fetch( + 'SELECT id, pago_estado FROM lab_domicilios WHERE id = ?', [$domId] + ); + if (!$exist) jsonError("Domicilio #$domId no encontrado"); + + $campos = [ + 'pago_estado' => $estado, + 'pago_modo' => ($estado === 'pagado') ? ($datos['pago_modo'] ?? null) : null, + 'pago_monto' => ($estado === 'pagado') ? ((float)$datos['pago_monto']) : null, + 'pago_fecha' => ($estado === 'pagado') ? date('Y-m-d H:i:s') : null, + 'pago_notas' => !empty($datos['pago_notas']) ? trim($datos['pago_notas']) : null, + 'pago_registrado_por' => $adminId, + ]; + + $dom->actualizar($domId, $campos, $adminId); + + jsonOk([ + 'domicilio_id' => $domId, + 'pago_estado' => $estado, + ], 'Pago registrado correctamente'); + +} catch (InvalidArgumentException $e) { + jsonError($e->getMessage()); +} catch (Exception $e) { + jsonError($e->getMessage(), 500); +} diff --git a/classes/lab/Domicilio.php b/classes/lab/Domicilio.php index 78179f0..410fdb6 100644 --- a/classes/lab/Domicilio.php +++ b/classes/lab/Domicilio.php @@ -246,6 +246,9 @@ class Domicilio { 'observaciones', 'muestras_tomadas', 'notas_admin', 'seguro_nombre', 'autorizacion', 'copago_laboratorio', 'valor_domicilio', 'valor_copago', + // pago + 'pago_estado', 'pago_modo', 'pago_monto', 'pago_fecha', + 'pago_notas', 'pago_registrado_por', ]; $campos = array_intersect_key($datos, array_flip($permitidos)); diff --git a/classes/lab/Enfermera.php b/classes/lab/Enfermera.php index ccd2b9f..1ab0d37 100644 --- a/classes/lab/Enfermera.php +++ b/classes/lab/Enfermera.php @@ -107,6 +107,14 @@ class Enfermera { d.tipo_cliente, d.seguro_nombre, d.orden_id, + d.valor_domicilio, + d.valor_copago, + d.copago_laboratorio, + d.autorizacion, + d.pago_estado, + d.pago_modo, + d.pago_monto, + d.pago_notas, p.id AS paciente_id, p.nombre_completo AS paciente_nombre, p.telefono AS paciente_telefono, diff --git a/database/07_add_pago_domicilio.sql b/database/07_add_pago_domicilio.sql new file mode 100644 index 0000000..4ae84ea --- /dev/null +++ b/database/07_add_pago_domicilio.sql @@ -0,0 +1,33 @@ +-- ============================================================ +-- Migration: 07_add_pago_domicilio +-- Agrega campos de pago del cliente a lab_domicilios +-- ============================================================ + +ALTER TABLE `lab_domicilios` + ADD COLUMN IF NOT EXISTS `pago_estado` ENUM('pendiente','pagado','exento') NOT NULL DEFAULT 'pendiente' + COMMENT 'Estado del pago del cliente: pendiente / pagado / exento' + AFTER `valor_copago`, + + ADD COLUMN IF NOT EXISTS `pago_modo` ENUM('efectivo','transferencia','otro') DEFAULT NULL + COMMENT 'Medio de pago usado por el cliente' + AFTER `pago_estado`, + + ADD COLUMN IF NOT EXISTS `pago_monto` DECIMAL(12,2) DEFAULT NULL + COMMENT 'Monto efectivamente cobrado al cliente' + AFTER `pago_modo`, + + ADD COLUMN IF NOT EXISTS `pago_fecha` DATETIME DEFAULT NULL + COMMENT 'Fecha y hora en que se registró el pago' + AFTER `pago_monto`, + + ADD COLUMN IF NOT EXISTS `pago_notas` VARCHAR(255) DEFAULT NULL + COMMENT 'Observaciones del pago (referencia transferencia, etc.)' + AFTER `pago_fecha`, + + ADD COLUMN IF NOT EXISTS `pago_registrado_por` INT DEFAULT NULL + COMMENT 'FK al enfermero/admin que registró el pago' + AFTER `pago_notas`; + +-- Índice para consultas rápidas por estado de pago +ALTER TABLE `lab_domicilios` + ADD INDEX IF NOT EXISTS `idx_pago_estado` (`pago_estado`); diff --git a/enfermero_portal.php b/enfermero_portal.php index 7f498e7..62b9d66 100644 --- a/enfermero_portal.php +++ b/enfermero_portal.php @@ -110,6 +110,13 @@ $hoy = date('Y-m-d'); border-bottom:1px solid #f0f0f0; } .sugerencias-pac .item:hover { background:#f0f4ff; } .sugerencias-pac .item:last-child { border-bottom:none; } + + /* ── Pago ── */ + .pago-badge-pendiente { background:#fff3cd; color:#664d03; border:1px solid #ffc107; } + .pago-badge-pagado { background:#d1fae5; color:#065f46; border:1px solid #34d399; } + .pago-badge-exento { background:#e0e7ff; color:#3730a3; border:1px solid #818cf8; } + .cobro-box { background:#f0fdf4; border:1px solid #86efac; border-radius:8px; padding:.6rem .9rem; } + .cobro-box.sin-cobro { background:#f9fafb; border-color:#e5e7eb; color:#9ca3af; }
@@ -242,6 +249,74 @@ $hoy = date('Y-m-d'); + +