feat(bandeja): vistos/por-revisar, filtro nombre+examen, marcar como visto

- Reemplaza activos/cerrados por pendientes (por revisar) / vistos
- Columna bandeja_visto_at en turnero_turnos; API marcar_visto.php
- Botón "Marcar como visto" → mueve paciente a sección inferior
- Filtro en tiempo real por nombre y por código de examen (GROUP_CONCAT)
- URL de consentimientos: relativa (consent.php?token=...)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-27 21:29:52 -05:00
co-authored by Claude Sonnet 4.6
parent 6c54674795
commit 368c4c8a5a
3 changed files with 215 additions and 267 deletions
+16 -12
View File
@@ -19,6 +19,7 @@ if (isset($_GET['turno_id'])) {
$turno = $pdo->prepare("
SELECT t.id, t.codigo, t.estado, t.paciente_nombre, t.inicio_lugar_at, t.fin_lugar_at,
t.bandeja_visto_at,
ts.id AS sol_id, ts.numero_orden,
p.tipo_documento, p.numero_documento, p.fecha_nacimiento, p.telefono,
l.nombre AS lugar_nombre
@@ -92,21 +93,24 @@ if (isset($_GET['turno_id'])) {
// ── LISTA ─────────────────────────────────────────────────────
$stmt = $pdo->prepare("
SELECT t.id, t.codigo, t.paciente_nombre, t.estado,
t.inicio_lugar_at, t.fin_lugar_at,
t.inicio_lugar_at, t.fin_lugar_at, t.bandeja_visto_at,
ts.numero_orden,
l.nombre AS lugar_nombre
l.nombre AS lugar_nombre,
GROUP_CONCAT(et.codigo ORDER BY et.codigo SEPARATOR ' ') AS examenes_txt
FROM turnero_turnos t
JOIN turnero_solicitudes ts ON ts.turno_id = t.id
JOIN turnero_lugares l ON l.id = t.lugar_destino_id
JOIN turnero_solicitudes ts ON ts.turno_id = t.id
JOIN turnero_lugares l ON l.id = t.lugar_destino_id
LEFT JOIN turnero_examen_items tei ON tei.solicitud_id = ts.id
LEFT JOIN exam_tipos et ON et.id = tei.exam_tipo_id
WHERE t.sesion_id = ? AND t.inicio_lugar_at IS NOT NULL
GROUP BY t.id
ORDER BY ts.numero_orden ASC
");
$stmt->execute([$sesionId]);
$todos = $stmt->fetchAll(PDO::FETCH_ASSOC);
$cerradosEstados = ['finalizado', 'ausente', 'cancelado'];
$activos = array_values(array_filter($todos, fn($t) => !in_array($t['estado'], $cerradosEstados)));
$cerrados = array_values(array_filter($todos, fn($t) => in_array($t['estado'], $cerradosEstados)));
$pendientes = array_values(array_filter($todos, fn($t) => $t['bandeja_visto_at'] === null));
$vistos = array_values(array_filter($todos, fn($t) => $t['bandeja_visto_at'] !== null));
$stmtMp = $pdo->prepare("
SELECT COUNT(*) FROM turnero_muestras tm
@@ -118,12 +122,12 @@ $stmtMp->execute([$sesionId]);
$muestrasPendientes = (int)$stmtMp->fetchColumn();
jsonOk([
'activos' => $activos,
'cerrados' => $cerrados,
'stats' => [
'pendientes' => $pendientes,
'vistos' => $vistos,
'stats' => [
'total' => count($todos),
'activos' => count($activos),
'cerrados' => count($cerrados),
'pendientes' => count($pendientes),
'vistos' => count($vistos),
'muestras_pendientes' => $muestrasPendientes,
],
]);
+16
View File
@@ -0,0 +1,16 @@
<?php
/**
* modules/turnero/api/marcar_visto.php
* POST {turno_id} → marca el turno como visto en la bandeja
*/
require_once __DIR__ . '/_helpers.php';
requireTurnero();
requireMethod('POST');
$input = inputJson();
$turnoId = (int)($input['turno_id'] ?? 0);
if (!$turnoId) jsonError('turno_id requerido');
db()->prepare('UPDATE turnero_turnos SET bandeja_visto_at = NOW() WHERE id = ?')->execute([$turnoId]);
jsonOk([], 'Marcado como visto');