From 350e63d692c975576968e72b3b3200f29e335d86 Mon Sep 17 00:00:00 2001 From: Eduarda-SS <137419071+Eduarda-SS@users.noreply.github.com> Date: Wed, 15 Oct 2025 16:50:35 -0300 Subject: [PATCH 1/2] Excessoes: tentativa 1 --- .../AgendarConsulta/FormNovaConsulta.jsx | 234 ++++++++++++++---- 1 file changed, 179 insertions(+), 55 deletions(-) diff --git a/src/components/AgendarConsulta/FormNovaConsulta.jsx b/src/components/AgendarConsulta/FormNovaConsulta.jsx index 435bc8e..68f72ea 100644 --- a/src/components/AgendarConsulta/FormNovaConsulta.jsx +++ b/src/components/AgendarConsulta/FormNovaConsulta.jsx @@ -5,11 +5,22 @@ import { useState, useEffect } from "react"; const FormNovaConsulta = ({ onCancel, patientID }) => { + const [isModoEmergencia, setIsModoEmergencia] = useState(false); const [selectedFile, setSelectedFile] = useState(null); const [anexos, setAnexos] = useState([]); const [loadingAnexos, setLoadingAnexos] = useState(false); const [paciente, setPaciente] = useState({}) const [acessibilidade, setAcessibilidade] = useState({cadeirante:false,idoso:false,gravida:false,bebe:false, autista:false }) + const [dadosAtendimento, setDadosAtendimento] = useState({ + profissional: '', + tipoAtendimento: '', + unidade: '', + dataAtendimento: '', + inicio: '', + termino: '', + solicitante: '', + observacoes: '' + }); useEffect(() => { if (!patientID) return; @@ -165,9 +176,73 @@ const FormNovaConsulta = ({ onCancel, patientID }) => { } } + const handleAtendimentoChange = (e) => { + const { value, name } = e.target; + setDadosAtendimento(prev => ({ + ...prev, + [name]: value + })); + }; + + const handleSubmitExcecao = async () => { + console.log("Modo Emergência Ativado: Tentando criar Exceção com novo endpoint."); + + const { profissional, dataAtendimento, tipoAtendimento, inicio, termino, observacoes } = dadosAtendimento; + + if (!profissional || !dataAtendimento || !tipoAtendimento || !inicio || !termino) { + alert("Por favor, preencha o Profissional, Data, Tipo e Horários para a exceção."); + return; + } + + const payload = { + doctor_id: profissional, + date: dataAtendimento, + start_time: inicio + ":00", // Adiciona ":00" se o input type="time" retornar apenas HH:MM + end_time: termino + ":00", // Adiciona ":00" + kind: "liberacao", // Usando 'excecao' ou 'consulta' ao invés de 'bloqueio' + reason: tipoAtendimento, + //observation: observacoes || "Agendamento fora da grade horária padrão.", + }; + + var myHeaders = new Headers(); + myHeaders.append("Content-Type", "application/json"); + + var requestOptions = { + method: 'POST', + headers: myHeaders, + body: JSON.stringify(payload), + redirect: 'follow' + }; + + try { + const response = await fetch("https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_exceptions", requestOptions); + const result = await response.json(); + + if (response.ok || response.status === 201) { + console.log("Exceção de emergência criada com sucesso:", result); + alert(`Consulta de emergência agendada como exceção! Detalhes: ${JSON.stringify(result)}`); + } else { + console.error("Erro ao criar exceção de emergência:", result); + alert(`Erro ao agendar exceção. Status: ${response.status}. Detalhes: ${result.message || JSON.stringify(result)}`); + } + } catch (error) { + console.error("Erro na requisição para criar exceção:", error); + alert("Erro de comunicação com o servidor ou formato de resposta inválido."); + } + }; + + const handleSubmitPadrao = () => { + console.log("Salvando agendamento."); + alert("Agendamento salvo!"); + }; + const handleSubmit = (e) => { e.preventDefault(); - alert("Agendamento salvo!"); + if (isModoEmergencia) { + handleSubmitExcecao(); + } else { + handleSubmitPadrao(); + } }; return ( @@ -259,10 +334,21 @@ const FormNovaConsulta = ({ onCancel, patientID }) => { )}

Informações do atendimento

- - +
+ + {isModoEmergencia && ( +

⚠️ As informações de data e horário serão enviadas como uma exceção fora da grade normal.

+ )} +
+
-
handleclickAcessibilidade(e.currentTarget.id)}> accessible @@ -287,72 +373,110 @@ const FormNovaConsulta = ({ onCancel, patientID }) => {
-
- +
- + +
+
+ +
- - -
- -
-
-
-
- - +
+
+ + +
+ +
+ + +
+ +
+
+ + +
+ +
+ + +
- - -
- - +
+ + +
-
+
-
-
- - -
+
- - + +
- -
- - -
-
-
- -
- - -
- - -
-
- + +
From a6755aeb37ecaa2afd029b072211fc995af7856b Mon Sep 17 00:00:00 2001 From: Eduarda-SS <137419071+Eduarda-SS@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:21:17 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Vers=C3=A3o=20final=20das=20excecoes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AgendarConsulta/FormDisponibilidade.jsx | 177 ++++++++++++++++++ src/pages/Agendamento.jsx | 6 + .../perfil_secretaria/PerfilSecretaria.jsx | 2 + 3 files changed, 185 insertions(+) create mode 100644 src/components/AgendarConsulta/FormDisponibilidade.jsx diff --git a/src/components/AgendarConsulta/FormDisponibilidade.jsx b/src/components/AgendarConsulta/FormDisponibilidade.jsx new file mode 100644 index 0000000..86ba6ce --- /dev/null +++ b/src/components/AgendarConsulta/FormDisponibilidade.jsx @@ -0,0 +1,177 @@ +import InputMask from "react-input-mask"; +import "./style/formagendamentos.css"; +import { useState, useEffect } from "react"; + +const FormNovaDisponibilidade = ({ onCancel, doctorID }) => { + + const [dadosAtendimento, setDadosAtendimento] = useState({ + profissional: '', + tipoAtendimento: '', + dataAtendimento: '', + inicio: '', + termino: '', + motivo: '' + }); + + const handleAtendimentoChange = (e) => { + const { value, name } = e.target; + setDadosAtendimento(prev => ({ + ...prev, + [name]: value + })); + }; + + const handleSubmitExcecao = async (e) => { + e.preventDefault(); + console.log("Modo Emergência Ativado: Tentando criar Exceção com novo endpoint."); + + const { profissional, dataAtendimento, tipoAtendimento, inicio, termino, motivo } = dadosAtendimento; + + if (!profissional || !dataAtendimento || !tipoAtendimento) { + alert("Por favor, preencha o Profissional, Data, e Tipo da exceção."); + return; + } + + const payload = { + doctor_id: profissional, + date: dataAtendimento, + start_time: inicio + ":00" || null, // Adiciona ":00" se o input type="time" retornar apenas HH:MM + end_time: termino + ":00" || null, // Adiciona ":00" + kind: tipoAtendimento, + reason: motivo, + }; + + var myHeaders = new Headers(); + myHeaders.append("Content-Type", "application/json"); + + var requestOptions = { + method: 'POST', + headers: myHeaders, + body: JSON.stringify(payload), + redirect: 'follow' + }; + + try { + const response = await fetch("https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_exceptions", requestOptions); + const result = await response.json(); + + if (response.ok || response.status === 201) { + console.log("Exceção de emergência criada com sucesso:", result); + alert(`Consulta de emergência agendada como exceção! Detalhes: ${JSON.stringify(result)}`); + } else { + console.error("Erro ao criar exceção de emergência:", result); + alert(`Erro ao agendar exceção. Status: ${response.status}. Detalhes: ${result.message || JSON.stringify(result)}`); + } + } catch (error) { + console.error("Erro na requisição para criar exceção:", error); + alert("Erro de comunicação com o servidor ou formato de resposta inválido."); + } + }; + + return ( +
+
+

Informações do médico

+ +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ +
+ + +
+
+
+ +
+ + +
+
+
+ ); +}; + +export default FormNovaDisponibilidade; \ No newline at end of file diff --git a/src/pages/Agendamento.jsx b/src/pages/Agendamento.jsx index d693cfe..cc85656 100644 --- a/src/pages/Agendamento.jsx +++ b/src/pages/Agendamento.jsx @@ -1,4 +1,5 @@ import React, { useState, useMemo } from 'react'; +import { useNavigate } from 'react-router-dom'; import TabelaAgendamentoDia from '../components/AgendarConsulta/TabelaAgendamentoDia'; import TabelaAgendamentoSemana from '../components/AgendarConsulta/TabelaAgendamentoSemana'; @@ -13,6 +14,7 @@ import "./style/Agendamento.css"; import './style/FilaEspera.css'; const Agendamento = () => { + const navigate = useNavigate(); const [FiladeEspera, setFiladeEspera] = useState(false); const [tabela, setTabela] = useState('diario'); @@ -91,6 +93,10 @@ const Agendamento = () => {

Agendar nova consulta

+ + {!PageNovaConsulta ? (
diff --git a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx index baa72a6..0ff435a 100644 --- a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx +++ b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx @@ -15,6 +15,7 @@ import Details from "../../pages/Details"; import EditPage from "../../pages/EditPage"; import DoctorDetails from "../../pages/DoctorDetails"; import DoctorEditPage from "../../pages/DoctorEditPage"; +import FormDisponibilidade from "../../components/AgendarConsulta/FormDisponibilidade"; function PerfilSecretaria({ onLogout }) { return ( @@ -35,6 +36,7 @@ function PerfilSecretaria({ onLogout }) { } /> } /> Página não encontrada} /> + } />