diff --git a/backend/newwhats/agenda-bridge.js b/backend/newwhats/agenda-bridge.js index cd45678..5a15968 100644 --- a/backend/newwhats/agenda-bridge.js +++ b/backend/newwhats/agenda-bridge.js @@ -12,7 +12,7 @@ import express from 'express'; import { getConfig } from './config.js'; import { resolverFeriado, feriadoNacionalNome } from './feriados.js'; -const SLOT_MIN = 30; // duração padrão do slot (min) +const SLOT_MIN = 60; // duração/espaçamento padrão do slot (1h entre atendimentos) const HORIZON_DAYS = 7; // janela padrão de busca const MAX_SLOTS = 20; // quantos slots RETORNAR (após ordenar por horário) const CANDIDATE_CAP = 240; // teto de GERAÇÃO (clínica + salas competem por horário) @@ -142,6 +142,7 @@ export function createAgendaBridge(pool) { const duration = Math.max(10, parseInt(req.query.duration, 10) || SLOT_MIN); const days = Math.min(30, Math.max(1, parseInt(req.query.days, 10) || HORIZON_DAYS)); const from = req.query.date ? new Date(`${req.query.date}T00:00:00`) : new Date(); + const periodo = req.query.periodo ? String(req.query.periodo).toLowerCase() : null; // manha|tarde try { // Dentistas no escopo da clínica. @@ -243,8 +244,11 @@ export function createAgendaBridge(pool) { } catch { /* sala_reservas pode não existir */ } } - slots.sort((a, b) => a.start.localeCompare(b.start)); - res.json({ slots: slots.slice(0, MAX_SLOTS) }); + let out = slots.sort((a, b) => a.start.localeCompare(b.start)); + // Filtro manhã/tarde (a Secretária pergunta o período antes de oferecer). + if (periodo === 'manha' || periodo === 'manhã') out = out.filter((s) => parseInt(s.start.slice(11, 13), 10) < 12); + else if (periodo === 'tarde') out = out.filter((s) => parseInt(s.start.slice(11, 13), 10) >= 12); + res.json({ slots: out.slice(0, MAX_SLOTS) }); } catch (e) { res.status(500).json({ error: e.message }); }