import React, { useState } from 'react' import '../PagesMedico/styleMedico/FormNovoRelatorio.css' import { useNavigate } from 'react-router-dom' import { useAuth } from '../components/utils/AuthProvider' import { GetPatientByCPF } from '../components/utils/Functions-Endpoints/Patient' import { FormatCPF } from '../components/utils/Formatar/Format' import html2pdf from 'html2pdf.js' const FormRelatorio = ({ onSave, DictInfo, setDictInfo }) => { const { getAuthorizationHeader } = useAuth() let authHeader = getAuthorizationHeader() const navigate = useNavigate() const [showModal, setShowModal] = useState(false) // --- NOVO: Estado para controlar o loading da transcrição --- const [isTranscribing, setIsTranscribing] = useState(false); // --- NOVA FUNÇÃO: Envia o áudio e preenche o formulário --- const handleAudioUpload = async (e) => { const file = e.target.files[0]; if (!file) return; setIsTranscribing(true); // Ativa o spinner const formData = new FormData(); formData.append('audio', file); // 'audio' deve ser o nome esperado no backend try { // ⚠️ ATENÇÃO: Substitua essa URL pela rota do seu backend que criamos const response = await fetch('http://localhost:3001/api/transcrever-relatorio', { method: 'POST', body: formData, // headers: { 'Authorization': authHeader } // Descomente se seu backend precisar de token }); if (!response.ok) throw new Error("Falha na transcrição"); const data = await response.json(); // Atualiza o DictInfo com os dados vindos da IA setDictInfo((prev) => ({ ...prev, exam: data.exam || prev.exam, // Preenche se a IA achou, senão mantém o antigo diagnostico: data.diagnostico || prev.diagnostico, conclusao: data.conclusao || prev.conclusao })); } catch (error) { console.error("Erro no upload de áudio:", error); alert("Não foi possível gerar o relatório por áudio. Verifique o backend."); } finally { setIsTranscribing(false); // Desativa o spinner e.target.value = null; // Limpa o input para permitir enviar o mesmo arquivo novamente se quiser } }; // ----------------------------------------------------------- const BaixarPDFdoRelatorio = () => { const elemento = document.getElementById("folhaA4"); // tua div do relatório const opt = { margin: 0, filename: `relatorio_${DictInfo?.paciente_nome || "paciente"}.pdf`, html2canvas: { scale: 2 }, jsPDF: { unit: "mm", format: "a4", orientation: "portrait" }, }; html2pdf().set(opt).from(elemento).save(); } const handleChange = (e) => { const { name, value } = e.target; console.log(name, value) if (name === 'paciente_cpf') { const formattedCPF = FormatCPF(value); setDictInfo((prev) => ({ ...prev, [name]: formattedCPF })); const fetchPatient = async () => { const patientData = await GetPatientByCPF(formattedCPF, authHeader); if (patientData) { setDictInfo((prev) => ({ ...prev, paciente_cpf: value, paciente_nome: patientData.full_name, paciente_id: patientData.id })); } }; if (formattedCPF.length === 14) { fetchPatient(); } } else { setDictInfo((prev) => ({ ...prev, [name]: value })); } } const handleSubmit = (e) => { e.preventDefault(); console.log(DictInfo) setShowModal(true) onSave({ "patient_id": DictInfo.paciente_id, "exam": DictInfo.exam, "diagnosis": DictInfo.diagnostico, // Garanta que o backend espera 'diagnosis' mas seu state usa 'diagnostico' "conclusion": DictInfo.conclusao, "status": "draft", "requested_by": DictInfo.requested_by, "hide_date": false, "hide_signature": false, }); } return (
{showModal && (
Relatório criado com sucesso

Você também pode baixa-lo agora em pdf

)}
{/* --- ÁREA DE UPLOAD DE ÁUDIO (INSERIDA AQUI) --- */}
{isTranscribing ? (
A IA está gerando o relatório... aguarde.
) : ( )}
Envie um áudio ditando o exame, diagnóstico e conclusão.
{/* ----------------------------------------------- */}

Modelo do relatório

Clinica Rise up

Dr {DictInfo.requested_by} - CRM/SP 123456

Avenida - (79) 9 4444-4444

Paciente: {DictInfo?.paciente_nome}

Data de nascimento:

{/* Corrigi de data_exam para data_exame para bater com o state */}

Data do exame: {DictInfo.data_exame}

Exame: {DictInfo.exam}

Diagnostico: {DictInfo.diagnostico}

Conclusão: {DictInfo.conclusao}

Dr {DictInfo.requested_by}

Emitido em: {new Date().toLocaleDateString()}

) } export default FormRelatorio