From 78e37220b6bd42de8f08a4bdc07a5a138fa10e79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gustavo?= Date: Wed, 3 Dec 2025 18:18:00 -0300 Subject: [PATCH] fix: doctor-availabity --- .../app/(main-routes)/consultas/page.tsx | 9 ++- .../app/(main-routes)/doutores/page.tsx | 40 +++++++++++++- .../features/forms/availability-form.tsx | 55 +++++++++++++++---- 3 files changed, 87 insertions(+), 17 deletions(-) diff --git a/susconecta/app/(main-routes)/consultas/page.tsx b/susconecta/app/(main-routes)/consultas/page.tsx index ac76758..6d0ccaa 100644 --- a/susconecta/app/(main-routes)/consultas/page.tsx +++ b/susconecta/app/(main-routes)/consultas/page.tsx @@ -111,8 +111,11 @@ export default function ConsultasPage() { const baseDate = scheduledBase ? new Date(scheduledBase) : new Date(); const duration = appointment.duration_minutes ?? appointment.duration ?? 30; - // compute start and end times (HH:MM) - const appointmentDateStr = baseDate.toISOString().split("T")[0]; + // compute start and end times (HH:MM) and date using local time to avoid timezone issues + const year = baseDate.getFullYear(); + const month = String(baseDate.getMonth() + 1).padStart(2, '0'); + const day = String(baseDate.getDate()).padStart(2, '0'); + const appointmentDateStr = `${year}-${month}-${day}`; const startTime = `${String(baseDate.getHours()).padStart(2, '0')}:${String(baseDate.getMinutes()).padStart(2, '0')}`; const endDate = new Date(baseDate.getTime() + duration * 60000); const endTime = `${String(endDate.getHours()).padStart(2, '0')}:${String(endDate.getMinutes()).padStart(2, '0')}`; @@ -811,7 +814,7 @@ export default function ConsultasPage() {
- {capitalize(viewingAppointment?.type || "")} + {capitalize(viewingAppointment?.appointment_type || viewingAppointment?.type || "")}
diff --git a/susconecta/app/(main-routes)/doutores/page.tsx b/susconecta/app/(main-routes)/doutores/page.tsx index 1b6098d..72373f0 100644 --- a/susconecta/app/(main-routes)/doutores/page.tsx +++ b/susconecta/app/(main-routes)/doutores/page.tsx @@ -131,6 +131,7 @@ export default function DoutoresPage() { const [availabilityOpenFor, setAvailabilityOpenFor] = useState(null); const [availabilityViewingFor, setAvailabilityViewingFor] = useState(null); const [availabilities, setAvailabilities] = useState([]); + const [availabilitiesForCreate, setAvailabilitiesForCreate] = useState([]); const [availLoading, setAvailLoading] = useState(false); const [editingAvailability, setEditingAvailability] = useState(null); const [exceptions, setExceptions] = useState([]); @@ -633,7 +634,17 @@ export default function DoutoresPage() { Ver pacientes atribuídos - setAvailabilityOpenFor(doctor)}> + { + try { + const list = await listarDisponibilidades({ doctorId: doctor.id, active: true }); + setAvailabilitiesForCreate(list || []); + setAvailabilityOpenFor(doctor); + } catch (e) { + console.warn('Erro ao carregar disponibilidades:', e); + setAvailabilitiesForCreate([]); + setAvailabilityOpenFor(doctor); + } + }}> Criar disponibilidade @@ -869,6 +880,7 @@ export default function DoutoresPage() { open={!!availabilityOpenFor} onOpenChange={(open) => { if (!open) setAvailabilityOpenFor(null); }} doctorId={availabilityOpenFor?.id} + existingAvailabilities={availabilitiesForCreate} onSaved={(saved) => { console.log('Disponibilidade salva', saved); setAvailabilityOpenFor(null); /* optionally reload list */ reloadAvailabilities(availabilityOpenFor?.id); }} /> )} @@ -890,6 +902,7 @@ export default function DoutoresPage() { doctorId={editingAvailability?.doctor_id ?? availabilityViewingFor?.id} availability={editingAvailability} mode="edit" + existingAvailabilities={availabilities} onSaved={(saved) => { console.log('Disponibilidade atualizada', saved); setEditingAvailability(null); reloadAvailabilities(editingAvailability?.doctor_id ?? availabilityViewingFor?.id); }} /> )} @@ -910,14 +923,35 @@ export default function DoutoresPage() {
Carregando disponibilidades…
) : availabilities && availabilities.length ? (
- {availabilities.map((a) => ( + {availabilities + .sort((a, b) => { + // Define a ordem dos dias da semana (Segunda a Domingo) + const weekdayOrder: Record = { + 'segunda': 1, 'segunda-feira': 1, 'mon': 1, 'monday': 1, '1': 1, + 'terca': 2, 'terça': 2, 'terça-feira': 2, 'tue': 2, 'tuesday': 2, '2': 2, + 'quarta': 3, 'quarta-feira': 3, 'wed': 3, 'wednesday': 3, '3': 3, + 'quinta': 4, 'quinta-feira': 4, 'thu': 4, 'thursday': 4, '4': 4, + 'sexta': 5, 'sexta-feira': 5, 'fri': 5, 'friday': 5, '5': 5, + 'sabado': 6, 'sábado': 6, 'sat': 6, 'saturday': 6, '6': 6, + 'domingo': 7, 'dom': 7, 'sun': 7, 'sunday': 7, '0': 7, '7': 7 + }; + + const getWeekdayOrder = (weekday: any) => { + if (typeof weekday === 'number') return weekday === 0 ? 7 : weekday; + const normalized = String(weekday).toLowerCase().normalize('NFD').replace(/\p{Diacritic}/gu, ''); + return weekdayOrder[normalized] || 999; + }; + + return getWeekdayOrder(a.weekday) - getWeekdayOrder(b.weekday); + }) + .map((a) => (
{translateWeekday(a.weekday)} • {a.start_time} — {a.end_time}
Duração: {a.slot_minutes} min • Tipo: {a.appointment_type || '—'} • {a.active ? 'Ativa' : 'Inativa'}
- + - +