feat(turnero): mostrar muestras pendientes de visitas anteriores en entrega

Cuando la solicitud tiene solo_muestras=1, get_consentimientos.php
busca turnero_muestras pendientes de otras solicitudes del mismo
paciente y las antepone en el array muestras con es_pendiente_anterior=1.

lugar.php renderiza un tag 'visita anterior' en cada muestra previa
para que el bacteriólogo identifique el origen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-08 18:42:19 -05:00
co-authored by Claude Sonnet 4.6
parent 6f1e2adafe
commit 8a44cb8bae
2 changed files with 32 additions and 4 deletions
+22 -1
View File
@@ -281,7 +281,8 @@ if ($incluirSolicitud) {
try {
$stmtM = $pdo->prepare(
"SELECT tm.id, tm.tipo_muestra, tm.estado, tm.motivo_rechazo, tm.recibida_at,
COALESCE(lt.nombre, tm.tipo_muestra) AS label
COALESCE(lt.nombre, tm.tipo_muestra) AS label,
0 AS es_pendiente_anterior, NULL AS solicitud_orden_anterior
FROM turnero_muestras tm
LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra
WHERE tm.solicitud_id = ?
@@ -289,6 +290,26 @@ if ($incluirSolicitud) {
);
$stmtM->execute([$solicitud['id']]);
$muestras = $stmtM->fetchAll(PDO::FETCH_ASSOC);
// Si es visita de entrega de muestras, agregar pendientes de solicitudes anteriores
if (!empty($solicitud['solo_muestras']) && !empty($solicitud['paciente_id'])) {
$stmtPrev = $pdo->prepare(
"SELECT tm.id, tm.tipo_muestra, tm.estado, tm.motivo_rechazo, tm.recibida_at,
COALESCE(lt.nombre, tm.tipo_muestra) AS label,
1 AS es_pendiente_anterior,
ts.numero_orden AS solicitud_orden_anterior
FROM turnero_muestras tm
JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id
LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra
WHERE ts.paciente_id = ?
AND tm.solicitud_id != ?
AND tm.estado = 'pendiente'
ORDER BY tm.id ASC"
);
$stmtPrev->execute([$solicitud['paciente_id'], $solicitud['id']]);
$previas = $stmtPrev->fetchAll(PDO::FETCH_ASSOC);
$muestras = array_merge($previas, $muestras);
}
} catch (\Throwable $_) {
// Tabla aún no existe
}
+10 -3
View File
@@ -1757,8 +1757,15 @@ function renderMuestras(lista) {
summary.innerHTML = chips;
cont.innerHTML = lista.map(m => {
const esPend = m.estado === 'pendiente';
const label = escHtml(m.label || m.tipo_muestra || 'MUESTRA');
const esPend = m.estado === 'pendiente';
const esPrevio = !!m.es_pendiente_anterior;
const label = escHtml(m.label || m.tipo_muestra || 'MUESTRA');
const origenTag = esPrevio
? `<span style="font-size:.68rem;background:#fef3c7;color:#92400e;border:1px solid #fde68a;
border-radius:10px;padding:1px 7px;margin-left:5px;white-space:nowrap">
<i class="fas fa-history me-1"></i>visita anterior${m.solicitud_orden_anterior ? ' · ' + escHtml(m.solicitud_orden_anterior) : ''}
</span>`
: '';
const tsHtml = m.recibida_at
? `<span class="muestra-ts">${formatHora(m.recibida_at)}</span>`
: '';
@@ -1792,7 +1799,7 @@ function renderMuestras(lista) {
return `<div class="muestra-row ${m.estado}" data-muestra-id="${m.id}">
${ico}
<div class="muestra-info">
<span class="muestra-label">${label}</span>
<span class="muestra-label">${label}</span>${origenTag}
${motivoHtml}
</div>
${acciones}