diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php index 27bac5b..46c876e 100644 --- a/modules/turnero/api/get_consentimientos.php +++ b/modules/turnero/api/get_consentimientos.php @@ -21,7 +21,7 @@ if ($turnoId <= 0) jsonError('turno_id inválido.'); $pdo = db(); // ── Verificar que el turno existe ───────────────────────────── -$stmt = $pdo->prepare("SELECT id, estado, lugar_destino_id FROM turnero_turnos WHERE id = ?"); +$stmt = $pdo->prepare("SELECT id, estado, lugar_destino_id, paciente_id FROM turnero_turnos WHERE id = ?"); $stmt->execute([$turnoId]); $turno = $stmt->fetch(PDO::FETCH_ASSOC); if (!$turno) jsonError('Turno no encontrado.', 404); @@ -152,6 +152,35 @@ if ($incluirSolicitud) { $stmt->execute([$solicitud['id']]); $examenes = $stmt->fetchAll(PDO::FETCH_ASSOC); + // Visita de solo entrega de muestras: no requiere consentimientos ni formularios + if (!empty($solicitud['solo_muestras'])) { + $respuesta['consentimientos'] = []; + $respuesta['solicitud'] = $solicitud; + $respuesta['paciente'] = $paciente; + $respuesta['examenes'] = $examenes; + // Muestras pendientes de visitas anteriores + $muestras = []; + try { + $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']]); + $muestras = $stmtPrev->fetchAll(PDO::FETCH_ASSOC); + } catch (\Throwable $_) {} + $respuesta['muestras'] = $muestras; + jsonOk($respuesta); + } + // Auto-crear consentimientos requeridos desde DOS fuentes: // 1. Por examen → exam_tipo_consentimientos // 2. Por lugar → turnero_lugar_consentimientos @@ -315,6 +344,34 @@ if ($incluirSolicitud) { } } + // Fallback: sin solicitud pero el turno tiene paciente_id → buscar muestras pendientes igualmente + if (!$solicitud && !empty($turno['paciente_id'])) { + $pacId = (int)$turno['paciente_id']; + $stmt = $pdo->prepare( + "SELECT id, nombre_completo, tipo_documento, numero_documento, + fecha_nacimiento, telefono + FROM lab_pacientes WHERE id = ?" + ); + $stmt->execute([$pacId]); + $paciente = $stmt->fetch(PDO::FETCH_ASSOC) ?: null; + try { + $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.estado = 'pendiente' + ORDER BY tm.id ASC" + ); + $stmtPrev->execute([$pacId]); + $muestras = $stmtPrev->fetchAll(PDO::FETCH_ASSOC); + } catch (\Throwable $_) {} + } + $respuesta['solicitud'] = $solicitud; $respuesta['paciente'] = $paciente; $respuesta['examenes'] = $examenes; diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index 79cd9f0..6286573 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -595,6 +595,11 @@ require_once __DIR__ . '/../../../shared/components/sidebar.php'; en espera + + Solo entrega de muestras +