Vincular turnos por muestra pendiente y precargar Datos Toma de Muestras
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>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
8e1f46904c
commit
538ee8ad25
@@ -144,6 +144,7 @@ $turnoIds = array_column($turnos, 'id');
|
||||
$examenes = [];
|
||||
$consentimientos = [];
|
||||
$comentarios = [];
|
||||
$relacionados = [];
|
||||
|
||||
if ($turnoIds) {
|
||||
$ph = implode(',', array_fill(0, count($turnoIds), '?'));
|
||||
@@ -194,6 +195,41 @@ if ($turnoIds) {
|
||||
}
|
||||
}
|
||||
|
||||
// Turnos vinculados por muestras pendientes completadas en otra visita — batch (ambos sentidos)
|
||||
// Sentido "seguimiento": este turno tenía una muestra pendiente que se completó en OTRO turno
|
||||
$stmtRelFwd = $pdo->prepare(
|
||||
"SELECT DISTINCT ts.turno_id AS turno_id, t2.id AS rel_id, t2.codigo AS rel_codigo, s2.fecha AS rel_fecha
|
||||
FROM turnero_muestras tm
|
||||
JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id
|
||||
JOIN turnero_turnos t2 ON t2.id = tm.recibida_en_turno_id
|
||||
JOIN turnero_sesiones s2 ON s2.id = t2.sesion_id
|
||||
WHERE ts.turno_id IN ($ph) AND tm.recibida_en_turno_id IS NOT NULL"
|
||||
);
|
||||
$stmtRelFwd->execute($turnoIds);
|
||||
foreach ($stmtRelFwd->fetchAll(PDO::FETCH_ASSOC) as $row) {
|
||||
$tid = (int)$row['turno_id'];
|
||||
$relacionados[$tid][] = [
|
||||
'turno_id' => (int)$row['rel_id'], 'codigo' => $row['rel_codigo'],
|
||||
'fecha' => $row['rel_fecha'], 'direccion' => 'seguimiento',
|
||||
];
|
||||
}
|
||||
// Sentido "origen": este turno completó una muestra pendiente de OTRO turno anterior
|
||||
$stmtRelBack = $pdo->prepare(
|
||||
"SELECT DISTINCT tm.recibida_en_turno_id AS turno_id, t1.id AS rel_id, t1.codigo AS rel_codigo, s1.fecha AS rel_fecha
|
||||
FROM turnero_muestras tm
|
||||
JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id
|
||||
JOIN turnero_turnos t1 ON t1.id = ts.turno_id
|
||||
JOIN turnero_sesiones s1 ON s1.id = t1.sesion_id
|
||||
WHERE tm.recibida_en_turno_id IN ($ph)"
|
||||
);
|
||||
$stmtRelBack->execute($turnoIds);
|
||||
foreach ($stmtRelBack->fetchAll(PDO::FETCH_ASSOC) as $row) {
|
||||
$tid = (int)$row['turno_id'];
|
||||
$relacionados[$tid][] = [
|
||||
'turno_id' => (int)$row['rel_id'], 'codigo' => $row['rel_codigo'],
|
||||
'fecha' => $row['rel_fecha'], 'direccion' => 'origen',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($turnos as &$turno) {
|
||||
@@ -201,6 +237,7 @@ foreach ($turnos as &$turno) {
|
||||
$turno['examenes'] = $examenes[$tid] ?? [];
|
||||
$turno['consentimientos'] = $consentimientos[$tid] ?? [];
|
||||
$turno['comentarios'] = $comentarios[$tid] ?? [];
|
||||
$turno['relacionados'] = $relacionados[$tid] ?? [];
|
||||
}
|
||||
|
||||
// ── Resumen por estado (del rango filtrado) ───────────────────
|
||||
|
||||
Reference in New Issue
Block a user