diff --git a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/error.d.ts b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/error.d.ts index 2875f4a..1a048fa 100644 --- a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/error.d.ts +++ b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/error.d.ts @@ -1,2 +1,2 @@ -export * from "./core/error.js"; +export * from "openai/core/error.js"; //# sourceMappingURL=error.d.ts.map \ No newline at end of file diff --git a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/internal/types.d.ts b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/internal/types.d.ts index 5f7feb0..ae63f1c 100644 --- a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/internal/types.d.ts +++ b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/internal/types.d.ts @@ -46,7 +46,7 @@ type OverloadedParameters = T extends ({ * [1]: https://www.typescriptlang.org/tsconfig/#typeAcquisition */ /** @ts-ignore For users with \@types/node */ -type UndiciTypesRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; +type UndiciTypesRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; /** @ts-ignore For users with undici */ type UndiciRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; /** @ts-ignore For users with \@types/bun */ diff --git a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/pagination.d.ts b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/pagination.d.ts index d8a556c..de66ed3 100644 --- a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/pagination.d.ts +++ b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/pagination.d.ts @@ -1,2 +1,2 @@ -export * from "./core/pagination.js"; +export * from "openai/core/pagination.js"; //# sourceMappingURL=pagination.d.ts.map \ No newline at end of file diff --git a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/resources/chat/completions.d.ts b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/resources/chat/completions.d.ts index e05b6c7..a9cc346 100644 --- a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/resources/chat/completions.d.ts +++ b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/resources/chat/completions.d.ts @@ -1,2 +1,2 @@ -export * from "./completions/index.js"; +export * from "openai/resources/chat/completions/index.js"; //# sourceMappingURL=completions.d.ts.map \ No newline at end of file diff --git a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/uploads.d.ts b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/uploads.d.ts index 27d0ae5..d71f0f4 100644 --- a/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/uploads.d.ts +++ b/backend-relatorio (mova essa pasta para fora antes de usar )/node_modules/openai/uploads.d.ts @@ -1,2 +1,2 @@ -export * from "./core/uploads.js"; +export * from "openai/core/uploads.js"; //# sourceMappingURL=uploads.d.ts.map \ No newline at end of file diff --git a/backend-relatorio (mova essa pasta para fora antes de usar )/server.js b/backend-relatorio (mova essa pasta para fora antes de usar )/server.js index 105e013..98432f1 100644 --- a/backend-relatorio (mova essa pasta para fora antes de usar )/server.js +++ b/backend-relatorio (mova essa pasta para fora antes de usar )/server.js @@ -3,7 +3,7 @@ const multer = require('multer'); const cors = require('cors'); const fs = require('fs'); const path = require('path'); -const OpenAI = require('openai'); +const OpenAI = require('openai/index.js'); require('dotenv').config(); const app = express(); diff --git a/src/PagesMedico/NovoRelatorioAudio.jsx b/src/PagesMedico/NovoRelatorioAudio.jsx index 6012435..2959239 100644 --- a/src/PagesMedico/NovoRelatorioAudio.jsx +++ b/src/PagesMedico/NovoRelatorioAudio.jsx @@ -1,10 +1,11 @@ -import React, { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; +import React, { useState, useEffect } from 'react'; +import { useNavigate, useLocation } from 'react-router-dom'; // <--- 1. ADICIONADO useLocation import html2pdf from 'html2pdf.js'; import './styleMedico/NovoRelatorioAudio.css'; const NovoRelatorioAudio = () => { const navigate = useNavigate(); + const location = useLocation(); // <--- 2. Inicializa o hook para ler os dados enviados const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ @@ -13,9 +14,33 @@ const NovoRelatorioAudio = () => { exam: '', diagnostico: '', conclusao: '', - medico_nome: 'Dr.______________________' + medico_nome: 'Dr._______________________________' // Ajuste conforme necessário }); + // --- 3. NOVO BLOCO: Receber dados da Videochamada --- + useEffect(() => { + // Verifica se a navegação trouxe dados no "state" + if (location.state && location.state.aiResult) { + console.log("Dados recebidos da Videochamada:", location.state); + + const { aiResult, paciente } = location.state; + + // Atualiza o formulário com o que a IA gerou + setFormData(prev => ({ + ...prev, + // Se tiver paciente vindo da chamada, usa ele. Se não, mantém vazio. + paciente_nome: paciente?.name || prev.paciente_nome, + + // Dados da IA + exam: aiResult.exam || 'Consulta Telemedicina', + diagnostico: aiResult.diagnostico || '', + conclusao: aiResult.conclusao || '' + })); + } + }, [location]); // Executa assim que a página carrega + + // --- FIM DO BLOCO NOVO --- + const handleAudioUpload = async (e) => { const file = e.target.files[0]; if (!file) return; @@ -83,8 +108,8 @@ const NovoRelatorioAudio = () => { <> {

Análise:

- {formData.diagnostico || O diagnóstico aparecerá aqui após o processamento do áudio...} + {formData.diagnostico || O diagnóstico aparecerá aqui...}

Conclusão:

diff --git a/src/components/BotaoVideoChamada.css b/src/components/BotaoVideoChamada.css index b6ea432..12fb97e 100644 --- a/src/components/BotaoVideoChamada.css +++ b/src/components/BotaoVideoChamada.css @@ -1,19 +1,10 @@ -@keyframes slide-up { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} +/* ... Mantenha o keyframe slide-up e container ... */ .video-chat-container { font-family: Arial, sans-serif; } -/* --- O BOTÃO FLUTUANTE (COM CORREÇÃO) --- */ +/* O BOTÃO FLUTUANTE */ .video-chat-button { position: fixed; bottom: 20px; @@ -28,7 +19,7 @@ box-shadow: 0 4px 8px rgba(0,0,0,0.2); cursor: pointer; display: flex; - align-items: center; /* <-- Correção do alinhamento */ + align-items: center; justify-content: center; transition: all 0.3s ease; } @@ -38,13 +29,16 @@ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3); } -/* --- A JANELA DE CHAT --- */ +/* --- A JANELA DE CHAT (AGORA MAIOR) --- */ .video-chat-window { position: fixed; bottom: 90px; right: 95px; - width: 500px; - height: 380px; + + /* ALTERAÇÃO DE TAMANHO AQUI: */ + width: 600px; /* Antes era menor, aumentei para ficar melhor o vídeo */ + height: 500px; /* Aumentei a altura também */ + background-color: #ffffff; border: 1px solid #e0e0e0; border-radius: 8px; @@ -52,16 +46,15 @@ z-index: 10000; display: flex; flex-direction: column; - overflow: hidden; /* Importante para o border-radius */ - - /* Animação de "surgir" */ + overflow: hidden; animation: slide-up 0.3s ease-out; - - /* Animação "premium" para tela cheia */ transition: all 0.4s ease-in-out; } -/* --- MODO TELA CHEIA (SIMULADO) --- */ +/* ... Mantenha o resto do CSS igual (header, body, lists, pseudo-fullscreen)... */ + +/* REPETINDO O RESTANTE PARA GARANTIR QUE FUNCIONE: */ + .video-chat-window.pseudo-fullscreen { width: 100vw; height: 100vh; @@ -73,10 +66,9 @@ } .video-chat-window.pseudo-fullscreen .video-chat-header { - display: none; + display: flex; /* Mantém o header visível para controle */ } -/* --- HEADER DA JANELA --- */ .video-chat-header { display: flex; justify-content: space-between; @@ -84,159 +76,37 @@ padding: 10px 15px; background-color: #f7f7f7; border-bottom: 1px solid #e0e0e0; - flex-shrink: 0; /* Impede o header de encolher */ -} -.video-chat-header h3 { - margin: 0; - font-size: 16px; -} -.video-chat-controls { - display: flex; - align-items: center; - gap: 8px; + flex-shrink: 0; } +.video-chat-header h3 { margin: 0; font-size: 16px; } +.video-chat-controls { display: flex; align-items: center; gap: 8px; } + .control-btn { - background: none; - border: none; - cursor: pointer; - color: #888; - padding: 4px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 4px; - transition: background-color 0.2s; -} -.control-btn:hover { - background-color: #e0e0e0; -} -.close-btn { - font-size: 24px; - line-height: 1; -} -.fullscreen-btn { - font-size: 14px; + background: none; border: none; cursor: pointer; color: #888; + padding: 4px; display: flex; align-items: center; justify-content: center; + border-radius: 4px; transition: background-color 0.2s; } +.control-btn:hover { background-color: #e0e0e0; } -/* --- CORPO DA JANELA (CONSOLIDADO) --- */ .video-chat-body { - flex-grow: 1; /* Ocupa todo o espaço vertical */ - overflow-y: hidden; /* Os filhos (lista, call-screen) cuidam do scroll */ - display: flex; - flex-direction: column; - padding: 0; /* Os filhos cuidam do padding */ - transition: padding 0.4s ease-in-out; + flex-grow: 1; overflow-y: hidden; display: flex; flex-direction: column; + padding: 0; transition: padding 0.4s ease-in-out; } -.video-chat-window.pseudo-fullscreen .video-chat-body { - padding: 0; -} - -/* --- 1. LISTA DE PACIENTES --- */ -.patient-list-container { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; -} -.patient-list-container > p { - padding: 15px 15px 10px 15px; - margin: 0; - font-size: 15px; - color: #555; - border-bottom: 1px solid #f0f0f0; - flex-shrink: 0; /* Impede de encolher */ -} -.patient-list { - list-style: none; - margin: 0; - padding: 0; - overflow-y: auto; /* Adiciona scroll SÓ AQUI */ - flex-grow: 1; /* Ocupa o espaço restante */ -} +.patient-list-container { width: 100%; height: 100%; display: flex; flex-direction: column; } +.patient-list { list-style: none; margin: 0; padding: 0; overflow-y: auto; flex-grow: 1; } .patient-item { - display: flex; - justify-content: space-between; - align-items: center; - padding: 12px 15px; - border-bottom: 1px solid #f0f0f0; - transition: background-color 0.2s; -} -.patient-item:hover { - background-color: #f9f9f9; -} -.patient-item span { - font-weight: 600; - color: #333; -} -.call-btn { - display: flex; - align-items: center; - gap: 6px; - background-color: #28a745; - color: white; - border: none; - border-radius: 5px; - padding: 8px 12px; - font-size: 14px; - font-weight: 600; - cursor: pointer; - transition: background-color 0.2s; -} -.call-btn:hover { - background-color: #218838; + display: flex; justify-content: space-between; align-items: center; + padding: 12px 15px; border-bottom: 1px solid #f0f0f0; transition: background-color 0.2s; } +.patient-item:hover { background-color: #f9f9f9; } +.patient-item span { font-weight: 600; color: #333; } -/* --- 2. TELA DE CHAMADA --- */ -.call-screen { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - background-color: #2c2c2c; - color: white; +.call-btn { + display: flex; align-items: center; gap: 6px; background-color: #28a745; + color: white; border: none; border-radius: 5px; padding: 8px 12px; + font-size: 14px; font-weight: 600; cursor: pointer; transition: background-color 0.2s; } -.call-screen h4 { - margin: 0; - padding: 12px; - text-align: center; - background-color: rgba(0,0,0,0.2); - font-size: 16px; - flex-shrink: 0; /* Impede de encolher */ -} -.video-placeholder { - flex-grow: 1; /* Ocupa todo o espaço */ - display: flex; - align-items: center; - justify-content: center; - width: 100%; - background-color: #1a1a1a; - color: #888; - font-style: italic; - overflow: hidden; /* Caso o