-
Laudo Médico
+ const renderEditorLaudo = () => {
+ return (
+
+ {/* Cabeçalho do Editor */}
+
+
+
setModoEdicao(null)}
+ className="cursor-pointer"
+ >
+
+ Voltar
+
+
+
+ {modoEdicao === 'novo' ? 'Novo Laudo' : 'Editar Laudo'}
+
+
+ Este editor permite escrever relatórios de forma livre, com formatação de texto rica.
+
+
+
- {!pacienteSelecionado ? (
-
-
-
Selecionar Paciente
-
Escolha um paciente para visualizar o prontuário completo
-
-
Escolha o paciente:
-
-
{
- const p = pacientes.find(p => p.cpf === e.target.value);
- if (p) handleSelectPaciente(p);
- }}
- defaultValue=""
+
+ setModoEdicao(null)}
+ className="cursor-pointer"
+ >
+ Cancelar
+
+ {
+ setEditorLaudo(prev => ({ ...prev, status: "Rascunho" }));
+ alert("Laudo salvo como rascunho!");
+ }}
+ className="cursor-pointer"
+ >
+ Salvar Rascunho
+
+ {
+ setEditorLaudo(prev => ({ ...prev, status: "Entregue" }));
+ alert("Laudo liberado com sucesso!");
+ setModoEdicao(null);
+ }}
+ className="cursor-pointer"
+ >
+ Liberar Laudo
+
+
+
+
+ {/* Tabs do Editor */}
+
+
+
+ {[
+ { id: 'editor', nome: 'Editor', icone: FileText },
+ { id: 'imagens', nome: 'Imagens', icone: Upload },
+ { id: 'anexos', nome: 'Anexos PDF', icone: FileText },
+ { id: 'preview', nome: 'Pré-visualização', icone: Eye }
+ ].map((aba) => {
+ const Icone = aba.icone;
+ return (
+ setAbaAtiva(aba.id as any)}
+ className={`py-4 px-1 border-b-2 font-medium text-sm flex items-center gap-2 transition-colors cursor-pointer ${
+ abaAtiva === aba.id
+ ? 'border-primary text-primary'
+ : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300'
+ }`}
>
- Selecione um paciente...
- {pacientes.map(p => (
- {p.nome} - {p.cpf}
- ))}
-
-
-
-
-
+
+ {aba.nome}
+
+ );
+ })}
+
+
+
+
+ {abaAtiva === 'editor' && renderAbaEditor()}
+ {abaAtiva === 'imagens' && renderAbaImagens()}
+ {abaAtiva === 'anexos' && renderAbaAnexos()}
+ {abaAtiva === 'preview' && renderAbaPreview()}
+
+
+
+ );
+ };
+
+ const renderAbaEditor = () => (
+
+ {/* Seleção de Paciente */}
+
+
+
Paciente *
+ {modoEdicao === 'editar' ? (
+ // Modo edição: mostrar dados fixos do paciente
+
+
+
+
{editorLaudo.pacienteNome || laudoAtivo?.recipient}
+
{editorLaudo.pacienteCpf}
) : (
-
-
-
{pacienteSelecionado.nome}
-
CPF: {pacienteSelecionado.cpf}
-
Idade: {pacienteSelecionado.idade}
-
Sexo: {pacienteSelecionado.sexo}
-
-
Trocar paciente
-
+ // Modo novo: mostrar select de pacientes
+
{
+ const pacienteSelecionado = pacientes.find(p => p.cpf === value);
+ if (pacienteSelecionado) {
+ setEditorLaudo(prev => ({
+ ...prev,
+ pacienteId: value,
+ pacienteNome: pacienteSelecionado.nome,
+ pacienteCpf: pacienteSelecionado.cpf,
+ pacienteIdade: pacienteSelecionado.idade.toString()
+ }));
+ }
+ }}
+ >
+
+
+
+
+ {pacientes.map((paciente) => (
+
+ {paciente.nome} - {paciente.cpf}
+
+ ))}
+
+
)}
-
-
-
-
Histórico de Laudos
- {laudos.length === 0 ? (
-
Nenhum laudo registrado.
- ) : (
- laudos.map((laudo: any, idx: number) => (
-
-
-
-
Idade: {laudo.idade}
-
Sexo: {laudo.sexo}
-
Status: {laudo.status}
-
CID: {laudo.cid}
-
Data: {laudo.data}
-
- {laudo.assinatura && (
-
-
Assinatura Digital:
-
-
- )}
- {laudo.imagem && (
-
-
Imagem:
-
-
- )}
-
-
- ))
- )}
+
+ CID *
+ setEditorLaudo(prev => ({ ...prev, cid: e.target.value }))}
+ />
+
+
+
+ {/* Campos Principais do Laudo */}
+
+
+ Diagnóstico *
+
+
+
+ Conclusão *
+
+
+
+ {/* Modelos e Frases */}
+
+
Modelos e Frases
+
+ {Object.entries(modelosTexto).map(([nome, texto]) => (
+ {
+ setEditorLaudo(prev => ({
+ ...prev,
+ conteudo: prev.conteudo + (prev.conteudo ? '\n\n' : '') + texto
+ }));
+ }}
+ className="text-left justify-start cursor-pointer"
+ >
+ {nome}
+
+ ))}
+
+
+
+ {/* Editor de Texto Rico */}
+
+ Conteúdo do Laudo *
+ setEditorLaudo(prev => ({ ...prev, conteudo: content }))}
+ />
+
+
+
+
+ {/* Assinatura Digital */}
+
+
Assinatura Digital
+
+
{
+ if (!sigCanvasLaudoRef.current?.isEmpty()) {
+ setAssinaturaLaudo(sigCanvasLaudoRef.current?.toDataURL());
+ }
+ }}
+ />
+
+ {
+ sigCanvasLaudoRef.current?.clear();
+ setAssinaturaLaudo(null);
+ }}
+ className="cursor-pointer"
+ >
+ Limpar
+
+
+
+
+
+ {/* Opções Finais */}
+
);
-}
+
+ const renderAbaImagens = () => (
+
+
+
Imagens do Laudo
+
+
+ Upload Imagem
+
+
+
+
+
+
Arraste imagens aqui ou clique para selecionar
+
Formatos aceitos: JPG, PNG, DICOM (máx. 10MB por arquivo)
+
{
+ // Lógica para upload de imagens
+ console.log("Imagens selecionadas:", e.target.files);
+ }}
+ />
+
+
+ {editorLaudo.imagens.length > 0 && (
+
+ {editorLaudo.imagens.map((img, index) => (
+
+
+
{
+ setEditorLaudo(prev => ({
+ ...prev,
+ imagens: prev.imagens.filter((_, i) => i !== index)
+ }));
+ }}
+ >
+
+
+
+ ))}
+
+ )}
+
+ );
+
+ const renderAbaAnexos = () => (
+
+
+
Anexos PDF
+
+
+ Importar PDF
+
+
+
+
+
+
Arraste PDFs aqui ou clique para selecionar
+
Anexar resultados de exames externos (máx. 25MB por arquivo)
+
+
+ {editorLaudo.pdfAnexos.length > 0 && (
+
+ {editorLaudo.pdfAnexos.map((pdf, index) => (
+
+
+
+
+
Documento_{index + 1}.pdf
+
2.4 MB
+
+
+
+
+
+
+ {
+ setEditorLaudo(prev => ({
+ ...prev,
+ pdfAnexos: prev.pdfAnexos.filter((_, i) => i !== index)
+ }));
+ }}
+ className="cursor-pointer"
+ >
+
+
+
+
+ ))}
+
+ )}
+
+ );
+
+ const renderAbaPreview = () => {
+ const pacienteSelecionado = pacientes.find(p => p.cpf === editorLaudo.pacienteId);
+
+ return (
+
+
+
Pré-visualização do Laudo
+
+
+ Gerar PDF
+
+
+
+
+ {/* Cabeçalho do Laudo */}
+
+
LAUDO MÉDICO
+ {editorLaudo.incluirData && (
+
Data: {new Date().toLocaleDateString('pt-BR')}
+ )}
+
+
+ {/* Dados do Paciente */}
+ {pacienteSelecionado && (
+
+
+ Paciente: {pacienteSelecionado.nome}
+
+
+ CPF: {pacienteSelecionado.cpf}
+
+
+ Idade: {pacienteSelecionado.idade} anos
+
+ {editorLaudo.cid && (
+
+ CID: {editorLaudo.cid}
+
+ )}
+
+ )}
+
+ {/* Conteúdo */}
+
+ {editorLaudo.conteudo ? (
+
+ ) : (
+
+
+
Nenhum conteúdo adicionado ainda.
+
Vá para a aba "Editor" para escrever o laudo.
+
+ )}
+
+
+ {/* Diagnóstico */}
+ {editorLaudo.diagnostico && (
+
+
DIAGNÓSTICO:
+
{editorLaudo.diagnostico}
+
+ )}
+
+ {/* Conclusão */}
+ {editorLaudo.conclusao && (
+
+
CONCLUSÃO:
+
{editorLaudo.conclusao}
+
+ )}
+
+ {/* Imagens */}
+ {editorLaudo.imagens.length > 0 && (
+
+
IMAGENS:
+
+ {editorLaudo.imagens.map((img, index) => (
+
+ ))}
+
+
+ )}
+
+ {/* Assinatura */}
+ {editorLaudo.incluirAssinatura && assinaturaLaudo && (
+
+
+
+
{medico.nome}
+
{medico.identificacao}
+
+
+ )}
+
+
+ );
+ };
const renderComunicacaoSection = () => (
@@ -2704,6 +3399,76 @@ function LaudoEditor() {
)}
+
+ {/* Modal de Visualização do Laudo */}
+
setLaudoVisualizacao(null)}>
+
+
+
+ {laudoVisualizacao?.exameTipo || "Laudo Médico"}
+
+
+
+ {laudoVisualizacao && (
+
+ {/* Cabeçalho do Laudo */}
+
+
LAUDO MÉDICO
+
Data: {laudoVisualizacao.data}
+
+
+ {/* Dados do Paciente */}
+
+
Paciente: {laudoVisualizacao.recipient}
+
Executante: {laudoVisualizacao.execSolicitante}
+
Exame: {laudoVisualizacao.exameTipo}
+ {laudoVisualizacao.cid && (
+
CID: {laudoVisualizacao.cid}
+ )}
+
+
+ {/* Diagnóstico */}
+ {laudoVisualizacao.diagnostico && (
+
+
DIAGNÓSTICO:
+
{laudoVisualizacao.diagnostico}
+
+ )}
+
+ {/* Conteúdo do Laudo */}
+ {laudoVisualizacao.conteudo && (
+
+ )}
+
+ {/* Conclusão */}
+ {laudoVisualizacao.conclusao && (
+
+
CONCLUSÃO:
+
{laudoVisualizacao.conclusao}
+
+ )}
+
+ {/* Rodapé */}
+
+
Status: {laudoVisualizacao.status}
+
+ {medico.nome}
+ {medico.identificacao}
+
+
+
+ )}
+
+
+
);
diff --git a/susconecta/components/dashboard/sidebar.tsx b/susconecta/components/dashboard/sidebar.tsx
index e7feeec..af90fff 100644
--- a/susconecta/components/dashboard/sidebar.tsx
+++ b/susconecta/components/dashboard/sidebar.tsx
@@ -24,7 +24,6 @@ import {
UserCheck,
FileText,
BarChart3,
- Settings,
Stethoscope,
User,
} from "lucide-react"
@@ -36,7 +35,6 @@ const navigation = [
{ name: "Médicos", href: "/doutores", icon: User },
{ name: "Consultas", href: "/consultas", icon: UserCheck },
{ name: "Relatórios", href: "/dashboard/relatorios", icon: BarChart3 },
- { name: "Configurações", href: "/configuracao", icon: Settings },
]
export function Sidebar() {
diff --git a/susconecta/next-env.d.ts b/susconecta/next-env.d.ts
index 40c3d68..830fb59 100644
--- a/susconecta/next-env.d.ts
+++ b/susconecta/next-env.d.ts
@@ -1,5 +1,6 @@
///
///
+///
// NOTE: This file should not be edited
-// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.