diff --git a/migrations/20260703_solo_muestras.sql b/migrations/20260703_solo_muestras.sql new file mode 100644 index 0000000..714e71f --- /dev/null +++ b/migrations/20260703_solo_muestras.sql @@ -0,0 +1,4 @@ +ALTER TABLE turnero_solicitudes + ADD COLUMN solo_muestras TINYINT(1) NOT NULL DEFAULT 0 + COMMENT 'Paciente solo entrega muestras, sin exámenes a registrar' + AFTER embarazada; diff --git a/modules/turnero/api/create_solicitud.php b/modules/turnero/api/create_solicitud.php index 906414b..bf806e4 100644 --- a/modules/turnero/api/create_solicitud.php +++ b/modules/turnero/api/create_solicitud.php @@ -31,6 +31,7 @@ $metodoPago = isset($datos['metodo_pago']) ? trim((string) $datos['metodo_p $obs = isset($datos['observaciones']) ? trim((string) $datos['observaciones']) : null; $numOrden = isset($datos['numero_orden']) ? trim((string) $datos['numero_orden']) : null; $embarazada = !empty($datos['embarazada']) ? 1 : 0; +$soloMuestras = !empty($datos['solo_muestras']) ? 1 : 0; $pagosDetalle = null; if ($metodoPago === 'combinado' && isset($datos['pagos_detalle']) && is_array($datos['pagos_detalle'])) { $pd = $datos['pagos_detalle']; @@ -46,7 +47,7 @@ if ($numOrden === '') $numOrden = null; if ($turnoId <= 0) jsonError('turno_id inválido.'); if ($pacienteId <= 0) jsonError('paciente_id inválido.'); if ($lugarId <= 0) jsonError('lugar_id inválido.'); -if (empty($examIds)) jsonError('Debe seleccionar al menos un examen.'); +if (empty($examIds) && !$soloMuestras) jsonError('Debe seleccionar al menos un examen.'); $metodosValidos = ['efectivo', 'transferencia', 'tarjeta', 'eps', 'cortesia', 'combinado', '']; if ($metodoPago && !in_array($metodoPago, $metodosValidos, true)) { @@ -113,12 +114,12 @@ try { $stmt = $pdo->prepare( "INSERT INTO turnero_solicitudes - (turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, pagos_detalle, observaciones, embarazada, creado_por) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + (turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, pagos_detalle, observaciones, embarazada, solo_muestras, creado_por) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" ); $stmt->execute([ $turnoId, $pacienteId, $lugarId, $numOrden, - $total, $metodoPago ?: null, $pagosDetalle, $obs ?: null, $embarazada, adminId(), + $total, $metodoPago ?: null, $pagosDetalle, $obs ?: null, $embarazada, $soloMuestras, adminId(), ]); $solicitudId = (int) $pdo->lastInsertId(); diff --git a/modules/turnero/api/get_cola.php b/modules/turnero/api/get_cola.php index 92fe407..748c27d 100644 --- a/modules/turnero/api/get_cola.php +++ b/modules/turnero/api/get_cola.php @@ -50,21 +50,20 @@ if ($sesionCerrada) { // ── Cola según área ─────────────────────────────────────────── if ($area === 'recepcion') { // Recepción: todos los turnos en espera/en_recepcion - $inEstados = "'espera', 'en_recepcion'"; - $filtroLugar = ''; - $bindsCola = [$sesionId]; - + $inEstados = "'espera', 'en_recepcion'"; $stmt = $pdo->prepare( "SELECT t.id, t.codigo, t.numero, t.estado, t.paciente_nombre, t.recepcion_desk_id, t.creado_at, t.llamado_recepcion_at, t.llamado_lugar_at, p.codigo AS prioridad_codigo, p.nombre AS prioridad_nombre, - p.color AS prioridad_color, p.orden_peso + p.color AS prioridad_color, p.orden_peso, + COALESCE(s.solo_muestras, 0) AS solo_muestras FROM turnero_turnos t JOIN turnero_prioridades p ON p.id = t.prioridad_id + LEFT JOIN turnero_solicitudes s ON s.turno_id = t.id WHERE t.sesion_id = ? AND t.estado IN ($inEstados) ORDER BY p.orden_peso ASC, t.creado_at ASC" ); - $stmt->execute($bindsCola); + $stmt->execute([$sesionId]); } else { // Lugar: cola = en_espera_lugar del grupo + en_servicio en ESTA estación $grupoIds = lugarIdsDeGrupo($lugarId); @@ -73,13 +72,15 @@ if ($area === 'recepcion') { $cols = "t.id, t.codigo, t.numero, t.estado, t.paciente_nombre, t.recepcion_desk_id, t.creado_at, t.llamado_recepcion_at, t.llamado_lugar_at, p.codigo AS prioridad_codigo, p.nombre AS prioridad_nombre, - p.color AS prioridad_color, p.orden_peso"; + p.color AS prioridad_color, p.orden_peso, + COALESCE(s.solo_muestras, 0) AS solo_muestras"; $stmt = $pdo->prepare( "SELECT * FROM ( (SELECT $cols FROM turnero_turnos t JOIN turnero_prioridades p ON p.id = t.prioridad_id + LEFT JOIN turnero_solicitudes s ON s.turno_id = t.id WHERE t.sesion_id = ? AND t.estado = 'en_espera_lugar' AND t.lugar_destino_id IN ($inLugares)) @@ -87,11 +88,12 @@ if ($area === 'recepcion') { (SELECT $cols FROM turnero_turnos t JOIN turnero_prioridades p ON p.id = t.prioridad_id + LEFT JOIN turnero_solicitudes s ON s.turno_id = t.id WHERE t.sesion_id = ? AND t.estado = 'en_servicio' AND t.lugar_destino_id = ?) ) AS cola_union - ORDER BY orden_peso ASC, creado_at ASC" + ORDER BY solo_muestras DESC, orden_peso ASC, creado_at ASC" ); $stmt->execute([$sesionId, $sesionId, $lugarId]); } diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index 7055922..d16936b 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -465,14 +465,24 @@ function renderCola(snap) { border-radius:7px;padding:5px 9px;font-size:.78rem;cursor:pointer"> `; + const esMuestra = t.solo_muestras == 1; + const muestraBadge = esMuestra + ? `