From d975e0f5545b5e728ee00cbb9f0a2920982d5e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gustavo?= <166467972+JoaoGustavo-dev@users.noreply.github.com> Date: Fri, 3 Oct 2025 06:50:17 -0300 Subject: [PATCH] fix-laudo-editor --- susconecta/app/profissional/page.tsx | 220 +++++++++++++++++---------- 1 file changed, 138 insertions(+), 82 deletions(-) diff --git a/susconecta/app/profissional/page.tsx b/susconecta/app/profissional/page.tsx index 5f1ffce..07016a1 100644 --- a/susconecta/app/profissional/page.tsx +++ b/susconecta/app/profissional/page.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useState, useRef } from "react"; +import React, { useState, useRef, useEffect } from "react"; import SignatureCanvas from "react-signature-canvas"; import Link from "next/link"; import ProtectedRoute from "@/components/ProtectedRoute"; @@ -73,6 +73,10 @@ const ProfissionalPage = () => { const [activeSection, setActiveSection] = useState('calendario'); const [pacienteSelecionado, setPacienteSelecionado] = useState(null); + // Estados para edição de laudo + const [isEditingLaudoForPatient, setIsEditingLaudoForPatient] = useState(false); + const [patientForLaudo, setPatientForLaudo] = useState(null); + // Estados para o perfil do médico const [isEditingProfile, setIsEditingProfile] = useState(false); const [profileData, setProfileData] = useState({ @@ -199,6 +203,12 @@ const ProfissionalPage = () => { setPacienteSelecionado(null); }; + const handleEditarLaudo = (paciente: any) => { + setPatientForLaudo(paciente); + setIsEditingLaudoForPatient(true); + setActiveSection('laudos'); + }; + const navigateDate = (direction: 'prev' | 'next') => { const newDate = new Date(currentCalendarDate); @@ -553,6 +563,7 @@ const ProfissionalPage = () => {
+ @@ -688,17 +699,28 @@ const ProfissionalPage = () => {

{paciente.nome}

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

- +
+ + +
))} @@ -732,7 +754,7 @@ const ProfissionalPage = () => { +
+ Editar laudo do paciente +
+
+ @@ -1651,12 +1687,19 @@ const ProfissionalPage = () => { const renderLaudosSection = () => (
- + { + setIsEditingLaudoForPatient(false); + setPatientForLaudo(null); + }} + />
); // --- NOVO SISTEMA DE LAUDOS COMPLETO --- - function LaudoManager() { + function LaudoManager({ isEditingForPatient, selectedPatientForLaudo, onClosePatientEditor }: { isEditingForPatient?: boolean; selectedPatientForLaudo?: any; onClosePatientEditor?: () => void }) { const [pacientesDisponiveis] = useState([ { id: "95170038", nome: "Ana Souza", cpf: "123.456.789-00", idade: 42, sexo: "Feminino" }, { id: "93203056", nome: "Bruno Lima", cpf: "987.654.321-00", idade: 33, sexo: "Masculino" }, @@ -1788,6 +1831,9 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. const [isViewing, setIsViewing] = useState(false); const [isCreatingNew, setIsCreatingNew] = useState(false); + + + return (
{/* Header */} @@ -1938,18 +1984,33 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. {laudo.executante} {laudo.exame || "-"} - +
+ + +
))} @@ -1971,6 +2032,17 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. isNewLaudo={true} /> )} + + {/* Editor para Paciente Específico */} + {isEditingForPatient && selectedPatientForLaudo && ( + {})} + isNewLaudo={!selectedPatientForLaudo.conteudo} + preSelectedPatient={selectedPatientForLaudo.paciente || selectedPatientForLaudo} + /> + )}
); } @@ -2069,17 +2141,17 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. } // Editor de Laudo Avançado (para novos laudos) - function LaudoEditor({ pacientes, laudo, onClose, isNewLaudo }: { pacientes?: any[]; laudo?: any; onClose: () => void; isNewLaudo?: boolean }) { + function LaudoEditor({ pacientes, laudo, onClose, isNewLaudo, preSelectedPatient }: { pacientes?: any[]; laudo?: any; onClose: () => void; isNewLaudo?: boolean; preSelectedPatient?: any }) { const [activeTab, setActiveTab] = useState("editor"); - const [content, setContent] = useState(""); + const [content, setContent] = useState(laudo?.conteudo || ""); const [showPreview, setShowPreview] = useState(false); - const [pacienteSelecionado, setPacienteSelecionado] = useState(null); + const [pacienteSelecionado, setPacienteSelecionado] = useState(preSelectedPatient || null); const [campos, setCampos] = useState({ - cid: "", - diagnostico: "", - conclusao: "", - exame: "", - especialidade: "", + cid: laudo?.cid || "", + diagnostico: laudo?.diagnostico || "", + conclusao: laudo?.conclusao || "", + exame: laudo?.exame || "", + especialidade: laudo?.especialidade || "", mostrarData: true, mostrarAssinatura: true }); @@ -2095,6 +2167,23 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. const sigCanvasRef = useRef(null); + // Carregar dados do laudo existente quando disponível + useEffect(() => { + if (laudo && !isNewLaudo) { + setContent(laudo.conteudo || ""); + setCampos({ + cid: laudo.cid || "", + diagnostico: laudo.diagnostico || "", + conclusao: laudo.conclusao || "", + exame: laudo.exame || "", + especialidade: laudo.especialidade || "", + mostrarData: true, + mostrarAssinatura: true + }); + setPacienteSelecionado(laudo.paciente); + } + }, [laudo, isNewLaudo]); + const formatText = (type: string) => { const textarea = document.querySelector('textarea') as HTMLTextAreaElement; if (!textarea) return; @@ -2124,12 +2213,7 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. }; const insertTemplate = (template: string) => { - setContent(prev => prev ? `${prev}\n\n${template}` : template); - }; - - const insertCampo = (campo: string) => { - const placeholder = `{{${campo}}}`; - setContent(prev => prev ? `${prev} ${placeholder}` : placeholder); + setContent((prev: string) => prev ? `${prev}\n\n${template}` : template); }; const handleImageUpload = (e: React.ChangeEvent) => { @@ -2149,15 +2233,11 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. }; const processContent = (content: string) => { - const paciente = isNewLaudo ? pacienteSelecionado : laudo?.paciente; return content .replace(/\*\*(.*?)\*\*/g, '$1') .replace(/\*(.*?)\*/g, '$1') .replace(/(.*?)<\/u>/g, '$1') - .replace(/{{nome_paciente}}/g, paciente?.nome || '[NOME_PACIENTE]') - .replace(/{{idade_paciente}}/g, paciente?.idade?.toString() || '[IDADE]') - .replace(/{{sexo_paciente}}/g, paciente?.sexo || '[SEXO]') - .replace(/{{cid}}/g, campos.cid || '[CID]') + .replace(/{{sexo_paciente}}/g, pacienteSelecionado?.sexo || laudo?.paciente?.sexo || '[SEXO]') .replace(/{{diagnostico}}/g, campos.diagnostico || '[DIAGNÓSTICO]') .replace(/{{conclusao}}/g, campos.conclusao || '[CONCLUSÃO]') .replace(/\n/g, '
'); @@ -2171,7 +2251,7 @@ Nevo melanocítico benigno. Seguimento clínico recomendado.

- {isNewLaudo ? "Novo Laudo Médico" : "Editor de Laudo"} + {isNewLaudo ? "Novo Laudo Médico" : "Editar Laudo Existente"}

{isNewLaudo ? (

@@ -2179,7 +2259,7 @@ Nevo melanocítico benigno. Seguimento clínico recomendado.

) : (

- Paciente: {laudo?.paciente?.nome} | Pedido: {laudo?.id} + Paciente: {laudo?.paciente?.nome} | Pedido: {laudo?.id} | {laudo?.especialidade}

)}
@@ -2220,13 +2300,15 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. CPF: {pacienteSelecionado.cpf} | Idade: {pacienteSelecionado.idade} anos | Sexo: {pacienteSelecionado.sexo}
- + {!preSelectedPatient && ( + + )} )} @@ -2412,32 +2494,6 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. • -
- - - - {/* Templates */} @@ -2699,7 +2755,7 @@ Nevo melanocítico benigno. Seguimento clínico recomendado. Salvar Rascunho