El turno original no se modifica (queda finalizado igual que antes) — solo se agrega trazabilidad: turnero_muestras.recibida_en_turno_id registra en qué turno se completó una muestra que había quedado pendiente en otra visita. Historial, bandeja y lugar.php ahora muestran un chip/botón "Turno vinculado" en ambos sentidos (origen ⇄ seguimiento) con acceso directo. Además, al abrir un formulario "Datos Toma de Muestras" pendiente para una visita de seguimiento, aparece un botón para cargar las respuestas del último formulario firmado de ese mismo paciente (sin firma ni identidad del profesional anterior) — evita reescribir la historia clínica; la firma y fecha siguen siendo las de hoy. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
54 lines
1.7 KiB
PHP
54 lines
1.7 KiB
PHP
<?php
|
|
/**
|
|
* GET ?paciente_id=X&formulario_id=Y&exclude_turno_id=Z
|
|
* Devuelve las respuestas del último formulario firmado de ese tipo para el paciente
|
|
* (ej. "Datos Toma de Muestras"), para precargarlo en una visita de seguimiento
|
|
* sin obligar a re-digitar la historia clínica. No modifica el registro original.
|
|
*/
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('GET');
|
|
requireTurnero();
|
|
|
|
$pacienteId = (int)($_GET['paciente_id'] ?? 0);
|
|
$formularioId = (int)($_GET['formulario_id'] ?? 0);
|
|
$excludeTurno = (int)($_GET['exclude_turno_id'] ?? 0);
|
|
|
|
if (!$pacienteId) jsonError('paciente_id requerido.');
|
|
if (!$formularioId) jsonError('formulario_id requerido.');
|
|
|
|
$pdo = db();
|
|
|
|
$stmt = $pdo->prepare(
|
|
"SELECT tc.datos_respuestas, tc.firmado_at, t.codigo AS turno_codigo
|
|
FROM turnero_consentimientos tc
|
|
JOIN turnero_turnos t ON t.id = tc.turno_id
|
|
LEFT JOIN turnero_solicitudes ts ON ts.turno_id = t.id
|
|
WHERE tc.formulario_id = ?
|
|
AND tc.estado = 'firmado'
|
|
AND COALESCE(ts.paciente_id, t.paciente_id) = ?
|
|
AND t.id != ?
|
|
ORDER BY tc.firmado_at DESC
|
|
LIMIT 1"
|
|
);
|
|
$stmt->execute([$formularioId, $pacienteId, $excludeTurno]);
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$row) {
|
|
jsonOk(['encontrado' => false]);
|
|
}
|
|
|
|
$datos = json_decode($row['datos_respuestas'] ?? '{}', true) ?: [];
|
|
// No traer firmas ni identidad del profesional anterior: cada visita se firma de nuevo
|
|
foreach (array_keys($datos) as $k) {
|
|
if (str_contains($k, 'firma') || $k === '_pro_nombre' || $k === '_pro_cedula') {
|
|
unset($datos[$k]);
|
|
}
|
|
}
|
|
|
|
jsonOk([
|
|
'encontrado' => true,
|
|
'datos_respuestas'=> $datos,
|
|
'firmado_at' => $row['firmado_at'],
|
|
'turno_codigo' => $row['turno_codigo'],
|
|
]);
|