"use client"; import React, { useState, useRef } from "react"; import SignatureCanvas from "react-signature-canvas"; import ReactQuill from "react-quill"; import "react-quill/dist/quill.snow.css"; import Link from "next/link"; import ProtectedRoute from "@/components/ProtectedRoute"; import { useAuth } from "@/hooks/useAuth"; import { buscarPacientes } from "@/lib/api"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Avatar, AvatarImage, AvatarFallback } from "@/components/ui/avatar" import { User, FolderOpen, X, Users, MessageSquare, ClipboardList, Plus, Edit, Trash2, ChevronLeft, ChevronRight, Clock, FileCheck, Upload, Download, Eye, History, Stethoscope, Pill, Activity, Search } from "lucide-react" import { Calendar as CalendarIcon, FileText, Settings } from "lucide-react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import dayGridPlugin from "@fullcalendar/daygrid"; import timeGridPlugin from "@fullcalendar/timegrid"; import interactionPlugin from "@fullcalendar/interaction"; import ptBrLocale from "@fullcalendar/core/locales/pt-br"; const FullCalendar = dynamic(() => import("@fullcalendar/react"), { ssr: false, }); const pacientes = [ { nome: "Ana Souza", cpf: "123.456.789-00", idade: 42, statusLaudo: "Finalizado" }, { nome: "Bruno Lima", cpf: "987.654.321-00", idade: 33, statusLaudo: "Pendente" }, { nome: "Carla Menezes", cpf: "111.222.333-44", idade: 67, statusLaudo: "Rascunho" }, ]; const medico = { nome: "Dr. Carlos Andrade", identificacao: "CRM 000000 • Cardiologia e Dermatologia", fotoUrl: "", } const colorsByType = { Rotina: "#4dabf7", Cardiologia: "#f76c6c", Otorrino: "#f7b84d", Pediatria: "#6cf78b", Dermatologia: "#9b59b6", Oftalmologia: "#2ecc71" }; const ProfissionalPage = () => { const { logout, user } = useAuth(); const [activeSection, setActiveSection] = useState('calendario'); const [pacienteSelecionado, setPacienteSelecionado] = useState(null); // Estados para o perfil do médico const [isEditingProfile, setIsEditingProfile] = useState(false); const [profileData, setProfileData] = useState({ nome: "Dr. Carlos Andrade", email: user?.email || "carlos.andrade@hospital.com", telefone: "(11) 99999-9999", endereco: "Rua das Flores, 123 - Centro", cidade: "São Paulo", cep: "01234-567", crm: "CRM 000000", especialidade: "Cardiologia e Dermatologia", biografia: "Médico especialista em cardiologia e dermatologia com mais de 15 anos de experiência em tratamentos clínicos e cirúrgicos." }); // Estados para relatórios médicos const [relatorioMedico, setRelatorioMedico] = useState({ pacienteNome: "", pacienteCpf: "", pacienteIdade: "", profissionalNome: medico.nome, profissionalCrm: medico.identificacao, motivoRelatorio: "", historicoClinico: "", sinaisSintomas: "", examesRealizados: "", resultadosExames: "", diagnosticos: "", prognostico: "", tratamentosRealizados: "", recomendacoes: "", dataRelatorio: new Date().toISOString().split('T')[0] }); const [relatoriosMedicos, setRelatoriosMedicos] = useState([]); const [editandoRelatorio, setEditandoRelatorio] = useState(null); // Estados para funcionalidades do prontuário const [consultasRegistradas, setConsultasRegistradas] = useState([]); const [historicoMedico, setHistoricoMedico] = useState([]); const [prescricoesMedicas, setPrescricoesMedicas] = useState([]); const [examesSolicitados, setExamesSolicitados] = useState([]); const [diagnosticos, setDiagnosticos] = useState([]); const [evolucaoQuadro, setEvolucaoQuadro] = useState([]); const [anexos, setAnexos] = useState([]); const [abaProntuarioAtiva, setAbaProntuarioAtiva] = useState('nova-consulta'); // Estados para campos principais da consulta const [consultaAtual, setConsultaAtual] = useState({ dataConsulta: new Date().toISOString().split('T')[0], anamnese: "", exameFisico: "", hipotesesDiagnosticas: "", condutaMedica: "", prescricoes: "", retornoAgendado: "", cid10: "" }); const [events, setEvents] = useState([ { id: 1, title: "Ana Souza", type: "Cardiologia", time: "09:00", date: new Date().toISOString().split('T')[0], pacienteId: "123.456.789-00", color: colorsByType.Cardiologia }, { id: 2, title: "Bruno Lima", type: "Cardiologia", time: "10:30", date: new Date().toISOString().split('T')[0], pacienteId: "987.654.321-00", color: colorsByType.Cardiologia }, { id: 3, title: "Carla Menezes", type: "Dermatologia", time: "14:00", date: new Date().toISOString().split('T')[0], pacienteId: "111.222.333-44", color: colorsByType.Dermatologia } ]); const [editingEvent, setEditingEvent] = useState(null); const [showPopup, setShowPopup] = useState(false); const [showActionModal, setShowActionModal] = useState(false); const [step, setStep] = useState(1); const [newEvent, setNewEvent] = useState({ title: "", type: "", time: "", pacienteId: "" }); const [selectedDate, setSelectedDate] = useState(null); const [selectedEvent, setSelectedEvent] = useState(null); const [currentCalendarDate, setCurrentCalendarDate] = useState(new Date()); // Estados para o gerenciamento de laudos const [laudosData, setLaudosData] = useState([ { id: "30648642", data: "23/07/2025", preco: "25/07/2025", recipient: "Ana Souza", execSolicitante: "Dr. Carlos Andrade", exameTipo: "Avaliação Cardiológica Completa", status: "Entregue", cid: "I25.1", diagnostico: "Doença aterosclerótica do coração com angina de peito", conclusao: "Paciente apresenta quadro de doença arterial coronariana estável. Recomendado tratamento medicamentoso e acompanhamento regular.", conteudo: `**HISTÓRIA CLÍNICA:** Paciente do sexo feminino, 42 anos, procurou atendimento devido a episódios de dor torácica aos esforços, com duração de aproximadamente 5 minutos, que melhora com repouso. Relata também dispneia aos médios esforços e palpitações ocasionais. **ANTECEDENTES:** - Hipertensão arterial sistêmica há 8 anos - Dislipidemia - Histórico familiar de doença arterial coronariana (pai) - Sedentarismo **EXAME FÍSICO:** - PA: 145/90 mmHg - FC: 76 bpm - Peso: 68 kg, Altura: 1,62 m, IMC: 25,9 kg/m² - Ausculta cardíaca: bulhas normofonéticas, sem sopros - Ausculta pulmonar: murmúrio vesicular presente bilateralmente **EXAMES COMPLEMENTARES:** - ECG: ritmo sinusal, sem alterações isquêmicas - Ecocardiograma: função sistólica preservada (FEVE: 65%), sem alterações segmentares - Teste ergométrico: positivo para isquemia miocárdica **CONDUTA:** - Otimização do tratamento anti-hipertensivo - Estatina para controle da dislipidemia - Antiagregante plaquetário - Orientações sobre estilo de vida - Retorno em 30 dias` }, { id: "30645947", data: "24/07/2025", preco: "25/07/2025", recipient: "Bruno Lima", execSolicitante: "Dr. Carlos Andrade", exameTipo: "Avaliação Dermatológica - Lesões Pigmentadas", status: "Entregue", cid: "D22.9", diagnostico: "Nevo melanocítico benigno", conclusao: "Lesões pigmentadas benignas. Recomendado acompanhamento dermatológico anual e uso de protetor solar.", conteudo: `**HISTÓRIA CLÍNICA:** Paciente masculino, 33 anos, comparece para avaliação de múltiplas lesões pigmentadas pelo corpo, algumas com crescimento recente. Nega sintomas como prurido, sangramento ou mudanças de coloração. Histórico de exposição solar intensa durante a infância e adolescência. **ANTECEDENTES:** - Fototipo II (pele clara, queima facilmente) - Múltiplas queimaduras solares na infância - Histórico familiar negativo para melanoma - Uso irregular de protetor solar **EXAME FÍSICO:** **Dermatoscopia realizada em 12 lesões:** *Lesão dorso (2cm superior ao ombro direito):* - Mácula acastanhada, 4mm, bordas regulares - Padrão dermatoscópico: rede pigmentar homogênea - Score ABCD: 2,5 (baixo risco) *Lesão região escapular esquerda:* - Pápula pigmentada, 3mm, simétrica - Padrão globular homogêneo - Sem sinais de malignidade *Demais lesões:* - Características benignas similares - Ausência de critérios de malignidade - Padrões dermatoscópicos típicos de nevos **CONDUTA:** - Mapeamento corporal documentado - Fotoproteção rigorosa (FPS 60+) - Autoexame mensal orientado - Reavaliação dermatoscópica em 12 meses - Biópsia desnecessária no momento atual` }, { id: "30649123", data: "25/07/2025", preco: "26/07/2025", recipient: "Carla Menezes", execSolicitante: "Dr. Carlos Andrade", exameTipo: "Avaliação Cardiológica - Insuficiência Cardíaca", status: "Rascunho", cid: "I50.9", diagnostico: "Insuficiência cardíaca não especificada", conclusao: "Insuficiência cardíaca classe funcional II. Necessário ajuste da medicação e monitorização rigorosa.", conteudo: `**HISTÓRIA CLÍNICA:** Paciente feminina, 67 anos, com queixa de dispneia progressiva aos esforços há 6 meses, associada a edema de membros inferiores e fadiga. Nega dor torácica, palpitações ou síncope. **ANTECEDENTES:** - Hipertensão arterial há 15 anos - Diabetes mellitus tipo 2 há 10 anos - Infarto agudo do miocárdio há 3 anos - Tabagismo pregresso (parou há 5 anos) **EXAME FÍSICO:** - PA: 130/80 mmHg - FC: 88 bpm (irregular) - Edema ++/4+ em MMII - Estase jugular a 45° - Ausculta cardíaca: B3 audível, sopro sistólico 2+/6+ - Crepitações bibasais **EXAMES:** - BNP: 850 pg/ml (elevado) - Ecocardiograma: FEVE 35%, dilatação de VE - RX tórax: cardiomegalia, congestão pulmonar **MEDICAÇÕES EM USO:** - Enalapril 10mg 2x/dia - Carvedilol 6,25mg 2x/dia - Furosemida 40mg/dia - Metformina 850mg 2x/dia **CONDUTA PROPOSTA:** - Ajuste das medicações para IC - Restrição de sódio (<2g/dia) - Controle rigoroso de peso diário - Retorno em 15 dias` } ]); const [filtroStatus, setFiltroStatus] = useState("todos"); const [buscarTexto, setBuscarTexto] = useState(""); const [dataInicio, setDataInicio] = useState(""); const [dataFim, setDataFim] = useState(""); const [laudoAtivo, setLaudoAtivo] = useState(null); const [modoEdicao, setModoEdicao] = useState<'novo' | 'editar' | null>(null); // Estados para o editor de laudo const [editorLaudo, setEditorLaudo] = useState({ pacienteId: "", pacienteNome: "", pacienteCpf: "", pacienteIdade: "", cid: "", diagnostico: "", conclusao: "", conteudo: "", imagens: [] as string[], pdfAnexos: [] as string[], incluirData: true, incluirAssinatura: true, status: "Rascunho" }); const [assinaturaLaudo, setAssinaturaLaudo] = useState(null); const [previewLaudo, setPreviewLaudo] = useState(false); const [abaAtiva, setAbaAtiva] = useState<'editor' | 'imagens' | 'anexos' | 'preview'>('editor'); const [laudoVisualizacao, setLaudoVisualizacao] = useState(null); const sigCanvasLaudoRef = useRef(null); // Modelos e frases prontas const modelosTexto = { "Exame Normal": "O exame realizado apresentou parâmetros dentro da normalidade, sem alterações significativas detectadas.", "Acompanhamento": "Recomenda-se acompanhamento médico regular para monitoramento da evolução do quadro clínico.", "Alterações Leves": "Foram observadas alterações leves que requerem acompanhamento, sem indicação de intervenção imediata.", "Urgente": "Os achados indicam necessidade de avaliação médica urgente e início de tratamento adequado." }; const camposDinamicos = [ { label: "Nome do Paciente", value: "{NOME_PACIENTE}" }, { label: "Idade", value: "{IDADE}" }, { label: "CPF", value: "{CPF}" }, { label: "Data Atual", value: "{DATA_ATUAL}" }, { label: "CID", value: "{CID}" }, { label: "Médico", value: "{MEDICO}" } ]; const handleSave = (event: React.MouseEvent) => { event.preventDefault(); console.log("Laudo salvo!"); window.scrollTo({ top: 0, behavior: "smooth" }); }; const handleAbrirProntuario = (paciente: any) => { setPacienteSelecionado(paciente); const pacienteLaudo = document.getElementById('pacienteLaudo') as HTMLInputElement; if (pacienteLaudo) pacienteLaudo.value = paciente.nome; const destinatario = document.getElementById('destinatario') as HTMLInputElement; if (destinatario) destinatario.value = `${paciente.nome} - ${paciente.cpf}`; const prontuarioSection = document.getElementById('prontuario-paciente'); if (prontuarioSection) { prontuarioSection.scrollIntoView({ behavior: 'smooth' }); } }; const handleFecharProntuario = () => { setPacienteSelecionado(null); }; const navigateDate = (direction: 'prev' | 'next') => { const newDate = new Date(currentCalendarDate); newDate.setDate(newDate.getDate() + (direction === 'next' ? 1 : -1)); setCurrentCalendarDate(newDate); }; const goToToday = () => { setCurrentCalendarDate(new Date()); }; const formatDate = (date: Date) => { return date.toLocaleDateString('pt-BR', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }); }; // Filtrar eventos do dia atual const getTodayEvents = () => { const today = currentCalendarDate.toISOString().split('T')[0]; return events .filter(event => event.date === today) .sort((a, b) => a.time.localeCompare(b.time)); }; const getStatusColor = (type: string) => { return colorsByType[type as keyof typeof colorsByType] || "#4dabf7"; }; // Funções para o perfil const handleProfileChange = (field: string, value: string) => { setProfileData(prev => ({ ...prev, [field]: value })); }; const handleSaveProfile = () => { setIsEditingProfile(false); alert('Perfil atualizado com sucesso!'); }; const handleCancelEdit = () => { setIsEditingProfile(false); }; // Funções para relatórios médicos const handleRelatorioChange = (field: string, value: string) => { setRelatorioMedico(prev => ({ ...prev, [field]: value })); }; const handleSalvarRelatorio = () => { if (!relatorioMedico.pacienteNome || !relatorioMedico.motivoRelatorio) { alert('Por favor, preencha pelo menos o nome do paciente e o motivo do relatório.'); return; } const novoRelatorio = { ...relatorioMedico, id: Date.now(), dataGeracao: new Date().toLocaleString() }; if (editandoRelatorio) { setRelatoriosMedicos(prev => prev.map(rel => rel.id === editandoRelatorio.id ? novoRelatorio : rel) ); setEditandoRelatorio(null); alert('Relatório médico atualizado com sucesso!'); } else { setRelatoriosMedicos(prev => [novoRelatorio, ...prev]); alert('Relatório médico salvo com sucesso!'); } // Limpar formulário setRelatorioMedico({ pacienteNome: "", pacienteCpf: "", pacienteIdade: "", profissionalNome: medico.nome, profissionalCrm: medico.identificacao, motivoRelatorio: "", historicoClinico: "", sinaisSintomas: "", examesRealizados: "", resultadosExames: "", diagnosticos: "", prognostico: "", tratamentosRealizados: "", recomendacoes: "", dataRelatorio: new Date().toISOString().split('T')[0] }); }; const handleEditarRelatorio = (relatorio: any) => { setRelatorioMedico(relatorio); setEditandoRelatorio(relatorio); }; const handleExcluirRelatorio = (id: number) => { if (confirm('Tem certeza que deseja excluir este relatório médico?')) { setRelatoriosMedicos(prev => prev.filter(rel => rel.id !== id)); alert('Relatório médico excluído com sucesso!'); } }; const handleCancelarEdicaoRelatorio = () => { setEditandoRelatorio(null); setRelatorioMedico({ pacienteNome: "", pacienteCpf: "", pacienteIdade: "", profissionalNome: medico.nome, profissionalCrm: medico.identificacao, motivoRelatorio: "", historicoClinico: "", sinaisSintomas: "", examesRealizados: "", resultadosExames: "", diagnosticos: "", prognostico: "", tratamentosRealizados: "", recomendacoes: "", dataRelatorio: new Date().toISOString().split('T')[0] }); }; const handleDateClick = (arg: any) => { setSelectedDate(arg.dateStr); setNewEvent({ title: "", type: "", time: "", pacienteId: "" }); setStep(1); setEditingEvent(null); setShowPopup(true); }; const handleAddEvent = () => { const paciente = pacientes.find(p => p.nome === newEvent.title); const eventToAdd = { id: Date.now(), title: newEvent.title, type: newEvent.type, time: newEvent.time, date: selectedDate || currentCalendarDate.toISOString().split('T')[0], pacienteId: paciente ? paciente.cpf : "", color: colorsByType[newEvent.type as keyof typeof colorsByType] || "#4dabf7" }; setEvents((prev) => [...prev, eventToAdd]); setShowPopup(false); }; const handleEditEvent = () => { setEvents((prevEvents) => prevEvents.map((ev) => ev.id.toString() === editingEvent.id.toString() ? { ...ev, title: newEvent.title, type: newEvent.type, time: newEvent.time, color: colorsByType[newEvent.type as keyof typeof colorsByType] || "#4dabf7" } : ev ) ); setEditingEvent(null); setShowPopup(false); setShowActionModal(false); }; const handleNextStep = () => { if (step < 3) setStep(step + 1); else editingEvent ? handleEditEvent() : handleAddEvent(); }; const handleEventClick = (clickInfo: any) => { setSelectedEvent(clickInfo.event); setShowActionModal(true); }; const handleDeleteEvent = () => { if (!selectedEvent) return; setEvents((prevEvents) => prevEvents.filter((ev: any) => ev.id.toString() !== selectedEvent.id.toString()) ); setShowActionModal(false); }; const handleStartEdit = () => { if (!selectedEvent) return; setEditingEvent(selectedEvent); setNewEvent({ title: selectedEvent.title, type: selectedEvent.extendedProps.type, time: selectedEvent.extendedProps.time, pacienteId: selectedEvent.extendedProps.pacienteId || "" }); setStep(1); setShowActionModal(false); setShowPopup(true); }; const renderEventContent = (eventInfo: any) => { const bg = eventInfo.event.backgroundColor || eventInfo.event.extendedProps?.color || "#4dabf7"; return (
{eventInfo.event.title} {eventInfo.event.extendedProps.type} {eventInfo.event.extendedProps.time}
); }; const renderCalendarioSection = () => { const todayEvents = getTodayEvents(); return (

Agenda do Dia

{/* Navegação de Data */}

{formatDate(currentCalendarDate)}

{todayEvents.length} consulta{todayEvents.length !== 1 ? 's' : ''} agendada{todayEvents.length !== 1 ? 's' : ''}
{/* Lista de Pacientes do Dia */}
{todayEvents.length === 0 ? (

Nenhuma consulta agendada para este dia

Agenda livre para este dia

) : ( todayEvents.map((appointment) => { const paciente = pacientes.find(p => p.nome === appointment.title); return (
{appointment.title}
{paciente && (
CPF: {paciente.cpf} • {paciente.idade} anos
)}
{appointment.time}
{appointment.type}
Ver informações do paciente
); }) )}
); }; function PacientesSection({ handleAbrirProntuario, setActiveSection }) { // Estados para busca de pacientes const [buscaPaciente, setBuscaPaciente] = useState(""); const [pacientesBusca, setPacientesBusca] = useState([]); const [carregandoBusca, setCarregandoBusca] = useState(false); const [erroBusca, setErroBusca] = useState(null); // Função para buscar pacientes const handleBuscarPaciente = async () => { if (!buscaPaciente.trim()) { setPacientesBusca([]); setErroBusca(null); return; } setCarregandoBusca(true); setErroBusca(null); try { // Importa a função de busca const { buscarPacientes } = await import("@/lib/api"); const resultados = await buscarPacientes(buscaPaciente.trim()); if (resultados.length === 0) { setErroBusca("Nenhum paciente encontrado com os critérios informados."); setPacientesBusca([]); } else { // Transforma os dados da API para o formato usado no componente const pacientesFormatados = resultados.map(p => ({ nome: p.full_name || "Nome não informado", cpf: p.cpf || "CPF não informado", idade: p.birth_date ? new Date().getFullYear() - new Date(p.birth_date).getFullYear() : "N/A", statusLaudo: "Pendente", // Status padrão id: p.id })); setPacientesBusca(pacientesFormatados); setErroBusca(null); } } catch (error: any) { console.error("Erro ao buscar pacientes:", error); setErroBusca(error.message || "Erro ao buscar pacientes. Tente novamente."); setPacientesBusca([]); } finally { setCarregandoBusca(false); } }; const handleLimparBusca = () => { setBuscaPaciente(""); setPacientesBusca([]); setErroBusca(null); }; return (

Gerenciamento de Pacientes

{/* Campo de busca */}

Buscar Paciente

setBuscaPaciente(e.target.value)} onKeyDown={(e) => e.key === "Enter" && handleBuscarPaciente()} className="w-full" />
{(buscaPaciente || pacientesBusca.length > 0 || erroBusca) && ( )}
{/* Resultados da busca */} {erroBusca && (

{erroBusca}

)} {pacientesBusca.length > 0 && (

Resultados da busca ({pacientesBusca.length}):

{pacientesBusca.map((paciente, index) => (

{paciente.nome}

CPF: {paciente.cpf} • Idade: {paciente.idade} anos

))}
)}
{/* Tabela de pacientes padrão */}

Pacientes Recentes

Paciente CPF Idade Status do laudo Ações {pacientes.map((paciente) => ( {paciente.nome} {paciente.cpf} {paciente.idade} {paciente.statusLaudo}
Ver informações do paciente
))}
); }; const renderProntuarioSection = () => (

Prontuário do Paciente

{/* Informações do Paciente Selecionado */} {pacienteSelecionado && (

Dados do Paciente

Nome:

{pacienteSelecionado.nome}

CPF:

{pacienteSelecionado.cpf}

Idade:

{pacienteSelecionado.idade} anos

)} {/* Seletor de Paciente */} {!pacienteSelecionado && (

Selecionar Paciente

Escolha um paciente para visualizar o prontuário completo

{/* Cards de pacientes para seleção rápida */}

Ou selecione rapidamente:

{pacientes.map((paciente) => (
setPacienteSelecionado(paciente)} className="border rounded-lg p-4 hover:shadow-md hover:border-primary transition-all cursor-pointer group" >

{paciente.nome}

CPF: {paciente.cpf}

{paciente.idade} anos

{paciente.statusLaudo}
))}
)} {/* Tabs de Navegação do Prontuário */} {pacienteSelecionado && (
)} {/* Conteúdo das Abas */} {pacienteSelecionado && (
{abaProntuarioAtiva === 'nova-consulta' && renderNovaConsultaTab()} {abaProntuarioAtiva === 'consultas' && renderConsultasTab()} {abaProntuarioAtiva === 'historico' && renderHistoricoTab()} {abaProntuarioAtiva === 'prescricoes' && renderPrescricoesTab()} {abaProntuarioAtiva === 'exames' && renderExamesTab()} {abaProntuarioAtiva === 'diagnosticos' && renderDiagnosticosTab()} {abaProntuarioAtiva === 'evolucao' && renderEvolucaoTab()} {abaProntuarioAtiva === 'anexos' && renderAnexosTab()}
)}
); // Função para alterar campos da consulta atual const handleConsultaChange = (field: string, value: string) => { setConsultaAtual(prev => ({ ...prev, [field]: value })); }; // Função para salvar a consulta const handleSalvarConsulta = () => { if (!consultaAtual.anamnese || !consultaAtual.exameFisico) { alert('Por favor, preencha os campos que são obrigatórios.'); return; } const novaConsulta = { ...consultaAtual, id: Date.now(), paciente: pacienteSelecionado?.nome, dataCriacao: new Date().toLocaleString(), profissional: medico.nome }; setConsultasRegistradas(prev => [novaConsulta, ...prev]); setConsultaAtual({ dataConsulta: new Date().toISOString().split('T')[0], anamnese: "", exameFisico: "", hipotesesDiagnosticas: "", condutaMedica: "", prescricoes: "", retornoAgendado: "", cid10: "" }); alert('Consulta registrada com sucesso!'); }; // Funções para renderizar cada aba do prontuário const renderNovaConsultaTab = () => (

Registrar Nova Consulta

{/* Data da Consulta */}
handleConsultaChange('dataConsulta', e.target.value)} className="w-full" />
handleConsultaChange('cid10', e.target.value)} placeholder="Ex: I10, E11, etc." className="w-full" />
{/* Anamnese */}