Toma de muestras: mostrar exámenes de la visita anterior en muestras pendientes
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 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
fd8b83a588
commit
aacf26168b
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
<i class="fas fa-history me-1"></i>visita anterior${m.solicitud_orden_anterior ? ' · ' + escHtml(m.solicitud_orden_anterior) : ''}
|
||||
</span>`
|
||||
: '';
|
||||
const examAntHtml = (esPrevio && m.examenes_anteriores && m.examenes_anteriores.length)
|
||||
? `<div class="muestra-examenes"><i class="fas fa-vials me-1"></i>${m.examenes_anteriores.map(e => escHtml(e.nombre)).join(', ')}</div>`
|
||||
: '';
|
||||
const tsHtml = m.recibida_at
|
||||
? `<span class="muestra-ts">${formatHora(m.recibida_at)}</span>`
|
||||
: '';
|
||||
@@ -2534,6 +2538,7 @@ function renderMuestras(lista) {
|
||||
${ico}
|
||||
<div class="muestra-info">
|
||||
<span class="muestra-label">${label}</span>${origenTag}
|
||||
${examAntHtml}
|
||||
${motivoHtml}
|
||||
</div>
|
||||
${acciones}
|
||||
|
||||
Reference in New Issue
Block a user