From aacf26168b16470c277e1fd803f41783323813f0 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 3 Aug 2026 12:41:28 -0500 Subject: [PATCH] =?UTF-8?q?Toma=20de=20muestras:=20mostrar=20ex=C3=A1menes?= =?UTF-8?q?=20de=20la=20visita=20anterior=20en=20muestras=20pendientes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cuando el paciente vuelve a completar una muestra pendiente, el panel de lugar.php ahora lista los exámenes de la solicitud original debajo del badge "visita anterior", con la misma clase visual que el motivo de rechazo (hereda color según estado: pendiente/recibida/rechazada). Co-Authored-By: Claude Sonnet 4.6 --- modules/turnero/api/get_consentimientos.php | 29 +++++++++++++++++++++ modules/turnero/views/lugar.php | 5 ++++ 2 files changed, 34 insertions(+) diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php index 375b454..3639d6d 100644 --- a/modules/turnero/api/get_consentimientos.php +++ b/modules/turnero/api/get_consentimientos.php @@ -392,6 +392,7 @@ if ($incluirSolicitud) { "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.id AS solicitud_id_anterior, ts.numero_orden AS solicitud_orden_anterior FROM turnero_muestras tm JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id @@ -425,6 +426,7 @@ if ($incluirSolicitud) { "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.id AS solicitud_id_anterior, ts.numero_orden AS solicitud_orden_anterior FROM turnero_muestras tm JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id @@ -438,6 +440,33 @@ if ($incluirSolicitud) { } catch (\Throwable $_) {} } + // Cargar exámenes de la solicitud original para cada muestra pendiente de visita anterior, + // para que al recibirla se vea el contexto completo del servicio (no solo el tipo de muestra) + $solIdsAnteriores = array_values(array_unique(array_filter( + array_column($muestras, 'solicitud_id_anterior') + ))); + if ($solIdsAnteriores) { + $ph = implode(',', array_fill(0, count($solIdsAnteriores), '?')); + $stmtExAnt = $pdo->prepare( + "SELECT tei.solicitud_id, et.nombre, et.codigo + FROM turnero_examen_items tei + JOIN exam_tipos et ON et.id = tei.exam_tipo_id + WHERE tei.solicitud_id IN ($ph) + ORDER BY et.nombre ASC" + ); + $stmtExAnt->execute($solIdsAnteriores); + $examPorSolicitud = []; + foreach ($stmtExAnt->fetchAll(PDO::FETCH_ASSOC) as $row) { + $examPorSolicitud[(int)$row['solicitud_id']][] = ['nombre' => $row['nombre'], 'codigo' => $row['codigo']]; + } + foreach ($muestras as &$m) { + if (!empty($m['solicitud_id_anterior'])) { + $m['examenes_anteriores'] = $examPorSolicitud[(int)$m['solicitud_id_anterior']] ?? []; + } + } + unset($m); + } + $respuesta['solicitud'] = $solicitud; $respuesta['paciente'] = $paciente; $respuesta['examenes'] = $examenes; diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index fab9e9a..44c67ff 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -594,6 +594,7 @@ try { .muestra-info { flex: 1; min-width: 0; } .muestra-label { font-weight: 600; font-size: .82rem; font-family: monospace; } .muestra-motivo { font-size: .7rem; margin-top: 2px; opacity: .85; } + .muestra-examenes { font-size: .7rem; margin-top: 2px; opacity: .85; } .muestra-ts { font-size: .68rem; color: #94a3b8; flex-shrink: 0; } .btn-muestra-accion { border: none; border-radius: 8px; padding: 3px 11px; @@ -2500,6 +2501,9 @@ function renderMuestras(lista) { visita anterior${m.solicitud_orden_anterior ? ' · ' + escHtml(m.solicitud_orden_anterior) : ''} ` : ''; + const examAntHtml = (esPrevio && m.examenes_anteriores && m.examenes_anteriores.length) + ? `
${m.examenes_anteriores.map(e => escHtml(e.nombre)).join(', ')}
` + : ''; const tsHtml = m.recibida_at ? `${formatHora(m.recibida_at)}` : ''; @@ -2534,6 +2538,7 @@ function renderMuestras(lista) { ${ico}
${label}${origenTag} + ${examAntHtml} ${motivoHtml}
${acciones}