Turnero: mejoras UI, historial detallado, kiosko scanner, firma por turno
- Kiosko: detector scanner (gap < 80ms), iconos 90px, fa-person-pregnant, ticket Arial - Recepción: vincular_paciente.php para persistir paciente_id antes de firmar consentimiento - Historial y dashboard: recepción desk, empleado recepción/muestras, exámenes y comentarios - display_global: turno más pequeño, lugar-nombre más grande - lab_pacientes: modal compacta con form-sm - Configuración: icono embarazada fa-person-pregnant en prioridades - ver_formulario_enviado: firma por campo (fix doble firma) - docker-compose.local.yml: override BD producción para dev local Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ebbf4ac6cf
commit
f363631b32
@@ -124,13 +124,20 @@ $stmtTurnos = $pdo->prepare(
|
||||
t.creado_at, t.inicio_recepcion_at, t.fin_recepcion_at,
|
||||
t.inicio_lugar_at, t.fin_lugar_at,
|
||||
p.codigo AS prioridad_codigo, p.nombre AS prioridad_nombre, p.color AS prioridad_color,
|
||||
l.nombre AS lugar_nombre,
|
||||
l.nombre AS lugar_nombre,
|
||||
s.nombre_completo AS paciente_bd,
|
||||
rd.nombre AS recepcion_desk_nombre,
|
||||
ur.full_name AS atendido_recepcion_nombre,
|
||||
ul.full_name AS atendido_lugar_nombre,
|
||||
ts.observaciones AS notas,
|
||||
ROUND(TIMESTAMPDIFF(SECOND, t.creado_at, COALESCE(t.inicio_recepcion_at, NOW())) / 60.0, 1) AS espera_min,
|
||||
ROUND(TIMESTAMPDIFF(SECOND, t.inicio_lugar_at, COALESCE(t.fin_lugar_at, NOW())) / 60.0, 1) AS servicio_min
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
LEFT JOIN turnero_lugares l ON l.id = t.lugar_destino_id
|
||||
LEFT JOIN turnero_lugares l ON l.id = t.lugar_destino_id
|
||||
LEFT JOIN turnero_lugares rd ON rd.id = t.recepcion_desk_id
|
||||
LEFT JOIN admin_users ur ON ur.id = t.atendido_recepcion_por
|
||||
LEFT JOIN admin_users ul ON ul.id = t.atendido_lugar_por
|
||||
LEFT JOIN turnero_solicitudes ts ON ts.turno_id = t.id
|
||||
LEFT JOIN lab_pacientes s ON s.id = ts.paciente_id
|
||||
WHERE t.sesion_id = ?
|
||||
@@ -139,6 +146,25 @@ $stmtTurnos = $pdo->prepare(
|
||||
$stmtTurnos->execute([$sesionId]);
|
||||
$turnos = $stmtTurnos->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Enriquecer con exámenes y comentarios
|
||||
foreach ($turnos as &$turno) {
|
||||
$stmtEx = $pdo->prepare(
|
||||
"SELECT DISTINCT et.nombre FROM turnero_examen_items tei
|
||||
JOIN exam_tipos et ON et.id = tei.exam_tipo_id
|
||||
WHERE tei.solicitud_id = (SELECT id FROM turnero_solicitudes WHERE turno_id = ? LIMIT 1)"
|
||||
);
|
||||
$stmtEx->execute([$turno['id']]);
|
||||
$turno['examenes'] = $stmtEx->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$stmtCom = $pdo->prepare(
|
||||
"SELECT usuario_nombre, comentario, tipo, creado_at
|
||||
FROM turnero_comentarios WHERE turno_id = ? ORDER BY creado_at ASC"
|
||||
);
|
||||
$stmtCom->execute([$turno['id']]);
|
||||
$turno['comentarios'] = $stmtCom->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
unset($turno);
|
||||
|
||||
// ── 6. Consentimientos del día ────────────────────────────────
|
||||
$stmtcons = $pdo->prepare(
|
||||
"SELECT tc.estado, COUNT(*) AS cnt
|
||||
|
||||
@@ -108,6 +108,9 @@ $sqlTurnos = "
|
||||
p.color AS prioridad_color,
|
||||
l.nombre AS lugar_nombre,
|
||||
s2.nombre_completo AS paciente_bd,
|
||||
rd.nombre AS recepcion_desk_nombre,
|
||||
ur.full_name AS atendido_recepcion_nombre,
|
||||
ul.full_name AS atendido_lugar_nombre,
|
||||
ROUND(TIMESTAMPDIFF(SECOND, t.creado_at,
|
||||
COALESCE(t.inicio_recepcion_at, t.fin_recepcion_at)) / 60.0, 1)
|
||||
AS espera_min,
|
||||
@@ -118,6 +121,9 @@ $sqlTurnos = "
|
||||
JOIN turnero_sesiones s ON s.id = t.sesion_id
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
LEFT JOIN turnero_lugares l ON l.id = t.lugar_destino_id
|
||||
LEFT JOIN turnero_lugares rd ON rd.id = t.recepcion_desk_id
|
||||
LEFT JOIN admin_users ur ON ur.id = t.atendido_recepcion_por
|
||||
LEFT JOIN admin_users ul ON ul.id = t.atendido_lugar_por
|
||||
LEFT JOIN turnero_solicitudes ts2 ON ts2.turno_id = t.id
|
||||
LEFT JOIN lab_pacientes s2 ON s2.id = ts2.paciente_id
|
||||
$whereStr
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* POST { turno_id, paciente_id }
|
||||
* Vincula un paciente al turno para que los consentimientos puedan crearse.
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('POST');
|
||||
requireTurnero();
|
||||
|
||||
$d = inputJson();
|
||||
$turnoId = (int)($d['turno_id'] ?? 0);
|
||||
$pacienteId = (int)($d['paciente_id'] ?? 0);
|
||||
|
||||
if (!$turnoId || !$pacienteId) jsonError('turno_id y paciente_id requeridos.');
|
||||
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare('UPDATE turnero_turnos SET paciente_id = ? WHERE id = ?');
|
||||
$stmt->execute([$pacienteId, $turnoId]);
|
||||
|
||||
if (!$stmt->rowCount()) jsonError('Turno no encontrado.', 404);
|
||||
|
||||
jsonOk(['turno_id' => $turnoId, 'paciente_id' => $pacienteId]);
|
||||
Reference in New Issue
Block a user