Files
Lizandro GuarnizoandClaude Opus 5 487673dc0f Historial y bandeja: mostrar qué pasó con cada turno
Para saber quién retiró un formulario de un turno había que consultar la base
a mano. La información existía, pero repartida en cinco tablas y sin ninguna
pantalla que la juntara.

get_traza_turno.php arma una sola línea de tiempo con el recorrido del turno
(con quién atendió en cada punto), los documentos enviados y firmados, los
comentarios del personal —donde caen las ausencias con su motivo—, las
muestras recibidas y rechazadas, y las acciones administrativas auditadas.
Se muestra en el detalle desplegable de Historial y en el panel de Bandeja.

Del chat de WhatsApp solo se indica cuántos mensajes hubo ese día, con enlace
a la conversación. Volcar los mensajes sería esparcir datos personales del
paciente por una pantalla de consulta.

Y la parte que faltaba: cinco acciones no dejaban ningún rastro. Ahora se
auditan cambiar_estado, resetear_consentimiento, resetear_toma,
vincular_paciente y cancelar_toma_pendiente — las que borran una firma,
descartan datos de un protocolo o mandan la atención a otra historia clínica.
La auditoría va en try/catch: si falla, no tumba la operación.

La respuesta declara en `sinRastro` lo que el sistema todavía no registra,
para que la ausencia de un evento no se lea como prueba de que no ocurrió.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 12:33:55 -05:00

50 lines
1.5 KiB
PHP

<?php
/**
* POST { turno_id, paciente_id }
* Vincula un paciente al turno para que los consentimientos puedan crearse.
*/
require_once __DIR__ . '/_helpers.php';
require_once __DIR__ . '/../../../classes/lab/ActividadAdmin.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();
// Obtener nombre real del paciente
$nombre = $pdo->prepare('SELECT nombre_completo FROM lab_pacientes WHERE id = ?');
$nombre->execute([$pacienteId]);
$nombreCompleto = $nombre->fetchColumn() ?: null;
$stmt = $pdo->prepare(
'UPDATE turnero_turnos SET paciente_id = ?, paciente_nombre = COALESCE(?, paciente_nombre) WHERE id = ?'
);
$stmt->execute([$pacienteId, $nombreCompleto, $turnoId]);
if (!$stmt->rowCount()) jsonError('Turno no encontrado.', 404);
// Vincular a la persona equivocada manda la atención a otra historia clínica,
// así que queda registrado quién hizo la vinculación.
try {
(new ActividadAdmin())->registrar(
adminId(),
'turnero',
'vincular_paciente',
$turnoId,
[
'turno_id' => $turnoId,
'paciente_id' => $pacienteId,
'paciente_nombre' => $nombreCompleto,
]
);
} catch (\Throwable $e) {
error_log('[vincular_paciente] auditoría: ' . $e->getMessage());
}
jsonOk(['turno_id' => $turnoId, 'paciente_id' => $pacienteId]);