$_GET['estado'] ?? '', 'paciente_id' => (int)($_GET['paciente_id'] ?? 0) ?: null, 'desde' => $_GET['desde'] ?? '', 'hasta' => $_GET['hasta'] ?? '', 'busqueda' => trim($_GET['busqueda'] ?? $_GET['search'] ?? ''), ], fn($v) => $v !== null && $v !== ''); $pagina = max(1, (int)($_GET['page'] ?? 1)); $por = max(1, min(100, (int)($_GET['limit'] ?? 30))); // Vista de una sola orden if (!empty($_GET['id'])) { $orden = $om->obtener((int)$_GET['id']); if (!$orden) { jsonError('Orden no encontrada', 404); } jsonOk(['orden' => $orden]); } $resultado = $om->listar($filtros, $pagina, $por); // Incluir también el contador por estado para el dashboard if (!isset($_GET['no_counts'])) { $resultado['contadores'] = $om->contadorPorEstado(); } jsonOk($resultado); } catch (Exception $e) { jsonError($e->getMessage(), 500); }