From 46104c7b24ed0961544e405b16e98c6fd0022bde Mon Sep 17 00:00:00 2001 From: Eduarda-SS <137419071+Eduarda-SS@users.noreply.github.com> Date: Thu, 4 Dec 2025 09:56:19 -0300 Subject: [PATCH] Atualizacoes --- src/_assets/css/pages/medico/Chat.css | 4 +- .../medico/FormExcecaoDisponibilidade.jsx | 149 ++++++++++++++++-- src/pages/medico/Chat.jsx | 2 +- .../medico/ExcecoesDisponibilidadeMedico.jsx | 2 +- ...troRelatorio.jsx => ListaLaudosMedico.jsx} | 4 +- .../{CadastroLaudos.jsx => ListaLaudos.jsx} | 6 +- src/pages/secretaria/ListaMedicos.jsx | 2 +- src/perfis/Perfil_adm/PerfilAdmin.jsx | 2 +- src/perfis/Perfil_medico/PerfilMedico.jsx | 2 +- src/perfis/Perfil_paciente/Perfilpaciente.jsx | 2 +- .../perfil_secretaria/PerfilSecretaria.jsx | 2 +- 11 files changed, 145 insertions(+), 32 deletions(-) rename src/pages/medico/{CadastroRelatorio.jsx => ListaLaudosMedico.jsx} (99%) rename src/pages/secretaria/{CadastroLaudos.jsx => ListaLaudos.jsx} (99%) diff --git a/src/_assets/css/pages/medico/Chat.css b/src/_assets/css/pages/medico/Chat.css index 9010f80..fca72db 100644 --- a/src/_assets/css/pages/medico/Chat.css +++ b/src/_assets/css/pages/medico/Chat.css @@ -52,6 +52,8 @@ .search-container { position: relative; margin-top: 1rem; + border: none; + box-shadow: none; } .search-input { @@ -71,7 +73,7 @@ height: 1.25rem; color: var(--cor-texto-secundario); position: absolute; - left: 0.75rem; + left: 1.75rem; top: 50%; transform: translateY(-50%); } diff --git a/src/components/medico/FormExcecaoDisponibilidade.jsx b/src/components/medico/FormExcecaoDisponibilidade.jsx index 2a4ec16..654b811 100644 --- a/src/components/medico/FormExcecaoDisponibilidade.jsx +++ b/src/components/medico/FormExcecaoDisponibilidade.jsx @@ -1,6 +1,6 @@ import { useState, useEffect } from "react"; import { useAuth } from "../../_assets/utils/AuthProvider"; -import { GetAllDoctors } from '../../_assets/utils/Functions-Endpoints/Doctor'; +import { GetAllDoctors, GetDoctorByName } from '../../_assets/utils/Functions-Endpoints/Doctor'; import API_KEY from "../../_assets/utils/apiKeys"; import "../../_assets/css/components/agendamento/FormAgendamento.css"; @@ -11,6 +11,7 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => { const { getAuthorizationHeader, user, getUserInfo } = useAuth(); const [dadosAtendimento, setDadosAtendimento] = useState({ profissional: doctorID || '', + crm: '', tipoAtendimento: '', dataAtendimento: '', inicio: '', @@ -33,6 +34,64 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => { })); }; + // Preencher automaticamente usando GetDoctorByName (se disponível) ou dados do usuário como fallback + useEffect(() => { + let cancelled = false; + const loggedDoctorId = doctorID || user?.doctor_id || user?.id || null; + const userName = user?.full_name || user?.name || user?.username || ''; + const userCrm = user?.crm || user?.crm_number || user?.crmFormatted || ''; + + const tryFill = async () => { + // se não há nome para buscar, usa fallback local + if (!userName) { + setDadosAtendimento(prev => ({ + ...prev, + profissional: prev.profissional || loggedDoctorId || '', + crm: prev.crm || userCrm || '' + })); + setDoctorSearchName(prev => prev || ''); + return; + } + + try { + const authHeader = getAuthorizationHeader ? getAuthorizationHeader() : ''; + const doctor = await GetDoctorByName(userName, authHeader); + if (cancelled) return; + + if (doctor) { + const crmValue = doctor.crm || doctor.crm_number || doctor.crmFormatted || userCrm || ''; + const idValue = doctor.id || loggedDoctorId || ''; + setDadosAtendimento(prev => ({ + ...prev, + profissional: prev.profissional || idValue, + crm: prev.crm || crmValue + })); + setDoctorSearchName(prev => prev || (doctor.full_name || userName)); + } else { + // fallback para dados do usuário quando busca não retorna resultado + setDadosAtendimento(prev => ({ + ...prev, + profissional: prev.profissional || loggedDoctorId || '', + crm: prev.crm || userCrm || '' + })); + setDoctorSearchName(prev => prev || userName); + } + } catch (err) { + console.warn('GetDoctorByName falhou, usando fallback do usuário:', err); + if (cancelled) return; + setDadosAtendimento(prev => ({ + ...prev, + profissional: prev.profissional || loggedDoctorId || '', + crm: prev.crm || userCrm || '' + })); + setDoctorSearchName(prev => prev || userName); + } + }; + + tryFill(); + return () => { cancelled = true; }; + }, [doctorID, user, getAuthorizationHeader]); + useEffect(() => { const loadDoctors = async () => { setSearchingDoctor(true); @@ -40,7 +99,38 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => { try { authHeader = getAuthorizationHeader ? getAuthorizationHeader() : ''; } catch {} try { const Medicos = await GetAllDoctors(authHeader); - setTodosProfissionais(Array.isArray(Medicos) ? Medicos : []); + const medicosArray = Array.isArray(Medicos) ? Medicos : []; + setTodosProfissionais(medicosArray); + + // preencher automaticamente com médico logado (se encontrado na lista) + const loggedDoctorId = doctorID || user?.doctor_id || user?.id || null; + if (loggedDoctorId) { + const match = medicosArray.find(d => + String(d.id) === String(loggedDoctorId) || + String(d.doctor_id || '').toLowerCase() === String(loggedDoctorId).toLowerCase() + ); + if (match) { + const crmValue = match.crm || match.crm_number || match.crmFormatted || ''; + setDadosAtendimento(prev => ({ + ...prev, + profissional: prev.profissional || match.id, + crm: prev.crm || crmValue + })); + setDoctorSearchName(prev => prev || (match.full_name || '')); + } else { + // se não encontrou na lista mas user tem crm, preenche crm + const userCrm = user?.crm || user?.crm_number || ''; + if (userCrm) { + setDadosAtendimento(prev => ({ ...prev, crm: prev.crm || userCrm })); + } + } + } else { + // se não há loggedDoctorId, mas user tem crm, preenche crm + const userCrm = user?.crm || user?.crm_number || ''; + if (userCrm) { + setDadosAtendimento(prev => ({ ...prev, crm: prev.crm || userCrm })); + } + } } catch (err) { console.error('Erro ao carregar médicos:', err); setTodosProfissionais([]); @@ -49,7 +139,7 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => { } }; loadDoctors(); - }, [getAuthorizationHeader]); + }, [getAuthorizationHeader, doctorID, user]); const handleSearchProfissional = (e) => { const term = e.target.value; @@ -60,17 +150,16 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => { return; } const filtered = todosProfissionais.filter(p => - (p.full_name || '').toLowerCase().includes(term.toLowerCase()) + ((p.full_name || '').toLowerCase().includes(term.toLowerCase()) || + (String(p.crm || p.crm_number || '').toLowerCase().includes(term.toLowerCase()))) ); setProfissionaisFiltrados(filtered); setIsDropdownOpen(filtered.length > 0); }; const handleSelectProfissional = (profissional) => { - setDadosAtendimento(prev => ({ - ...prev, - profissional: profissional.id - })); + const crmValue = profissional.crm || profissional.crm_number || profissional.crmFormatted || ''; + setDadosAtendimento(prev => ({ ...prev, profissional: profissional.id, crm: crmValue })); setDoctorSearchName(profissional.full_name || ''); setProfissionaisFiltrados([]); setIsDropdownOpen(false); @@ -83,13 +172,40 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => { e.preventDefault(); console.log("Tentando criar Exceção."); - const { profissional, dataAtendimento, tipoAtendimento, inicio, termino, motivo } = dadosAtendimento; + let { profissional, crm, dataAtendimento, tipoAtendimento, inicio, termino, motivo } = dadosAtendimento; - if (!profissional || !dataAtendimento || !tipoAtendimento || !motivo) { - alert("Por favor, preencha o ID do Profissional, Data, Tipo e Motivo."); + // agora a validação principal é pelo CRM (campo obrigatório) + if (!crm || !dataAtendimento || !tipoAtendimento || !motivo) { + alert("Por favor, preencha o CRM do médico, Data, Tipo e Motivo."); return; } + // se o ID do profissional não foi selecionado, tenta resolver pelo CRM usando lista carregada + if (!profissional) { + const match = todosProfissionais.find(d => { + const dcrm = String(d.crm || d.crm_number || d.crmFormatted || '').trim(); + return dcrm && dcrm.toLowerCase() === String(crm).toLowerCase(); + }); + if (match) { + profissional = match.id; + } else { + alert("Médico com o CRM informado não encontrado. Selecione a partir da lista ou verifique o CRM."); + return; + } + } else { + // se ID estiver setado, opcional: conferir se CRM coincide com o cadastrado (se tiver) + const sel = todosProfissionais.find(d => d.id === profissional); + if (sel) { + const dcrm = String(sel.crm || sel.crm_number || sel.crmFormatted || '').trim(); + if (dcrm && dcrm.toLowerCase() !== String(crm).toLowerCase()) { + // apenas alerta, não bloqueia — mantém ID para envio como pedido + if (!window.confirm("O CRM informado não corresponde ao CRM do médico selecionado. Deseja continuar?")) { + return; + } + } + } + } + // usa diretamente o value selecionado (já definido no { {searchingDoctor && Carregando médicos...} - {/* ID do profissional (preenchido ao selecionar) */} + {/* CRM do profissional (agora campo obrigatório de validação) */}
- +
diff --git a/src/pages/medico/Chat.jsx b/src/pages/medico/Chat.jsx index ce1f754..c521a21 100644 --- a/src/pages/medico/Chat.jsx +++ b/src/pages/medico/Chat.jsx @@ -116,6 +116,7 @@ const ChatComponent = () => { // Renomeei para ChatComponent para clareza

Mensagens

+ { // Renomeei para ChatComponent para clareza value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} /> -
diff --git a/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx b/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx index a0ba298..eb5047b 100644 --- a/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx +++ b/src/pages/medico/ExcecoesDisponibilidadeMedico.jsx @@ -164,7 +164,7 @@ const ExcecoesDisponibilidadeDoctor = () => { diff --git a/src/pages/medico/CadastroRelatorio.jsx b/src/pages/medico/ListaLaudosMedico.jsx similarity index 99% rename from src/pages/medico/CadastroRelatorio.jsx rename to src/pages/medico/ListaLaudosMedico.jsx index 11a9fe4..cacb6a8 100644 --- a/src/pages/medico/CadastroRelatorio.jsx +++ b/src/pages/medico/ListaLaudosMedico.jsx @@ -305,11 +305,10 @@ const DoctorRelatorioManager = () => { )}

Lista de Relatórios

-
-
+

Relatórios Cadastrados

-
); }; diff --git a/src/pages/secretaria/CadastroLaudos.jsx b/src/pages/secretaria/ListaLaudos.jsx similarity index 99% rename from src/pages/secretaria/CadastroLaudos.jsx rename to src/pages/secretaria/ListaLaudos.jsx index 376a90d..4e5515a 100644 --- a/src/pages/secretaria/CadastroLaudos.jsx +++ b/src/pages/secretaria/ListaLaudos.jsx @@ -241,11 +241,9 @@ const LaudoManager = () => { return (

Lista de Relatórios

-
-
-
+

Relatórios Cadastrados

-
-
{/* Modal principal (detalhes) */} {showModal && relatorioModal && ( diff --git a/src/pages/secretaria/ListaMedicos.jsx b/src/pages/secretaria/ListaMedicos.jsx index 117673f..4abf95a 100644 --- a/src/pages/secretaria/ListaMedicos.jsx +++ b/src/pages/secretaria/ListaMedicos.jsx @@ -216,7 +216,7 @@ function TableDoctor({setDictInfo}) {
-
+

Médicos Cadastrados

diff --git a/src/perfis/Perfil_adm/PerfilAdmin.jsx b/src/perfis/Perfil_adm/PerfilAdmin.jsx index 14463e7..4c27941 100644 --- a/src/perfis/Perfil_adm/PerfilAdmin.jsx +++ b/src/perfis/Perfil_adm/PerfilAdmin.jsx @@ -13,7 +13,7 @@ import PatientCadastroManager from "../../pages/secretaria/CadastroPaciente"; import DoctorCadastroManager from "../../pages/secretaria/CadastroMedico"; import DoctorTable from "../../pages/secretaria/ListaMedicos"; import Agendamento from "../../pages/secretaria/ListaAgendamentos"; -import LaudoManager from "../../pages/secretaria/CadastroLaudos"; +import LaudoManager from "../../pages/secretaria/ListaLaudos"; import Details from "../../pages/secretaria/DetalhesPaciente"; import EditPage from "../../pages/secretaria/EditarPaciente"; import DoctorDetails from "../../pages/secretaria/DetalhesMedico"; diff --git a/src/perfis/Perfil_medico/PerfilMedico.jsx b/src/perfis/Perfil_medico/PerfilMedico.jsx index d73643b..e5124b1 100644 --- a/src/perfis/Perfil_medico/PerfilMedico.jsx +++ b/src/perfis/Perfil_medico/PerfilMedico.jsx @@ -8,7 +8,7 @@ import Sidebar from "../../components/Sidebar/Sidebar"; import BotaoVideoChamada from '../../components/VideoChamada/BotaoVideoChamada'; //Pages -import DoctorRelatorioManager from "../../pages/medico/CadastroRelatorio"; +import DoctorRelatorioManager from "../../pages/medico/ListaLaudosMedico"; import Prontuario from "../../pages/medico/Prontuario"; import DoctorAgendamentoManager from "../../pages/medico/CadastroAgendamento"; import Chat from "../../pages/medico/Chat"; diff --git a/src/perfis/Perfil_paciente/Perfilpaciente.jsx b/src/perfis/Perfil_paciente/Perfilpaciente.jsx index 8ebb9ce..eb11044 100644 --- a/src/perfis/Perfil_paciente/Perfilpaciente.jsx +++ b/src/perfis/Perfil_paciente/Perfilpaciente.jsx @@ -9,7 +9,7 @@ import Sidebar from "../../components/Sidebar/Sidebar"; //Pages import InicioPaciente from "../../pages/paciente/DashboardPaciente"; -import LaudoManager from "../../pages/secretaria/CadastroLaudos"; +import LaudoManager from "../../pages/secretaria/ListaLaudos"; import ConsultaCadastroManager from "../../pages/paciente/CadastroConsulta"; import ConsultasPaciente from "../../pages/paciente/ListaConsulta"; import ConsultaEditPage from "../../pages/paciente/EditarConsulta"; diff --git a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx index f0218ec..b0d3b20 100644 --- a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx +++ b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx @@ -14,7 +14,7 @@ import PatientCadastroManager from "../../pages/secretaria/CadastroPaciente"; import DoctorCadastroManager from "../../pages/secretaria/CadastroMedico"; import DoctorTable from "../../pages/secretaria/ListaMedicos"; import Agendamento from "../../pages/secretaria/ListaAgendamentos"; -import LaudoManager from "../../pages/secretaria/CadastroLaudos"; +import LaudoManager from "../../pages/secretaria/ListaLaudos"; import Details from "../../pages/secretaria/DetalhesPaciente"; import EditPage from "../../pages/secretaria/EditarPaciente"; import DoctorDetails from "../../pages/secretaria/DetalhesMedico";