Tres correcciones sobre lo reportado en E042.
1. La bitácora daba por hecho que firmado_at era del paciente, y lo anunciaba
así en documentos que el paciente nunca firma: el F-LAB-08 solo lo firma el
profesional y el F-LAB-28 lleva una firma por toma. Ahora mira qué firma hay
realmente guardada; si no hay ninguna dice «completado» o «protocolo
cerrado», según el caso.
2. Los protocolos prolongados desglosan cada toma con su hora y su firmante,
que es el dato que interesa: en E042 se ve que el minuto 0 lo firmó Yesica y
el minuto 150 Omaira. La firma general no distinguía eso.
3. firmar_profesional_consentimiento.php aceptaba el nombre del firmante que
mandaba el navegador, y ese valor se carga al abrir la página: si el
personal cambiaba de turno sin recargar, la firma final quedaba a nombre de
quien abrió el formulario. Ahora se resuelve desde la sesión en el servidor,
igual que ya hacía guardar_toma.php para cada toma.
Además, llamar y rellamar no dejaban rastro —el turno solo guarda la hora del
último llamado, que el rellamado sobrescribe—, así que la bitácora mostraba
«Llamado a X» sin autor. Ahora se auditan ambos.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- llamar_turno.php: ambos SELECT de refresco hacen LEFT JOIN con
turnero_solicitudes para devolver COALESCE(ts.solo_muestras,0).
Sin este JOIN, JS recibía undefined y _esSoloEntrega() retornaba
false → polling de consentimientos arrancaba → hayPendientes=true
→ finalizar bloqueado (caso turno E047 ALVARO TIRADO).
- lugar.php renderConsentimientos: hayPendientes se fuerza a false
cuando _esSoloEntrega(turnoActivo) es true, para que un
consentimiento huérfano previo no bloquee la finalización en
turnos de solo entrega de muestras.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
siguienteTurnoEnCola ahora acepta sesion_id opcional. llamar_turno.php
pasa la sesión de hoy para que nunca agarre turnos viejos de días
anteriores que quedaron en estado 'espera'.
Sin el filtro, el primer llamado del día podía agarrar un turno de ayer,
la ficha abría en recepción pero la pantalla TV (get_display_recepcion.php)
filtra por sesion_id=hoy y no lo encontraba → el número no salía en display.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
get_display_global.php: la query de cada escritorio tenía la condición
OR t.recepcion_desk_id IS NULL
lo que hacía que un turno llamado sin desk_id (NULL) apareciera como activo
en TODOS los escritorios simultáneamente, anunciando el destino incorrecto.
Se eliminó esa condición para usar match exacto por escritorio.
llamar_turno.php: cambiar COALESCE(?, recepcion_desk_id) por ? directo.
El COALESCE era innecesario porque el UPDATE solo aplica sobre estado='espera'
(primer llamado). Ahora siempre escribe el valor recibido.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>