From 5030ae38d011d9968d49e88c6a52263733d6beb6 Mon Sep 17 00:00:00 2001 From: M-Gabrielly Date: Thu, 25 Sep 2025 11:10:20 -0300 Subject: [PATCH 1/2] " " --- .../app/(main-routes)/consultas/page.tsx | 20 +++++++------------ .../app/(main-routes)/doutores/page.tsx | 8 ++++---- .../forms/calendar-registration-form.tsx | 11 ++-------- .../forms/doctor-registration-form.tsx | 15 ++++---------- 4 files changed, 17 insertions(+), 37 deletions(-) diff --git a/susconecta/app/(main-routes)/consultas/page.tsx b/susconecta/app/(main-routes)/consultas/page.tsx index 68e07d3..c55cdac 100644 --- a/susconecta/app/(main-routes)/consultas/page.tsx +++ b/susconecta/app/(main-routes)/consultas/page.tsx @@ -56,7 +56,7 @@ import { import { mockAppointments, mockProfessionals } from "@/lib/mocks/appointment-mocks"; import { CalendarRegistrationForm } from "@/components/forms/calendar-registration-form"; -// --- Helper Functions --- + const formatDate = (date: string | Date) => { if (!date) return ""; return new Date(date).toLocaleDateString("pt-BR", { @@ -73,14 +73,12 @@ const capitalize = (s: string) => { return s.charAt(0).toUpperCase() + s.slice(1); }; -// --- Main Page Component --- export default function ConsultasPage() { const [appointments, setAppointments] = useState(mockAppointments); const [showForm, setShowForm] = useState(false); const [editingAppointment, setEditingAppointment] = useState(null); const [viewingAppointment, setViewingAppointment] = useState(null); - // Converte o objeto da consulta para o formato esperado pelo formulário const mapAppointmentToFormData = (appointment: any) => { const professional = mockProfessionals.find(p => p.id === appointment.professional); const appointmentDate = new Date(appointment.time); @@ -89,14 +87,12 @@ export default function ConsultasPage() { id: appointment.id, patientName: appointment.patient, professionalName: professional ? professional.name : '', - appointmentDate: appointmentDate.toISOString().split('T')[0], // Formato YYYY-MM-DD - startTime: appointmentDate.toTimeString().split(' ')[0].substring(0, 5), // Formato HH:MM + appointmentDate: appointmentDate.toISOString().split('T')[0], + startTime: appointmentDate.toTimeString().split(' ')[0].substring(0, 5), endTime: new Date(appointmentDate.getTime() + appointment.duration * 60000).toTimeString().split(' ')[0].substring(0, 5), status: appointment.status, appointmentType: appointment.type, notes: appointment.notes, - // Adicione outros campos do paciente aqui se necessário (cpf, rg, etc.) - // Eles não existem no mock de agendamento, então virão vazios cpf: '', rg: '', birthDate: '', @@ -129,24 +125,22 @@ export default function ConsultasPage() { }; const handleSave = (formData: any) => { - // Como o formulário edita campos que não estão na tabela, - // precisamos mapear de volta para o formato original do agendamento. - // Para a simulação, vamos atualizar apenas os campos que existem no mock. + const updatedAppointment = { id: formData.id, patient: formData.patientName, time: new Date(`${formData.appointmentDate}T${formData.startTime}`).toISOString(), - duration: 30, // Duração não está no form, então mantemos um valor fixo + duration: 30, type: formData.appointmentType as any, status: formData.status as any, - professional: appointments.find(a => a.id === formData.id)?.professional || '', // Mantém o ID do profissional + professional: appointments.find(a => a.id === formData.id)?.professional || '', notes: formData.notes, }; setAppointments(prev => prev.map(a => a.id === updatedAppointment.id ? updatedAppointment : a) ); - handleCancel(); // Fecha o formulário + handleCancel(); }; if (showForm && editingAppointment) { diff --git a/susconecta/app/(main-routes)/doutores/page.tsx b/susconecta/app/(main-routes)/doutores/page.tsx index 501e40d..588e7f9 100644 --- a/susconecta/app/(main-routes)/doutores/page.tsx +++ b/susconecta/app/(main-routes)/doutores/page.tsx @@ -11,7 +11,7 @@ import { MoreHorizontal, Plus, Search, Edit, Trash2, ArrowLeft, Eye } from "luci import { Badge } from "@/components/ui/badge"; import { DoctorRegistrationForm } from "@/components/forms/doctor-registration-form"; -// >>> IMPORTES DA API <<< + import { listarMedicos, excluirMedico, Medico } from "@/lib/api"; export default function DoutoresPage() { @@ -22,7 +22,7 @@ export default function DoutoresPage() { const [editingId, setEditingId] = useState(null); const [viewingDoctor, setViewingDoctor] = useState(null); - // Carrega da API + async function load() { setLoading(true); try { @@ -62,14 +62,14 @@ export default function DoutoresPage() { setViewingDoctor(doctor); } - // Excluir via API e recarregar + async function handleDelete(id: string) { if (!confirm("Excluir este médico?")) return; await excluirMedico(id); await load(); } - // Após salvar/criar/editar no form, fecha e recarrega + async function handleSaved() { setShowForm(false); await load(); diff --git a/susconecta/components/forms/calendar-registration-form.tsx b/susconecta/components/forms/calendar-registration-form.tsx index 692517a..6974df0 100644 --- a/susconecta/components/forms/calendar-registration-form.tsx +++ b/susconecta/components/forms/calendar-registration-form.tsx @@ -7,15 +7,10 @@ import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Calendar, Search, ChevronDown, Upload, FileDown, Tag } from "lucide-react"; -// Este é um formulário genérico para Criar e Editar um agendamento. -// Ele não tem Header ou Footer, apenas o conteúdo do formulário em si. - export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any) { const [formData, setFormData] = useState(initialData || {}); useEffect(() => { - // Se os dados iniciais mudarem (ex: usuário clica em outro item para editar), - // atualizamos o estado do formulário. setFormData(initialData || {}); }, [initialData]); @@ -31,7 +26,6 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any) return (
- {/* ==== INFORMAÇÕES DO PACIENTE ==== */}

Informações do paciente

@@ -40,7 +34,7 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any)
- {/* ==== INFORMAÇÕES DO ATENDIMENTO ==== */} + {}

Informações do atendimento

@@ -137,7 +131,6 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any)
- {/* Botões de Ação */}
diff --git a/susconecta/components/forms/doctor-registration-form.tsx b/susconecta/components/forms/doctor-registration-form.tsx index a137dad..caeef2e 100644 --- a/susconecta/components/forms/doctor-registration-form.tsx +++ b/susconecta/components/forms/doctor-registration-form.tsx @@ -24,9 +24,7 @@ import { MedicoInput, } from "@/lib/api"; -import { buscarCepAPI } from "@/lib/api"; // use o seu já existente - -// Mock data and types since API is not used for now +import { buscarCepAPI } from "@/lib/api"; type FormacaoAcademica = { instituicao: string; @@ -179,7 +177,6 @@ export function DoctorRegistrationForm({ if (mode === "edit" && doctorId) { const medico = await buscarMedicoPorId(doctorId); if (!alive) return; - // mapeia API -> estado do formulário setForm({ photo: null, nome: medico.nome ?? "", @@ -188,7 +185,7 @@ export function DoctorRegistrationForm({ estado_crm: medico.estado_crm ?? "", rqe: medico.rqe ?? "", formacao_academica: medico.formacao_academica ?? [], - curriculo: null, // se a API devolver URL, você pode exibir ao lado + curriculo: null, especialidade: medico.especialidade ?? "", cpf: medico.cpf ?? "", rg: medico.rg ?? "", @@ -213,7 +210,7 @@ export function DoctorRegistrationForm({ valor_consulta: medico.valor_consulta ? String(medico.valor_consulta) : "", }); - // (Opcional) listar anexos que já existem no servidor + try { const list = await listarAnexosMedico(doctorId); setServerAnexos(list ?? []); @@ -320,7 +317,6 @@ export function DoctorRegistrationForm({ setErrors((e) => ({ ...e, submit: "" })); try { - // monta o payload esperado pela API const payload: MedicoInput = { nome: form.nome, nome_social: form.nome_social || null, @@ -336,7 +332,7 @@ export function DoctorRegistrationForm({ estado_crm: form.estado_crm || null, rqe: form.rqe || null, formacao_academica: form.formacao_academica ?? [], - curriculo_url: null, // se quiser, suba arquivo do currículo num endpoint próprio e salve a URL aqui + curriculo_url: null, especialidade: form.especialidade, observacoes: form.observacoes || null, tipo_vinculo: form.tipo_vinculo || null, @@ -345,14 +341,12 @@ export function DoctorRegistrationForm({ valor_consulta: form.valor_consulta || null, }; - // cria ou atualiza const saved = mode === "create" ? await criarMedico(payload) : await atualizarMedico(doctorId as number, payload); const medicoId = saved.id; - // foto (opcional) if (form.photo) { try { await uploadFotoMedico(medicoId, form.photo); @@ -361,7 +355,6 @@ export function DoctorRegistrationForm({ } } - // anexos locais (opcional) if (form.anexos?.length) { for (const f of form.anexos) { try { From 956a8ff0163efcfd62f171177048ae314654bfb6 Mon Sep 17 00:00:00 2001 From: M-Gabrielly Date: Thu, 25 Sep 2025 14:58:34 -0300 Subject: [PATCH 2/2] fix(pages): Fix imports and type errors in agenda and patients - Fixes the form import in the scheduling page. - Adds optional chaining (?.) for safe accessto the patient's address. --- susconecta/app/(main-routes)/pacientes/page.tsx | 2 +- susconecta/app/agenda/page.tsx | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/susconecta/app/(main-routes)/pacientes/page.tsx b/susconecta/app/(main-routes)/pacientes/page.tsx index 3f2d75f..d4a25ff 100644 --- a/susconecta/app/(main-routes)/pacientes/page.tsx +++ b/susconecta/app/(main-routes)/pacientes/page.tsx @@ -276,7 +276,7 @@ export default function PacientesPage() {
- {`${viewingPatient.endereco.logradouro}, ${viewingPatient.endereco.numero} - ${viewingPatient.endereco.bairro}, ${viewingPatient.endereco.cidade} - ${viewingPatient.endereco.estado}`} + {`${viewingPatient.endereco?.logradouro || ''}, ${viewingPatient.endereco?.numero || ''} - ${viewingPatient.endereco?.bairro || ''}, ${viewingPatient.endereco?.cidade || ''} - ${viewingPatient.endereco?.estado || ''}`}
diff --git a/susconecta/app/agenda/page.tsx b/susconecta/app/agenda/page.tsx index 7c6fabb..e639578 100644 --- a/susconecta/app/agenda/page.tsx +++ b/susconecta/app/agenda/page.tsx @@ -1,7 +1,7 @@ "use client"; import { useRouter } from "next/navigation"; -import { AppointmentForm } from "@/components/forms/appointment-form"; +import { CalendarRegistrationForm } from "@/components/forms/calendar-registration-form"; import HeaderAgenda from "@/components/agenda/HeaderAgenda"; import FooterAgenda from "@/components/agenda/FooterAgenda"; @@ -10,23 +10,22 @@ export default function NovoAgendamentoPage() { const handleSave = (data: any) => { console.log("Salvando novo agendamento...", data); - // Aqui viria a chamada da API para criar um novo agendamento alert("Novo agendamento salvo (simulado)!"); - router.push("/consultas"); // Volta para a lista após salvar + router.push("/consultas"); }; const handleCancel = () => { - router.back(); // Simplesmente volta para a página anterior + router.back(); }; return (
-