From 8a44cb8bae1c9d410f59c98afc1573f52a79dfae Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:42:19 -0500 Subject: [PATCH] feat(turnero): mostrar muestras pendientes de visitas anteriores en entrega MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- modules/turnero/api/get_consentimientos.php | 23 ++++++++++++++++++++- modules/turnero/views/lugar.php | 13 +++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php index 3b87f0d..27bac5b 100644 --- a/modules/turnero/api/get_consentimientos.php +++ b/modules/turnero/api/get_consentimientos.php @@ -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 } diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index 4832c3a..b773f91 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -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 + ? ` + visita anterior${m.solicitud_orden_anterior ? ' · ' + escHtml(m.solicitud_orden_anterior) : ''} + ` + : ''; const tsHtml = m.recibida_at ? `${formatHora(m.recibida_at)}` : ''; @@ -1792,7 +1799,7 @@ function renderMuestras(lista) { return `
${ico}
- ${label} + ${label}${origenTag} ${motivoHtml}
${acciones}