feat: restricción de exámenes por género del paciente
- DB: columna genero_permitido en exam_tipos (M/F/NULL) GX,FV → solo femenino | PSA,FPSA → solo masculino - recepcion.php: TomSelect muestra badge rojo y deshabilita opciones incompatibles al seleccionar paciente; elimina los ya agregados - create_solicitud.php: validación backend 422 si hay conflicto género/examen Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
b280dfcb7a
commit
3eaade80ff
@@ -63,6 +63,29 @@ if ($metodoPago && !in_array($metodoPago, $metodosValidos, true)) {
|
||||
}
|
||||
|
||||
$pdo = db();
|
||||
|
||||
// Validar restricción de género antes de abrir transacción
|
||||
if (!empty($examIds)) {
|
||||
$stPac = $pdo->prepare("SELECT genero FROM lab_pacientes WHERE id = ? LIMIT 1");
|
||||
$stPac->execute([$pacienteId]);
|
||||
$genPac = strtoupper(trim((string)($stPac->fetchColumn() ?: '')));
|
||||
|
||||
if ($genPac) {
|
||||
$ph = implode(',', array_fill(0, count($examIds), '?'));
|
||||
$stGp = $pdo->prepare(
|
||||
"SELECT codigo, nombre, genero_permitido FROM exam_tipos
|
||||
WHERE id IN ($ph) AND genero_permitido IS NOT NULL AND genero_permitido <> ?"
|
||||
);
|
||||
$stGp->execute(array_merge($examIds, [$genPac]));
|
||||
$incompatibles = $stGp->fetchAll(PDO::FETCH_ASSOC);
|
||||
if ($incompatibles) {
|
||||
$nombres = implode(', ', array_map(fn($r) => $r['codigo'], $incompatibles));
|
||||
$sexo = $genPac === 'M' ? 'masculino' : 'femenino';
|
||||
jsonError("Examen(es) no disponibles para paciente $sexo: $nombres", 422);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$pdo->beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user