This commit is contained in:
Lizandro Guarnizo
2026-04-06 12:30:37 -05:00
parent 7956d5431b
commit ca90f79625
2 changed files with 44 additions and 3 deletions
+12 -1
View File
@@ -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);
}
+32 -2
View File
@@ -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;
}