From ca90f7962586c672d53bd568ff99d7401f88327d Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 6 Apr 2026 12:30:37 -0500 Subject: [PATCH] up --- api/lab/save_paciente.php | 13 ++++++++++++- classes/lab/Paciente.php | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/api/lab/save_paciente.php b/api/lab/save_paciente.php index ce9c2d4..e3d7012 100644 --- a/api/lab/save_paciente.php +++ b/api/lab/save_paciente.php @@ -30,5 +30,16 @@ try { jsonOk(['id' => $id], 'Paciente creado correctamente'); } } catch (Exception $e) { - jsonError($e->getMessage(), 500); + $msg = $e->getMessage(); + // Traducir errores de clave duplicada que hayan escapado la validación previa + if (stripos($msg, 'Duplicate entry') !== false || stripos($msg, '1062') !== false) { + if (stripos($msg, 'numero_documento') !== false || stripos($msg, 'documento') !== false) { + jsonError('Ya existe un paciente con ese número de documento'); + } + if (stripos($msg, 'email') !== false) { + jsonError('Ya existe un paciente con ese correo electrónico'); + } + jsonError('Ya existe un registro con esos datos (valor duplicado)'); + } + jsonError($msg, 400); } diff --git a/classes/lab/Paciente.php b/classes/lab/Paciente.php index acf699f..e2daed7 100644 --- a/classes/lab/Paciente.php +++ b/classes/lab/Paciente.php @@ -115,7 +115,22 @@ class Paciente { */ public function crear(array $datos, ?int $adminId = null): int { $campos = $this->filtrarCampos($datos); - $id = $this->db->insert('lab_pacientes', $campos); + + // Validar documento duplicado antes de insertar + if (!empty($campos['numero_documento'])) { + $existente = $this->db->fetch( + 'SELECT id, nombre_completo FROM lab_pacientes WHERE numero_documento = ?', + [$campos['numero_documento']] + ); + if ($existente) { + throw new Exception( + 'Ya existe un paciente registrado con ese número de documento: ' . + $existente['nombre_completo'] + ); + } + } + + $id = $this->db->insert('lab_pacientes', $campos); $this->log->registrar($adminId, 'pacientes', 'crear', $id, $campos); return $id; } @@ -125,7 +140,22 @@ class Paciente { */ public function actualizar(int $id, array $datos, ?int $adminId = null): bool { $campos = $this->filtrarCampos($datos); - $ok = $this->db->update('lab_pacientes', $campos, 'id = ?', [$id]); + + // Validar que el documento no pertenezca a otro paciente + if (!empty($campos['numero_documento'])) { + $existente = $this->db->fetch( + 'SELECT id, nombre_completo FROM lab_pacientes WHERE numero_documento = ? AND id != ?', + [$campos['numero_documento'], $id] + ); + if ($existente) { + throw new Exception( + 'Ese número de documento ya está registrado para: ' . + $existente['nombre_completo'] + ); + } + } + + $ok = $this->db->update('lab_pacientes', $campos, 'id = ?', [$id]); $this->log->registrar($adminId, 'pacientes', 'editar', $id, $campos); return $ok > 0; }