From e48d9510e35d8cb78d5754b5f3d46dfed4d995fa Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 13:06:53 -0300 Subject: [PATCH 01/60] chore: testando esteira CI/CD --- Hello.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Hello.py b/Hello.py index 08ed27b..1ed52c3 100644 --- a/Hello.py +++ b/Hello.py @@ -15,6 +15,8 @@ import streamlit as st from streamlit.logger import get_logger +st.title("Meu pastel é mais barato que o seu") + LOGGER = get_logger(__name__) def run(): From 1ca9f9dee8ad10037486d4ffcfaf13a23f486c40 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 13:15:56 -0300 Subject: [PATCH 02/60] chore: teste de integracao --- Hello.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Hello.py b/Hello.py index 1ed52c3..281d4be 100644 --- a/Hello.py +++ b/Hello.py @@ -16,6 +16,7 @@ from streamlit.logger import get_logger st.title("Meu pastel é mais barato que o seu") +st.subtitle("quero ver se vai subir no git") LOGGER = get_logger(__name__) From 1472e59651776f601cae81e12dec8477f6c14a7e Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 13:27:02 -0300 Subject: [PATCH 03/60] chore --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index a0fe736..9723354 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ altair==5.1.2 -numpy==1.26.1 -pandas==2.1.2 +numpy==1.26.2 +pandas==2.3.2 pydeck==0.8.0 -streamlit==1.28.1 +streamlit==1.49.0 From 1d26e31c995627d7fce18efee82bb5809c6e7fc5 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 13:31:54 -0300 Subject: [PATCH 04/60] chore --- Hello.py | 35 +----- "pages/1_\360\237\223\210_Plotting_Demo.py" | 55 --------- "pages/2_\360\237\214\215_Mapping_Demo.py" | 116 ------------------- "pages/3_\360\237\223\212_DataFrame_Demo.py" | 76 ------------ 4 files changed, 1 insertion(+), 281 deletions(-) delete mode 100644 "pages/1_\360\237\223\210_Plotting_Demo.py" delete mode 100644 "pages/2_\360\237\214\215_Mapping_Demo.py" delete mode 100644 "pages/3_\360\237\223\212_DataFrame_Demo.py" diff --git a/Hello.py b/Hello.py index 281d4be..a6afb4f 100644 --- a/Hello.py +++ b/Hello.py @@ -16,38 +16,5 @@ from streamlit.logger import get_logger st.title("Meu pastel é mais barato que o seu") -st.subtitle("quero ver se vai subir no git") -LOGGER = get_logger(__name__) - -def run(): - st.set_page_config( - page_title="Hello", - page_icon="👋", - ) - - st.write("# Welcome to Streamlit! 👋") - - st.sidebar.success("Select a demo above.") - - st.markdown( - """ - Streamlit is an open-source app framework built specifically for - Machine Learning and Data Science projects. - **👈 Select a demo from the sidebar** to see some examples - of what Streamlit can do! - ### Want to learn more? - - Check out [streamlit.io](https://streamlit.io) - - Jump into our [documentation](https://docs.streamlit.io) - - Ask a question in our [community - forums](https://discuss.streamlit.io) - ### See more complex demos - - Use a neural net to [analyze the Udacity Self-driving Car Image - Dataset](https://github.com/streamlit/demo-self-driving) - - Explore a [New York City rideshare dataset](https://github.com/streamlit/demo-uber-nyc-pickups) - """ - ) - - -if __name__ == "__main__": - run() \ No newline at end of file +st.title("quero ver se vai subir no git") diff --git "a/pages/1_\360\237\223\210_Plotting_Demo.py" "b/pages/1_\360\237\223\210_Plotting_Demo.py" deleted file mode 100644 index 9527171..0000000 --- "a/pages/1_\360\237\223\210_Plotting_Demo.py" +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2018-2022 Streamlit Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import streamlit as st -import inspect -import textwrap -import time -import numpy as np -from utils import show_code - -def plotting_demo(): - progress_bar = st.sidebar.progress(0) - status_text = st.sidebar.empty() - last_rows = np.random.randn(1, 1) - chart = st.line_chart(last_rows) - - for i in range(1, 101): - new_rows = last_rows[-1, :] + np.random.randn(5, 1).cumsum(axis=0) - status_text.text("%i%% Complete" % i) - chart.add_rows(new_rows) - progress_bar.progress(i) - last_rows = new_rows - time.sleep(0.05) - - progress_bar.empty() - - # Streamlit widgets automatically run the script from top to bottom. Since - # this button is not connected to any other logic, it just causes a plain - # rerun. - st.button("Re-run") - - -st.set_page_config(page_title="Plotting Demo", page_icon="📈") -st.markdown("# Plotting Demo") -st.sidebar.header("Plotting Demo") -st.write( - """This demo illustrates a combination of plotting and animation with -Streamlit. We're generating a bunch of random numbers in a loop for around -5 seconds. Enjoy!""" -) - -plotting_demo() - -show_code(plotting_demo) \ No newline at end of file diff --git "a/pages/2_\360\237\214\215_Mapping_Demo.py" "b/pages/2_\360\237\214\215_Mapping_Demo.py" deleted file mode 100644 index 7c111a4..0000000 --- "a/pages/2_\360\237\214\215_Mapping_Demo.py" +++ /dev/null @@ -1,116 +0,0 @@ -# Copyright 2018-2022 Streamlit Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import streamlit as st -import inspect -import textwrap -import pandas as pd -import pydeck as pdk -from utils import show_code - -from urllib.error import URLError - -def mapping_demo(): - @st.cache_data - def from_data_file(filename): - url = ( - "http://raw.githubusercontent.com/streamlit/" - "example-data/master/hello/v1/%s" % filename - ) - return pd.read_json(url) - - try: - ALL_LAYERS = { - "Bike Rentals": pdk.Layer( - "HexagonLayer", - data=from_data_file("bike_rental_stats.json"), - get_position=["lon", "lat"], - radius=200, - elevation_scale=4, - elevation_range=[0, 1000], - extruded=True, - ), - "Bart Stop Exits": pdk.Layer( - "ScatterplotLayer", - data=from_data_file("bart_stop_stats.json"), - get_position=["lon", "lat"], - get_color=[200, 30, 0, 160], - get_radius="[exits]", - radius_scale=0.05, - ), - "Bart Stop Names": pdk.Layer( - "TextLayer", - data=from_data_file("bart_stop_stats.json"), - get_position=["lon", "lat"], - get_text="name", - get_color=[0, 0, 0, 200], - get_size=15, - get_alignment_baseline="'bottom'", - ), - "Outbound Flow": pdk.Layer( - "ArcLayer", - data=from_data_file("bart_path_stats.json"), - get_source_position=["lon", "lat"], - get_target_position=["lon2", "lat2"], - get_source_color=[200, 30, 0, 160], - get_target_color=[200, 30, 0, 160], - auto_highlight=True, - width_scale=0.0001, - get_width="outbound", - width_min_pixels=3, - width_max_pixels=30, - ), - } - st.sidebar.markdown("### Map Layers") - selected_layers = [ - layer - for layer_name, layer in ALL_LAYERS.items() - if st.sidebar.checkbox(layer_name, True) - ] - if selected_layers: - st.pydeck_chart( - pdk.Deck( - map_style="mapbox://styles/mapbox/light-v9", - initial_view_state={ - "latitude": 37.76, - "longitude": -122.4, - "zoom": 11, - "pitch": 50, - }, - layers=selected_layers, - ) - ) - else: - st.error("Please choose at least one layer above.") - except URLError as e: - st.error( - """ - **This demo requires internet access.** - Connection error: %s - """ - % e.reason - ) - -st.set_page_config(page_title="Mapping Demo", page_icon="🌍") -st.markdown("# Mapping Demo") -st.sidebar.header("Mapping Demo") -st.write( - """This demo shows how to use -[`st.pydeck_chart`](https://docs.streamlit.io/library/api-reference/charts/st.pydeck_chart) -to display geospatial data.""" -) - -mapping_demo() - -show_code(mapping_demo) diff --git "a/pages/3_\360\237\223\212_DataFrame_Demo.py" "b/pages/3_\360\237\223\212_DataFrame_Demo.py" deleted file mode 100644 index b13e033..0000000 --- "a/pages/3_\360\237\223\212_DataFrame_Demo.py" +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright 2018-2022 Streamlit Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import streamlit as st -import inspect -import textwrap -import pandas as pd -import altair as alt -from utils import show_code - -from urllib.error import URLError - -def data_frame_demo(): - @st.cache_data - def get_UN_data(): - AWS_BUCKET_URL = "http://streamlit-demo-data.s3-us-west-2.amazonaws.com" - df = pd.read_csv(AWS_BUCKET_URL + "/agri.csv.gz") - return df.set_index("Region") - - try: - df = get_UN_data() - countries = st.multiselect( - "Choose countries", list(df.index), ["China", "United States of America"] - ) - if not countries: - st.error("Please select at least one country.") - else: - data = df.loc[countries] - data /= 1000000.0 - st.write("### Gross Agricultural Production ($B)", data.sort_index()) - - data = data.T.reset_index() - data = pd.melt(data, id_vars=["index"]).rename( - columns={"index": "year", "value": "Gross Agricultural Product ($B)"} - ) - chart = ( - alt.Chart(data) - .mark_area(opacity=0.3) - .encode( - x="year:T", - y=alt.Y("Gross Agricultural Product ($B):Q", stack=None), - color="Region:N", - ) - ) - st.altair_chart(chart, use_container_width=True) - except URLError as e: - st.error( - """ - **This demo requires internet access.** - Connection error: %s - """ - % e.reason - ) - -st.set_page_config(page_title="DataFrame Demo", page_icon="📊") -st.markdown("# DataFrame Demo") -st.sidebar.header("DataFrame Demo") -st.write( - """This demo shows how to use `st.write` to visualize Pandas DataFrames. -(Data courtesy of the [UN Data Explorer](http://data.un.org/Explorer.aspx).)""" -) - -data_frame_demo() - -show_code(data_frame_demo) From bfe1d4b00a374631629cc3a42ed604c24e9b60fb Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 13:54:51 -0300 Subject: [PATCH 05/60] chore --- config.toml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 config.toml diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..444fae6 --- /dev/null +++ b/config.toml @@ -0,0 +1,4 @@ +[theme] +base="light" +primaryColor="#101010" +secondaryBackgroundColor="#ffffff" From 929453e601b43ef1b9b5306c3d0f42c2e425a25b Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 13:57:37 -0300 Subject: [PATCH 06/60] chore --- config.toml => .streamlit/config.toml | 0 Hello.py => main.py | 0 railway.json | 2 +- utils.py | 26 -------------------------- 4 files changed, 1 insertion(+), 27 deletions(-) rename config.toml => .streamlit/config.toml (100%) rename Hello.py => main.py (100%) delete mode 100644 utils.py diff --git a/config.toml b/.streamlit/config.toml similarity index 100% rename from config.toml rename to .streamlit/config.toml diff --git a/Hello.py b/main.py similarity index 100% rename from Hello.py rename to main.py diff --git a/railway.json b/railway.json index 03123cc..c6ff59c 100644 --- a/railway.json +++ b/railway.json @@ -1,6 +1,6 @@ { "$schema": "https://schema.up.railway.app/railway.schema.json", "deploy": { - "startCommand": "streamlit run Hello.py --server.address 0.0.0.0 --server.port $PORT --server.fileWatcherType none --browser.gatherUsageStats false --client.showErrorDetails false --client.toolbarMode minimal" + "startCommand": "streamlit run main.py --server.address 0.0.0.0 --server.port $PORT --server.fileWatcherType none --browser.gatherUsageStats false --client.showErrorDetails false --client.toolbarMode minimal" } } \ No newline at end of file diff --git a/utils.py b/utils.py deleted file mode 100644 index f5ca43d..0000000 --- a/utils.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2018-2022 Streamlit Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import streamlit as st -import inspect -import textwrap - -def show_code(demo): - """Showing the code of the demo.""" - show_code = st.sidebar.checkbox("Show code", True) - if show_code: - # Showing the code of the demo. - st.markdown("## Code") - sourcelines, _ = inspect.getsourcelines(demo) - st.code(textwrap.dedent("".join(sourcelines[1:]))) \ No newline at end of file From 6816f716da75537b905b79c63ba038aa6ce11c64 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 15:53:43 -0300 Subject: [PATCH 07/60] feature: add login --- .gitignore | 1 + .streamlit/config.toml | 5 ++- .streamlit/secrets.toml | 9 +++++ config.yaml | 10 ++++++ generate_keys.py | 11 ++++++ main.py | 80 ++++++++++++++++++++++++++++++++--------- 6 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 .streamlit/secrets.toml create mode 100644 config.yaml create mode 100644 generate_keys.py diff --git a/.gitignore b/.gitignore index 90f8fbb..c61041f 100644 --- a/.gitignore +++ b/.gitignore @@ -112,6 +112,7 @@ ipython_config.py # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml +.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ diff --git a/.streamlit/config.toml b/.streamlit/config.toml index 444fae6..83abc18 100644 --- a/.streamlit/config.toml +++ b/.streamlit/config.toml @@ -1,4 +1,7 @@ [theme] base="light" -primaryColor="#101010" +primaryColor="#9aa1fc" +backgroundColor="#f7f8fa" secondaryBackgroundColor="#ffffff" +textColor="#444649" +font="sans serif" \ No newline at end of file diff --git a/.streamlit/secrets.toml b/.streamlit/secrets.toml new file mode 100644 index 0000000..cd0ee5f --- /dev/null +++ b/.streamlit/secrets.toml @@ -0,0 +1,9 @@ +[credentials] +usernames = [ + "jsmith", + "rbriggs" +] +passwords = [ + "senha123", + "abc@123" +] \ No newline at end of file diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..b8c2819 --- /dev/null +++ b/config.yaml @@ -0,0 +1,10 @@ +credentials: + usernames: + jsmith: + email: jsmith@gmail.com + name: John Smith + password: '$2b$12$E9/VSm92ZHg3a1aX2f.2d.u523u2u.iP2.iP2.iP2.iP2.iP2' # Hash para senha123 + rbriggs: + email: rbriggs@gmail.com + name: Rebecca Briggs + password: '$2b$12$L5/Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf.Qf' # Hash para abc@123 \ No newline at end of file diff --git a/generate_keys.py b/generate_keys.py new file mode 100644 index 0000000..cac4179 --- /dev/null +++ b/generate_keys.py @@ -0,0 +1,11 @@ +import streamlit_authenticator as stauth +import pickle +from pathlib import Path + +# Lista de senhas em texto plano +passwords_to_hash = ['senha123'] + +# O método generate() recebe a lista de senhas +hashed_passwords = stauth.Hasher('ofkdaofkdosf').generate() + +print(hashed_passwords) \ No newline at end of file diff --git a/main.py b/main.py index a6afb4f..e1902d0 100644 --- a/main.py +++ b/main.py @@ -1,20 +1,66 @@ -# Copyright 2018-2022 Streamlit Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - import streamlit as st -from streamlit.logger import get_logger -st.title("Meu pastel é mais barato que o seu") +# --- CONFIGURAÇÃO DA PÁGINA --- +st.set_page_config(page_title="Login Prototipo", page_icon="🔑") + +# --- FUNÇÃO DE LOGIN --- +def login_form(): + """Exibe o formulário de login e gerencia a lógica de autenticação.""" + st.header("Bem-vindo! Por favor, faça o login.") + + with st.form("login_form"): + username = st.text_input("Usuário") + password = st.text_input("Senha", type="password") + submitted = st.form_submit_button("Entrar") + + if submitted: + # Carrega as credenciais do arquivo de segredos + try: + correct_usernames = st.secrets["credentials"]["usernames"] + correct_passwords = st.secrets["credentials"]["passwords"] + credentials_dict = dict(zip(correct_usernames, correct_passwords)) + except Exception as e: + st.error("Arquivo de segredos (secrets.toml) não encontrado ou mal configurado.") + st.error(e) # Mostra o erro para facilitar o debug + return + + # Verifica se o usuário existe e se a senha está correta + if username in credentials_dict and credentials_dict[username] == password: + st.session_state["authentication_status"] = True + st.session_state["username"] = username + st.success(f"Bem-vindo, {username}!") + st.rerun() # Recarrega a página para refletir o estado de login + else: + st.session_state["authentication_status"] = False + st.error("Usuário ou senha incorretos.") + +# --- FUNÇÃO DA PÁGINA PRINCIPAL --- +def main_page(): + """Exibe o conteúdo principal do aplicativo após o login.""" + st.sidebar.success(f"Logado como: **{st.session_state['username']}**") + + if st.sidebar.button("Logout"): + st.session_state["authentication_status"] = False + st.session_state["username"] = None + st.rerun() + + st.title("Dashboard Principal 🚀") + st.write("Aqui está o seu conteúdo super secreto e exclusivo!") + st.info("Todo o conteúdo desta página só é visível para usuários autenticados.") + + # Adicione aqui o restante do seu aplicativo + # Ex: + st.line_chart([1, 2, 0, 4, 3]) + + +# --- LÓGICA PRINCIPAL DO APLICATIVO (GATEKEEPER) --- + +# Inicializa o estado de autenticação se ainda não existir +if "authentication_status" not in st.session_state: + st.session_state["authentication_status"] = False -st.title("quero ver se vai subir no git") +# Verifica o estado de autenticação para decidir qual página mostrar +if not st.session_state["authentication_status"]: + login_form() +else: + main_page() \ No newline at end of file From e78d757e933b4fe51941ca8bee4de4d5d73ad158 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 12 Sep 2025 17:08:57 -0300 Subject: [PATCH 08/60] feature: add new pages and style --- .streamlit/config.toml | 6 +-- images/cofrat-logo.png | Bin 0 -> 50790 bytes images/cofrat-logotipo.png | Bin 0 -> 348675 bytes main.py | 83 ++++++++++-------------------- requirements.txt | 6 +-- style.css | 45 +++++++++++++++++ utils.py | 100 +++++++++++++++++++++++++++++++++++++ 7 files changed, 176 insertions(+), 64 deletions(-) create mode 100644 images/cofrat-logo.png create mode 100644 images/cofrat-logotipo.png create mode 100644 style.css create mode 100644 utils.py diff --git a/.streamlit/config.toml b/.streamlit/config.toml index 83abc18..9558027 100644 --- a/.streamlit/config.toml +++ b/.streamlit/config.toml @@ -1,7 +1,7 @@ [theme] base="light" -primaryColor="#9aa1fc" +primaryColor="#294960" backgroundColor="#f7f8fa" -secondaryBackgroundColor="#ffffff" -textColor="#444649" +secondaryBackgroundColor="#FFFFFF" +textColor="#262730" font="sans serif" \ No newline at end of file diff --git a/images/cofrat-logo.png b/images/cofrat-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..54889704c26deef694a32f1c21b8b53ac4f43f07 GIT binary patch literal 50790 zcmd43RahNOur|7IcPBUmcXxLW5Zv8u;qC-?NN|_n?iSoFxVuA;h0B3&?{n_Y^WXdz zGt)CYJ>6Z^Q&m&-)SBpGRO6#xL-@M9~4h5oowf*$Prae#A_)&c?m z^m3mYSdl<#*~djNpo)|zplXuf_~Qi9LPS9X0H}>acrk(k00y3A#6{FRz|LM}>gi=t zH(`GNMiSiIp13p-@lyh^LwDwCoLv*|>r*OiK9T_X9o8 zF|K(lpOhLNQdANFUOq@TU$b(=E{^EVp z+ppTd9q0~Z`~U89KNRX`h=7|2s7-5e@+REF}+(0{pc zO+tYG&%B2I_l`5%|E(p20Q+PspvHux=ko|~LxjZrJPJpUAbs%dgIYx3|8t8nx@Uy} zY{@?ISGq20Kida{B)@JnOU<30PyZ3yJ|e)0RWb$uH|v{J}BXhTwwqR5QD&G z2K030x-NtyM7?bZy&fwWJ@U$Pi{T=2D_?7#k@oa-1tUKVli1+Eu`qNj#reOOWWM*A z>RpB20q(Lpw$UxebFas(&gQb(NBIR`mpZx~p4+4a{WsU_CGIQ^`1%(rT{jAjPJ7cn zSp&OsI+NjJdz#a3?Z5QmD;>-Bnv3yA>ggaZj;}L}{_K`$+rgmg?6uwh*}>cY?eb0U z5=ZD+>%I>~h@i%J`g!`9=jq_hVAFr|y+G(i?Ed}A;4N)O=o#i+xC8j!^>d}VW5{;S zr2RLF9_VfLBADyd4`}cXnm~HydOz5#@xQU~AACETde8KI!SPSvA6Pwa+9@fSz3Px| zsj6^o->$cqy4@ckQ-67(54P|_;Pj;D5~xBA+s{8(LyrBPT5SauM&hH4Rcb^PleThR z*0nz0`II#!S!eIb=42MQT8M+ILEn)86MoWp`MJ|5eV8vxz9~aYkn<$~m zCoXIFRI9M93K9P1^8L<&zRxIWbL7|kD<}_5l$dcO`A3`ybHaXlr|W*o_O%@q41_%$!ufgQ)S0LlJxkIKAt?*zBHiu($Vk-xk~OdsNBH$(a%u z#KFN~%UQQ%rzM5eZ_w6RpL$-u&^~uI?iPIg`{s9;wFh?R{?d&x|dS+Olz;7JHN*x_|xh`1Z{I5417KyCYwjl)UEH4Pp`_o^hD?ivq}Gbg&K z_RogR@(5#HB&HdPb7sjNp>Eap3L(4vHh5UsDMZ$l;p4v&i@fWi_~omN??9x&yR)7F z9ft<(JO&q6&M8=j=Tp`tw|)EiV$g}G`(SJ1K8pW?*x~!#mdN?Q>Ebz8-zgvHrX8i= zW?^~2ap_?`3I~Mag*cCmgNC}Ylb@1jI!il%Npp@flb-;I8zF@yareeAvc-L8_N~7$ zy?IJ%X3cKg?IxRxxFk;gdYK->Bg6BYf3M?yv`bQm2`I=!NlD;BefA~~17^{jgSqpx z*QhOTV4zEEbT_YIP>a*xpM~6BAhC3xp}$3Bns2g|~d();4ya>>o}AaOYE zZs+i-=BwZ!_^nvd*9br`0c$$qb96IJm1-do`JP+*CmN;O=PG|UC;M%qWc_0EdD+45 zCRpfwzIx*|qq^JA9Tob#_!7!)lbH8U9-S6$QZ>s#~!69LL=4owEd4@A?E@RyceA`=tZ?Y=Zw^@nJWZL;oc6a7Ixh_eJ`x^Eb4LEqM zyOe0pAK2pdkfnf^o$$~83hweYdBo7Vk*#2RS?ZZ_iVz|G3;S3*=JXZs_PIj{w?@Bv zDr}wc6h%@u$Hst8Ysx)yt7F{{bab)Kg>td(t(SDYJYVhqdd%d16{Rut{#5Ple`nz@ zd2xug3h*60ih5)+=(>G7xS2W~y*XLmo?Z-EiD)=(FHWWdA%`0c7oF1jhTGVc4p&iu z&O~V(X0i4>t=aJ}6PGz}nmOxY#jt}6^A$ow$D<1*^mAamUYQ?FlHaItHo3a{|Gv#w zD4hX2vet3hiCG{0$kR)Z>{MqLV_nE*9Pww}*F{cmT^!%}Ht~Kib>SYt-EN_(j`cvn zA!mQ9KGgT#ICe1T_Pd_BIoy1|?|xno6rWg5OmbFur%af=-N6f&`@f?N{Z>bRG;)A z7WC2dE-jhcnapag=CinbyJ*gN>%HM}$abl&(g`+H^9IhH#((+inyHKskcSQbjb7Kh zTa2tNdLg?_=!#)?lD)jwaxUV0u*!OJu+CJrL8KI2urTT{lz+8`>Orsri~`w>!|) z4F=;@#|hmt&8-(zqor*9RE4Q!omp(}-}{28;wX;D=5KhXG=!TJ@_#gKLC{2@R7cN& zO@4GzyuM$_s^>er9K8;&6F7xNn>V~(yWg+Vss$g2-@-56FD-Py`D^wjxv8_Z2yzb z$-=O+vOEE+y@NPsG#<#cx{nYnzpqO6I+b94xzKpsNIK1SbGdzb%Q($YM-7WTDjSJ|~T@;5az!$rYZbtF)VdNGmx`ISqj*1QyF$8Ik^i0#!H|gd`OyUYimt znAY@5_MXvN? zS+N`}B~v;RfGlp=@K92szoym7_V;zOE5%f{lNBI%(C#JnSr|BUTxnNKCCwFSdlrH= z80x3f0#WDw@N?GBhM1l>%dVrVztEu@-DWf)rQCuFhk@J(my*45%erxN>-XL~BK4`R25-4}UkzmIu5;F5a7jvM*qYT)=qTn3 zRnX%!L<6P@tzGBdx>uHgp1xwVs%;~gQzJt0RlDE&UVU}9;QQHQ6rX{9Cl4WVm_07E zD8f}bk>h}Ldog$!oLYyA9v)$Y|WcS^?b&)=+##m&r4 z58yKXzn-|D+~}wzb%7jzc3l2P6k`9E*Y2mM({AAUWzJ(&!D_k~??m0zRvng8~6l)9dw3n?dPI_t`&$(E^fxvDmZn}1K$T@nCuT*zQ<<)x<7ixByDsjhX@>5NE0ymuY6iq%b z7DQS#U#D8vzp)f9)ou^>hvD6p%3TZzBS2`hzk8j#>E*=TIda4EMQ4qsP4O{pc35rP zdUYZ8u`*7sP|@?gAI&Kdzdy(MzplT(y63$AbDr+rMUZN=@k2d+#A5@GmZ>Br6SU)y z#e&k<&zaGir_Xv&H1m(D*vyI}-cFjbFv<47uP9|On#B|UW`Zfvz$)P3?B@2S(CmJ_ zb5iUyaRq(x& z3cLrt1ELcSX*QBC89yYbWrEx(C&3} zG`CpY^?dfYC^XIJP*S3o=fE!%yJ6gPt^gm-Gww=L?cuk0COub#`8uikETv5kd**uF z(m1yL4`%e{bnT|UW~Svs7bsRey-IQ+g5LjGT8yC@<~lcg<$)dkdv59#5iMr!bfm;+ zxKm^6M=+QzV5Tl}Jt2u^#{&$J!^U=gpkQ;%AQEfui`Jo(q3(6?>=}LIao6BXcq}K- z24)+y2}v~P+~o40BnY4c`N>cjkIv)#Cg)e(O)?%D<)=wr?TaDPn)924jv@<}$Xj@auYOXJ5Fm|o`VMSL~&hS?>hd*0k$~pRz@J{(qOW!LgA3+>u z?-chznLkYP_CbhilunM{t$n8n87mj!s41mp&|g37F_C->y9dk1w_Lqy5O1UQr8T=X z46FVb?f@K{WshrdQhxAx!C9^xm+y8Ri8)rqqfzWC}_(`l3BR^}u_{E2kJ3s2;eSo98vNvK6Vpd==_(Pgrp@6aE+@j@aE z%XSkxxj}yfc~OWz((#sqL*kYa$U`?AGqT~@Lp*UG9;Pp|kh z^xWo-q(pkfNX~p$qNoKII6_YETAU|4D`vxY4Kq4A!Q&v7Oc=9dRoIE*D>u#;8NrRq znc;crx1lpz2Zk#sMVWPP*tFZndFpR2g3CLgUpqtVmUU_sU@Q`5T8nJhH+n6~HXilc zymP9Wb2N-=_DmC>VJAiRM;iDFuEadK4pkp#Y!;1R)RWOW1`CS@fGLx1*f*P%G8oG1 z^!(I&&B7bMacx*&OO5FM{{0-{nx2II80g_uUDJcLR*W{g6IEyUn*=fHq5+XwQ@rfk z`c)Xmb}aukBx#!V{BfQT#uwYyr21zr->Plv$)Sg7#wL0?!PbCeg5KCZv8ip5mdaD( z*L;%6B~vpCj&@LSCq}q2rNlxciI@bQ&EWuu6bgB0$BY4fjrWmVun^8vQ>DDyK$#b1 zbT(ry)0+=li1K*W*1W_tDJ$V3JpFa;w!Kg&6627naSRmNIRg$OP|h(l+rL7uB~E$J zMPB(+nMy?25=ukKp#bV9q7+0OP~y)v<_LpbEY&f+7YtDe0W%!MJU8V;rb8L!J)$Wt zQ?7D^4VUkzz7$ z;kZhNhsQpuWx*tZz|4t@h`EpRLtc=!9-v?J%yW5j#_DS}Zp4aFko==s+$EzD8}`Dk zr3yO|#NexM&&rpq&4hkMIORULGgeWyrQSooW`&VaJ(Wf?ioYTqm`HC}99yzA+K(04 z(lyr~Tfy#KHeSTb7W@myYk#wrJo0+C`WJRu=s- zZ%Hc20X2qdaBxlot;R}<_x)((@0+Qoh0xl{xb0k~;NeR^hR6mJ=OM0R)3Vcc;m~;* zI*jG(XrfezNI;;h>K=S-p*)P%lq*aZ`4iEhuW$F^X~q_r^cthNSrNnD#GLV@3{hwW zXkAm4l4y5X0b^*Q-}qDl$81OTJKm+9ZL92_C}*P8P9uA4Arm_A@D_uZm;( zP-V6&SzYQls_Wp#MTCL({9Q*BU*$nm zdsb3frI+v4g0=k7%(AP13|L<>`>eJXW@R-QX|F<_DNT&j#6wdd-X`m$pi%Qw$V7jr zLIrme%;hn>&w{wa=sPXT_tNDS9kV)x{C?AyoQB{6+wt0hLTS2&uf+D&t7aA^iZ6m? zd=cONP%=oj#OK|eKo(5r@eAfPu~?R??#@q4ymGy6be?W+P3}9o+{Z*)Cx_~r?VOBn zbvVk;<`AQF4WfYta4KLYB*l0fHgK;}xncrGHJd9QcJc(PzD+oVol91(R&l{hXxpik zFG?Y8B7~5W!P7?I^JhmPI#wR8YbReI$Z30lF|#s%heP@#MC?}8L*urS4;#vs$aob$ym zutjV8#NJ}e6wjTVpcLW3pp2uZc?wP@;Ey4eK>h@ns~NJs-wYi;QyJ2qj${`3avnJR z-Q_gX#`gOKF~#<075F)9Zk9xC%?rjcY111*R@_olg9q)>hmihgcHf#tLN4V+GPjWQ z&Lp{&$>dA7!BzPz9%uixVIpcuH|X;9`*6*zb-q8Y*DEeoH@B3|uSu3mh-~a}Zfl2J zDWg<1jApaPn{24AlwvR(K@L#NxZP&D&CJ*kFa(9*>ePwC2a{eBD!fvE+m{b%GtF)& zCiEJN8HkL;z)Ej{leHW^gRiG%y)@)woa2Be@3^JLe>R4cgH%%CVw4q(R1cSXPLs+h z3W+Gcwq`6-ErQV&gawz1g`Tm*trIi($iSm^ZcRxVjRy;opW8p77rU#=}Xi(ASsGr()rMQj9|W^-s)U%K&X zl$^W0pY0VcT5)(~?}m!t!rQF_(ZAbmMqBhZa_9yDqtGHCI<$Cd7u}ZV~yLe26z0k2t@c4+n3_-KnERfrj=40_X zpg3) z{tCLEniPEWMj?JZxhE2On}2nCb}k%9!{+j9Uye>bq@g7suon3vz|@)Rfvc#mD`I#U zcD3tbfMWXOUYFH54qoZjvXM+LysbtA!yuQO@u*Lv^Dhfzkq`j46JY-I%f+;z`?!gR zmy63!h{?}EHj(FVx7f-4v#%Y5E!0zI!Px2C9NSR4)ndoA@9WArbno&a*J31r-1vx> z%~B>{{clIwLH;oC!rYSc*9XlM4_aut=$S-WTeL?`9I1Y{>vwN^aUI4Cjtx~Vq}}sn zX;8%sPFPjC%{jf=EZ$445FaB7gtN9-NYahyQO@=bn1ga&Oecp%id$+CwB@MLKKu_l znroi4agic56&{J|hEtv>=to-3*`7?!RCFeHs_aY4JHtssnM7=5?WOXKsDl$#Q~p~# zE2~G=e2%F66;d<42BY4zu=z8V;vnCZ6{ra@x-O6O$zZ0&7hD4t&zuoWz7^3)Dqcun z&QC8j?ZAPG)dY1V6?6+p##&{%X;Lle5s0x7*x%KNo!|P;YU>3rA5L*a65$C4sGz*a z#vb;F3RkNOI%lg3Sf3NxWO0amH%hZB3A{%?ajT8RpC92&>(A^aObLyze%W zsJb5unm3-5-v9A!J}R{taQr^VdB5?$czG9kl78Kz68a|edilopw&8ubjBp|)lLrvBdiQ$2$rUFw(e>|G zwJDPL^++m-?NmK#6%!@;wNd5GzZm8~vS2$bx;balg&2XYfT}>{?zFIeTPqoVYE~~z z;Ow63%a6yCD!)u5J=X4v*h!spu6vzI2cib;?q|1h&{)&14?|d=&CKcg5!k*0wK$2D zRamm*JEh2<ot))c2u6cM{Z>v@Ih7Vy_AVDnb{ znI~s7Bjv0Jvef^K=j(hIOgYcLOh7w304CkfA1?K~9bXoNVm*e4GMu=K?QdE`^)~bO z5-+Y~RV_>^78t}aKEJMf_gDT>mcU$2GA^3RGl*S2c;2fq_+Z1Douo<6cV$i#rA?n- zL2^i``kuSp%B3*XZvXf;Z&mQ7y?KdnA(E4<5MkK?#s1^W+jZ&i?VsXnHvBZri zqVV&VlE#5ANVC<0r}G{n7DdAR=B&m-aO5h`+4}jO6s5n3+ue;GO!mlnMW=~O5fWwru&uukct4QzAOBp zd!+siPc#5EIFOhX&00;`g!WF>P|hT8YtAkmM~V=w@V;nFqkQ-OJzaaboZ_$*}7S4iVY)3 z+-IPXR$%*9C;RHctQ=7UQ@9Po>#3n+EFGaH~0m49*dn^L1(nEU0$I5w1O$Wn~a&8&9^(RLaJ+|DIjmmAV12# z5Rb?MO)fZ|^KA14(S<_3%7x4hDTW1;8z8A&oxFj3Yi?FF$YsarBS_HcvzgXAFz|0@ zB+2OTpm>vq$7=2Q!hQYOq5Hf6KL(jkz#Gp?|InQIHtY1%>+G~47(}*k+f=mh6D#8z z!QS;<@)ck9nKw(x?|r7A+xK~+ldEK+coy5%t$GI6qv{JX z=#k(X#B8-(EEb&ClO28Hm2cGmmlDz3LcgUVpJs%g9xF*nHI-a>lYTKNlo7Ae-^8J& zI0=k&=DIs&a+llJe%^E}L79x=*Vv^N0cCodF;|$jfiT~}lblY^n>&YWf%Z3r&Y8u_ z)2@yV!S?Nfwys-HEDhI2!Pi5dv#iF=D6p_T0PUzGQd)*t@b8PonD!c;&2|V@%Lv*R zNwIc&0&;x`%HqusDT%SPfCQz!nMrDcxFDicG?^ZzP_g6f+DaG{yZx57P5bU^=-|WP z#cBhe*Jl4Oe%Iv&BT9a6KoybN7%{Hu=8g1s-(q^r6iT{(mI3d#s;sFqCfj`e@0SKg zLu)s4s`oG3ef8S)o-C+48&RjHsWQt6{fHA7o7N{>T7u5nU9(t!9>p~?F*FbA%ka}0 z;6$d+HE*r3Zu=BZ$J{5U{9iYYj}1COl@6V@M-vz9_%G2cyx0kX&>d2Cq6m4EzLBm1 zKu$N2jA!k_f08e_>rC2!j)V@zN4{q--)pB7i}NfoGW7PTdHv(6_W20NacM!ewu-@$Ou?RCRe~bS z!oGAa{R0Z|8{tFg2Z&WAh>Y z>PcS6c4-L`yIUj?#uiP+MV=mg*t$fIHn`sH`J`jc6N}&bZbInU;e8bcsBg6(jj532 zWH_w!{@U$-^>0tS)_rro>oBYR{4OIFwX@CO3mlhBc#S-Wg64Zgb9BXbw1EJuih!Ev zesI&B)Q8Nhk){C(K#p#_*F8ww*rQ~w^sVKD7GZhjzX(Y?jwAMCT%QW{5$UvO!Sf2_tKeB7C1d-s)$fQdwNw zHst;rZiAaH5iKg66zQ7s<6wj-yXx;8Q^S?Ps{1{YJsKr6yW(Y0w_N81Oi9*Fmm8nk zd%62&=!5p3Br2t+?$^Dfj8mNIc5Ci4E+7BD_MD;&!(#O-oF;c6ZKEh3zB2lx7%r)` za=lfDAafcvYg`FqT*wPR>J~qDV3X0X@TP6?ExWn%PA` z&j{`6FoKzHz54vly|{mGB5tq?J#0bT`bRkh&&_G0hJpM_Pdc}277!%$aaCd)YWuY# z_3o^2hTy!jEo;Hsz0*=8$)ICwY|I2XQq3c#&2=~LM=CFPL2cnpHJQZk4?`RN4^iF! zgq}};;j%%VUDYQsskaJkS!HgH+=@??!IChvaLrLM9t4o%8al>_TM*h*3@vI2Z17^u zLbxqlecO|N5^1C9Xruy@$tXw%=OB}9sW3M5<3v*j2h;e8(`l#`%v>dnw$>3PL1S;Z z9QaV@8nTU>{_no5BfxPD;-9C2}ARJ=fzYh~7 zISY*KdW%j38@7LcoqF&3G&p$&y#2=uf~wPNr&+NP;320xuc4hdi^NF-6g?ui6C3_E zuO<>zR9*uJpkVFT^yh&+aKxa&588!RLcH6~jb>DZT~WN%xOq1NJurIBNW3{=5rMpV zsI|P31ljviAoHDOvM+uC#6!DhpPP&$y{{4)@WUs9K1t1GVUUC`r{D~@iJQLXT>`|-$Kj{=7n2);< z)1F$8mm6xr_$_&4C#$sldyWm)u1uhd-GEcHAJqk04S^jsI|iZs=nM{T=mG!NV8oOu zG6Y<29vcYNFHJ}p?POD7BSX@Pu0rGttS~EehexZotAR53pte$;;@d!z4wwb9Y;1F` ztzo?DNalXQfKk$rnj1z{B=sw-fuliFvLEAL`bF9?l}Cl`7fwvLGEX=bkvPUWWF2(` z295Y4b@%|5`6lqWRQWpl^M+1guut2LNwDlkprx9Ac1#RYm=5-L%{$Mwh+9FPn#Koo z5mfHZ-X6OJYh!Dh_@cROsx01W&+GyVmLOx1;|G~hFwWj zVBs@{*q_K~%wNm+X?L!@u=b_j{~icv))rt(#mvwm(oXb2Y&LHK4*eNr4NNerO^n@a zM`XW%imr7stxV3l*n6*6tc{I(G_{`6D)MBQjq}!EFjEGPyuVQg@6JGIXdnmw)0PfL z9R5obB4rnlN}{T7mhgAL)G$mpA_NbB6{3==YPBbg-T5%Lg*lLTw$?S(6Nv6jGo+Wt zT&ti+(2R~4j?3>%Qa?Zz=}o%(6ijNO9$**sLQ9|B^i7Av200~ycME@}$S~+Jq_V~y zA@(o^3=kE7fUbtk1M=n=@#*7b1|j~O!JNF=PS76kGc7|@(83mEIc4-aAsFYoVZm2; zkr|}??)bI5m2+gCxK>ZugEcHw8L@Yl8Te#!L96LfBq96^k zj6!Z{j=~fQMlbu@sU38xh&mlDv3SZ`OZ=|}Vjs@?1$JQ0+|4U1+cp(~rP|eZkBH;2 zx|^sa^wT}wOU51~xKk2s;3uH>U&mxxSZ`IZ7*OT|Z47n+JByFcog*_&)= zx++rHOyIu5R1rKGv1^+6NFAH|G|>wSNjo$F0zKgfwncYJiD;fYdo}imbmrjl5@r!uqK|wuo>E`!#HGF$XTChj>x}>jmtoB zj0Um7Mnvw;@;p(+3T$#Y7H6ml_9#{u^zBq1)bvP>vSe*-E5=y?^{Xf8FXYhdrEP!U}B*aZX`N<3Q}$6In006r+7wmN>E( z6Z~&-BxIY;;`OFX!}j*ShSqvxY?>FgPvH5 zVOTeMNq%;Km2a95j`W%3=oX&UsR#ZflhEVQtWHT9q3y%r-oD6zUBg_+ssTguCz75_ z)BuuJ3Lk=!)1ix^+wh&XXC?gQ4#F*obw`{6GVG+02GzQ83=P_|<1XWv$gqX@IBTr% z2;Tlf&d3m?3&^DF_hr?n{>~%=?_9V4iTnpg2lTf4J!xkMQ) zcpHVX7Hepzu*6b1$&-3iAVWeYbwUz z$$M_2QflJdnpz2E!}fgq5u6#KJII7bEl#cGgZ_ZDH64z>bHcw08`@fp4BJhWhFA)X zC&@o!BKt?uzpR#|i{T?pjA7gLpqmi1_*-hqG{>6!#ARs6Y^ID)$p#aV{&W&x6G>5# z%gWM^>1*ji3-6EUU;bkcb$_KR=E!rx`1MnK$jAW| zqUp;+Avci!(lCw>y*7v(EZ@fBXKzEkZ*jwbD!RbdqagHpmLUpToc)ZiUX3x{5+LP~ z=kaICaKvhJlap^uCsc%HZ$glwTlvy>b4B`56REPWN7}!vL;o?Ze^=b(nW%i_s&K5Z zL*EoJ%f#ddBgHEK0q5~9jG1-%7y3WeS7>Exu-%w)j?o=2D&j8AE?1CijfQ? zHsVqD&jM~FrUr`8sQpcF>qNSzs;a7%aLycs$8{cr6z2iix3g*`Q>UUUzVYOe<;gVj+qlr5Ui46!6 zA?ctcnUu9Cf;sloHCdKYn7bG}-ktMXk`z$}T7c*<6U)8LhAj4t&QU7Lo|{+}KEOTh zOYMX{nG4IZN&{0sR0D!DW|(Y7&w;%+;^QCKkF}@;xmr+hA_aNKUs={NHx+|WQ;jh2 zoQu7O-(MiUko7Z)5GjAxc&*$mPU!{Qh9pT1-Pv5CpqF5k;7|az0^xdgspsHscZlS_ zMeyS$VBj=89>!K`=?7kR>|pyP0T)XEDTZIf*-&0|{%{!S5>UsdgxOaoSbiN~1EzCH z9Y%VJ0(}-qh)pd4iJZ-Kb=g1{KMc`C-lFpC6cBa)1Z?B|8>Ab7uEq5}yG;gny)1A# z!W5j$i4W)bFRIt`>Pab*-o!MlIOCM{*pqHb8>`ar1E2h{{)rqme%>wy;kV5;TPF|k z(A&TMEO#NkJ|8BKqhZ}X>@hhJ4)YDvlT?19jW}WoV{N z$R^OW=SJp8z9kF3q|BJjAynqFHedzX@oJGrA%u*jA276}C<(gA;(lm}wZCkR`x zoO3W4#GlfNTsv)UaU*mr-fQ#ucK0qnBJ?aNdh?l0NtiH3EIqCSHAG!ZdujnGyP}&u zLkYTn0B*Lh0^XB@p~8XdtaMeviab5B6h%F?sK0Kkiu&X!Ba6;SoA^d|YxqAF8n^Uk zFuA{{(pfIpI(-_0X!tdN$zSy9maC-aw9`llJ4p>$1<^QjvOpTP>(xpX2I{OvghATz zAH@yz&)%jf%cnpc_*jW>*VUiXAmc;9Bq>{_N+a(=g!`;N_o;C{ZAU>?aqG;SR4IML6%G6^Q2Hly`v1N`;X61$R`e7`-MK^OSnis0jKyRv2W%T-(5OTf8C5gLPrdv30J0}Hh z1Fu3SUEpV4!4lH6zLfY`t@^P8&_ahSI!*|EP0*3!;1gJs*gy-dcd|em9OXCm4;04| zHb_2zUurUg6=rK=8oI7VQwYUms74VH*r-fxt`GmA66%z9_pLGX008RH*0fywjGiVD z%o$L1G(mu?tCaj-koZtLDXQTXs<2eeyi~Rs|i+420MpbM2 z_X41MVyVqvdq{vJrZyt^WRf&nD<3b8?q)voo@jqBY#9%MFF3#(3h{4vcyv@;DNmSG z=DFy902e<$MSE%BYZ3x_;qfrjW$TxP09AF~p@BMiV2qv}P8 z8Ql&yx(gvAZ2u-@uB7 zq|4G;EzC0LUmH?ggeDJqtv&pQXm_G;h5SG%WnZ(Wtm&D%#uE!(GTBFo&@zfImmiYM zIv^C_Z~4(fe0Ee7+B1OCQ<)3T^JA-%k?lh^74-qNB7_!h{KzqxhaoDnCfR3zt*y1p z{Xvn@HO%t-?MuvqOi3`_D|$=(0f3fs%B#^m9GQ(p`7^QN`$%-f@My>7&&(LnBjiK3 zb8LR6JdbSOEs)I}3j_jOy?+JE-11Heo&;JyTj{55>FiP%^6;DbM7_cg2n)V2->pCQ z8b{h2ned)i&mzVT>}JRAz^FQHuBbnf3l%mK`mg?pD8i~a7jCX^oG^gc5rz;)(0hg`|OiWn(8>k0k9AOAEE!q zd{jpSPEx}`@VgJ!b7+Qe2pVaWInkJ>rsE4h6aIr>1XRno%*uF2g%Y*~H7tgPEQ^ba zwy0sYN?Ow}!nc8|1(sEO|IxmxO7_%L1~nRYiBo1C9ex>sKTg1beL*nXIDCDfR=bz+ z){Yy$))AGJ24VPskceT(i5U&TTMF$HSMhsj84s>xqTQ>(vMZe;F!FJX7ovG3Kqj*VX&UNmRP;`nK#G_vu_C-ELF^&;Pd}w zEkr$V<=C{+UWCGKwG9tY(kYb{I4v`{apRU+3}b9!*Lh;sWQL>5B*tN7x~E<~1%0A< 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 NGLi}s)ndTF{{y)u>f8VT literal 0 HcmV?d00001 diff --git a/images/cofrat-logotipo.png b/images/cofrat-logotipo.png new file mode 100644 index 0000000000000000000000000000000000000000..a135e39dbd050ac94d7e5700f914a4ae3eae1ccf GIT binary patch literal 348675 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 z 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Ō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 Ik8R%kFEJzZ0RR91 literal 50790 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%0A< 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 NGLi}s)ndTF{{y)u>f8VT diff --git a/main.py b/main.py index c12d7c6..7061d38 100644 --- a/main.py +++ b/main.py @@ -8,7 +8,7 @@ # --- CONFIGURAÇÃO DA PÁGINA --- st.set_page_config( - page_title="COFRAT - Plataforma de Gestão", + page_title="Plataforma de Gestão dos Atendimentos", page_icon=LOGO_SYMBOL_PATH, layout="wide", initial_sidebar_state="expanded" diff --git a/utils.py b/utils.py index 88f74b4..8828153 100644 --- a/utils.py +++ b/utils.py @@ -305,8 +305,7 @@ def fetch_metadata_from_db(supabase_client): def get_daily_agenda_from_baserow(api_key): """ - Busca TODOS os dados da agenda da API do Baserow, tratando a paginação - e informando sobre registros descartados por inconsistência nos dados. + Busca TODOS os dados da agenda da API do Baserow, incluindo a coluna 'Status do Agendamento'. """ if not api_key: st.error("A chave da API do Baserow (BASEROW_KEY) não foi configurada nos segredos do ambiente.") @@ -321,9 +320,7 @@ def get_daily_agenda_from_baserow(api_key): response = requests.get(url, headers=headers) response.raise_for_status() data = response.json() - page_results = data.get('results', []) - if page_results: - all_rows.extend(page_results) + all_rows.extend(data.get('results', [])) url = data.get('next') if not all_rows: @@ -331,11 +328,11 @@ def get_daily_agenda_from_baserow(api_key): return pd.DataFrame() df = pd.DataFrame(all_rows) - initial_row_count = len(df) + # --- [MODIFICADO] Adicionada a coluna 'Status do Agendamento' --- expected_baserow_columns = [ 'Data do Agendamento', 'Horário', 'Nome do Paciente', 'Convênio', - 'Evento', 'Profissional', 'Especialidade' + 'Evento', 'Profissional', 'Especialidade', 'Status do Agendamento' ] for col in expected_baserow_columns: @@ -343,6 +340,7 @@ def get_daily_agenda_from_baserow(api_key): st.error(f"Erro Crítico: A coluna '{col}' não foi encontrada na sua tabela do Baserow. Verifique se o nome da coluna está exatamente correto.") return pd.DataFrame() + # --- [MODIFICADO] Mapeamento da nova coluna para 'status' --- column_mapping = { 'Data do Agendamento': 'scheduled_date', 'Horário': 'time', @@ -350,29 +348,16 @@ def get_daily_agenda_from_baserow(api_key): 'Convênio': 'insurance', 'Evento': 'event', 'Profissional': 'professional', - 'Especialidade': 'category' + 'Especialidade': 'category', + 'Status do Agendamento': 'status' # Mapeia a coluna do Baserow para a coluna 'status' do DataFrame } df.rename(columns=column_mapping, inplace=True) - - df['status'] = 'Pendente' - # --- MODIFICAÇÃO: Tratamento e verificação da perda de dados --- - # 1. Converte a data, transformando formatos inválidos em 'NaT' (Not a Time). - df['scheduled_date'] = pd.to_datetime(df['scheduled_date'], dayfirst=True, errors='coerce') + # Remove a linha que definia um status padrão, pois agora ele vem do Baserow + # df['status'] = 'Pendente' - # 2. Remove as linhas onde a data resultou em 'NaT'. + df['scheduled_date'] = pd.to_datetime(df['scheduled_date'], dayfirst=True, errors='coerce') df.dropna(subset=['scheduled_date'], inplace=True) - - # 3. Compara a contagem de linhas antes e depois da limpeza. - final_row_count = len(df) - - # --- FIM DA MODIFICAÇÃO --- - - required_cols = ['name', 'scheduled_date', 'professional', 'category', 'status'] - for col in required_cols: - if col not in df.columns: - st.error(f"A coluna esperada '{col}' não foi encontrada após o mapeamento. Verifique o dicionário 'column_mapping'.") - return pd.DataFrame(columns=required_cols) return df @@ -399,19 +384,15 @@ def clear_filters_callback(): # --- PÁGINAS --- # --- PÁGINA DA AGENDA DO DIA --- def daily_schedule_page(): - """Exibe a agenda do dia com filtros e funcionalidade de upload para o Supabase, com delay após o upload.""" + """Exibe a agenda do dia com filtros e funcionalidade de upload para o Supabase, utilizando o status real do Baserow.""" - # --- INICIALIZAÇÃO DO ESTADO DO CONTADOR --- if 'countdown_active' not in st.session_state: st.session_state.countdown_active = False if 'countdown_timer' not in st.session_state: st.session_state.countdown_timer = 0 - - # --- NOVO: Inicialização do estado para rastrear extrações pendentes --- if 'extraction_status' not in st.session_state: st.session_state.extraction_status = {} - # Conexão com o Supabase e obtenção da chave Baserow load_dotenv() try: supabase_url = os.getenv("SUPABASE_URL") @@ -425,12 +406,10 @@ def daily_schedule_page(): st.error(f"Ocorreu um erro ao inicializar a conexão com o Supabase: {e}") st.stop() - # --- GERENCIAMENTO DO DATAFRAME DE ARQUIVOS A PARTIR DO DB --- if 'files_df' not in st.session_state: with st.spinner("Buscando metadados dos arquivos..."): st.session_state.files_df = fetch_metadata_from_db(supabase) - # --- SEÇÃO DE FILTROS E TABELA DE AGENDAMENTOS --- st.subheader("Filtros") if "view_mode" not in st.session_state: st.session_state.view_mode = "Semana" @@ -439,7 +418,6 @@ def daily_schedule_page(): st.session_state.cat_filter = "Todos" st.session_state.status_filter = "Todos" st.session_state.search_term = "" - # Inicialização dos novos filtros st.session_state.patient_filter = "Todos" st.session_state.insurance_filter = "Todos" st.session_state.event_filter = "Todos" @@ -456,22 +434,15 @@ def daily_schedule_page(): col1.radio("Visualização:", ["Dia", "Semana", "Mês", "Trimestre", "Todo o período"], horizontal=True, key="view_mode", index=4) col2.date_input("Data:", key="selected_date", disabled=(st.session_state.view_mode == "Todo o período")) - # Linha de filtros expandida para 6 colunas f_col1, f_col2, f_col3, f_col4, f_col5, f_col6 = st.columns(6) f_col1.selectbox("Profissionais", ["Todos"] + sorted(df['professional'].unique().tolist()), key="prof_filter") f_col2.selectbox("Categorias", ["Todos"] + sorted(df['category'].unique().tolist()), key="cat_filter") - # Garante que as opções de status sempre incluam as novas categorias - existing_statuses = sorted(df['status'].unique().tolist()) - required_statuses = ["Pendente", "Reagendado", "Cancelado"] - all_statuses = sorted(list(set(existing_statuses + required_statuses))) - status_options = ["Todos"] + all_statuses + # --- [MODIFICADO] O filtro de status agora é populado com os valores reais do Baserow --- + status_options = ["Todos"] + sorted(df['status'].unique().tolist()) f_col3.selectbox("Status", status_options, key="status_filter") - # Filtro de pacientes habilitado e populado f_col4.selectbox("Pacientes", ["Todos"] + sorted(df['name'].unique().tolist()), key="patient_filter") - - # Novos filtros adicionados f_col5.selectbox("Convênios", ["Todos"] + sorted(df['insurance'].unique().tolist()), key="insurance_filter") f_col6.selectbox("Eventos", ["Todos"] + sorted(df['event'].unique().tolist()), key="event_filter") @@ -489,15 +460,12 @@ def daily_schedule_page(): filtered_df = filtered_df[filtered_df['category'] == st.session_state.cat_filter] if st.session_state.status_filter != "Todos": filtered_df = filtered_df[filtered_df['status'] == st.session_state.status_filter] - - # Lógica de filtro para os novos campos if st.session_state.patient_filter != "Todos": filtered_df = filtered_df[filtered_df['name'] == st.session_state.patient_filter] if st.session_state.insurance_filter != "Todos": filtered_df = filtered_df[filtered_df['insurance'] == st.session_state.insurance_filter] if st.session_state.event_filter != "Todos": filtered_df = filtered_df[filtered_df['event'] == st.session_state.event_filter] - if st.session_state.search_term: filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.search_term, case=False, na=False)] @@ -508,18 +476,17 @@ def daily_schedule_page(): else: st.header(f"Agendamentos de {start_date.strftime('%d/%m/%Y')} até {end_date.strftime('%d/%m/%Y')}") - # Cálculo das contagens para todas as categorias + # As contagens agora refletem os status reais vindos do Baserow total_agendamentos = len(filtered_df) confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) reagendados = len(filtered_df[filtered_df['status'] == 'Reagendado']) cancelados = len(filtered_df[filtered_df['status'] == 'Cancelado']) - # Exibição das contagens com as novas categorias e cores st.markdown(f"""

{total_agendamentos} agendamentos - {confirmados} confirmadas + {confirmados} confirmados {pendentes} pendentes {reagendados} reagendados {cancelados} cancelados @@ -1097,144 +1064,239 @@ def reschedule_dialog(): if st.session_state.show_reschedule_dialog: reschedule_dialog() -# --- PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- +# --- [AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): + """ + Exibe a página de confirmação em massa com filtros avançados, resumo de dados e preview corrigido. + """ st.write('##### Comunicação em massa para agendamentos') - st.write('Esta página permite confirmar ou cancelar agendamentos em massa, especialmente útil em casos de indisponibilidade de agenda dos profissionais. Agilize a comunicação com os pacientes de forma rápida e organizada.') + st.write('Esta página permite confirmar ou cancelar agendamentos em massa. Use os filtros para selecionar um período e refinar a lista de pacientes antes de enviar as comunicações.') st.write('') - # --- DIÁLOGO DE PREVIEW (definido antes para poder ser chamado) --- - @st.dialog("Preview da Mensagem") - def preview_dialog(): - message_template = st.session_state.get('message_template', "Olá, {$primeiro_nome}! Confirmando seu agendamento de {$modalidade} para amanhã às {$horario}. Atenciosamente, COFRAT.") - selected_patients_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] - - if selected_patients_df.empty: - st.warning("Nenhum paciente selecionado para visualizar.") - else: - for _, row in selected_patients_df.iterrows(): - with st.container(border=True): - st.markdown(f"**Para: {row['Paciente']}**") - - preview_message = message_template.replace('{$primeiro_nome}', str(row['Paciente']).split(' ')[0]) - preview_message = preview_message.replace('{$modalidade}', str(row['Modalidade'])) - preview_message = preview_message.replace('{$horario}', str(row['Horário'])) - - # CSS CORRIGIDO: Removido margin-top negativo para evitar que o box saia do container. - st.markdown(f""" -
- {preview_message} -
- """, unsafe_allow_html=True) + # --- CONEXÃO COM BASEROW E BUSCA DE DADOS --- + def get_confirmation_data_from_baserow(api_key): + if not api_key: + st.error("A chave da API do Baserow (BASEROW_KEY) não foi configurada.") + return pd.DataFrame() - if st.button("Fechar", width='stretch', key="close_preview"): - st.session_state.show_preview_dialog = False - st.rerun() + url = "https://api.baserow.io/api/database/rows/table/681080/?user_field_names=true&size=200" + headers = {"Authorization": f"Token {api_key}"} + all_rows = [] - # --- INICIALIZAÇÃO DO SESSION STATE --- - if 'show_preview_dialog' not in st.session_state: - st.session_state.show_preview_dialog = False - - if 'edited_df' not in st.session_state: - data = { - 'Selecionar': [True, True, True, True, True], - 'Paciente': ['Maria Silva Santos', 'João Carlos Oliveira', 'Ana Beatriz Costa', 'Pedro Lima Silva', 'Fernanda Costa'], - 'Horário': ['08:00', '08:30', '09:00', '09:30', '10:00'], - 'Modalidade': ['Fisioterapia', 'Ortopedia', 'Fisioterapia Infantil', 'Fisioterapia', 'Ortopedia'], - 'Profissional': ['Dra. Liliane', 'Dr. Roberto', 'Dra. Marina', 'Dra. Liliane', 'Dr. Roberto'], - 'Status': ['Confirmado', 'Confirmado', 'Confirmado', 'Pendente', 'Confirmado'], - 'Telefone': ['(11) 99999-9999', '(11) 88888-8888', '(11) 77777-7777', '(11) 66666-6666', '(11) 55555-5555'] - } - st.session_state.edited_df = pd.DataFrame(data) + try: + while url: + response = requests.get(url, headers=headers) + response.raise_for_status() + data = response.json() + all_rows.extend(data.get('results', [])) + url = data.get('next') - # --- NOVO LAYOUT DA PÁGINA EM DUAS COLUNAS --- - left_col, right_col = st.columns([1, 2]) + if not all_rows: + return pd.DataFrame() - with left_col: - with st.container(border=True): - st.subheader("🗓️ Selecionar Data") - st.caption("Escolha o dia para visualizar os agendamentos") + df = pd.DataFrame(all_rows) - selected_date = st.date_input( - "Selecione o dia", - date(2025, 9, 13), - label_visibility="collapsed" - ) + expected_columns = [ + 'Data do Agendamento', 'Horário', 'Nome do Paciente', 'Convênio', + 'Evento', 'Profissional', 'Especialidade', 'Telefone', 'Status do Agendamento' + ] + for col in expected_columns: + if col not in df.columns: + st.error(f"Erro Crítico: A coluna '{col}' não foi encontrada na sua tabela do Baserow.") + return pd.DataFrame() + + column_mapping = { + 'Data do Agendamento': 'scheduled_date', 'Horário': 'time', + 'Nome do Paciente': 'name', 'Convênio': 'insurance', + 'Evento': 'event', 'Profissional': 'professional', + 'Especialidade': 'category', 'Telefone': 'phone', + 'Status do Agendamento': 'status' + } + df.rename(columns=column_mapping, inplace=True) - st.markdown(f""" -
- Data selecionada: {selected_date.strftime('%d/%m/%Y')} -
- """, unsafe_allow_html=True) + df['scheduled_date'] = pd.to_datetime(df['scheduled_date'], dayfirst=True, errors='coerce').dt.date + df.dropna(subset=['scheduled_date'], inplace=True) + return df - with right_col: - with st.container(border=True): - st.subheader("📋 Template de Mensagem") - st.caption("Configure a mensagem que será enviada aos pacientes") - - message = st.text_area( - "Mensagem:", - "Olá, {$primeiro_nome}! Confirmando seu agendamento de {$modalidade} para amanhã às {$horario}. Atenciosamente, COFRAT.", - height=120, - key='message_template' - ) + except Exception as e: + st.error(f"Ocorreu um erro ao buscar os dados do Baserow: {e}") + return pd.DataFrame() - st.markdown("**Variáveis Disponíveis:**") - variables_html = """ -
- {$primeiro_nome}: Primeiro nome do paciente
- {$modalidade}: Tipo de consulta/tratamento
- {$horario}: Horário do agendamento
- {$data}: Data do agendamento
- {$profissional}: Nome do profissional -
- """ - st.markdown(variables_html, unsafe_allow_html=True) - st.write("") + load_dotenv() + BASEROW_KEY = os.getenv("BASEROW_KEY") + df = get_confirmation_data_from_baserow(BASEROW_KEY) + + # --- INICIALIZAÇÃO DO SESSION STATE --- + if 'conf_start_date' not in st.session_state: + st.session_state.conf_start_date = date.today() + st.session_state.conf_end_date = date.today() + timedelta(days=7) + st.session_state.conf_prof_filter = "Todos" + st.session_state.conf_cat_filter = "Todos" + st.session_state.conf_status_filter = "Todos" + st.session_state.conf_patient_filter = "Todos" + st.session_state.conf_insurance_filter = "Todos" + st.session_state.conf_event_filter = "Todos" + st.session_state.show_preview_dialog = False + + # --- LÓGICA DE FILTRAGEM (executada antes para que filtered_df esteja disponível para o dialog) --- + filtered_df = df.copy() + if not df.empty: + if st.session_state.conf_start_date > st.session_state.conf_end_date: + st.error("A data inicial não pode ser posterior à data final.") + # Evita que o dataframe filtrado fique vazio indevidamente + filtered_df = pd.DataFrame() + else: + filtered_df = filtered_df[(filtered_df['scheduled_date'] >= st.session_state.conf_start_date) & (filtered_df['scheduled_date'] <= st.session_state.conf_end_date)] + if st.session_state.conf_prof_filter != "Todos": filtered_df = filtered_df[filtered_df['professional'] == st.session_state.conf_prof_filter] + if st.session_state.conf_cat_filter != "Todos": filtered_df = filtered_df[filtered_df['category'] == st.session_state.conf_cat_filter] + if st.session_state.conf_status_filter != "Todos": filtered_df = filtered_df[filtered_df['status'] == st.session_state.conf_status_filter] + if st.session_state.conf_patient_filter != "Todos": filtered_df = filtered_df[filtered_df['name'] == st.session_state.conf_patient_filter] + if st.session_state.conf_insurance_filter != "Todos": filtered_df = filtered_df[filtered_df['insurance'] == st.session_state.conf_insurance_filter] + if st.session_state.conf_event_filter != "Todos": filtered_df = filtered_df[filtered_df['event'] == st.session_state.conf_event_filter] + + # --- [CORRIGIDO] DIÁLOGO DE PREVIEW --- + @st.dialog("Preview da Mensagem") + def preview_dialog(): + message_template = st.session_state.get('message_template', "Olá, {$primeiro_nome}!") + + if 'edited_df' in st.session_state and not st.session_state.edited_df.empty: + selected_patients_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] + + if selected_patients_df.empty: + st.warning("Nenhum paciente selecionado para visualizar.") + else: + # Pega a primeira linha da tabela de exibição que foi selecionada + first_selected_row_display = selected_patients_df.iloc[0] + + # Usa o índice dessa linha para encontrar os dados completos no dataframe original filtrado + original_index = first_selected_row_display.name + full_data_row = filtered_df.loc[original_index] - # PREVIEW DINÂMICO para o primeiro paciente da lista - if not st.session_state.edited_df.empty: - first_patient = st.session_state.edited_df.iloc[0] - current_template = st.session_state.get('message_template', "") + st.markdown(f"**Para: {full_data_row['name']}**") - preview_text = current_template.replace('{$primeiro_nome}', str(first_patient['Paciente']).split(' ')[0]) - preview_text = preview_text.replace('{$modalidade}', str(first_patient['Modalidade'])) - preview_text = preview_text.replace('{$horario}', str(first_patient['Horário'])) + # Popula as variáveis usando os dados completos e corretos + preview_message = message_template + preview_message = preview_message.replace('{$primeiro_nome}', str(full_data_row['name']).split(' ')[0]) + preview_message = preview_message.replace('{$modalidade}', str(full_data_row['category'])) + preview_message = preview_message.replace('{$horario}', str(full_data_row['time'])) + preview_message = preview_message.replace('{$data}', full_data_row['scheduled_date'].strftime('%d/%m/%Y')) + preview_message = preview_message.replace('{$profissional}', str(full_data_row['professional'])) - st.caption("Preview:") - st.markdown(f"_{preview_text}_") - - st.write("") + st.markdown(f""" +
+ {preview_message} +
+ """, unsafe_allow_html=True) + else: + st.warning("Não há dados de agendamento para visualizar.") - selected_count = int(st.session_state.edited_df['Selecionar'].sum()) - btn_cols = st.columns(2) - if btn_cols[0].button("Visualizar Preview", width='stretch'): - st.session_state.show_preview_dialog = True - st.rerun() + if st.button("Fechar", use_container_width=True, key="close_preview"): + st.session_state.show_preview_dialog = False + st.rerun() + + # --- SEÇÃO DE FILTROS --- + st.subheader("Filtros de Agendamento") + with st.container(border=True): + date_col1, date_col2 = st.columns(2) + date_col1.date_input("Data Inicial:", key="conf_start_date") + date_col2.date_input("Data Final:", key="conf_end_date") + + f_col1, f_col2, f_col3 = st.columns(3) + if not df.empty: + f_col1.selectbox("Profissionais", ["Todos"] + sorted(df['professional'].unique().tolist()), key="conf_prof_filter") + f_col2.selectbox("Categorias", ["Todos"] + sorted(df['category'].unique().tolist()), key="conf_cat_filter") + f_col3.selectbox("Status", ["Todos"] + sorted(df['status'].unique().tolist()), key="conf_status_filter") - btn_cols[1].button(f"✉️ Enviar Mensagens ({selected_count})", width='stretch', type="primary") + f_col4, f_col5, f_col6 = st.columns(3) + f_col4.selectbox("Pacientes", ["Todos"] + sorted(df['name'].unique().tolist()), key="conf_patient_filter") + f_col5.selectbox("Convênios", ["Todos"] + sorted(df['insurance'].unique().tolist()), key="conf_insurance_filter") + f_col6.selectbox("Eventos", ["Todos"] + sorted(df['event'].unique().tolist()), key="conf_event_filter") - # --- TABELA DE AGENDAMENTOS --- + # --- CABEÇALHO E RESUMO DE AGENDAMENTOS --- st.write("---") - st.subheader(f"Agendamentos do Dia ({selected_date.strftime('%d/%m/%Y')})") + start_date_str = st.session_state.conf_start_date.strftime('%d/%m/%Y') + end_date_str = st.session_state.conf_end_date.strftime('%d/%m/%Y') + st.header(f"Agendamentos de {start_date_str} até {end_date_str}") + + total_agendamentos = len(filtered_df) + confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) + pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) + reagendados = len(filtered_df[filtered_df['status'] == 'Reagendado']) + cancelados = len(filtered_df[filtered_df['status'] == 'Cancelado']) + + st.markdown(f""" +
+ {total_agendamentos} agendamentos + {confirmados} confirmados + {pendentes} pendentes + {reagendados} reagendados + {cancelados} cancelados +
+ """, unsafe_allow_html=True) + + # --- TABELA DE AGENDAMENTOS --- + if filtered_df.empty: + st.warning("Nenhum agendamento encontrado para os filtros selecionados.") + st.session_state.edited_df = pd.DataFrame() + else: + base_df = filtered_df[['name', 'time', 'category', 'professional', 'status', 'phone']].copy() + base_df.rename(columns={ + 'name': 'Paciente', 'time': 'Horário', 'category': 'Modalidade', + 'professional': 'Profissional', 'status': 'Status', 'phone': 'Telefone' + }, inplace=True) - all_selected = all(st.session_state.edited_df['Selecionar']) - def toggle_all(): - new_value = not all_selected - st.session_state.edited_df['Selecionar'] = new_value + # Lógica robusta para resetar as seleções quando os filtros mudam + if 'edited_df' not in st.session_state or not st.session_state.edited_df.index.equals(base_df.index): + base_df.insert(0, 'Selecionar', False) + st.session_state.edited_df = base_df + + def toggle_all(): + new_value = st.session_state.select_all_checkbox + df_copy = st.session_state.edited_df.copy() + df_copy['Selecionar'] = new_value + st.session_state.edited_df = df_copy + + action_col1, action_col2 = st.columns([3, 1]) + with action_col1: + all_selected = all(st.session_state.edited_df['Selecionar']) if not st.session_state.edited_df.empty else False + st.checkbox("Selecionar Todos", value=all_selected, on_change=toggle_all, key="select_all_checkbox") + with action_col2: + if st.button("🔄 Atualizar Tabela", use_container_width=True, help="Recarregar dados do Baserow"): + st.rerun() - st.checkbox("Selecionar Todos", value=all_selected, on_change=toggle_all, key="select_all_checkbox") + edited_df_output = st.data_editor( + st.session_state.edited_df, + use_container_width=True, + hide_index=True, + disabled=['Paciente', 'Horário', 'Modalidade', 'Profissional', 'Status', 'Telefone'], + key='appointments_editor' + ) + st.session_state.edited_df = edited_df_output - edited_df = st.data_editor( - st.session_state.edited_df, - width='stretch', - hide_index=True, - disabled=['Paciente', 'Horário', 'Modalidade', 'Profissional', 'Status', 'Telefone'], - key='appointments_editor' - ) - st.session_state.edited_df = edited_df + # --- LAYOUT DE AÇÕES E TEMPLATE --- + st.write("---") + with st.container(border=True): + st.subheader("📋 Template e Envio de Mensagem") + st.caption("Configure a mensagem que será enviada aos pacientes selecionados na tabela acima.") + + message = st.text_area( + "Mensagem:", + "Olá, {$primeiro_nome}! Confirmando seu agendamento de {$modalidade} para o dia {$data} às {$horario}. Atenciosamente, COFRAT.", + height=120, + key='message_template' + ) + st.markdown(""" + **Variáveis:** `{$primeiro_nome}`, `{$modalidade}`, `{$horario}`, `{$data}`, `{$profissional}` + """, unsafe_allow_html=True) + + st.write("") + btn_cols = st.columns(2) + btn_cols[0].button("Visualizar Preview", use_container_width=True, on_click=lambda: st.session_state.update(show_preview_dialog=True)) + + selected_count = int(st.session_state.edited_df['Selecionar'].sum()) if 'edited_df' in st.session_state and not st.session_state.edited_df.empty else 0 + btn_cols[1].button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary") - if st.session_state.show_preview_dialog: + if st.session_state.get('show_preview_dialog', False): preview_dialog() # --- PÁGINA DE PACIENTES --- @@ -1268,39 +1330,41 @@ def patients_page(): st.dataframe(df_patients, width='stretch', hide_index=True) st.caption("Ações como editar e excluir podem ser adicionadas ao selecionar uma linha ou através de um menu de contexto em futuras implementações.") -# --- PÁGINA DE RELATÓRIOS --- -def reports_page(): - st.title("Relatórios") - st.write("Visualize métricas e dados importantes sobre os agendamentos.") - - # Métricas principais - kpi_cols = st.columns(4) - kpi_cols[0].metric("Consultas no Mês", "245", "+12% vs Mês Anterior") - kpi_cols[1].metric("Novos Pacientes", "32", "+5%") - kpi_cols[2].metric("Taxa de Confirmação", "93.5%", "1.2%") - kpi_cols[3].metric("Taxa de Cancelamento", "4.1%", "-0.5%") - + +def chatwoot_page(): + """ + Exibe a página de integração com o Chatwoot, permitindo marcar todas as conversas como lidas. + """ + st.title("Chatwoot") + st.write("Gerencie ações rápidas para as conversas do Chatwoot diretamente daqui.") st.write("---") - chart_cols = st.columns(2) - with chart_cols[0]: - st.subheader("Agendamentos por Modalidade") - # Dados de exemplo para o gráfico de barras - chart_data = pd.DataFrame({ - "Modalidade": ["Fisioterapia", "Ortopedia", "Fisioterapia Inf.", "Pilates", "Acupuntura"], - "Agendamentos": [110, 75, 30, 22, 8], - }) - st.bar_chart(chart_data, x="Modalidade", y="Agendamentos", color="#0b9035") - - with chart_cols[1]: - st.subheader("Evolução de Novos Pacientes (Últimos 6 Meses)") - # Dados de exemplo para o gráfico de linha - chart_data_line = pd.DataFrame( - np.random.randint(15, 40, size=(6, 1)), - columns=['Novos Pacientes'], - index=pd.to_datetime(['2025-04-01', '2025-05-01', '2025-06-01', '2025-07-01', '2025-08-01', '2025-09-01']) - ) - st.line_chart(chart_data_line) + st.subheader("Marcar todas as conversas como lidas") + st.write("Clique no botão abaixo para acionar a automação no n8n que marcará todas as conversas pendentes como lidas na sua caixa de entrada do Chatwoot.") + + # Use colunas para centralizar o botão e dar um espaçamento melhor + col1, col2, col3 = st.columns([1, 1.5, 1]) + + with col2: + if st.button("🚀 Marcar todas como lidas", use_container_width=True, type="primary"): + # Substitua pela URL real do seu webhook no n8n + WEBHOOK_URL = "https://n8n.erudieto.com.br/webhook-test/mark-all-as-read" + + with st.spinner("Aguarde, acionando o fluxo no n8n..."): + try: + # O método POST é geralmente usado para acionar webhooks + response = requests.post(WEBHOOK_URL, timeout=123456) + + # Verifica se a requisição foi bem-sucedida (código 2xx) + if response.status_code >= 200 and response.status_code < 300: + st.success("✅ Fluxo acionado com sucesso! As conversas serão marcadas como lidas em breve.") + else: + st.error(f"❌ Falha ao acionar o fluxo. O n8n retornou o código de status: {response.status_code}") + st.code(response.text, language="text") + + except requests.exceptions.RequestException as e: + st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") + st.warning("Verifique se a URL do webhook está correta e se o seu fluxo no n8n está ativo.") # --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) --- def main_app(logo_path): @@ -1317,7 +1381,8 @@ def main_app(logo_path): sac.MenuItem('Administrativo', type='group', children=[ sac.MenuItem('Gestão', icon='gear'), sac.MenuItem('Pacientes', icon='people'), - sac.MenuItem('Relatórios', icon='clipboard-data'), + # --- [MODIFICADO] A página Relatórios foi trocada pela Chatwoot --- + sac.MenuItem('Chatwoot', icon='chat'), ]), sac.MenuItem('Comunicação', type='group', children=[ sac.MenuItem('Confirmação', icon='check2-square'), @@ -1338,7 +1403,8 @@ def main_app(logo_path): 'Gestão': management_page, 'Confirmação': confirmation_page, 'Pacientes': patients_page, - 'Relatórios': reports_page + # --- [MODIFICADO] O mapeamento agora aponta para a nova função chatwoot_page --- + 'Chatwoot': chatwoot_page } page_function = page_map.get(selected_page, home_page) page_function() \ No newline at end of file From ae90c7d3b3969e9b6050b2a6dccb6e6c22c72983 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 21:39:39 -0300 Subject: [PATCH 25/60] chore --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index ff2a9f4..9c9aba2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ numpy==2.3.3 -pandas==2.3.2 +pandas==2.3.3 python-dotenv==1.1.1 python_dateutil==2.9.0.post0 Requests==2.32.5 -streamlit==1.49.0 +streamlit==1.50.0 streamlit_antd_components==0.3.2 -supabase==2.19.0 +supabase==2.22.0 From 41dc5ef0155a42023a4d96bf75f391ef5987beea Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 22:55:29 -0300 Subject: [PATCH 26/60] chore --- utils.py | 725 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 391 insertions(+), 334 deletions(-) diff --git a/utils.py b/utils.py index 8828153..4957d56 100644 --- a/utils.py +++ b/utils.py @@ -1,6 +1,6 @@ # utils.py import streamlit as st -import streamlit_antd_components as sac +from streamlit_option_menu import option_menu from datetime import date, timedelta import pandas as pd from dateutil.relativedelta import relativedelta @@ -11,19 +11,57 @@ import time from datetime import datetime import requests +import base64 + +# --- FUNÇÃO PARA CARREGAR IMAGEM (LOCAL E ONLINE) --- +def load_image_as_base64(image_path): + """Carrega imagem local e converte para base64.""" + try: + with open(image_path, "rb") as f: + data = f.read() + return base64.b64encode(data).decode() + except: + return None + +def display_logo(logo_path, width=200, use_column=True): + """Exibe logo com fallback para base64 se o caminho não funcionar.""" + # Tenta carregar como base64 + img_base64 = load_image_as_base64(logo_path) + + if use_column: + logo_col1, logo_col2, logo_col3 = st.columns([1.4, 1, 1]) + with logo_col2: + if img_base64: + st.markdown( + f'', + unsafe_allow_html=True + ) + else: + # Fallback: tenta carregar diretamente + try: + st.image(logo_path, width=width) + except: + st.warning("Logo não encontrado") + else: + if img_base64: + st.markdown( + f'', + unsafe_allow_html=True + ) + else: + try: + st.image(logo_path, width=width) + except: + st.warning("Logo não encontrado") # --- FUNÇÃO DE LOGIN CENTRALIZADA E ESTILIZADA --- -def login_form(logo_path): # MODIFICAÇÃO: Adicionado o parâmetro 'logo_path' +def login_form(logo_path): """Exibe o logotipo e o formulário de login centralizado.""" st.markdown('', unsafe_allow_html=True) - # --- [NOVO] CÓDIGO PARA EXIBIR O LOGOTIPO CENTRALIZADO --- - logo_col1, logo_col2, logo_col3 = st.columns([1.4, 1, 1]) - with logo_col2: - st.image(logo_path, width=200) - - st.write("\n") # Adiciona um espaço entre o logo e o formulário - # --- FIM DO CÓDIGO NOVO --- + # Exibe o logo + display_logo(logo_path, width=200, use_column=True) + st.write("\n") col1, col2, col3 = st.columns([1, 2, 1]) with col2: @@ -43,7 +81,7 @@ def login_form(logo_path): # MODIFICAÇÃO: Adicionado o parâmetro 'logo_path' st.markdown('

Senha

', unsafe_allow_html=True) password = st.text_input("Senha", placeholder="Sua senha", type="password", label_visibility="collapsed") - if st.form_submit_button("Entrar", width='stretch'): + if st.form_submit_button("Entrar", use_container_width=True): try: correct_usernames = st.secrets["credentials"]["usernames"] correct_passwords = st.secrets["credentials"]["passwords"] @@ -67,33 +105,118 @@ def create_metric_card(label, value, delta, delta_color): def create_summary_card(label, value): return f'
{value}
{label}
' -# --- PÁGINA INICIAL (DASHBOARD) --- +# --- PÁGINA INICIAL (DASHBOARD COM NOVAS ANÁLISES) --- def home_page(): + """ + Exibe um dashboard dinâmico com filtros de período, métricas de performance + e novas visualizações focadas em tendências diárias e padrões semanais. + """ st.markdown("""
-

Plataforma de Gestão de Agendamentos

-

Gerencie confirmações de agendamentos, profissionais e comunicação com pacientes

+

Painel de Performance da Clínica

+

Use os filtros para analisar a operação em diferentes períodos

""", unsafe_allow_html=True) - st.write("\n") - col1, col2, col3, col4 = st.columns(4) - col1.markdown(create_metric_card("Pendentes", "12", "Sem resposta faz tempo: 3 ", "inverse"), unsafe_allow_html=True) - col2.markdown(create_metric_card("Hoje", "28", "+15% vs ontem", "normal"), unsafe_allow_html=True) - col3.markdown(create_metric_card("Confirmados", "24", "Taxa: 92.3%", "off"), unsafe_allow_html=True) - col4.markdown(create_metric_card("Profissionais", "8", "Ativos no sistema", "off"), unsafe_allow_html=True) + # --- BUSCA E PREPARAÇÃO DOS DADOS --- + load_dotenv() + BASEROW_KEY = os.getenv("BASEROW_KEY") + + @st.cache_data(ttl=600) # Cache de 10 minutos + def load_data_from_baserow(): + df = get_daily_agenda_from_baserow(BASEROW_KEY) + if not df.empty: + # Convertendo para datetime para manipulação + df['scheduled_date_dt'] = pd.to_datetime(df['scheduled_date']) + df['scheduled_date'] = df['scheduled_date_dt'].dt.date + return df + + df = load_data_from_baserow() - st.markdown("
", unsafe_allow_html=True) - st.markdown('

Resumo da Semana

', unsafe_allow_html=True) + if df.empty: + st.warning("Não foi possível carregar os dados para o dashboard. Verifique a conexão ou a fonte de dados.") + return - col5, col6, col7, col8 = st.columns(4) - col5.markdown(create_summary_card("Total Agendamentos", "156"), unsafe_allow_html=True) - col6.markdown(create_summary_card("Confirmados", "144"), unsafe_allow_html=True) - col7.markdown(create_summary_card("Pendentes", "9"), unsafe_allow_html=True) - col8.markdown(create_summary_card("Cancelados", "3"), unsafe_allow_html=True) + # --- FILTROS DE DATA INTERATIVOS --- + today = date.today() + + with st.expander("🗓️ Selecionar Período", expanded=True): + periodo_selecionado = st.selectbox( + "Filtro rápido", + options=["Este Mês", "Esta Semana", "Últimos 30 dias", "Hoje", "Período Customizado"], + key="period_filter" + ) + + if periodo_selecionado == "Hoje": + start_date = today + end_date = today + elif periodo_selecionado == "Esta Semana": + start_date = today - timedelta(days=today.weekday()) + end_date = start_date + timedelta(days=6) + elif periodo_selecionado == "Este Mês": + start_date = today.replace(day=1) + end_date = today.replace(day=1) + relativedelta(months=1) - timedelta(days=1) + elif periodo_selecionado == "Últimos 30 dias": + start_date = today - timedelta(days=29) + end_date = today + else: # Período Customizado + col1, col2 = st.columns(2) + start_date = col1.date_input("Data Inicial", today - timedelta(days=6)) + end_date = col2.date_input("Data Final", today) + + df_filtered = df[(df['scheduled_date'] >= start_date) & (df['scheduled_date'] <= end_date)] + + if df_filtered.empty: + st.info(f"Nenhum agendamento encontrado para o período de {start_date.strftime('%d/%m/%Y')} a {end_date.strftime('%d/%m/%Y')}.") + return + + # --- CÁLCULO DAS MÉTRICAS DE INSIGHT --- + total_agendamentos = len(df_filtered) + confirmados = len(df_filtered[df_filtered['status'] == 'Confirmado']) + cancelados = len(df_filtered[df_filtered['status'] == 'Cancelado']) + + taxa_confirmacao = (confirmados / total_agendamentos * 100) if total_agendamentos > 0 else 0 + taxa_cancelamento = (cancelados / total_agendamentos * 100) if total_agendamentos > 0 else 0 + + num_dias = (end_date - start_date).days + 1 + media_diaria = total_agendamentos / num_dias if num_dias > 0 else 0 + + # --- EXIBIÇÃO DOS KPIs --- + st.markdown(f"#### Indicadores de {start_date.strftime('%d/%m/%Y')} a {end_date.strftime('%d/%m/%Y')}") + kpi_cols = st.columns(4) + kpi_cols[0].markdown(create_metric_card("Taxa de Confirmação", f"{taxa_confirmacao:.1f}%", "Eficiência da comunicação", "normal"), unsafe_allow_html=True) + kpi_cols[1].markdown(create_metric_card("Taxa de Cancelamento", f"{taxa_cancelamento:.1f}%", "Agendamentos perdidos", "inverse"), unsafe_allow_html=True) + kpi_cols[2].markdown(create_metric_card("Total de Atendimentos", f"{total_agendamentos}", "Volume no período", "off"), unsafe_allow_html=True) + kpi_cols[3].markdown(create_metric_card("Média Diária", f"{media_diaria:.1f}", "Atendimentos / dia", "off"), unsafe_allow_html=True) + + st.divider() + + # --- [NOVA ANÁLISE] VISUALIZAÇÕES DE TENDÊNCIAS E PADRÕES --- + chart_cols = st.columns(2, gap="large") + + with chart_cols[0]: + st.subheader("Evolução Diária dos Agendamentos") + # Agrupa por data e status, conta, e depois transforma os status em colunas + evolucao_diaria = df_filtered.groupby(['scheduled_date', 'status']).size().unstack(fill_value=0) + st.area_chart(evolucao_diaria) + + with chart_cols[1]: + st.subheader("Distribuição de Status por Dia da Semana") + # Cria uma coluna com o dia da semana (0=Segunda, 6=Domingo) + df_copy = df_filtered.copy() + df_copy['day_of_week'] = df_copy['scheduled_date_dt'].dt.dayofweek + + # Agrupa por dia da semana e status + status_por_dia = df_copy.groupby(['day_of_week', 'status']).size().unstack(fill_value=0) + + # Mapeia os números para nomes de dias para melhor visualização + dias_semana_map = {0: 'Seg', 1: 'Ter', 2: 'Qua', 3: 'Qui', 4: 'Sex', 5: 'Sáb', 6: 'Dom'} + status_por_dia = status_por_dia.rename(index=dias_semana_map).reindex(dias_semana_map.values()) + + st.bar_chart(status_por_dia) # --- PÁGINA DE APROVAÇÃO --- def get_sample_appointments(): @@ -687,38 +810,31 @@ def confirm_delete(): confirm_delete() -# --- PÁGINA DE GESTÃO --- +# --- [AJUSTADA] PÁGINA DE GESTÃO --- def management_page(): + """ + Página de gestão com abas para Médicos, Modalidades e Agendas, usando st.tabs. + """ st.write('##### Organize cadastros, especialidades e agendas com eficiência') st.write('Esta página permite o cadastro e edição dos médicos, com controle de status (Ativo/Inativo) conforme disponibilidade de agenda. Também é possível gerenciar as modalidades de atendimento — como Fisioterapia, Ortopedia, RPG e outras — e configurar os horários de disponibilidade de cada profissional. Tudo em um só lugar, para garantir uma operação fluida e organizada.') st.write('') - selected_tab = sac.segmented( - items=[ - sac.SegmentedItem(label='Médicos', icon='person-fill'), - sac.SegmentedItem(label='Modalidades', icon='tags-fill'), - sac.SegmentedItem(label='Agendas', icon='calendar-week-fill'), - ], - align='left', - size='mid', - return_index=False, # Retorna o label do item - color='#28a745', - ) - - if selected_tab == 'Médicos': + + # Substituído sac.segmented por st.tabs para uma solução nativa do Streamlit + tab1, tab2, tab3 = st.tabs(["🧑‍⚕️ Médicos", "🏷️ Modalidades", "🗓️ Agendas"]) + + with tab1: header_cols = st.columns([3, 1]) with header_cols[0]: st.subheader("Profissionais de Saúde") with header_cols[1]: - st.button("✚ Adicionar Profissional", type="primary", width='stretch') + st.button("✚ Adicionar Profissional", type="primary", use_container_width=True) - # Dados de exemplo professionals = [ {"name": "Dra. Liliane Santos", "specialty": "Fisioterapia", "schedule": "Segunda a Sexta", "capacity": 10}, {"name": "Dr. Roberto Silva", "specialty": "Ortopedia", "schedule": "Segunda a Sexta", "capacity": 8}, {"name": "Dra. Carla Mendes", "specialty": "Fisioterapia Infantil", "schedule": "Segunda a Sexta", "capacity": 6}, ] - # Layout em colunas cols = st.columns(3) for i, prof in enumerate(professionals): with cols[i % 3]: @@ -726,18 +842,18 @@ def management_page(): st.markdown(f"##### 🩺 {prof['name']}") st.write(prof['specialty']) st.write(f"🕒 {prof['schedule']}") - st.write(f" kapacita: {prof['capacity']} pacientes/horário") + st.write(f"Capacidade: {prof['capacity']} pacientes/horário") btn_cols = st.columns(2) - btn_cols[0].button("Editar", key=f"edit_{i}", width='stretch') - btn_cols[1].button("Desativar", key=f"del_{i}", width='stretch') + btn_cols[0].button("Editar", key=f"edit_{i}", use_container_width=True) + btn_cols[1].button("Desativar", key=f"del_{i}", use_container_width=True) - elif selected_tab == 'Modalidades': + with tab2: header_cols = st.columns([3, 1]) with header_cols[0]: st.subheader("Modalidades de Atendimento") with header_cols[1]: - st.button("✚ Adicionar Modalidade", type="primary", width='stretch') + st.button("✚ Adicionar Modalidade", type="primary", use_container_width=True) modalities = [ {"name": "Fisioterapia", "desc": "Tratamento de reabilitação física"}, @@ -751,14 +867,13 @@ def management_page(): with st.container(border=True, height=180): st.markdown(f"##### {mod['name']}") st.write(mod['desc']) - - st.write("") # Espaçador + st.write("") btn_cols = st.columns(2) - btn_cols[0].button("Editar", key=f"edit_mod_{i}", width='stretch') - btn_cols[1].button("🗑️", key=f"del_mod_{i}", width='stretch') + btn_cols[0].button("Editar", key=f"edit_mod_{i}", use_container_width=True) + btn_cols[1].button("🗑️", key=f"del_mod_{i}", use_container_width=True) - elif selected_tab == 'Agendas': + with tab3: st.subheader("Configuração de Agendas") agendas = [ @@ -783,286 +898,209 @@ def management_page(): st.markdown(f"##### 🧑‍⚕️ {agenda['name']}") st.caption(agenda['specialty']) with header_cols[1]: - st.button("Editar", key=f"edit_agenda_{i}", width='stretch', type="primary") + st.button("Editar", key=f"edit_agenda_{i}", use_container_width=True, type="primary") - st.write("") # Espaçador + st.write("") for day, time, cap in agenda['schedule']: day_cols = st.columns([2, 2, 1]) day_cols[0].text(day) day_cols[1].text(time) - day_cols[2].button(f"Cap: {cap}", key=f"cap_{i}_{day}", disabled=True, width='stretch') - st.write("") # Espaço entre os cards + day_cols[2].button(f"Cap: {cap}", key=f"cap_{i}_{day}", disabled=True, use_container_width=True) + st.write("") -# --- [TOTALMENTE REFEITA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- -def confirmation_queue_page(): - """Exibe as filas de aprovação de forma independente para Carteirinha e Agendamento.""" - st.markdown('', unsafe_allow_html=True) +# --- [NOVA PÁGINA OTIMIZADA PARA UX - VERSÃO CORRIGIDA E NATIVA] --- +def approval_workflow_page(): + """ + Exibe uma interface de fluxo de trabalho otimizada para aprovações, + construída inteiramente com componentes nativos do Streamlit para máxima + estabilidade e com keys únicas para evitar erros de ID. + """ st.markdown('', unsafe_allow_html=True) - # --- Bloco de inicialização robusto para as filas separadas --- + # --- Bloco de inicialização do estado da sessão --- if 'carteirinha_appointments' not in st.session_state: all_apps = get_sample_appointments() st.session_state.carteirinha_appointments = [app for app in all_apps if app.get('type') == 'Carteirinha'] st.session_state.agendamento_appointments = [app for app in all_apps if app.get('type') == 'Agendamento'] - st.session_state.carteirinha_pending = len(st.session_state.carteirinha_appointments) - st.session_state.agendamento_pending = len(st.session_state.agendamento_appointments) - st.session_state.carteirinha_index = 0 - st.session_state.agendamento_index = 0 - - if 'approval_view' not in st.session_state: - st.session_state.approval_view = 'Carteirinha' - if 'show_approve_dialog' not in st.session_state: - st.session_state.show_approve_dialog = False - if 'show_approve_carteirinha_dialog' not in st.session_state: - st.session_state.show_approve_carteirinha_dialog = False - if 'show_cancel_dialog' not in st.session_state: - st.session_state.show_cancel_dialog = False - if 'show_reschedule_dialog' not in st.session_state: - st.session_state.show_reschedule_dialog = False - - # --- Função para avançar para o próximo item na fila ATIVA --- - def go_to_next(): - active_queue = st.session_state.approval_view - if active_queue == 'Carteirinha' and st.session_state.carteirinha_index < len(st.session_state.carteirinha_appointments): - st.session_state.carteirinha_pending -= 1 - st.session_state.carteirinha_index += 1 - elif active_queue == 'Agendamento' and st.session_state.agendamento_index < len(st.session_state.agendamento_appointments): - st.session_state.agendamento_pending -= 1 - st.session_state.agendamento_index += 1 - - # Fecha todos os diálogos - st.session_state.show_approve_dialog = False - st.session_state.show_approve_carteirinha_dialog = False - st.session_state.show_cancel_dialog = False - st.session_state.show_reschedule_dialog = False - - # --- [INÍCIO DA CORREÇÃO] --- - # Determina o índice da aba que deve ser exibida com base no session_state - # Isso garante que a aba correta permaneça selecionada após um st.rerun() - tab_options = ['Carteirinha', 'Agendamento'] - try: - active_tab_index = tab_options.index(st.session_state.approval_view) - except ValueError: - active_tab_index = 0 # Padrão para a primeira aba se o estado for inválido - # --- [FIM DA CORREÇÃO] --- - - # Abas para alternar a visualização - selected_view_label = sac.segmented( - items=[ - sac.SegmentedItem(label=f"Carteirinha ({st.session_state.carteirinha_pending})"), - sac.SegmentedItem(label=f"Agendamento ({st.session_state.agendamento_pending})"), - ], - index=active_tab_index, # <-- [CORREÇÃO APLICADA AQUI] Usa o índice calculado - return_index=False, - align='left', - size='sm', - color='#28a745' - ) - # Atualiza o estado da sessão caso o usuário clique em uma nova aba - st.session_state.approval_view = selected_view_label.split(' ')[0] - - # --- Lógica de Exibição para a Fila de CARTEIRINHA --- - if st.session_state.approval_view == 'Carteirinha': - carteirinha_index = st.session_state.carteirinha_index - carteirinha_appointments = st.session_state.carteirinha_appointments - - if carteirinha_index >= len(carteirinha_appointments): - display_carteirinha_completion_message() - return - - current_appointment = carteirinha_appointments[carteirinha_index] - - # Barra de progresso da Carteirinha - st.write("Progresso da Carteirinha") - st.progress((carteirinha_index + 1) / len(carteirinha_appointments)) - st.markdown(f"

{carteirinha_index + 1} de {len(carteirinha_appointments)}

", unsafe_allow_html=True) - - # Card da Carteirinha - approval_card_html = f""" -
-
-
-
{current_appointment['initials']}
-
-
{current_appointment['name']}
-
{current_appointment['phone']}
-
-
-
-
-
Profissional
{current_appointment['professional']}
-
Convênio
{current_appointment['insurance']}
-
Carteirinha
{current_appointment['card_number']}
-
Modalidade
{current_appointment['specialty']}
-
-
-
Observações
-
{current_appointment['notes']}
-
-
- """ - st.markdown(approval_card_html, unsafe_allow_html=True) - - # Botões de ação da Carteirinha - st.markdown('
', unsafe_allow_html=True) - cols = st.columns(2) - if cols[0].button("✓ Aprovar início de agendamento", width='stretch'): - st.session_state.show_approve_carteirinha_dialog = True - st.rerun() - if cols[1].button("✕ Cancelar", width='stretch'): - st.session_state.show_cancel_dialog = True - st.rerun() - st.markdown('
', unsafe_allow_html=True) - - # --- Lógica de Exibição para a Fila de AGENDAMENTO --- - elif st.session_state.approval_view == 'Agendamento': - agendamento_index = st.session_state.agendamento_index - agendamento_appointments = st.session_state.agendamento_appointments + + if 'active_carteirinha_idx' not in st.session_state: + st.session_state.active_carteirinha_idx = 0 + if 'active_agendamento_idx' not in st.session_state: + st.session_state.active_agendamento_idx = 0 + + if 'reschedule_mode' not in st.session_state: + st.session_state.reschedule_mode = False - if agendamento_index >= len(agendamento_appointments): - display_agendamento_completion_message() - return + # --- Títulos e Abas Principais --- + st.subheader("Fluxo de Aprovação") + st.caption("Selecione um item pendente na lista à esquerda para ver os detalhes e tomar uma ação à direita.") - current_appointment = agendamento_appointments[agendamento_index] + carteirinha_count = len(st.session_state.carteirinha_appointments) + agendamento_count = len(st.session_state.agendamento_appointments) - # Barra de progresso do Agendamento - st.write("Progresso do Agendamento") - st.progress((agendamento_index + 1) / len(agendamento_appointments)) - st.markdown(f"

{agendamento_index + 1} de {len(agendamento_appointments)}

", unsafe_allow_html=True) + tab1, tab2 = st.tabs([ + f"📥 Carteirinhas Pendentes ({carteirinha_count})", + f"🗓️ Agendamentos Pendentes ({agendamento_count})" + ]) - # Card de aprovação completo - approval_card_html = f""" -
-
-
-
{current_appointment['initials']}
-
-
{current_appointment['name']}
-
{current_appointment['phone']}
-
-
-
-
-
Data
{current_appointment['date']}
-
Profissional
{current_appointment['professional']}
-
Horário
{current_appointment['time']}
-
Convênio
{current_appointment['insurance']}
-
Carteirinha
{current_appointment['card_number']}
-
Modalidade
{current_appointment['specialty']}
-
-
-
Observações
-
{current_appointment['notes']}
-
-
- """ - st.markdown(approval_card_html, unsafe_allow_html=True) - - # Botões de ação do Agendamento - st.markdown('
', unsafe_allow_html=True) - cols = st.columns(3) - if cols[0].button("✓ Aprovar", width='stretch'): - st.session_state.show_approve_dialog = True - st.rerun() - if cols[1].button("↻ Reagendar", width='stretch'): - st.session_state.show_reschedule_dialog = True - st.rerun() - if cols[2].button("✕ Cancelar", width='stretch'): - st.session_state.show_cancel_dialog = True - st.rerun() - st.markdown('
', unsafe_allow_html=True) - - # --- Diálogos (Modificados para obter o current_appointment correto) --- - # Determina qual é o agendamento atual com base na view ativa para os diálogos - active_view = st.session_state.approval_view - if active_view == 'Carteirinha' and st.session_state.carteirinha_index < len(st.session_state.carteirinha_appointments): - current_appointment_for_dialog = st.session_state.carteirinha_appointments[st.session_state.carteirinha_index] - elif active_view == 'Agendamento' and st.session_state.agendamento_index < len(st.session_state.agendamento_appointments): - current_appointment_for_dialog = st.session_state.agendamento_appointments[st.session_state.agendamento_index] - else: - current_appointment_for_dialog = None # Fila vazia, nenhum diálogo será mostrado - - if current_appointment_for_dialog: - @st.dialog("Confirmar Aprovação") - def approve_dialog(): - st.warning(f"Tem certeza que deseja aprovar o agendamento de **{current_appointment_for_dialog['name']}**?") - st.write("---") - st.radio("Acionar Julia?", ["Sim", "Não"], index=0, horizontal=True, key="acionar_julia_approve") - st.write("") + # --- Aba de Carteirinhas --- + with tab1: + if not st.session_state.carteirinha_appointments: + display_carteirinha_completion_message() + else: + if st.session_state.active_carteirinha_idx >= len(st.session_state.carteirinha_appointments): + st.session_state.active_carteirinha_idx = 0 + + col_list, col_detail = st.columns([1, 2], gap="large") + + # Coluna da Lista de Itens + with col_list: + st.markdown("##### Na Fila") + for idx, app in enumerate(st.session_state.carteirinha_appointments): + with st.container(border=True): + is_selected = (idx == st.session_state.active_carteirinha_idx) + st.write(f"**{app['name']}**" if is_selected else app['name']) + st.caption(app['specialty']) + if st.button("Ver Detalhes", key=f"view_cart_{idx}", use_container_width=True): + st.session_state.active_carteirinha_idx = idx + st.rerun() - if st.button("Sim, Aprovar", width='stretch'): - st.toast(f"{current_appointment_for_dialog['name']} aprovado(a)!", icon="✅") - go_to_next() - st.rerun() - if st.button("Voltar", width='stretch'): - st.session_state.show_approve_dialog = False - st.rerun() - - if st.session_state.show_approve_dialog: - approve_dialog() - - @st.dialog("Confirmar Início de Agendamento") - def approve_carteirinha_dialog(): - st.warning(f"Tem certeza que deseja aprovar o início do agendamento para **{current_appointment_for_dialog['name']}**?") - st.write("---") - st.radio("Acionar Julia?", ["Sim", "Não"], index=0, horizontal=True, key="acionar_julia_carteirinha") - st.write("") - - if st.button("Sim, Aprovar Início", width='stretch'): - st.toast(f"Início de agendamento para {current_appointment_for_dialog['name']} aprovado!", icon="✅") - go_to_next() - st.rerun() - if st.button("Voltar", width='stretch'): - st.session_state.show_approve_carteirinha_dialog = False - st.rerun() + # Coluna de Detalhes e Ações + with col_detail: + active_idx = st.session_state.active_carteirinha_idx + current_appointment = st.session_state.carteirinha_appointments[active_idx] - if st.session_state.show_approve_carteirinha_dialog: - approve_carteirinha_dialog() - - @st.dialog("Confirmar Cancelamento") - def cancel_dialog(): - st.warning(f"Tem certeza que deseja cancelar o agendamento de **{current_appointment_for_dialog['name']}**?") - motivo = st.selectbox( - "Selecione o motivo do cancelamento:", - ["Convênio não aprovado", "Paciente desistiu", "Profissional indisponível", "Erro no agendamento", "Outro motivo"] - ) - st.write("") - st.radio("Acionar Julia?", ["Sim", "Não"], index=0, horizontal=True, key="acionar_julia_cancel") - st.write("") - - if st.button("Sim, Cancelar", width='stretch'): - st.toast(f"{current_appointment_for_dialog['name']} cancelado(a). Motivo: {motivo}", icon="🗑️") - go_to_next() - st.rerun() - if st.button("Voltar", width='stretch'): - st.session_state.show_cancel_dialog = False - st.rerun() - - if st.session_state.show_cancel_dialog: - cancel_dialog() - - @st.dialog("Reagendar Consulta") - def reschedule_dialog(): - st.markdown(f"**Paciente:** {current_appointment_for_dialog['name']}") - st.markdown(f"**Agendamento atual:** {current_appointment_for_dialog['date'].split(', ')[1]} às {current_appointment_for_dialog['time']}") - new_date = st.date_input("Nova Data") - new_time = st.time_input("Novo Horário", step=1800) - st.text_area("Mensagem para o Paciente (Opcional)") - st.write("---") - st.radio("Acionar Julia?", ["Sim", "Não"], index=0, horizontal=True, key="acionar_julia_reschedule") - st.write("") + st.markdown("##### Detalhes para Aprovação") + + # Card de detalhes com componentes nativos + with st.container(border=True): + c1, c2 = st.columns([1, 4]) + with c1: + st.subheader(current_appointment['initials']) + with c2: + st.subheader(current_appointment['name']) + st.caption(f"📞 {current_appointment['phone']}") + + st.divider() + + dc1, dc2 = st.columns(2) + with dc1: + st.caption("Profissional") + st.write(f"🧑‍⚕️ {current_appointment['professional']}") + st.caption("Convênio") + st.write(f"🏢 {current_appointment['insurance']}") + with dc2: + st.caption("Carteirinha") + st.write(f"💳 {current_appointment['card_number']}") + st.caption("Modalidade") + st.write(f"🏷️ {current_appointment['specialty']}") + + st.divider() + st.caption("Observações") + st.info(current_appointment['notes']) + + st.write("") + st.markdown("##### Ações") + action_cols = st.columns(2) + if action_cols[0].button("✓ Aprovar Início de Agendamento", key="approve_carteirinha", use_container_width=True, type="primary"): + st.toast(f"Início de agendamento para {current_appointment['name']} aprovado!", icon="✅") + st.session_state.carteirinha_appointments.pop(active_idx) + st.rerun() + + if action_cols[1].button("✕ Cancelar", key="cancel_carteirinha", use_container_width=True): + st.toast(f"Item de {current_appointment['name']} cancelado.", icon="🗑️") + st.session_state.carteirinha_appointments.pop(active_idx) + st.rerun() - if st.button("Enviar Sugestão", width='stretch'): - st.toast("Sugestão de reagendamento enviada!", icon="👍") - go_to_next() - st.rerun() - if st.button("Cancelar", width='stretch'): - st.session_state.show_reschedule_dialog = False - st.rerun() + # --- Aba de Agendamentos --- + with tab2: + if not st.session_state.agendamento_appointments: + display_agendamento_completion_message() + else: + if st.session_state.active_agendamento_idx >= len(st.session_state.agendamento_appointments): + st.session_state.active_agendamento_idx = 0 + + col_list, col_detail = st.columns([1, 2], gap="large") + + # Coluna da Lista de Itens + with col_list: + st.markdown("##### Na Fila") + for idx, app in enumerate(st.session_state.agendamento_appointments): + with st.container(border=True): + is_selected = (idx == st.session_state.active_agendamento_idx) + st.write(f"**{app['name']}**" if is_selected else app['name']) + st.caption(f"{app['date']} às {app['time']}") + if st.button("Ver Detalhes", key=f"view_agend_{idx}", use_container_width=True): + st.session_state.active_agendamento_idx = idx + st.session_state.reschedule_mode = False + st.rerun() + + # Coluna de Detalhes e Ações + with col_detail: + active_idx = st.session_state.active_agendamento_idx + current_appointment = st.session_state.agendamento_appointments[active_idx] - if st.session_state.show_reschedule_dialog: - reschedule_dialog() + st.markdown("##### Detalhes para Aprovação") + # Card de detalhes com componentes nativos + with st.container(border=True): + c1, c2 = st.columns([1, 4]) + with c1: + st.subheader(current_appointment['initials']) + with c2: + st.subheader(current_appointment['name']) + st.caption(f"📞 {current_appointment['phone']}") + + st.divider() + + dc1, dc2, dc3 = st.columns(3) + with dc1: + st.caption("Data") + st.write(f"🗓️ {current_appointment['date']}") + with dc2: + st.caption("Horário") + st.write(f"🕒 {current_appointment['time']}") + with dc3: + st.caption("Modalidade") + st.write(f"🏷️ {current_appointment['specialty']}") + + st.caption("Profissional") + st.write(f"🧑‍⚕️ {current_appointment['professional']}") + + st.divider() + st.caption("Observações") + st.info(current_appointment['notes']) + + st.write("") + st.markdown("##### Ações") + if st.session_state.reschedule_mode: + with st.container(border=True): + st.markdown(f"**Reagendando para:** {current_appointment['name']}") + st.date_input("Nova Data", key="new_date") + st.time_input("Novo Horário", key="new_time") + + reschedule_cols = st.columns(2) + if reschedule_cols[0].button("Confirmar Reagendamento", key="confirm_reschedule", use_container_width=True, type="primary"): + st.toast("Sugestão de reagendamento enviada!", icon="👍") + st.session_state.agendamento_appointments.pop(active_idx) + st.session_state.reschedule_mode = False + st.rerun() + if reschedule_cols[1].button("Cancelar Ação", key="cancel_reschedule", use_container_width=True): + st.session_state.reschedule_mode = False + st.rerun() + else: + action_cols = st.columns(3) + if action_cols[0].button("✓ Aprovar", key="approve_agendamento", use_container_width=True, type="primary"): + st.toast(f"Agendamento de {current_appointment['name']} aprovado!", icon="✅") + st.session_state.agendamento_appointments.pop(active_idx) + st.rerun() + if action_cols[1].button("↻ Reagendar", key="reschedule_agendamento", use_container_width=True): + st.session_state.reschedule_mode = True + st.rerun() + if action_cols[2].button("✕ Cancelar", key="cancel_agendamento", use_container_width=True): + st.toast(f"Agendamento de {current_appointment['name']} cancelado.", icon="🗑️") + st.session_state.agendamento_appointments.pop(active_idx) + st.rerun() # --- [AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): @@ -1368,43 +1406,62 @@ def chatwoot_page(): # --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) --- def main_app(logo_path): - """Renderiza a sidebar e controla o roteamento de páginas.""" + """Renderiza a sidebar e controla o roteamento de páginas com um menu de estilo aprimorado.""" + with st.sidebar: - st.image(logo_path, width=110) + # Exibe o logo na sidebar + display_logo(logo_path, width=110, use_column=False) + st.write("---") - selected_page = sac.menu([ - sac.MenuItem('Página Inicial', icon='house'), - sac.MenuItem('Agendamentos', type='group', children=[ - sac.MenuItem('Aprovação', icon='card-checklist'), - sac.MenuItem('Agenda do Dia', icon='calendar-event'), - ]), - sac.MenuItem('Administrativo', type='group', children=[ - sac.MenuItem('Gestão', icon='gear'), - sac.MenuItem('Pacientes', icon='people'), - # --- [MODIFICADO] A página Relatórios foi trocada pela Chatwoot --- - sac.MenuItem('Chatwoot', icon='chat'), - ]), - sac.MenuItem('Comunicação', type='group', children=[ - sac.MenuItem('Confirmação', icon='check2-square'), - sac.MenuItem('Suporte', icon='whatsapp', href='https://wa.me/+5511959044561'), - ]), - ], color='#28a745', open_all=True, return_index=False) + # --- [MODIFICADO] Estilo do menu foi ajustado para uma aparência mais suave --- + selected_page = option_menu( + menu_title=None, + options=["Página Inicial", "Aprovação", "Agenda do Dia", "Gestão", + "Pacientes", "Chatwoot", "Confirmação", "Suporte"], + icons=["house", "card-checklist", "calendar-event", "gear", + "people", "chat", "check2-square", "whatsapp"], + menu_icon="cast", + default_index=0, + styles={ + "container": {"padding": "0!important", "background-color": "#fafafa"}, + "icon": {"color": "#059669", "font-size": "16px"}, + "nav-link": { + "font-size": "14px", + "text-align": "left", + "margin": "0px", + "--hover-color": "#e8f5e9", + "color": "#4b5563" + }, + "nav-link-selected": { + "background-color": "#d1fae5", # Fundo verde claro e suave + "color": "#065f46", # Texto em verde escuro para contraste + "font-weight": "600" + }, + } + ) - if st.sidebar.button("Logout"): + st.write("---") + if st.button("Logout", use_container_width=True): st.session_state["authentication_status"] = False st.session_state["username"] = None st.rerun() # Roteamento de páginas + if selected_page == "Suporte": + st.info("Redirecionando para o WhatsApp...") + st.markdown("### 📱 Suporte via WhatsApp") + st.markdown("[Clique aqui para abrir o WhatsApp](https://wa.me/+5511959044561)") + st.stop() + page_map = { 'Página Inicial': home_page, - 'Aprovação': confirmation_queue_page, + 'Aprovação': approval_workflow_page, 'Agenda do Dia': daily_schedule_page, 'Gestão': management_page, 'Confirmação': confirmation_page, 'Pacientes': patients_page, - # --- [MODIFICADO] O mapeamento agora aponta para a nova função chatwoot_page --- 'Chatwoot': chatwoot_page } + page_function = page_map.get(selected_page, home_page) page_function() \ No newline at end of file From 0a22d37c0444b8d4070e2670a7f8172ea3daadd3 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:08:06 -0300 Subject: [PATCH 27/60] update pages --- utils.py | 50 ++++++++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/utils.py b/utils.py index 4957d56..b9fd5b5 100644 --- a/utils.py +++ b/utils.py @@ -105,11 +105,11 @@ def create_metric_card(label, value, delta, delta_color): def create_summary_card(label, value): return f'
{value}
{label}
' -# --- PÁGINA INICIAL (DASHBOARD COM NOVAS ANÁLISES) --- +# --- PÁGINA INICIAL (DASHBOARD COM CARD DE PACIENTES ÚNICOS) --- def home_page(): """ - Exibe um dashboard dinâmico com filtros de período, métricas de performance - e novas visualizações focadas em tendências diárias e padrões semanais. + Exibe um dashboard estável e informativo, com uma linha adicional de cards + numéricos, incluindo o total de pacientes únicos no período. """ st.markdown("""
@@ -129,9 +129,7 @@ def home_page(): def load_data_from_baserow(): df = get_daily_agenda_from_baserow(BASEROW_KEY) if not df.empty: - # Convertendo para datetime para manipulação - df['scheduled_date_dt'] = pd.to_datetime(df['scheduled_date']) - df['scheduled_date'] = df['scheduled_date_dt'].dt.date + df['scheduled_date'] = pd.to_datetime(df['scheduled_date']).dt.date return df df = load_data_from_baserow() @@ -173,7 +171,7 @@ def load_data_from_baserow(): st.info(f"Nenhum agendamento encontrado para o período de {start_date.strftime('%d/%m/%Y')} a {end_date.strftime('%d/%m/%Y')}.") return - # --- CÁLCULO DAS MÉTRICAS DE INSIGHT --- + # --- CÁLCULO DAS MÉTRICAS DE INSIGHT (KPIs) --- total_agendamentos = len(df_filtered) confirmados = len(df_filtered[df_filtered['status'] == 'Confirmado']) cancelados = len(df_filtered[df_filtered['status'] == 'Cancelado']) @@ -194,29 +192,21 @@ def load_data_from_baserow(): st.divider() - # --- [NOVA ANÁLISE] VISUALIZAÇÕES DE TENDÊNCIAS E PADRÕES --- - chart_cols = st.columns(2, gap="large") - - with chart_cols[0]: - st.subheader("Evolução Diária dos Agendamentos") - # Agrupa por data e status, conta, e depois transforma os status em colunas - evolucao_diaria = df_filtered.groupby(['scheduled_date', 'status']).size().unstack(fill_value=0) - st.area_chart(evolucao_diaria) - - with chart_cols[1]: - st.subheader("Distribuição de Status por Dia da Semana") - # Cria uma coluna com o dia da semana (0=Segunda, 6=Domingo) - df_copy = df_filtered.copy() - df_copy['day_of_week'] = df_copy['scheduled_date_dt'].dt.dayofweek - - # Agrupa por dia da semana e status - status_por_dia = df_copy.groupby(['day_of_week', 'status']).size().unstack(fill_value=0) - - # Mapeia os números para nomes de dias para melhor visualização - dias_semana_map = {0: 'Seg', 1: 'Ter', 2: 'Qua', 3: 'Qui', 4: 'Sex', 5: 'Sáb', 6: 'Dom'} - status_por_dia = status_por_dia.rename(index=dias_semana_map).reindex(dias_semana_map.values()) - - st.bar_chart(status_por_dia) + # --- RESUMO OPERACIONAL COM CARDS --- + st.markdown("#### Resumo Operacional do Período") + + # Cálculos para os novos cards + pendentes = len(df_filtered[df_filtered['status'] == 'Pendente']) + + # [NOVO CARD] Calcula o número de pacientes únicos (contando nomes distintos) + pacientes_unicos = df_filtered['name'].nunique() + + # Exibição da nova linha de cards + summary_cols = st.columns(4) + summary_cols[0].markdown(create_summary_card("Confirmados", f"{confirmados}"), unsafe_allow_html=True) + summary_cols[1].markdown(create_summary_card("Pendentes", f"{pendentes}"), unsafe_allow_html=True) + summary_cols[2].markdown(create_summary_card("Cancelados", f"{cancelados}"), unsafe_allow_html=True) + summary_cols[3].markdown(create_summary_card("Pacientes Únicos", f"{pacientes_unicos}"), unsafe_allow_html=True) # --- PÁGINA DE APROVAÇÃO --- def get_sample_appointments(): From acac9e8d085ab73bf7ca99f57109556ddec41615 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:08:47 -0300 Subject: [PATCH 28/60] update pages --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9c9aba2..b6e2ca5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,5 +4,6 @@ python-dotenv==1.1.1 python_dateutil==2.9.0.post0 Requests==2.32.5 streamlit==1.50.0 -streamlit_antd_components==0.3.2 +streamlit_option_menu==0.4.0 supabase==2.22.0 +~treamlit==1.49.0 From d3ff107b52e568d17fb27c0fce898e7a05260ebc Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:10:26 -0300 Subject: [PATCH 29/60] update pages --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index b6e2ca5..1a40fed 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,5 +5,4 @@ python_dateutil==2.9.0.post0 Requests==2.32.5 streamlit==1.50.0 streamlit_option_menu==0.4.0 -supabase==2.22.0 -~treamlit==1.49.0 +supabase==2.22.0 \ No newline at end of file From 42eb4eb47ae8269b97bc48b3ee95e00510bad7e4 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:17:55 -0300 Subject: [PATCH 30/60] update pages --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1a40fed..935c3d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,5 +4,5 @@ python-dotenv==1.1.1 python_dateutil==2.9.0.post0 Requests==2.32.5 streamlit==1.50.0 -streamlit_option_menu==0.4.0 +streamlit_option_menu supabase==2.22.0 \ No newline at end of file From 643a45ed124126fcd32dd52defd3c50007589464 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:31:15 -0300 Subject: [PATCH 31/60] update pages --- utils.py | 61 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/utils.py b/utils.py index b9fd5b5..1e47f43 100644 --- a/utils.py +++ b/utils.py @@ -1394,49 +1394,47 @@ def chatwoot_page(): st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") st.warning("Verifique se a URL do webhook está correta e se o seu fluxo no n8n está ativo.") -# --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) --- +# Remova a importação de 'streamlit_antd_components' se ela existir. +# import streamlit_antd_components as sac + +# --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) COM MENU st.radio --- def main_app(logo_path): - """Renderiza a sidebar e controla o roteamento de páginas com um menu de estilo aprimorado.""" - + """ + Renderiza a sidebar e controla o roteamento de páginas usando um menu st.radio + nativo para garantir máxima estabilidade e compatibilidade. + """ with st.sidebar: - # Exibe o logo na sidebar display_logo(logo_path, width=110, use_column=False) st.write("---") - - # --- [MODIFICADO] Estilo do menu foi ajustado para uma aparência mais suave --- - selected_page = option_menu( - menu_title=None, - options=["Página Inicial", "Aprovação", "Agenda do Dia", "Gestão", - "Pacientes", "Chatwoot", "Confirmação", "Suporte"], - icons=["house", "card-checklist", "calendar-event", "gear", - "people", "chat", "check2-square", "whatsapp"], - menu_icon="cast", - default_index=0, - styles={ - "container": {"padding": "0!important", "background-color": "#fafafa"}, - "icon": {"color": "#059669", "font-size": "16px"}, - "nav-link": { - "font-size": "14px", - "text-align": "left", - "margin": "0px", - "--hover-color": "#e8f5e9", - "color": "#4b5563" - }, - "nav-link-selected": { - "background-color": "#d1fae5", # Fundo verde claro e suave - "color": "#065f46", # Texto em verde escuro para contraste - "font-weight": "600" - }, - } + + # --- [MENU SIMPLIFICADO] Substituído por st.radio para máxima estabilidade --- + # Lista de todas as páginas disponíveis na aplicação + page_options = [ + "Página Inicial", + "Aprovação", + "Agenda do Dia", + "Gestão", + "Pacientes", + "Chatwoot", + "Confirmação", + "Suporte" + ] + + # O st.radio agora controla a página selecionada + selected_page = st.radio( + "Menu de Navegação", # Rótulo do menu + page_options, + label_visibility="collapsed" # Oculta o rótulo para um visual mais limpo ) st.write("---") + st.write(f"Usuário: **{st.session_state.get('username', '')}**") if st.button("Logout", use_container_width=True): st.session_state["authentication_status"] = False st.session_state["username"] = None st.rerun() - # Roteamento de páginas + # O roteamento de páginas continua funcionando da mesma forma if selected_page == "Suporte": st.info("Redirecionando para o WhatsApp...") st.markdown("### 📱 Suporte via WhatsApp") @@ -1453,5 +1451,6 @@ def main_app(logo_path): 'Chatwoot': chatwoot_page } + # Chama a função da página selecionada page_function = page_map.get(selected_page, home_page) page_function() \ No newline at end of file From cca986f2264e32938addf9a42f54a49cc567d433 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:31:41 -0300 Subject: [PATCH 32/60] update pages --- utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/utils.py b/utils.py index 1e47f43..a90845d 100644 --- a/utils.py +++ b/utils.py @@ -1428,7 +1428,6 @@ def main_app(logo_path): ) st.write("---") - st.write(f"Usuário: **{st.session_state.get('username', '')}**") if st.button("Logout", use_container_width=True): st.session_state["authentication_status"] = False st.session_state["username"] = None From e393e72855a48d0552554fd4c9b69229855a5e9d Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sun, 12 Oct 2025 23:34:47 -0300 Subject: [PATCH 33/60] update pages --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index a90845d..dfd5eef 100644 --- a/utils.py +++ b/utils.py @@ -1376,7 +1376,7 @@ def chatwoot_page(): with col2: if st.button("🚀 Marcar todas como lidas", use_container_width=True, type="primary"): # Substitua pela URL real do seu webhook no n8n - WEBHOOK_URL = "https://n8n.erudieto.com.br/webhook-test/mark-all-as-read" + WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/mark-all-as-read" with st.spinner("Aguarde, acionando o fluxo no n8n..."): try: From de7e75183261d9805aea1344e71641182cba261a Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 13 Oct 2025 01:03:13 -0300 Subject: [PATCH 34/60] update pages --- utils.py | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/utils.py b/utils.py index dfd5eef..695c97a 100644 --- a/utils.py +++ b/utils.py @@ -1322,7 +1322,52 @@ def toggle_all(): btn_cols[0].button("Visualizar Preview", use_container_width=True, on_click=lambda: st.session_state.update(show_preview_dialog=True)) selected_count = int(st.session_state.edited_df['Selecionar'].sum()) if 'edited_df' in st.session_state and not st.session_state.edited_df.empty else 0 - btn_cols[1].button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary") + + # --- [NOVA FUNCIONALIDADE] BOTÃO DE ENVIO --- + if btn_cols[1].button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary"): + # 1. Filtrar contatos selecionados + selected_contacts_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] + + if selected_contacts_df.empty: + st.warning("Nenhum paciente selecionado para o envio.") + else: + # 2. Obter a mensagem + message_to_send = st.session_state.get('message_template', "") + + # 3. Preparar os dados para o webhook + # Usar o índice do `edited_df` para buscar os dados completos no `filtered_df` + selected_indices = selected_contacts_df.index + full_data_of_selected = filtered_df.loc[selected_indices] + + # Converter a data para string para ser compatível com JSON + full_data_of_selected['scheduled_date'] = full_data_of_selected['scheduled_date'].astype(str) + + contacts_payload = full_data_of_selected.to_dict(orient='records') + + final_payload = { + "message_template": message_to_send, + "contacts": contacts_payload + } + + # 4. Enviar para o Webhook + # ================================================================= # + # ================================================================= # + WEBHOOK_URL = "https://n8n.erudieto.com.br/webhook-test/disparo-em-massa" # <<< INSIRA SUA URL DE WEBHOOK AQUI + # ================================================================= # + # ================================================================= # + + if not WEBHOOK_URL: + st.error("A URL do webhook não foi configurada. Por favor, adicione a URL no código.") + else: + with st.spinner(f"Enviando {len(contacts_payload)} mensagens..."): + try: + response = requests.post(WEBHOOK_URL, json=final_payload, timeout=30) + if response.status_code >= 200 and response.status_code < 300: + st.success(f"✅ Sucesso! A automação foi acionada para {len(contacts_payload)} contatos.") + else: + st.error(f"❌ Falha ao enviar. O servidor respondeu com: {response.status_code} - {response.text}") + except requests.exceptions.RequestException as e: + st.error(f"❌ Erro de conexão ao tentar acionar o webhook: {e}") if st.session_state.get('show_preview_dialog', False): preview_dialog() @@ -1394,8 +1439,6 @@ def chatwoot_page(): st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") st.warning("Verifique se a URL do webhook está correta e se o seu fluxo no n8n está ativo.") -# Remova a importação de 'streamlit_antd_components' se ela existir. -# import streamlit_antd_components as sac # --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) COM MENU st.radio --- def main_app(logo_path): From bdb07826f67bf129e32fb8c076dad180f455e380 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 13 Oct 2025 12:33:17 -0300 Subject: [PATCH 35/60] webhook disparo em massa de producao --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 695c97a..e110646 100644 --- a/utils.py +++ b/utils.py @@ -1352,7 +1352,7 @@ def toggle_all(): # 4. Enviar para o Webhook # ================================================================= # # ================================================================= # - WEBHOOK_URL = "https://n8n.erudieto.com.br/webhook-test/disparo-em-massa" # <<< INSIRA SUA URL DE WEBHOOK AQUI + WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/disparo-em-massa" # ================================================================= # # ================================================================= # From ba955e8f8b29060270c2ccbd115519c28f380683 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 13 Oct 2025 14:11:02 -0300 Subject: [PATCH 36/60] pagina confirmacao melhorada --- data/message_templates.csv | 15 ++ utils.py | 308 ++++++++++++++++++++++++------------- 2 files changed, 214 insertions(+), 109 deletions(-) create mode 100644 data/message_templates.csv diff --git a/data/message_templates.csv b/data/message_templates.csv new file mode 100644 index 0000000..39d5144 --- /dev/null +++ b/data/message_templates.csv @@ -0,0 +1,15 @@ +area,message +Ortopedista,"Olá {$primeiro_nome}! + +Sua consulta está agendada para o dia {$data} , às {$data}, com {$profissional} (Ortopedista). +Caso não possa comparecer, pedimos a gentileza de avisar com antecedência. + +Atenciosamente, +Equipe COFRAT" +Ortopedista,"Olá {$primeiro_nome}! + +Sua consulta está agendada para o dia {$data} , às {$horario}, com {$profissional} (Ortopedista). +Caso não possa comparecer, pedimos a gentileza de avisar com antecedência. + +Atenciosamente, +Equipe COFRAT" diff --git a/utils.py b/utils.py index e110646..1eb61bf 100644 --- a/utils.py +++ b/utils.py @@ -1092,25 +1092,33 @@ def approval_workflow_page(): st.session_state.agendamento_appointments.pop(active_idx) st.rerun() -# --- [AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- + +# --- [LAYOUT AJUSTADO 3 COLUNAS] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): """ - Exibe a página de confirmação em massa com filtros avançados, resumo de dados e preview corrigido. + Exibe a página de confirmação em massa com novo layout de 3 colunas para templates, + filtros avançados, CRUD de templates e pop-ups de confirmação. """ + # --- Importações necessárias --- + import pandas as pd + import os + from datetime import date, timedelta + import requests + st.write('##### Comunicação em massa para agendamentos') st.write('Esta página permite confirmar ou cancelar agendamentos em massa. Use os filtros para selecionar um período e refinar a lista de pacientes antes de enviar as comunicações.') st.write('') - # --- CONEXÃO COM BASEROW E BUSCA DE DADOS --- + # --- FUNÇÕES HELPER --- + + # Função para carregar dados do Baserow def get_confirmation_data_from_baserow(api_key): if not api_key: st.error("A chave da API do Baserow (BASEROW_KEY) não foi configurada.") return pd.DataFrame() - url = "https://api.baserow.io/api/database/rows/table/681080/?user_field_names=true&size=200" headers = {"Authorization": f"Token {api_key}"} all_rows = [] - try: while url: response = requests.get(url, headers=headers) @@ -1118,41 +1126,41 @@ def get_confirmation_data_from_baserow(api_key): data = response.json() all_rows.extend(data.get('results', [])) url = data.get('next') - - if not all_rows: - return pd.DataFrame() - + if not all_rows: return pd.DataFrame() df = pd.DataFrame(all_rows) - - expected_columns = [ - 'Data do Agendamento', 'Horário', 'Nome do Paciente', 'Convênio', - 'Evento', 'Profissional', 'Especialidade', 'Telefone', 'Status do Agendamento' - ] + expected_columns = ['Data do Agendamento', 'Horário', 'Nome do Paciente', 'Convênio', 'Evento', 'Profissional', 'Especialidade', 'Telefone', 'Status do Agendamento'] for col in expected_columns: if col not in df.columns: st.error(f"Erro Crítico: A coluna '{col}' não foi encontrada na sua tabela do Baserow.") return pd.DataFrame() - - column_mapping = { - 'Data do Agendamento': 'scheduled_date', 'Horário': 'time', - 'Nome do Paciente': 'name', 'Convênio': 'insurance', - 'Evento': 'event', 'Profissional': 'professional', - 'Especialidade': 'category', 'Telefone': 'phone', - 'Status do Agendamento': 'status' - } + column_mapping = {'Data do Agendamento': 'scheduled_date', 'Horário': 'time', 'Nome do Paciente': 'name', 'Convênio': 'insurance', 'Evento': 'event', 'Profissional': 'professional', 'Especialidade': 'category', 'Telefone': 'phone', 'Status do Agendamento': 'status'} df.rename(columns=column_mapping, inplace=True) - df['scheduled_date'] = pd.to_datetime(df['scheduled_date'], dayfirst=True, errors='coerce').dt.date df.dropna(subset=['scheduled_date'], inplace=True) return df - except Exception as e: st.error(f"Ocorreu um erro ao buscar os dados do Baserow: {e}") return pd.DataFrame() + # Funções para CRUD de templates locais + DATA_DIR = "data" + TEMPLATES_FILE = os.path.join(DATA_DIR, "message_templates.csv") + + def load_templates(): + if not os.path.exists(DATA_DIR): + os.makedirs(DATA_DIR) + if not os.path.exists(TEMPLATES_FILE): + return pd.DataFrame(columns=["area", "message"]) + return pd.read_csv(TEMPLATES_FILE) + + def save_templates(df): + df.to_csv(TEMPLATES_FILE, index=False) + + # --- INICIALIZAÇÃO E CARGA DE DADOS --- load_dotenv() BASEROW_KEY = os.getenv("BASEROW_KEY") df = get_confirmation_data_from_baserow(BASEROW_KEY) + templates_df = load_templates() # --- INICIALIZAÇÃO DO SESSION STATE --- if 'conf_start_date' not in st.session_state: @@ -1164,79 +1172,146 @@ def get_confirmation_data_from_baserow(api_key): st.session_state.conf_patient_filter = "Todos" st.session_state.conf_insurance_filter = "Todos" st.session_state.conf_event_filter = "Todos" + st.session_state.conf_search_term = "" st.session_state.show_preview_dialog = False + st.session_state.show_send_confirmation = False + st.session_state.template_area = "" + st.session_state.show_view_template_dialog = False + st.session_state.template_to_view = None - # --- LÓGICA DE FILTRAGEM (executada antes para que filtered_df esteja disponível para o dialog) --- + if 'message_template' not in st.session_state: + st.session_state.message_template = "Olá {$primeiro_nome}! Sua consulta está agendada para o dia {$data}, às {$horario}, com Dr. {$profissional}. Se não puder comparecer, por favor, avise com antecedência." + + # --- LÓGICA DE FILTRAGEM --- filtered_df = df.copy() if not df.empty: if st.session_state.conf_start_date > st.session_state.conf_end_date: st.error("A data inicial não pode ser posterior à data final.") - # Evita que o dataframe filtrado fique vazio indevidamente filtered_df = pd.DataFrame() else: - filtered_df = filtered_df[(filtered_df['scheduled_date'] >= st.session_state.conf_start_date) & (filtered_df['scheduled_date'] <= st.session_state.conf_end_date)] + date_mask = (filtered_df['scheduled_date'] >= st.session_state.conf_start_date) & (filtered_df['scheduled_date'] <= st.session_state.conf_end_date) + filtered_df = filtered_df[date_mask] if st.session_state.conf_prof_filter != "Todos": filtered_df = filtered_df[filtered_df['professional'] == st.session_state.conf_prof_filter] if st.session_state.conf_cat_filter != "Todos": filtered_df = filtered_df[filtered_df['category'] == st.session_state.conf_cat_filter] if st.session_state.conf_status_filter != "Todos": filtered_df = filtered_df[filtered_df['status'] == st.session_state.conf_status_filter] if st.session_state.conf_patient_filter != "Todos": filtered_df = filtered_df[filtered_df['name'] == st.session_state.conf_patient_filter] if st.session_state.conf_insurance_filter != "Todos": filtered_df = filtered_df[filtered_df['insurance'] == st.session_state.conf_insurance_filter] if st.session_state.conf_event_filter != "Todos": filtered_df = filtered_df[filtered_df['event'] == st.session_state.conf_event_filter] + if st.session_state.conf_search_term: + filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.conf_search_term, case=False, na=False)] + + # --- DIÁLOGOS --- + @st.dialog("Visualizar Template") + def view_template_dialog(area, message): + st.subheader(f"Template: {area}") + st.markdown("---") + st.text_area("Conteúdo:", value=message, height=200, disabled=True, key="template_view_content") + st.markdown("---") + + btn_col1, btn_col2 = st.columns(2) + + with btn_col1: + if st.button("Copiar Mensagem", use_container_width=True): + st.toast("📋 Texto pronto para ser copiado da caixa acima!") + + with btn_col2: + if st.button("Fechar", use_container_width=True, type="primary"): + st.session_state.show_view_template_dialog = False + st.session_state.template_to_view = None + st.rerun() - # --- [CORRIGIDO] DIÁLOGO DE PREVIEW --- @st.dialog("Preview da Mensagem") def preview_dialog(): message_template = st.session_state.get('message_template', "Olá, {$primeiro_nome}!") - if 'edited_df' in st.session_state and not st.session_state.edited_df.empty: selected_patients_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] - if selected_patients_df.empty: st.warning("Nenhum paciente selecionado para visualizar.") else: - # Pega a primeira linha da tabela de exibição que foi selecionada first_selected_row_display = selected_patients_df.iloc[0] - - # Usa o índice dessa linha para encontrar os dados completos no dataframe original filtrado original_index = first_selected_row_display.name full_data_row = filtered_df.loc[original_index] - st.markdown(f"**Para: {full_data_row['name']}**") - - # Popula as variáveis usando os dados completos e corretos - preview_message = message_template - preview_message = preview_message.replace('{$primeiro_nome}', str(full_data_row['name']).split(' ')[0]) - preview_message = preview_message.replace('{$modalidade}', str(full_data_row['category'])) - preview_message = preview_message.replace('{$horario}', str(full_data_row['time'])) - preview_message = preview_message.replace('{$data}', full_data_row['scheduled_date'].strftime('%d/%m/%Y')) - preview_message = preview_message.replace('{$profissional}', str(full_data_row['professional'])) - - st.markdown(f""" -
- {preview_message} -
- """, unsafe_allow_html=True) + preview_message = message_template.replace('{$primeiro_nome}', str(full_data_row['name']).split(' ')[0]).replace('{$modalidade}', str(full_data_row['category'])).replace('{$horario}', str(full_data_row['time'])).replace('{$data}', full_data_row['scheduled_date'].strftime('%d/%m/%Y')).replace('{$profissional}', str(full_data_row['professional'])) + st.markdown(f'
{preview_message}
', unsafe_allow_html=True) else: st.warning("Não há dados de agendamento para visualizar.") - if st.button("Fechar", use_container_width=True, key="close_preview"): st.session_state.show_preview_dialog = False st.rerun() - # --- SEÇÃO DE FILTROS --- - st.subheader("Filtros de Agendamento") - with st.container(border=True): + @st.dialog("Confirmar Envio") + def confirm_send_dialog(selected_count): + st.warning(f"Você tem certeza que deseja enviar a mensagem para {selected_count} paciente(s) selecionado(s)?") + + col1, col2 = st.columns(2) + if col1.button("Sim, Enviar Agora", type="primary", use_container_width=True): + selected_contacts_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] + message_to_send = st.session_state.get('message_template', "") + selected_indices = selected_contacts_df.index + full_data_of_selected = filtered_df.loc[selected_indices] + full_data_of_selected['scheduled_date'] = full_data_of_selected['scheduled_date'].astype(str) + contacts_payload = full_data_of_selected.to_dict(orient='records') + final_payload = {"message_template": message_to_send, "contacts": contacts_payload} + WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/disparo-em-massa" + + with st.spinner(f"Enviando {len(contacts_payload)} mensagens..."): + try: + response = requests.post(WEBHOOK_URL, json=final_payload, timeout=30) + if 200 <= response.status_code < 300: + st.success(f"✅ Sucesso! A automação foi acionada para {len(contacts_payload)} contatos.") + else: + st.error(f"❌ Falha ao enviar. O servidor respondeu com: {response.status_code} - {response.text}") + except requests.exceptions.RequestException as e: + st.error(f"❌ Erro de conexão ao tentar acionar o webhook: {e}") + + st.session_state.show_send_confirmation = False + st.rerun() + + if col2.button("Cancelar", use_container_width=True): + st.session_state.show_send_confirmation = False + st.rerun() + + # --- SEÇÃO DE FILTROS RETRÁTIL --- + with st.expander("🔍 Filtros de Agendamento", expanded=True): + search_col, btns_col = st.columns([3, 1.2]) + search_col.text_input( + "Buscar paciente por nome:", + key="conf_search_term", + placeholder="Digite o nome do paciente para buscar..." + ) + + with btns_col: + b1, b2 = st.columns(2) + def clear_confirmation_filters(): + st.session_state.conf_start_date = date.today() + st.session_state.conf_end_date = date.today() + timedelta(days=7) + st.session_state.conf_prof_filter = "Todos" + st.session_state.conf_cat_filter = "Todos" + st.session_state.conf_status_filter = "Todos" + st.session_state.conf_patient_filter = "Todos" + st.session_state.conf_insurance_filter = "Todos" + st.session_state.conf_event_filter = "Todos" + st.session_state.conf_search_term = "" + b1.button("Limpar", on_click=clear_confirmation_filters, use_container_width=True, help="Limpar todos os filtros") + + if b2.button("Atualizar", use_container_width=True, help="Atualizar dados da página"): + st.rerun() + + st.divider() + date_col1, date_col2 = st.columns(2) date_col1.date_input("Data Inicial:", key="conf_start_date") date_col2.date_input("Data Final:", key="conf_end_date") - f_col1, f_col2, f_col3 = st.columns(3) if not df.empty: + f_col1, f_col2, f_col3 = st.columns(3) f_col1.selectbox("Profissionais", ["Todos"] + sorted(df['professional'].unique().tolist()), key="conf_prof_filter") f_col2.selectbox("Categorias", ["Todos"] + sorted(df['category'].unique().tolist()), key="conf_cat_filter") f_col3.selectbox("Status", ["Todos"] + sorted(df['status'].unique().tolist()), key="conf_status_filter") f_col4, f_col5, f_col6 = st.columns(3) - f_col4.selectbox("Pacientes", ["Todos"] + sorted(df['name'].unique().tolist()), key="conf_patient_filter") + f_col4.selectbox("Pacientes (lista completa)", ["Todos"] + sorted(df['name'].unique().tolist()), key="conf_patient_filter") f_col5.selectbox("Convênios", ["Todos"] + sorted(df['insurance'].unique().tolist()), key="conf_insurance_filter") f_col6.selectbox("Eventos", ["Todos"] + sorted(df['event'].unique().tolist()), key="conf_event_filter") @@ -1273,7 +1348,6 @@ def preview_dialog(): 'professional': 'Profissional', 'status': 'Status', 'phone': 'Telefone' }, inplace=True) - # Lógica robusta para resetar as seleções quando os filtros mudam if 'edited_df' not in st.session_state or not st.session_state.edited_df.index.equals(base_df.index): base_df.insert(0, 'Selecionar', False) st.session_state.edited_df = base_df @@ -1303,74 +1377,90 @@ def toggle_all(): # --- LAYOUT DE AÇÕES E TEMPLATE --- st.write("---") + with st.container(border=True): st.subheader("📋 Template e Envio de Mensagem") st.caption("Configure a mensagem que será enviada aos pacientes selecionados na tabela acima.") - message = st.text_area( - "Mensagem:", - "Olá, {$primeiro_nome}! Confirmando seu agendamento de {$modalidade} para o dia {$data} às {$horario}. Atenciosamente, COFRAT.", - height=120, - key='message_template' + content = st.text_area( + "Mensagem:", + value=st.session_state.message_template, + height=200, + key='message_template_input' ) - st.markdown(""" - **Variáveis:** `{$primeiro_nome}`, `{$modalidade}`, `{$horario}`, `{$data}`, `{$profissional}` - """, unsafe_allow_html=True) + st.session_state.message_template = content + + st.text_input("Área/Categoria do Template:", key="template_area") + st.markdown("**Variáveis:** `{$primeiro_nome}`, `{$modalidade}`, `{$horario}`, `{$data}`, `{$profissional}`") st.write("") - btn_cols = st.columns(2) - btn_cols[0].button("Visualizar Preview", use_container_width=True, on_click=lambda: st.session_state.update(show_preview_dialog=True)) + + btn_cols = st.columns(3) + + if btn_cols[0].button("Salvar Template", use_container_width=True): + if st.session_state.template_area and st.session_state.message_template: + new_template = pd.DataFrame([{"area": st.session_state.template_area, "message": st.session_state.message_template}]) + updated_templates_df = pd.concat([templates_df, new_template], ignore_index=True) + save_templates(updated_templates_df) + st.toast("Template salvo com sucesso!") + st.rerun() + else: + st.warning("Preencha a Área e a Mensagem para salvar o template.") + + btn_cols[1].button("Visualizar Preview", use_container_width=True, on_click=lambda: st.session_state.update(show_preview_dialog=True)) selected_count = int(st.session_state.edited_df['Selecionar'].sum()) if 'edited_df' in st.session_state and not st.session_state.edited_df.empty else 0 - # --- [NOVA FUNCIONALIDADE] BOTÃO DE ENVIO --- - if btn_cols[1].button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary"): - # 1. Filtrar contatos selecionados - selected_contacts_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] - - if selected_contacts_df.empty: - st.warning("Nenhum paciente selecionado para o envio.") + if btn_cols[2].button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary"): + if selected_count > 0: + st.session_state.show_send_confirmation = True + st.rerun() else: - # 2. Obter a mensagem - message_to_send = st.session_state.get('message_template', "") - - # 3. Preparar os dados para o webhook - # Usar o índice do `edited_df` para buscar os dados completos no `filtered_df` - selected_indices = selected_contacts_df.index - full_data_of_selected = filtered_df.loc[selected_indices] - - # Converter a data para string para ser compatível com JSON - full_data_of_selected['scheduled_date'] = full_data_of_selected['scheduled_date'].astype(str) - - contacts_payload = full_data_of_selected.to_dict(orient='records') - - final_payload = { - "message_template": message_to_send, - "contacts": contacts_payload - } - - # 4. Enviar para o Webhook - # ================================================================= # - # ================================================================= # - WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/disparo-em-massa" - # ================================================================= # - # ================================================================= # - - if not WEBHOOK_URL: - st.error("A URL do webhook não foi configurada. Por favor, adicione a URL no código.") - else: - with st.spinner(f"Enviando {len(contacts_payload)} mensagens..."): - try: - response = requests.post(WEBHOOK_URL, json=final_payload, timeout=30) - if response.status_code >= 200 and response.status_code < 300: - st.success(f"✅ Sucesso! A automação foi acionada para {len(contacts_payload)} contatos.") - else: - st.error(f"❌ Falha ao enviar. O servidor respondeu com: {response.status_code} - {response.text}") - except requests.exceptions.RequestException as e: - st.error(f"❌ Erro de conexão ao tentar acionar o webhook: {e}") + st.warning("Nenhum paciente selecionado para o envio.") + + st.divider() + st.subheader("Templates Salvos") + st.caption("Visualize ou delete mensagens pré-definidas.") + + if not templates_df.empty: + # [MODIFICADO] Layout alterado para 3 colunas + template_cols = st.columns(3) + for index, row in templates_df.iterrows(): + with template_cols[index % 3]: + with st.container(border=True): + st.markdown(f"**Área:** {row['area']}") + # [MODIFICADO] Mensagem exibida dentro de um bloco de código para melhor formatação + st.code(row['message'], language=None) + + btn_col1, btn_col2 = st.columns(2) + + if btn_col1.button("Visualizar", key=f"view_{index}", use_container_width=True): + st.session_state.template_to_view = row.to_dict() + st.session_state.show_view_template_dialog = True + st.rerun() + + if btn_col2.button("Deletar", key=f"del_{index}", use_container_width=True): + updated_templates_df = templates_df.drop(index) + save_templates(updated_templates_df) + st.toast(f"Template '{row['area']}' deletado!") + st.rerun() + else: + st.info("Nenhum template salvo ainda. Crie um acima para começar.") + + + # --- Execução dos diálogos --- if st.session_state.get('show_preview_dialog', False): preview_dialog() + + if st.session_state.get('show_send_confirmation', False): + selected_count = int(st.session_state.edited_df['Selecionar'].sum()) + confirm_send_dialog(selected_count) + + if st.session_state.get('show_view_template_dialog', False): + template_data = st.session_state.get('template_to_view') + if template_data: + view_template_dialog(area=template_data['area'], message=template_data['message']) # --- PÁGINA DE PACIENTES --- def patients_page(): From da7f61795452f1c810fd7e7504350589a9ab1985 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 13 Oct 2025 14:24:02 -0300 Subject: [PATCH 37/60] pagina confirmacao melhorada --- data/message_templates.csv | 15 ++------ utils.py | 78 ++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 56 deletions(-) diff --git a/data/message_templates.csv b/data/message_templates.csv index 39d5144..edc6162 100644 --- a/data/message_templates.csv +++ b/data/message_templates.csv @@ -1,15 +1,8 @@ area,message -Ortopedista,"Olá {$primeiro_nome}! +Ortopedia,"Olá, {$primeiro_nome}! -Sua consulta está agendada para o dia {$data} , às {$data}, com {$profissional} (Ortopedista). -Caso não possa comparecer, pedimos a gentileza de avisar com antecedência. +Sua consulta está agendada para o dia {$data}, às {$horario}, com {$profissional} (Ortopedista). +Caso não possa comparecer, solicitamos a gentileza de avisar com antecedência. Atenciosamente, -Equipe COFRAT" -Ortopedista,"Olá {$primeiro_nome}! - -Sua consulta está agendada para o dia {$data} , às {$horario}, com {$profissional} (Ortopedista). -Caso não possa comparecer, pedimos a gentileza de avisar com antecedência. - -Atenciosamente, -Equipe COFRAT" +Equipe COFRAT." diff --git a/utils.py b/utils.py index 1eb61bf..47be61e 100644 --- a/utils.py +++ b/utils.py @@ -1093,11 +1093,11 @@ def approval_workflow_page(): st.rerun() -# --- [LAYOUT AJUSTADO 3 COLUNAS] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- +# --- [FORMATAÇÃO AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): """ - Exibe a página de confirmação em massa com novo layout de 3 colunas para templates, - filtros avançados, CRUD de templates e pop-ups de confirmação. + Exibe a página de confirmação em massa com formatação de preview aprimorada, + layout ajustado, filtros e CRUD de templates. """ # --- Importações necessárias --- import pandas as pd @@ -1176,11 +1176,9 @@ def save_templates(df): st.session_state.show_preview_dialog = False st.session_state.show_send_confirmation = False st.session_state.template_area = "" - st.session_state.show_view_template_dialog = False - st.session_state.template_to_view = None if 'message_template' not in st.session_state: - st.session_state.message_template = "Olá {$primeiro_nome}! Sua consulta está agendada para o dia {$data}, às {$horario}, com Dr. {$profissional}. Se não puder comparecer, por favor, avise com antecedência." + st.session_state.message_template = "Olá {$primeiro_nome}!\n\nSua consulta está agendada para o dia {$data}, às {$horario}, com Dr. {$profissional}.\n\nCaso não possa comparecer, por favor, avise com antecedência." # --- LÓGICA DE FILTRAGEM --- filtered_df = df.copy() @@ -1201,27 +1199,17 @@ def save_templates(df): filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.conf_search_term, case=False, na=False)] # --- DIÁLOGOS --- - @st.dialog("Visualizar Template") - def view_template_dialog(area, message): - st.subheader(f"Template: {area}") - st.markdown("---") - st.text_area("Conteúdo:", value=message, height=200, disabled=True, key="template_view_content") - st.markdown("---") - - btn_col1, btn_col2 = st.columns(2) - - with btn_col1: - if st.button("Copiar Mensagem", use_container_width=True): - st.toast("📋 Texto pronto para ser copiado da caixa acima!") - - with btn_col2: - if st.button("Fechar", use_container_width=True, type="primary"): - st.session_state.show_view_template_dialog = False - st.session_state.template_to_view = None - st.rerun() - @st.dialog("Preview da Mensagem") def preview_dialog(): + # Função auxiliar para formatar o horário + def format_time_for_preview(time_str): + try: + hour, minute = map(int, time_str.split(':')) + rounded_minute = (minute // 10) * 10 + return f"{hour:02d}:{rounded_minute:02d}" + except: + return time_str # Retorna o original se houver erro de formato + message_template = st.session_state.get('message_template', "Olá, {$primeiro_nome}!") if 'edited_df' in st.session_state and not st.session_state.edited_df.empty: selected_patients_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] @@ -1232,8 +1220,22 @@ def preview_dialog(): original_index = first_selected_row_display.name full_data_row = filtered_df.loc[original_index] st.markdown(f"**Para: {full_data_row['name']}**") - preview_message = message_template.replace('{$primeiro_nome}', str(full_data_row['name']).split(' ')[0]).replace('{$modalidade}', str(full_data_row['category'])).replace('{$horario}', str(full_data_row['time'])).replace('{$data}', full_data_row['scheduled_date'].strftime('%d/%m/%Y')).replace('{$profissional}', str(full_data_row['professional'])) - st.markdown(f'
{preview_message}
', unsafe_allow_html=True) + + # [MODIFICADO] Aplica as novas formatações + patient_name = str(full_data_row['name']).split(' ')[0].capitalize() + professional_name = str(full_data_row['professional']).title() + formatted_time = format_time_for_preview(str(full_data_row['time'])) + + preview_message = message_template.replace('{$primeiro_nome}', patient_name)\ + .replace('{$modalidade}', str(full_data_row['category']))\ + .replace('{$horario}', formatted_time)\ + .replace('{$data}', full_data_row['scheduled_date'].strftime('%d/%m/%Y'))\ + .replace('{$profissional}', professional_name) + + # [MODIFICADO] Substitui \n por
para renderizar quebras de linha + html_message = preview_message.replace('\n', '
') + + st.markdown(f'
{html_message}
', unsafe_allow_html=True) else: st.warning("Não há dados de agendamento para visualizar.") if st.button("Fechar", use_container_width=True, key="close_preview"): @@ -1385,7 +1387,7 @@ def toggle_all(): content = st.text_area( "Mensagem:", value=st.session_state.message_template, - height=200, + height=250, key='message_template_input' ) st.session_state.message_template = content @@ -1421,26 +1423,18 @@ def toggle_all(): st.divider() st.subheader("Templates Salvos") - st.caption("Visualize ou delete mensagens pré-definidas.") + st.caption("Delete mensagens pré-definidas.") if not templates_df.empty: - # [MODIFICADO] Layout alterado para 3 colunas template_cols = st.columns(3) for index, row in templates_df.iterrows(): with template_cols[index % 3]: with st.container(border=True): st.markdown(f"**Área:** {row['area']}") - # [MODIFICADO] Mensagem exibida dentro de um bloco de código para melhor formatação st.code(row['message'], language=None) - btn_col1, btn_col2 = st.columns(2) - - if btn_col1.button("Visualizar", key=f"view_{index}", use_container_width=True): - st.session_state.template_to_view = row.to_dict() - st.session_state.show_view_template_dialog = True - st.rerun() - - if btn_col2.button("Deletar", key=f"del_{index}", use_container_width=True): + # [MODIFICADO] Botão Deletar agora ocupa a largura total + if st.button("Deletar", key=f"del_{index}", use_container_width=True): updated_templates_df = templates_df.drop(index) save_templates(updated_templates_df) st.toast(f"Template '{row['area']}' deletado!") @@ -1448,7 +1442,6 @@ def toggle_all(): else: st.info("Nenhum template salvo ainda. Crie um acima para começar.") - # --- Execução dos diálogos --- if st.session_state.get('show_preview_dialog', False): preview_dialog() @@ -1457,11 +1450,6 @@ def toggle_all(): selected_count = int(st.session_state.edited_df['Selecionar'].sum()) confirm_send_dialog(selected_count) - if st.session_state.get('show_view_template_dialog', False): - template_data = st.session_state.get('template_to_view') - if template_data: - view_template_dialog(area=template_data['area'], message=template_data['message']) - # --- PÁGINA DE PACIENTES --- def patients_page(): st.write('##### Gerencie os cadastros de pacientes com praticidade') From 6b797cfca2308aac6d1a5211893f7ac51f063c20 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 13 Oct 2025 15:48:00 -0300 Subject: [PATCH 38/60] pagina confirmacao melhorada --- utils.py | 55 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/utils.py b/utils.py index 47be61e..953aaa6 100644 --- a/utils.py +++ b/utils.py @@ -1482,40 +1482,55 @@ def patients_page(): st.caption("Ações como editar e excluir podem ser adicionadas ao selecionar uma linha ou através de um menu de contexto em futuras implementações.") -def chatwoot_page(): +def automations_page(): """ - Exibe a página de integração com o Chatwoot, permitindo marcar todas as conversas como lidas. + Exibe a página de Automações, permitindo acionar fluxos de trabalho externos. """ - st.title("Chatwoot") - st.write("Gerencie ações rápidas para as conversas do Chatwoot diretamente daqui.") - st.write("---") + st.title("Automações") + st.write("Gerencie e acione fluxos de trabalho e automações diretamente desta página.") + st.divider() - st.subheader("Marcar todas as conversas como lidas") - st.write("Clique no botão abaixo para acionar a automação no n8n que marcará todas as conversas pendentes como lidas na sua caixa de entrada do Chatwoot.") + # --- AUTOMAÇÃO 1: MARCAR CONVERSAS COMO LIDAS --- + st.subheader("Marcar todas as conversas do Chatwoot como lidas") + st.write("Clique no botão abaixo para acionar a automação que marcará todas as conversas pendentes como lidas na sua caixa de entrada do Chatwoot.") - # Use colunas para centralizar o botão e dar um espaçamento melhor col1, col2, col3 = st.columns([1, 1.5, 1]) - with col2: if st.button("🚀 Marcar todas como lidas", use_container_width=True, type="primary"): - # Substitua pela URL real do seu webhook no n8n - WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/mark-all-as-read" + WEBHOOK_URL_CHATWOOT = "https://webhook.erudieto.com.br/webhook/mark-all-as-read" with st.spinner("Aguarde, acionando o fluxo no n8n..."): try: - # O método POST é geralmente usado para acionar webhooks - response = requests.post(WEBHOOK_URL, timeout=123456) - - # Verifica se a requisição foi bem-sucedida (código 2xx) - if response.status_code >= 200 and response.status_code < 300: + response = requests.post(WEBHOOK_URL_CHATWOOT, timeout=30) + if 200 <= response.status_code < 300: st.success("✅ Fluxo acionado com sucesso! As conversas serão marcadas como lidas em breve.") else: - st.error(f"❌ Falha ao acionar o fluxo. O n8n retornou o código de status: {response.status_code}") + st.error(f"❌ Falha ao acionar o fluxo. O servidor retornou o código: {response.status_code}") st.code(response.text, language="text") + except requests.exceptions.RequestException as e: + st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") + st.divider() + + # --- AUTOMAÇÃO 2: PADRONIZAR NÚMEROS DE TELEFONE --- + st.subheader("Padronizar Números de Telefone na Base de Dados") + st.write("Clique no botão abaixo para iniciar a automação que busca e ajusta todos os números de telefone para um formato padronizado (ex: +5531999998888).") + + col4, col5, col6 = st.columns([1, 1.5, 1]) + with col5: + if st.button("🚀 Iniciar Padronização de Telefones", use_container_width=True, type="primary"): + WEBHOOK_URL_PHONES = "https://webhook.erudieto.com.br/webhook/transformar-numeros" + + with st.spinner("Aguarde, acionando a automação de telefones..."): + try: + response = requests.post(WEBHOOK_URL_PHONES, timeout=30) + if 200 <= response.status_code < 300: + st.success("✅ Automação iniciada com sucesso! Os números de telefone serão padronizados em segundo plano.") + else: + st.error(f"❌ Falha ao acionar a automação. O servidor retornou o código: {response.status_code}") + st.code(response.text, language="text") except requests.exceptions.RequestException as e: st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") - st.warning("Verifique se a URL do webhook está correta e se o seu fluxo no n8n está ativo.") # --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) COM MENU st.radio --- @@ -1536,7 +1551,7 @@ def main_app(logo_path): "Agenda do Dia", "Gestão", "Pacientes", - "Chatwoot", + "Automações", "Confirmação", "Suporte" ] @@ -1568,7 +1583,7 @@ def main_app(logo_path): 'Gestão': management_page, 'Confirmação': confirmation_page, 'Pacientes': patients_page, - 'Chatwoot': chatwoot_page + 'Automações': automations_page } # Chama a função da página selecionada From 6735e5b0173d4d29f1bc417e8a1391a686575245 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Tue, 14 Oct 2025 23:43:46 -0300 Subject: [PATCH 39/60] feature: extrair PDF acupuntura --- utils.py | 221 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 129 insertions(+), 92 deletions(-) diff --git a/utils.py b/utils.py index 953aaa6..6994344 100644 --- a/utils.py +++ b/utils.py @@ -499,12 +499,13 @@ def clear_filters_callback(): def daily_schedule_page(): """Exibe a agenda do dia com filtros e funcionalidade de upload para o Supabase, utilizando o status real do Baserow.""" - if 'countdown_active' not in st.session_state: - st.session_state.countdown_active = False - if 'countdown_timer' not in st.session_state: - st.session_state.countdown_timer = 0 + # Inicialização de session_state if 'extraction_status' not in st.session_state: st.session_state.extraction_status = {} + if 'files_df' not in st.session_state: + st.session_state.files_df = None + if 'last_upload_time' not in st.session_state: + st.session_state.last_upload_time = None load_dotenv() try: @@ -519,11 +520,14 @@ def daily_schedule_page(): st.error(f"Ocorreu um erro ao inicializar a conexão com o Supabase: {e}") st.stop() - if 'files_df' not in st.session_state: - with st.spinner("Buscando metadados dos arquivos..."): + # Carrega metadados apenas uma vez + if st.session_state.files_df is None: + with st.spinner("Carregando metadados dos arquivos..."): st.session_state.files_df = fetch_metadata_from_db(supabase) st.subheader("Filtros") + + # Inicialização dos filtros (apenas uma vez) if "view_mode" not in st.session_state: st.session_state.view_mode = "Semana" st.session_state.selected_date = date.today() @@ -551,7 +555,6 @@ def daily_schedule_page(): f_col1.selectbox("Profissionais", ["Todos"] + sorted(df['professional'].unique().tolist()), key="prof_filter") f_col2.selectbox("Categorias", ["Todos"] + sorted(df['category'].unique().tolist()), key="cat_filter") - # --- [MODIFICADO] O filtro de status agora é populado com os valores reais do Baserow --- status_options = ["Todos"] + sorted(df['status'].unique().tolist()) f_col3.selectbox("Status", status_options, key="status_filter") @@ -561,10 +564,12 @@ def daily_schedule_page(): search_col, btn_col = st.columns([4, 1.08]) search_col.text_input("Buscar paciente...", placeholder="Buscar paciente...", label_visibility="collapsed", key="search_term") - btn_col.button("Limpar Filtros", width='stretch', on_click=clear_filters_callback) + btn_col.button("Limpar Filtros", on_click=clear_filters_callback) + # Aplicação dos filtros start_date, end_date = get_date_range(st.session_state.selected_date, st.session_state.view_mode) filtered_df = df + if st.session_state.view_mode != "Todo o período": filtered_df = df[(df['scheduled_date'] >= start_date) & (df['scheduled_date'] <= end_date)] if st.session_state.prof_filter != "Todos": @@ -582,6 +587,7 @@ def daily_schedule_page(): if st.session_state.search_term: filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.search_term, case=False, na=False)] + # Cabeçalho if st.session_state.view_mode == "Dia": st.header(f"Agendamentos para {st.session_state.selected_date.strftime('%d/%m/%Y')}") elif st.session_state.view_mode == "Todo o período": @@ -589,7 +595,7 @@ def daily_schedule_page(): else: st.header(f"Agendamentos de {start_date.strftime('%d/%m/%Y')} até {end_date.strftime('%d/%m/%Y')}") - # As contagens agora refletem os status reais vindos do Baserow + # Estatísticas total_agendamentos = len(filtered_df) confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) @@ -606,6 +612,7 @@ def daily_schedule_page():
""", unsafe_allow_html=True) + # Exibição da tabela display_df = filtered_df.copy() display_df['scheduled_date'] = pd.to_datetime(display_df['scheduled_date']).dt.strftime('%d/%m/%Y') display_columns_order = ['scheduled_date', 'time', 'name', 'insurance', 'event', 'status'] @@ -623,103 +630,108 @@ def daily_schedule_page(): st.dataframe(display_df, hide_index=True) st.markdown('
', unsafe_allow_html=True) - # --- LÓGICA DE UPLOAD PARA O SUPABASE (STORAGE + DATABASE) --- - if not st.session_state.countdown_active: - uploaded_files = st.file_uploader( - "Arraste e solte os arquivos aqui", - type="pdf", - accept_multiple_files=True - ) - - if uploaded_files: - any_success = False - for uploaded_file in uploaded_files: + # --- UPLOAD DE ARQUIVOS (SEM CONTADOR) --- + st.write("---") + + uploaded_files = st.file_uploader( + "Arraste e solte os arquivos aqui", + type="pdf", + accept_multiple_files=True, + key="file_uploader" + ) + + if uploaded_files: + upload_button = st.button("📤 Fazer Upload dos Arquivos", type="primary", use_container_width=True) + + if upload_button: + success_count = 0 + error_count = 0 + duplicate_count = 0 + + progress_bar = st.progress(0) + status_text = st.empty() + + for idx, uploaded_file in enumerate(uploaded_files): file_name_with_date = f"{date.today().strftime('%Y-%m-%d')}_{uploaded_file.name}" file_path_in_bucket = f"pdfs-agendamento/{file_name_with_date}" + status_text.text(f"Processando {idx + 1}/{len(uploaded_files)}: {uploaded_file.name}") + try: - with st.spinner(f'Enviando "{uploaded_file.name}" para o Storage...'): - supabase.storage.from_("cofrat").upload( - path=file_path_in_bucket, - file=uploaded_file.getvalue(), - file_options={"content-type": "application/pdf"} - ) + # Upload para o Storage + supabase.storage.from_("cofrat").upload( + path=file_path_in_bucket, + file=uploaded_file.getvalue(), + file_options={"content-type": "application/pdf"} + ) - with st.spinner(f'Registrando "{uploaded_file.name}" no banco de dados...'): - supabase.table('pdf_metadata').insert({ - 'data_upload': date.today().isoformat(), - 'nome_arquivo': file_name_with_date, - 'info_extraida': 'Não' - }).execute() + # Registro no banco de dados + supabase.table('pdf_metadata').insert({ + 'data_upload': date.today().isoformat(), + 'nome_arquivo': file_name_with_date, + 'info_extraida': 'Não' + }).execute() - st.success(f'✅ Arquivo "{uploaded_file.name}" processado com sucesso!') - any_success = True + success_count += 1 except Exception as e: - if "Duplicate" in str(e): - st.warning(f'⚠️ O arquivo "{uploaded_file.name}" já existe no storage ou no banco de dados.') - any_success = True + if "Duplicate" in str(e) or "already exists" in str(e).lower(): + duplicate_count += 1 else: - st.error(f'❌ Ocorreu um erro no processo de upload: {e}') - - if any_success: - st.session_state.countdown_active = True - st.session_state.countdown_timer = 5 - st.rerun() - - # --- BLOCO DO CONTADOR (DELAY) --- - if st.session_state.countdown_active: - timer = st.session_state.countdown_timer - - if timer > 0: - countdown_placeholder = st.empty() - with countdown_placeholder.container(): - st.info(f"🔄 Processamento concluído. Atualizando a lista em {timer} segundos...") - - time.sleep(1) - st.session_state.countdown_timer -= 1 - st.rerun() - - else: - st.session_state.countdown_active = False - with st.spinner("Atualizando lista de arquivos..."): + error_count += 1 + st.error(f'❌ Erro ao processar "{uploaded_file.name}": {e}') + + progress_bar.progress((idx + 1) / len(uploaded_files)) + + # Limpa a barra de progresso + progress_bar.empty() + status_text.empty() + + # Mensagem de resultado + if success_count > 0: + st.success(f'✅ {success_count} arquivo(s) enviado(s) com sucesso!') + if duplicate_count > 0: + st.warning(f'⚠️ {duplicate_count} arquivo(s) já existia(m) no sistema.') + if error_count > 0: + st.error(f'❌ {error_count} arquivo(s) com erro no upload.') + + # Atualiza a lista de arquivos apenas se houve sucesso + if success_count > 0 or duplicate_count > 0: st.session_state.files_df = fetch_metadata_from_db(supabase) - st.rerun() + st.session_state.last_upload_time = time.time() + st.rerun() - # --- LISTA DE STATUS DE UPLOAD (LENDO DO DATAFRAME DO DB) --- + # --- LISTA DE ARQUIVOS --- st.write("---") col_header1, col_header2 = st.columns([3, 1]) with col_header1: st.subheader("Status da Extração de Arquivos") with col_header2: - is_any_extraction_pending = any(status == 'pending' for status in st.session_state.extraction_status.values()) if st.button("🔄 Atualizar Lista", use_container_width=True): - with st.spinner("Buscando metadados dos arquivos..."): - st.session_state.files_df = fetch_metadata_from_db(supabase) - for file_id, status in list(st.session_state.extraction_status.items()): - if status == 'pending': - if not st.session_state.files_df[st.session_state.files_df['id'] == file_id].empty and \ - st.session_state.files_df[st.session_state.files_df['id'] == file_id]['extracted'].iloc[0] == 'Sim': - del st.session_state.extraction_status[file_id] + st.session_state.files_df = fetch_metadata_from_db(supabase) + # Limpa status de extração para arquivos já extraídos + for file_id in list(st.session_state.extraction_status.keys()): + if not st.session_state.files_df[st.session_state.files_df['id'] == file_id].empty: + if st.session_state.files_df[st.session_state.files_df['id'] == file_id]['extracted'].iloc[0] == 'Sim': + del st.session_state.extraction_status[file_id] st.rerun() files_df = st.session_state.files_df if files_df.empty: st.info("Nenhum metadado de arquivo encontrado no banco de dados.") else: - # --- [LAYOUT MELHORADO] --- with st.container(border=True): - # Cabeçalho da "tabela" + # Cabeçalho header_cols = st.columns([2, 4, 2, 3]) header_cols[0].markdown("**Data de upload**") header_cols[1].markdown("**Nome do arquivo**") header_cols[2].markdown("**Info Extraída**") header_cols[3].markdown("
Ações
", unsafe_allow_html=True) - # Linhas da "tabela" + # Linhas for index, row in files_df.iterrows(): - st.divider() # Adiciona uma linha divisória entre os registros + st.divider() col1, col2, col3, col4 = st.columns([2, 4, 2, 3]) col1.write(datetime.strptime(row['upload_date'], '%Y-%m-%d').strftime('%d/%m/%Y')) @@ -736,7 +748,7 @@ def daily_schedule_page(): with col4: btn_cols = st.columns(2) - is_disabled = st.session_state.countdown_active or current_extraction_status == 'pending' + is_disabled = current_extraction_status == 'pending' if row['extracted'] != 'Sim' and current_extraction_status != 'pending': if btn_cols[0].button("Extrair", key=f"extract_{row['id']}", use_container_width=True, disabled=is_disabled): @@ -745,21 +757,20 @@ def daily_schedule_page(): st.session_state.extraction_status[row['id']] = 'pending' - with st.spinner(f"Acionando automação para '{row['file_name']}'..."): - try: - response = requests.post(WEBHOOK_URL, json=payload, timeout=5) - - if response.status_code in [200, 202]: - st.success(f"Extração para '{row['file_name']}' iniciada. O status será atualizado em breve.") - st.rerun() - else: - st.error(f"Falha ao iniciar extração (código {response.status_code}): {response.text}") - st.session_state.extraction_status[row['id']] = 'failed' - st.rerun() - except requests.exceptions.RequestException as e: - st.error(f"Erro de conexão com o webhook: {e}") + try: + response = requests.post(WEBHOOK_URL, json=payload, timeout=5) + + if response.status_code in [200, 202]: + st.success(f"✅ Extração iniciada para '{row['file_name']}'") + st.rerun() + else: + st.error(f"❌ Falha ao iniciar extração (código {response.status_code})") st.session_state.extraction_status[row['id']] = 'failed' st.rerun() + except requests.exceptions.RequestException as e: + st.error(f"❌ Erro de conexão: {e}") + st.session_state.extraction_status[row['id']] = 'failed' + st.rerun() elif current_extraction_status == 'pending': btn_cols[0].markdown('
Extraindo...
', unsafe_allow_html=True) else: @@ -769,6 +780,7 @@ def daily_schedule_page(): st.session_state.file_to_delete = row st.rerun() + # --- MODAL DE CONFIRMAÇÃO DE DELEÇÃO --- if 'file_to_delete' in st.session_state and st.session_state.file_to_delete is not None: file_info = st.session_state.file_to_delete @@ -777,24 +789,27 @@ def confirm_delete(): st.warning(f"Você tem certeza que deseja deletar permanentemente o arquivo **{file_info['file_name']}**?") st.write("Esta ação removerá o arquivo do armazenamento e seu registro do banco de dados. Não pode ser desfeita.") - if st.button("Sim, deletar agora", type="primary"): + col1, col2 = st.columns(2) + + if col1.button("✅ Sim, deletar", type="primary", use_container_width=True): try: supabase.storage.from_("cofrat").remove([f"pdfs-agendamento/{file_info['file_name']}"]) supabase.table('pdf_metadata').delete().eq('id', file_info['id']).execute() - st.success("Arquivo deletado com sucesso!") + st.success("✅ Arquivo deletado com sucesso!") st.session_state.file_to_delete = None st.session_state.files_df = fetch_metadata_from_db(supabase) if file_info['id'] in st.session_state.extraction_status: del st.session_state.extraction_status[file_info['id']] + time.sleep(0.5) st.rerun() except Exception as e: - st.error(f"Erro ao deletar o arquivo: {e}") + st.error(f"❌ Erro ao deletar: {e}") st.session_state.file_to_delete = None st.rerun() - if st.button("Cancelar"): + if col2.button("❌ Cancelar", use_container_width=True): st.session_state.file_to_delete = None st.rerun() @@ -1532,6 +1547,28 @@ def automations_page(): except requests.exceptions.RequestException as e: st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") + st.divider() + + # --- AUTOMAÇÃO 3: DELETAR AGORA --- + st.subheader("Deletar Agora") + st.write("Clique no botão abaixo para acionar a automação de deleção. Esta ação executará o processo de limpeza conforme configurado no webhook.") + + col7, col8, col9 = st.columns([1, 1.5, 1]) + with col8: + if st.button("🗑️ Deletar Agora", use_container_width=True, type="primary"): + WEBHOOK_URL_DELETE = "https://webhook.erudieto.com.br/webhook/delete" + + with st.spinner("Aguarde, acionando a automação de deleção..."): + try: + response = requests.post(WEBHOOK_URL_DELETE, timeout=30) + if 200 <= response.status_code < 300: + st.success("✅ Automação de deleção iniciada com sucesso! O processo será executado em segundo plano.") + else: + st.error(f"❌ Falha ao acionar a automação. O servidor retornou o código: {response.status_code}") + st.code(response.text, language="text") + except requests.exceptions.RequestException as e: + st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") + # --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) COM MENU st.radio --- def main_app(logo_path): From 5a5907e1b7c620c89a26a7928e7d0ad7ee5ff594 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Tue, 21 Oct 2025 23:48:45 -0300 Subject: [PATCH 40/60] (page) update agenda do dia e confirmacao --- utils.py | 56 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/utils.py b/utils.py index 6994344..19328f3 100644 --- a/utils.py +++ b/utils.py @@ -525,11 +525,18 @@ def daily_schedule_page(): with st.spinner("Carregando metadados dos arquivos..."): st.session_state.files_df = fetch_metadata_from_db(supabase) - st.subheader("Filtros") + # [MODIFICADO] Adicionado botão de atualização ao lado do título do filtro + header_cols = st.columns([3, 1]) + with header_cols[0]: + st.subheader("Filtros") + with header_cols[1]: + if st.button("🔄 Atualizar Página", use_container_width=True, help="Recarrega os dados da agenda do Baserow"): + st.rerun() # Inicialização dos filtros (apenas uma vez) if "view_mode" not in st.session_state: - st.session_state.view_mode = "Semana" + # [MODIFICADO] Alterado o filtro padrão para "Todo o período" + st.session_state.view_mode = "Todo o período" st.session_state.selected_date = date.today() st.session_state.prof_filter = "Todos" st.session_state.cat_filter = "Todos" @@ -548,6 +555,7 @@ def daily_schedule_page(): with st.container(border=False): col1, col2 = st.columns([3, 2]) + # O index=4 corresponde a "Todo o período" na lista de opções col1.radio("Visualização:", ["Dia", "Semana", "Mês", "Trimestre", "Todo o período"], horizontal=True, key="view_mode", index=4) col2.date_input("Data:", key="selected_date", disabled=(st.session_state.view_mode == "Todo o período")) @@ -566,6 +574,9 @@ def daily_schedule_page(): search_col.text_input("Buscar paciente...", placeholder="Buscar paciente...", label_visibility="collapsed", key="search_term") btn_col.button("Limpar Filtros", on_click=clear_filters_callback) + # Remove possíveis duplicatas ANTES de filtrar + df = df.drop_duplicates(subset=['scheduled_date', 'time', 'name'], keep='first') + # Aplicação dos filtros start_date, end_date = get_date_range(st.session_state.selected_date, st.session_state.view_mode) filtered_df = df @@ -587,6 +598,9 @@ def daily_schedule_page(): if st.session_state.search_term: filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.search_term, case=False, na=False)] + # Remove linhas com valores nulos críticos + filtered_df = filtered_df.dropna(subset=['scheduled_date', 'name']) + # Cabeçalho if st.session_state.view_mode == "Dia": st.header(f"Agendamentos para {st.session_state.selected_date.strftime('%d/%m/%Y')}") @@ -1108,7 +1122,7 @@ def approval_workflow_page(): st.rerun() -# --- [FORMATAÇÃO AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- +# --- [AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): """ Exibe a página de confirmação em massa com formatação de preview aprimorada, @@ -1338,27 +1352,29 @@ def clear_confirmation_filters(): end_date_str = st.session_state.conf_end_date.strftime('%d/%m/%Y') st.header(f"Agendamentos de {start_date_str} até {end_date_str}") - total_agendamentos = len(filtered_df) - confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) - pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) - reagendados = len(filtered_df[filtered_df['status'] == 'Reagendado']) - cancelados = len(filtered_df[filtered_df['status'] == 'Cancelado']) - - st.markdown(f""" -
- {total_agendamentos} agendamentos - {confirmados} confirmados - {pendentes} pendentes - {reagendados} reagendados - {cancelados} cancelados -
- """, unsafe_allow_html=True) - - # --- TABELA DE AGENDAMENTOS --- + # --- [CORRIGIDO] TABELA DE AGENDAMENTOS E ESTATÍSTICAS --- if filtered_df.empty: st.warning("Nenhum agendamento encontrado para os filtros selecionados.") st.session_state.edited_df = pd.DataFrame() else: + # [CORRIGIDO] O cálculo das estatísticas foi movido para DENTRO deste bloco 'else'. + # Isso garante que o código só tente acessar a coluna 'status' se o DataFrame não estiver vazio. + total_agendamentos = len(filtered_df) + confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) + pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) + reagendados = len(filtered_df[filtered_df['status'] == 'Reagendado']) + cancelados = len(filtered_df[filtered_df['status'] == 'Cancelado']) + + st.markdown(f""" +
+ {total_agendamentos} agendamentos + {confirmados} confirmados + {pendentes} pendentes + {reagendados} reagendados + {cancelados} cancelados +
+ """, unsafe_allow_html=True) + base_df = filtered_df[['name', 'time', 'category', 'professional', 'status', 'phone']].copy() base_df.rename(columns={ 'name': 'Paciente', 'time': 'Horário', 'category': 'Modalidade', From 51f2f5fe6b2d86648b26af2c8a6ce0608b457eae Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Fri, 24 Oct 2025 22:08:38 -0300 Subject: [PATCH 41/60] =?UTF-8?q?Removendo=20pasta=20scripts=20do=20contro?= =?UTF-8?q?le=20de=20vers=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/backup_2.py | 323 ----------------------- scripts/backup_n8n_python_node.py | 323 ----------------------- scripts/captura-107-corretamente.py | 110 -------- scripts/captura-126-mas-doctor-errado.py | 146 ---------- scripts/captura-corretamente.py | 110 -------- 5 files changed, 1012 deletions(-) delete mode 100644 scripts/backup_2.py delete mode 100644 scripts/backup_n8n_python_node.py delete mode 100644 scripts/captura-107-corretamente.py delete mode 100644 scripts/captura-126-mas-doctor-errado.py delete mode 100644 scripts/captura-corretamente.py diff --git a/scripts/backup_2.py b/scripts/backup_2.py deleted file mode 100644 index 2ae81d2..0000000 --- a/scripts/backup_2.py +++ /dev/null @@ -1,323 +0,0 @@ -import re -import json - -# Texto completo extraído do PDF (presume-se que vem no primeiro item) -texto_completo = items[0]['json']['text'] - -# Divide em linhas -linhas = texto_completo.split('\n') - -agendamentos_finalizados = [] -data_atual = "" -especialidade_atual = "" - -# Padrões regex -regex_hora = re.compile(r'^\d{2}:\d{2}') -regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') -# Aceita formatos com parênteses ou um bloco de 10/11 dígitos (fallback) -regex_telefone = re.compile(r'\(?\d{2}\)?\s*\d{4,5}-?\d{4}|\b\d{10,11}\b') -# prontuário: número (3+ dígitos) no final da linha -regex_record = re.compile(r'(\d{3,})\s*$') - -# Detectores de cabeçalho/página (usados para ignorar datas de header) -HEADER_INDICATORS = ("Página", "Page", "SIMAH", "Agendamentos de Consultas", "COFRAT") - -# Padrão que localiza nomes em MAIÚSCULAS (2-4 palavras) -name_pattern = re.compile(r'([A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}(?:\s+[A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}){1,3})') - -# Prefixos a serem ignorados (removi "Data" e "Hora" daqui) -lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total") - -# DEBUG -> troque para True se quiser ver prints nos logs do node -DEBUG = True - -# --- Controle de ignorar datas que são header (muito útil pro caso que você reportou) --- -IGNORE_HEADER_DATE = True -HEADER_CONTEXT_LINES = 3 # quantas linhas antes considerar para detectar header - -def is_near_header(idx): - """Retorna True se a linha idx estiver perto de algo que pareça cabeçalho de página.""" - for k in range(0, HEADER_CONTEXT_LINES): - j = idx - k - if j < 0: - break - ln = linhas[j] - if any(ind in ln for ind in HEADER_INDICATORS): - return True - return False - -def extrair_campos_linha_agendamento(linhas_agendamento): - """ - Extrai os campos de um agendamento baseado na estrutura do bloco coletado. - bloco esperado já contém as linhas iniciais: "Data: ..." e "Especialidade: ..." (se houver). - """ - registro = { - "date": "", - "specialty": "", - "time": "", - "doctor": "", - "insurance": "", - "event": "", - "patient": "", - "patient_phone": "", - "record": "" - } - - for i, linha in enumerate(linhas_agendamento): - if not linha: - continue - linha = linha.strip() - - # Captura Data / Especialidade caso estejam no bloco (útil quando foram injetadas) - if linha.lower().startswith("data:"): - registro["date"] = linha.split(":", 1)[1].strip() - continue - if linha.lower().startswith("especialidade:"): - registro["specialty"] = linha.split(":", 1)[1].strip() - continue - - # Se a linha começa com horário, interpreta o resto do bloco relativo a esse agendamento - if regex_hora.match(linha): - registro["time"] = linha[:5] # HH:MM - resto_linha = linha[5:].strip() - # remove separadores iniciais (se houver) - if resto_linha.startswith("-") or resto_linha.startswith(":"): - resto_linha = resto_linha[1:].strip() - # inicialmente tenta pegar o médico na mesma linha - registro["doctor"] = resto_linha - - # Examina as próximas linhas do bloco para paciente / convênio / evento / telefones / prontuário - tail = linhas_agendamento[i+1:i+10] # olha até 9 linhas seguintes (ajustável) - patient = "" - phone = "" - insurance = "" - event = "" - record = "" - - for t in tail: - tln = t.strip() - if not tln: - continue - - # procura telefone na linha - mtel = regex_telefone.search(tln) - if mtel: - found_phone = mtel.group() - before = tln[:mtel.start()].strip() - after = tln[mtel.end():].strip() - # Decidir se 'before' é paciente ou convênio - if before and not re.search(r'\d', before): - # Provavelmente paciente - if not patient: - patient = before - else: - if not insurance: - insurance = before - else: - # fallback: se tiver texto antes, usa como convênio - if before and not insurance: - insurance = before - elif after and not insurance: - insurance = after - phone = found_phone - continue - - low = tln.lower() - # linhas rotuladas - if low.startswith("paciente") or low.startswith("paciente:"): - parts = tln.split(":", 1) - candidate = parts[1].strip() if len(parts) > 1 else "" - if candidate: - patient = candidate - continue - if any(k in low for k in ("convênio", "convenio", "plano", "seguradora", "empresa")): - parts = tln.split(":", 1) - insurance = parts[1].strip() if len(parts) > 1 else tln - continue - - # procura prontuário no final da linha - mrec = regex_record.search(tln) - if mrec: - record = mrec.group(1) - event_candidate = tln[:mrec.start()].strip() - # separa event/doctor se ambos estiverem presentes juntos - if event_candidate: - event = event_candidate - continue - - # heurísticas simples: primeira linha "limpa" (sem dígitos) costuma ser o paciente - if not patient and not re.search(r'\d', tln): - # mas evita pegar linhas como "Data :" ou que contenham a palavra Data - if "data" not in tln.lower() and not tln.endswith(":"): - patient = tln - continue - - # se já temos paciente, usa a próxima linha como convênio se não parece evento - if patient and not insurance and len(tln) < 80: - # evita confundir um possível nome de profissional com convênio por enquanto - insurance = tln - continue - - if not event: - event = tln - continue - - # Ajustes finais: - # 1) se event contém um nome em MAIÚSCULAS (ex.: "CONSULTARICARDO SUSSUMU NAKAYA"), - # extrai esse nome como doctor e limpa o event - if event: - mname = name_pattern.search(event) - if mname and not registro["doctor"]: - found_name = mname.group(1).strip() - registro["doctor"] = found_name - # remove a ocorrência encontrada do event (se possível) - event = event.replace(found_name, "").strip(" -:,.") - - # 2) se ainda não temos doctor, procura nas linhas tail um nome que combine com name_pattern - if not registro["doctor"]: - for t in tail: - tln = t.strip() - if not tln: - continue - m = name_pattern.search(tln) - if m: - candidate = m.group(1).strip() - # evita confundir com paciente - if candidate != patient: - registro["doctor"] = candidate - # caso esse nome tenha sido capturado como patient por engano, remove de patient - if patient and candidate in patient: - patient = patient.replace(candidate, "").strip(" -:,") - break - - registro["patient"] = patient - registro["patient_phone"] = phone - registro["insurance"] = insurance - registro["event"] = event - registro["record"] = record - - # Para cada horário só processamos a primeira ocorrência (como antes) - break - - return registro - -# Processamento principal -i = 0 -while i < len(linhas): - linha = linhas[i].strip() - - # Ignora linhas vazias - if not linha: - i += 1 - continue - - # Ignora linhas com prefixos de lixo (exclui Data/Hora para não descartar cabeçalhos úteis) - if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): - i += 1 - continue - - # Detecta nova seção de data/especialidade (mais permissivo) - # Se encontrar uma data, verifica se ela está perto de um header — se estiver, ignora - if regex_data.search(linha): - match_data = regex_data.search(linha) - if match_data: - # Detecta se a data está dentro do header (ex.: próxima a "Página", "SIMAH", etc.) - if IGNORE_HEADER_DATE and is_near_header(i): - if DEBUG: - print(f"Ignorando data de cabeçalho na linha {i}: {match_data.group()}") - i += 1 - continue - data_atual = match_data.group() - - # Procura especialidade na mesma linha ou nas próximas - if "Especialidade" in linha: - # exemplo: "Data: 01/01/2025 Especialidade: Cardiologia" - try: - especialidade_atual = linha.split("Especialidade:",1)[1].strip() - except: - especialidade_atual = linha.split("Especialidade",1)[1].strip() - else: - # Procura especialidade nas próximas 3 linhas (ou heurística) - found_spec = False - for j in range(i+1, min(i+4, len(linhas))): - l2 = linhas[j].strip() - if not l2: - continue - if "Especialidade" in l2: - especialidade_atual = l2.split("Especialidade:",1)[1].strip() if ":" in l2 else l2 - found_spec = True - break - # heurística: linha curta, sem hora/telefone/dígitos -> pode ser especialidade, - # MAS evita pegar linhas que contenham 'Data' ou terminem com ':' (como "Data :") - if (not regex_hora.match(l2) and not regex_telefone.search(l2) - and len(l2) < 60 and not re.search(r'\d', l2) - and "data" not in l2.lower() and not l2.endswith(":")): - especialidade_atual = l2 - found_spec = True - break - if not found_spec: - # se não encontrou, preserva a especialidade anterior (não sobrescreve por linhas estranhas) - pass - - if DEBUG: - print(f"Nova seção - Data: {data_atual}, Especialidade: {especialidade_atual}") - - i += 1 - continue - - # Detecta início de agendamento (linha com horário) - if regex_hora.match(linha): - # Coleta o bloco do agendamento (insere Data/Especialidade atuais para o parser) - bloco_agendamento = [f"Data: {data_atual}", f"Especialidade: {especialidade_atual}", linha] - - # Adiciona as próximas linhas até encontrar outro horário, "Sub - Total" ou linha de lixo - j = i + 1 - linhas_coletadas = 0 - max_linhas = 12 # Limita para evitar coletar dados de outros agendamentos - - while j < len(linhas) and linhas_coletadas < max_linhas: - proxima_linha = linhas[j].strip() - - # Para se encontrar outro horário, "Sub - Total", ou nova seção de data - if (regex_hora.match(proxima_linha) or - "Sub - Total" in proxima_linha or - regex_data.search(proxima_linha)): - break - - # Ignora linhas de lixo - if any(proxima_linha.startswith(prefixo) for prefixo in lixo_prefixos): - j += 1 - continue - - # Adiciona linha não vazia - if proxima_linha: - bloco_agendamento.append(proxima_linha) - linhas_coletadas += 1 - - j += 1 - - # Processa o bloco coletado - agendamento = extrair_campos_linha_agendamento(bloco_agendamento) - - # Preenche date/specialty com o contexto caso o parser não tenha encontrado - if not agendamento["date"]: - agendamento["date"] = data_atual - if not agendamento["specialty"]: - agendamento["specialty"] = especialidade_atual - - # Só adiciona se tem dados mínimos - if agendamento["time"] and (agendamento["doctor"] or agendamento["patient"]): - agendamentos_finalizados.append(agendamento) - - if DEBUG: - print(f"Agendamento: {agendamento['date']} {agendamento['time']} - {agendamento['doctor']} - {agendamento['patient']} ({agendamento['patient_phone']})") - - i = j - 1 # Ajusta para continuar da posição correta - - i += 1 - -if DEBUG: - print(f"Total de agendamentos processados: {len(agendamentos_finalizados)}") - -# Retorna no formato esperado pelo n8n -return [{"json": agendamento} for agendamento in agendamentos_finalizados] diff --git a/scripts/backup_n8n_python_node.py b/scripts/backup_n8n_python_node.py deleted file mode 100644 index 2ae81d2..0000000 --- a/scripts/backup_n8n_python_node.py +++ /dev/null @@ -1,323 +0,0 @@ -import re -import json - -# Texto completo extraído do PDF (presume-se que vem no primeiro item) -texto_completo = items[0]['json']['text'] - -# Divide em linhas -linhas = texto_completo.split('\n') - -agendamentos_finalizados = [] -data_atual = "" -especialidade_atual = "" - -# Padrões regex -regex_hora = re.compile(r'^\d{2}:\d{2}') -regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') -# Aceita formatos com parênteses ou um bloco de 10/11 dígitos (fallback) -regex_telefone = re.compile(r'\(?\d{2}\)?\s*\d{4,5}-?\d{4}|\b\d{10,11}\b') -# prontuário: número (3+ dígitos) no final da linha -regex_record = re.compile(r'(\d{3,})\s*$') - -# Detectores de cabeçalho/página (usados para ignorar datas de header) -HEADER_INDICATORS = ("Página", "Page", "SIMAH", "Agendamentos de Consultas", "COFRAT") - -# Padrão que localiza nomes em MAIÚSCULAS (2-4 palavras) -name_pattern = re.compile(r'([A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}(?:\s+[A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}){1,3})') - -# Prefixos a serem ignorados (removi "Data" e "Hora" daqui) -lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total") - -# DEBUG -> troque para True se quiser ver prints nos logs do node -DEBUG = True - -# --- Controle de ignorar datas que são header (muito útil pro caso que você reportou) --- -IGNORE_HEADER_DATE = True -HEADER_CONTEXT_LINES = 3 # quantas linhas antes considerar para detectar header - -def is_near_header(idx): - """Retorna True se a linha idx estiver perto de algo que pareça cabeçalho de página.""" - for k in range(0, HEADER_CONTEXT_LINES): - j = idx - k - if j < 0: - break - ln = linhas[j] - if any(ind in ln for ind in HEADER_INDICATORS): - return True - return False - -def extrair_campos_linha_agendamento(linhas_agendamento): - """ - Extrai os campos de um agendamento baseado na estrutura do bloco coletado. - bloco esperado já contém as linhas iniciais: "Data: ..." e "Especialidade: ..." (se houver). - """ - registro = { - "date": "", - "specialty": "", - "time": "", - "doctor": "", - "insurance": "", - "event": "", - "patient": "", - "patient_phone": "", - "record": "" - } - - for i, linha in enumerate(linhas_agendamento): - if not linha: - continue - linha = linha.strip() - - # Captura Data / Especialidade caso estejam no bloco (útil quando foram injetadas) - if linha.lower().startswith("data:"): - registro["date"] = linha.split(":", 1)[1].strip() - continue - if linha.lower().startswith("especialidade:"): - registro["specialty"] = linha.split(":", 1)[1].strip() - continue - - # Se a linha começa com horário, interpreta o resto do bloco relativo a esse agendamento - if regex_hora.match(linha): - registro["time"] = linha[:5] # HH:MM - resto_linha = linha[5:].strip() - # remove separadores iniciais (se houver) - if resto_linha.startswith("-") or resto_linha.startswith(":"): - resto_linha = resto_linha[1:].strip() - # inicialmente tenta pegar o médico na mesma linha - registro["doctor"] = resto_linha - - # Examina as próximas linhas do bloco para paciente / convênio / evento / telefones / prontuário - tail = linhas_agendamento[i+1:i+10] # olha até 9 linhas seguintes (ajustável) - patient = "" - phone = "" - insurance = "" - event = "" - record = "" - - for t in tail: - tln = t.strip() - if not tln: - continue - - # procura telefone na linha - mtel = regex_telefone.search(tln) - if mtel: - found_phone = mtel.group() - before = tln[:mtel.start()].strip() - after = tln[mtel.end():].strip() - # Decidir se 'before' é paciente ou convênio - if before and not re.search(r'\d', before): - # Provavelmente paciente - if not patient: - patient = before - else: - if not insurance: - insurance = before - else: - # fallback: se tiver texto antes, usa como convênio - if before and not insurance: - insurance = before - elif after and not insurance: - insurance = after - phone = found_phone - continue - - low = tln.lower() - # linhas rotuladas - if low.startswith("paciente") or low.startswith("paciente:"): - parts = tln.split(":", 1) - candidate = parts[1].strip() if len(parts) > 1 else "" - if candidate: - patient = candidate - continue - if any(k in low for k in ("convênio", "convenio", "plano", "seguradora", "empresa")): - parts = tln.split(":", 1) - insurance = parts[1].strip() if len(parts) > 1 else tln - continue - - # procura prontuário no final da linha - mrec = regex_record.search(tln) - if mrec: - record = mrec.group(1) - event_candidate = tln[:mrec.start()].strip() - # separa event/doctor se ambos estiverem presentes juntos - if event_candidate: - event = event_candidate - continue - - # heurísticas simples: primeira linha "limpa" (sem dígitos) costuma ser o paciente - if not patient and not re.search(r'\d', tln): - # mas evita pegar linhas como "Data :" ou que contenham a palavra Data - if "data" not in tln.lower() and not tln.endswith(":"): - patient = tln - continue - - # se já temos paciente, usa a próxima linha como convênio se não parece evento - if patient and not insurance and len(tln) < 80: - # evita confundir um possível nome de profissional com convênio por enquanto - insurance = tln - continue - - if not event: - event = tln - continue - - # Ajustes finais: - # 1) se event contém um nome em MAIÚSCULAS (ex.: "CONSULTARICARDO SUSSUMU NAKAYA"), - # extrai esse nome como doctor e limpa o event - if event: - mname = name_pattern.search(event) - if mname and not registro["doctor"]: - found_name = mname.group(1).strip() - registro["doctor"] = found_name - # remove a ocorrência encontrada do event (se possível) - event = event.replace(found_name, "").strip(" -:,.") - - # 2) se ainda não temos doctor, procura nas linhas tail um nome que combine com name_pattern - if not registro["doctor"]: - for t in tail: - tln = t.strip() - if not tln: - continue - m = name_pattern.search(tln) - if m: - candidate = m.group(1).strip() - # evita confundir com paciente - if candidate != patient: - registro["doctor"] = candidate - # caso esse nome tenha sido capturado como patient por engano, remove de patient - if patient and candidate in patient: - patient = patient.replace(candidate, "").strip(" -:,") - break - - registro["patient"] = patient - registro["patient_phone"] = phone - registro["insurance"] = insurance - registro["event"] = event - registro["record"] = record - - # Para cada horário só processamos a primeira ocorrência (como antes) - break - - return registro - -# Processamento principal -i = 0 -while i < len(linhas): - linha = linhas[i].strip() - - # Ignora linhas vazias - if not linha: - i += 1 - continue - - # Ignora linhas com prefixos de lixo (exclui Data/Hora para não descartar cabeçalhos úteis) - if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): - i += 1 - continue - - # Detecta nova seção de data/especialidade (mais permissivo) - # Se encontrar uma data, verifica se ela está perto de um header — se estiver, ignora - if regex_data.search(linha): - match_data = regex_data.search(linha) - if match_data: - # Detecta se a data está dentro do header (ex.: próxima a "Página", "SIMAH", etc.) - if IGNORE_HEADER_DATE and is_near_header(i): - if DEBUG: - print(f"Ignorando data de cabeçalho na linha {i}: {match_data.group()}") - i += 1 - continue - data_atual = match_data.group() - - # Procura especialidade na mesma linha ou nas próximas - if "Especialidade" in linha: - # exemplo: "Data: 01/01/2025 Especialidade: Cardiologia" - try: - especialidade_atual = linha.split("Especialidade:",1)[1].strip() - except: - especialidade_atual = linha.split("Especialidade",1)[1].strip() - else: - # Procura especialidade nas próximas 3 linhas (ou heurística) - found_spec = False - for j in range(i+1, min(i+4, len(linhas))): - l2 = linhas[j].strip() - if not l2: - continue - if "Especialidade" in l2: - especialidade_atual = l2.split("Especialidade:",1)[1].strip() if ":" in l2 else l2 - found_spec = True - break - # heurística: linha curta, sem hora/telefone/dígitos -> pode ser especialidade, - # MAS evita pegar linhas que contenham 'Data' ou terminem com ':' (como "Data :") - if (not regex_hora.match(l2) and not regex_telefone.search(l2) - and len(l2) < 60 and not re.search(r'\d', l2) - and "data" not in l2.lower() and not l2.endswith(":")): - especialidade_atual = l2 - found_spec = True - break - if not found_spec: - # se não encontrou, preserva a especialidade anterior (não sobrescreve por linhas estranhas) - pass - - if DEBUG: - print(f"Nova seção - Data: {data_atual}, Especialidade: {especialidade_atual}") - - i += 1 - continue - - # Detecta início de agendamento (linha com horário) - if regex_hora.match(linha): - # Coleta o bloco do agendamento (insere Data/Especialidade atuais para o parser) - bloco_agendamento = [f"Data: {data_atual}", f"Especialidade: {especialidade_atual}", linha] - - # Adiciona as próximas linhas até encontrar outro horário, "Sub - Total" ou linha de lixo - j = i + 1 - linhas_coletadas = 0 - max_linhas = 12 # Limita para evitar coletar dados de outros agendamentos - - while j < len(linhas) and linhas_coletadas < max_linhas: - proxima_linha = linhas[j].strip() - - # Para se encontrar outro horário, "Sub - Total", ou nova seção de data - if (regex_hora.match(proxima_linha) or - "Sub - Total" in proxima_linha or - regex_data.search(proxima_linha)): - break - - # Ignora linhas de lixo - if any(proxima_linha.startswith(prefixo) for prefixo in lixo_prefixos): - j += 1 - continue - - # Adiciona linha não vazia - if proxima_linha: - bloco_agendamento.append(proxima_linha) - linhas_coletadas += 1 - - j += 1 - - # Processa o bloco coletado - agendamento = extrair_campos_linha_agendamento(bloco_agendamento) - - # Preenche date/specialty com o contexto caso o parser não tenha encontrado - if not agendamento["date"]: - agendamento["date"] = data_atual - if not agendamento["specialty"]: - agendamento["specialty"] = especialidade_atual - - # Só adiciona se tem dados mínimos - if agendamento["time"] and (agendamento["doctor"] or agendamento["patient"]): - agendamentos_finalizados.append(agendamento) - - if DEBUG: - print(f"Agendamento: {agendamento['date']} {agendamento['time']} - {agendamento['doctor']} - {agendamento['patient']} ({agendamento['patient_phone']})") - - i = j - 1 # Ajusta para continuar da posição correta - - i += 1 - -if DEBUG: - print(f"Total de agendamentos processados: {len(agendamentos_finalizados)}") - -# Retorna no formato esperado pelo n8n -return [{"json": agendamento} for agendamento in agendamentos_finalizados] diff --git a/scripts/captura-107-corretamente.py b/scripts/captura-107-corretamente.py deleted file mode 100644 index 6d90da4..0000000 --- a/scripts/captura-107-corretamente.py +++ /dev/null @@ -1,110 +0,0 @@ -import re - -# --- FUNÇÃO DE EXTRAÇÃO DE BLOCO --- -def parse_appointment_block(block_lines): - """ - Recebe um bloco de 6 linhas e extrai os campos do agendamento. - """ - if len(block_lines) < 6: - return None - - EVENT_TYPES = ["CONSULTA", "RETORNO"] - - event_doctor_line = block_lines[4] - event = None - doctor = None - - # Tenta dividir a linha "Evento+Médico" - for event_type in EVENT_TYPES: - if event_doctor_line.upper().startswith(event_type): - event = event_type - doctor = event_doctor_line[len(event_type):].strip() - break - - # Fallback se não encontrou tipo - if event is None: - parts = event_doctor_line.split(maxsplit=1) - event = parts[0] - doctor = parts[1] if len(parts) > 1 else "" - - record = { - "time": block_lines[0], - "patient": block_lines[1], - "insurance": block_lines[2], - "patient_phone": block_lines[3].strip(' -'), - "event": event, - "doctor": doctor, - "record": block_lines[5] - } - return record - - -# --- CÓDIGO PRINCIPAL --- -texto_completo = items[0]['json']['text'] -linhas = [line.strip() for line in texto_completo.split('\n') if line.strip()] - -agendamentos_finalizados = [] -data_atual = "" -especialidade_atual = "" - -# Regex -regex_hora = re.compile(r'^\d{2}:\d{2}$') -regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') -HEADER_INDICATORS = ("Página", "SIMAH", "Agendamentos de Consultas") -lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total", - "Médico", "Paciente", "Convênio", "Telefone do Paciente", "Evento", "Prontuário") - -def is_near_header(idx, context_lines=3): - for k in range(0, context_lines): - j = idx - k - if j < 0: break - if any(ind in linhas[j] for ind in HEADER_INDICATORS): - return True - return False - -# --- LOOP --- -i = 0 -while i < len(linhas): - linha = linhas[i] - - # ignora lixo - if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): - i += 1 - continue - - # --- captura de data --- - match_data = regex_data.search(linha) - if match_data and not is_near_header(i): - data_atual = match_data.group(0) - i += 1 - continue - - # --- captura de especialidade --- - if "Especialidade" in linha: - parts = linha.split("Especialidade", 1) - if len(parts) > 1: - especialidade_atual = parts[1].lstrip(':').strip() - else: - if i + 1 < len(linhas): - especialidade_atual = linhas[i+1].strip() - i += 1 - i += 1 - continue - - # --- captura de agendamento (bloco de 6 linhas) --- - if regex_hora.match(linha): - if i + 5 < len(linhas): - bloco_de_linhas = linhas[i : i + 6] - agendamento = parse_appointment_block(bloco_de_linhas) - if agendamento: - agendamento['date'] = data_atual - agendamento['specialty'] = especialidade_atual - agendamentos_finalizados.append(agendamento) - i += 6 - else: - i += 1 - else: - i += 1 - -# --- RETORNO --- -return [{"json": ag} for ag in agendamentos_finalizados] diff --git a/scripts/captura-126-mas-doctor-errado.py b/scripts/captura-126-mas-doctor-errado.py deleted file mode 100644 index 39f428f..0000000 --- a/scripts/captura-126-mas-doctor-errado.py +++ /dev/null @@ -1,146 +0,0 @@ -import re - -# --- FUNÇÃO DE EXTRAÇÃO DE BLOCO REVISADA --- -def parse_appointment_block(block_lines): - """ - Recebe um bloco de linhas e extrai os campos do agendamento de forma flexível. - """ - if len(block_lines) < 4: # Mínimo necessário: hora, paciente, convênio, evento - return None - - EVENT_TYPES = ["CONSULTA", "RETORNO"] - - # Inicializar dicionário com valores padrão - record = { - "time": "", - "patient": "", - "insurance": "", - "patient_phone": "", - "event": "", - "doctor": "", - "record": "" - } - - # Primeira linha é sempre o horário - record["time"] = block_lines[0] - - # Verificar se a segunda linha contém médico e paciente - if len(block_lines) > 1: - # Tentar separar médico e paciente (se estiverem na mesma linha) - parts = re.split(r'\s{2,}', block_lines[1]) - if len(parts) >= 2: - record["doctor"] = parts[0].strip() - record["patient"] = parts[1].strip() - else: - record["patient"] = block_lines[1].strip() - - # Linhas seguintes podem ser convênio, telefone, evento, etc. - for i in range(2, min(7, len(block_lines))): # Verificar até 7 linhas - line = block_lines[i] - - # Verificar se é um número de telefone - phone_match = re.search(r'\(?\d{2}\)?[\s-]?\d{4,5}[\s-]?\d{4}', line) - if phone_match and not record["patient_phone"]: - record["patient_phone"] = phone_match.group() - # O restante da linha provavelmente é o convênio - insurance_part = line.replace(record["patient_phone"], "").strip().rstrip('-').strip() - if insurance_part and not record["insurance"]: - record["insurance"] = insurance_part - - # Verificar se é um evento - elif any(event in line.upper() for event in EVENT_TYPES) and not record["event"]: - record["event"] = line.strip() - - # Verificar se é um número de prontuário - elif re.match(r'\d{2,3}\.\d{2,3}', line) and not record["record"]: - record["record"] = line.strip() - - # Se não for nenhum dos acima, pode ser convênio ou informação adicional - elif not record["insurance"] and not phone_match: - record["insurance"] = line.strip().rstrip('-').strip() - - return record - -# --- CÓDIGO PRINCIPAL --- -texto_completo = items[0]['json']['text'] -linhas = [line.strip() for line in texto_completo.split('\n') if line.strip()] - -agendamentos_finalizados = [] -data_atual = "" -especialidade_atual = "" - -# Regex -regex_hora = re.compile(r'^\d{2}:\d{2}$') -regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') -HEADER_INDICATORS = ("Página", "SIMAH", "Agendamentos de Consultas") -lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total", - "Médico", "Paciente", "Convênio", "Telefone do Paciente", "Evento", "Prontuário") - -def is_near_header(idx, context_lines=3): - for k in range(0, context_lines): - j = idx - k - if j < 0: break - if any(ind in linhas[j] for ind in HEADER_INDICATORS): - return True - return False - -# --- LOOP PRINCIPAL REVISADO --- -i = 0 -while i < len(linhas): - linha = linhas[i] - - # ignora lixo - if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): - i += 1 - continue - - # --- captura de data --- - match_data = regex_data.search(linha) - if match_data and not is_near_header(i): - data_atual = match_data.group(0) - i += 1 - continue - - # --- captura de especialidade --- - if "Especialidade" in linha: - parts = linha.split("Especialidade", 1) - if len(parts) > 1: - especialidade_atual = parts[1].lstrip(':').strip() - else: - if i + 1 < len(linhas): - especialidade_atual = linhas[i+1].strip() - i += 1 - i += 1 - continue - - # --- captura de agendamento --- - if regex_hora.match(linha): - # Coletar todas as linhas relevantes para este agendamento - bloco_de_linhas = [linha] # Começa com a linha do horário - - # Coletar linhas subsequentes até encontrar outro horário ou cabeçalho - j = i + 1 - while j < len(linhas): - next_line = linhas[j] - - # Parar se encontrar outro horário ou cabeçalho - if regex_hora.match(next_line) or any(next_line.startswith(p) for p in lixo_prefixos): - break - - bloco_de_linhas.append(next_line) - j += 1 - - # Processar o bloco - agendamento = parse_appointment_block(bloco_de_linhas) - if agendamento: - agendamento['date'] = data_atual - agendamento['specialty'] = especialidade_atual - agendamentos_finalizados.append(agendamento) - - # Avançar para a próxima linha após o bloco - i = j - else: - i += 1 - -# --- RETORNO --- -return [{"json": ag} for ag in agendamentos_finalizados] \ No newline at end of file diff --git a/scripts/captura-corretamente.py b/scripts/captura-corretamente.py deleted file mode 100644 index 2f0111b..0000000 --- a/scripts/captura-corretamente.py +++ /dev/null @@ -1,110 +0,0 @@ -import re - -# --- FUNÇÃO DE EXTRAÇÃO DE BLOCO (Sua versão original, sem alterações) --- -def parse_appointment_block(block_lines): - if len(block_lines) < 6: - return None - EVENT_TYPES = ["CONSULTA", "RETORNO"] - event_doctor_line = block_lines[4] - event, doctor = None, None - for event_type in EVENT_TYPES: - if event_doctor_line.upper().startswith(event_type): - event = event_type - doctor = event_doctor_line[len(event_type):].strip() - break - if event is None: - parts = event_doctor_line.split(maxsplit=1) - event = parts[0] - doctor = parts[1] if len(parts) > 1 else "" - record = { - "time": block_lines[0], "patient": block_lines[1], "insurance": block_lines[2], - "patient_phone": block_lines[3].strip(' -'), "event": event, "doctor": doctor, - "record": block_lines[5] - } - return record - -# --- CÓDIGO PRINCIPAL (Seu código com a correção no loop) --- -texto_completo = items[0]['json']['text'] -linhas = [line.strip() for line in texto_completo.split('\n') if line.strip()] - -agendamentos_finalizados = [] -data_atual = "" -especialidade_atual = "" - -# Regex e constantes -regex_hora = re.compile(r'^\d{2}:\d{2}$') -regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') -HEADER_INDICATORS = ("Página", "SIMAH", "Agendamentos de Consultas") -lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total", - "Médico", "Paciente", "Convênio", "Telefone do Paciente", "Evento", "Prontuário") - -def is_near_header(idx, context_lines=3): - for k in range(0, context_lines): - j = idx - k - if j < 0: break - if any(ind in linhas[j] for ind in HEADER_INDICATORS): - return True - return False - -# --- LOOP --- -i = 0 -while i < len(linhas): - linha = linhas[i] - - # Lógica de ignorar lixo (mantida) - if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): - i += 1 - continue - - # Lógica de captura de data (mantida) - match_data = regex_data.search(linha) - if match_data and not is_near_header(i): - data_atual = match_data.group(0) - i += 1 - continue - - # Lógica de captura de especialidade (mantida) - if "Especialidade" in linha: - parts = linha.split("Especialidade", 1) - specialty_candidate = parts[1].lstrip(':').strip() if len(parts) > 1 else "" - if specialty_candidate: - especialidade_atual = specialty_candidate - elif i + 1 < len(linhas): - especialidade_atual = linhas[i+1].strip() - i += 1 - i += 1 - continue - - # --- LÓGICA DE CAPTURA DE AGENDAMENTO (COM A CORREÇÃO FINAL) --- - if regex_hora.match(linha): - if i + 5 < len(linhas): - # **A CORREÇÃO ESTÁ AQUI: Verificação de segurança antes de processar** - # Se a 6ª linha for um horário, o bloco está corrompido. - if regex_hora.match(linhas[i+5]): - # Processa um bloco de 5 linhas, adicionando uma 6ª linha vazia para o prontuário. - bloco_corrompido = linhas[i : i + 5] + [""] - agendamento = parse_appointment_block(bloco_corrompido) - if agendamento: - agendamento['date'] = data_atual - agendamento['specialty'] = especialidade_atual - agendamentos_finalizados.append(agendamento) - # Avança 5 linhas, pois foi o que consumimos. - i += 5 - continue - else: - # O bloco é normal, processa como antes. - bloco_de_linhas = linhas[i : i + 6] - agendamento = parse_appointment_block(bloco_de_linhas) - if agendamento: - agendamento['date'] = data_atual - agendamento['specialty'] = especialidade_atual - agendamentos_finalizados.append(agendamento) - # Avança 6 linhas. - i += 6 - continue - - # Se a linha não foi processada por nenhuma regra acima, avança 1. - i += 1 - -# --- RETORNO --- -return [{"json": ag} for ag in agendamentos_finalizados] \ No newline at end of file From 6d88b4dfcb12043b5bbd601a85975fc1a850202b Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Sat, 25 Oct 2025 00:42:43 -0300 Subject: [PATCH 42/60] update main --- scripts/backup_2.py | 323 +++++++++++++++++++++++ scripts/backup_n8n_python_node.py | 323 +++++++++++++++++++++++ scripts/captura-107-corretamente.py | 110 ++++++++ scripts/captura-126-mas-doctor-errado.py | 146 ++++++++++ scripts/captura-corretamente.py | 110 ++++++++ scripts/chatwoot.py | 13 + scripts/del.py | 34 +++ scripts/mm_lite.py | 25 ++ 8 files changed, 1084 insertions(+) create mode 100644 scripts/backup_2.py create mode 100644 scripts/backup_n8n_python_node.py create mode 100644 scripts/captura-107-corretamente.py create mode 100644 scripts/captura-126-mas-doctor-errado.py create mode 100644 scripts/captura-corretamente.py create mode 100644 scripts/chatwoot.py create mode 100644 scripts/del.py create mode 100644 scripts/mm_lite.py diff --git a/scripts/backup_2.py b/scripts/backup_2.py new file mode 100644 index 0000000..2ae81d2 --- /dev/null +++ b/scripts/backup_2.py @@ -0,0 +1,323 @@ +import re +import json + +# Texto completo extraído do PDF (presume-se que vem no primeiro item) +texto_completo = items[0]['json']['text'] + +# Divide em linhas +linhas = texto_completo.split('\n') + +agendamentos_finalizados = [] +data_atual = "" +especialidade_atual = "" + +# Padrões regex +regex_hora = re.compile(r'^\d{2}:\d{2}') +regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') +# Aceita formatos com parênteses ou um bloco de 10/11 dígitos (fallback) +regex_telefone = re.compile(r'\(?\d{2}\)?\s*\d{4,5}-?\d{4}|\b\d{10,11}\b') +# prontuário: número (3+ dígitos) no final da linha +regex_record = re.compile(r'(\d{3,})\s*$') + +# Detectores de cabeçalho/página (usados para ignorar datas de header) +HEADER_INDICATORS = ("Página", "Page", "SIMAH", "Agendamentos de Consultas", "COFRAT") + +# Padrão que localiza nomes em MAIÚSCULAS (2-4 palavras) +name_pattern = re.compile(r'([A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}(?:\s+[A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}){1,3})') + +# Prefixos a serem ignorados (removi "Data" e "Hora" daqui) +lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total") + +# DEBUG -> troque para True se quiser ver prints nos logs do node +DEBUG = True + +# --- Controle de ignorar datas que são header (muito útil pro caso que você reportou) --- +IGNORE_HEADER_DATE = True +HEADER_CONTEXT_LINES = 3 # quantas linhas antes considerar para detectar header + +def is_near_header(idx): + """Retorna True se a linha idx estiver perto de algo que pareça cabeçalho de página.""" + for k in range(0, HEADER_CONTEXT_LINES): + j = idx - k + if j < 0: + break + ln = linhas[j] + if any(ind in ln for ind in HEADER_INDICATORS): + return True + return False + +def extrair_campos_linha_agendamento(linhas_agendamento): + """ + Extrai os campos de um agendamento baseado na estrutura do bloco coletado. + bloco esperado já contém as linhas iniciais: "Data: ..." e "Especialidade: ..." (se houver). + """ + registro = { + "date": "", + "specialty": "", + "time": "", + "doctor": "", + "insurance": "", + "event": "", + "patient": "", + "patient_phone": "", + "record": "" + } + + for i, linha in enumerate(linhas_agendamento): + if not linha: + continue + linha = linha.strip() + + # Captura Data / Especialidade caso estejam no bloco (útil quando foram injetadas) + if linha.lower().startswith("data:"): + registro["date"] = linha.split(":", 1)[1].strip() + continue + if linha.lower().startswith("especialidade:"): + registro["specialty"] = linha.split(":", 1)[1].strip() + continue + + # Se a linha começa com horário, interpreta o resto do bloco relativo a esse agendamento + if regex_hora.match(linha): + registro["time"] = linha[:5] # HH:MM + resto_linha = linha[5:].strip() + # remove separadores iniciais (se houver) + if resto_linha.startswith("-") or resto_linha.startswith(":"): + resto_linha = resto_linha[1:].strip() + # inicialmente tenta pegar o médico na mesma linha + registro["doctor"] = resto_linha + + # Examina as próximas linhas do bloco para paciente / convênio / evento / telefones / prontuário + tail = linhas_agendamento[i+1:i+10] # olha até 9 linhas seguintes (ajustável) + patient = "" + phone = "" + insurance = "" + event = "" + record = "" + + for t in tail: + tln = t.strip() + if not tln: + continue + + # procura telefone na linha + mtel = regex_telefone.search(tln) + if mtel: + found_phone = mtel.group() + before = tln[:mtel.start()].strip() + after = tln[mtel.end():].strip() + # Decidir se 'before' é paciente ou convênio + if before and not re.search(r'\d', before): + # Provavelmente paciente + if not patient: + patient = before + else: + if not insurance: + insurance = before + else: + # fallback: se tiver texto antes, usa como convênio + if before and not insurance: + insurance = before + elif after and not insurance: + insurance = after + phone = found_phone + continue + + low = tln.lower() + # linhas rotuladas + if low.startswith("paciente") or low.startswith("paciente:"): + parts = tln.split(":", 1) + candidate = parts[1].strip() if len(parts) > 1 else "" + if candidate: + patient = candidate + continue + if any(k in low for k in ("convênio", "convenio", "plano", "seguradora", "empresa")): + parts = tln.split(":", 1) + insurance = parts[1].strip() if len(parts) > 1 else tln + continue + + # procura prontuário no final da linha + mrec = regex_record.search(tln) + if mrec: + record = mrec.group(1) + event_candidate = tln[:mrec.start()].strip() + # separa event/doctor se ambos estiverem presentes juntos + if event_candidate: + event = event_candidate + continue + + # heurísticas simples: primeira linha "limpa" (sem dígitos) costuma ser o paciente + if not patient and not re.search(r'\d', tln): + # mas evita pegar linhas como "Data :" ou que contenham a palavra Data + if "data" not in tln.lower() and not tln.endswith(":"): + patient = tln + continue + + # se já temos paciente, usa a próxima linha como convênio se não parece evento + if patient and not insurance and len(tln) < 80: + # evita confundir um possível nome de profissional com convênio por enquanto + insurance = tln + continue + + if not event: + event = tln + continue + + # Ajustes finais: + # 1) se event contém um nome em MAIÚSCULAS (ex.: "CONSULTARICARDO SUSSUMU NAKAYA"), + # extrai esse nome como doctor e limpa o event + if event: + mname = name_pattern.search(event) + if mname and not registro["doctor"]: + found_name = mname.group(1).strip() + registro["doctor"] = found_name + # remove a ocorrência encontrada do event (se possível) + event = event.replace(found_name, "").strip(" -:,.") + + # 2) se ainda não temos doctor, procura nas linhas tail um nome que combine com name_pattern + if not registro["doctor"]: + for t in tail: + tln = t.strip() + if not tln: + continue + m = name_pattern.search(tln) + if m: + candidate = m.group(1).strip() + # evita confundir com paciente + if candidate != patient: + registro["doctor"] = candidate + # caso esse nome tenha sido capturado como patient por engano, remove de patient + if patient and candidate in patient: + patient = patient.replace(candidate, "").strip(" -:,") + break + + registro["patient"] = patient + registro["patient_phone"] = phone + registro["insurance"] = insurance + registro["event"] = event + registro["record"] = record + + # Para cada horário só processamos a primeira ocorrência (como antes) + break + + return registro + +# Processamento principal +i = 0 +while i < len(linhas): + linha = linhas[i].strip() + + # Ignora linhas vazias + if not linha: + i += 1 + continue + + # Ignora linhas com prefixos de lixo (exclui Data/Hora para não descartar cabeçalhos úteis) + if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): + i += 1 + continue + + # Detecta nova seção de data/especialidade (mais permissivo) + # Se encontrar uma data, verifica se ela está perto de um header — se estiver, ignora + if regex_data.search(linha): + match_data = regex_data.search(linha) + if match_data: + # Detecta se a data está dentro do header (ex.: próxima a "Página", "SIMAH", etc.) + if IGNORE_HEADER_DATE and is_near_header(i): + if DEBUG: + print(f"Ignorando data de cabeçalho na linha {i}: {match_data.group()}") + i += 1 + continue + data_atual = match_data.group() + + # Procura especialidade na mesma linha ou nas próximas + if "Especialidade" in linha: + # exemplo: "Data: 01/01/2025 Especialidade: Cardiologia" + try: + especialidade_atual = linha.split("Especialidade:",1)[1].strip() + except: + especialidade_atual = linha.split("Especialidade",1)[1].strip() + else: + # Procura especialidade nas próximas 3 linhas (ou heurística) + found_spec = False + for j in range(i+1, min(i+4, len(linhas))): + l2 = linhas[j].strip() + if not l2: + continue + if "Especialidade" in l2: + especialidade_atual = l2.split("Especialidade:",1)[1].strip() if ":" in l2 else l2 + found_spec = True + break + # heurística: linha curta, sem hora/telefone/dígitos -> pode ser especialidade, + # MAS evita pegar linhas que contenham 'Data' ou terminem com ':' (como "Data :") + if (not regex_hora.match(l2) and not regex_telefone.search(l2) + and len(l2) < 60 and not re.search(r'\d', l2) + and "data" not in l2.lower() and not l2.endswith(":")): + especialidade_atual = l2 + found_spec = True + break + if not found_spec: + # se não encontrou, preserva a especialidade anterior (não sobrescreve por linhas estranhas) + pass + + if DEBUG: + print(f"Nova seção - Data: {data_atual}, Especialidade: {especialidade_atual}") + + i += 1 + continue + + # Detecta início de agendamento (linha com horário) + if regex_hora.match(linha): + # Coleta o bloco do agendamento (insere Data/Especialidade atuais para o parser) + bloco_agendamento = [f"Data: {data_atual}", f"Especialidade: {especialidade_atual}", linha] + + # Adiciona as próximas linhas até encontrar outro horário, "Sub - Total" ou linha de lixo + j = i + 1 + linhas_coletadas = 0 + max_linhas = 12 # Limita para evitar coletar dados de outros agendamentos + + while j < len(linhas) and linhas_coletadas < max_linhas: + proxima_linha = linhas[j].strip() + + # Para se encontrar outro horário, "Sub - Total", ou nova seção de data + if (regex_hora.match(proxima_linha) or + "Sub - Total" in proxima_linha or + regex_data.search(proxima_linha)): + break + + # Ignora linhas de lixo + if any(proxima_linha.startswith(prefixo) for prefixo in lixo_prefixos): + j += 1 + continue + + # Adiciona linha não vazia + if proxima_linha: + bloco_agendamento.append(proxima_linha) + linhas_coletadas += 1 + + j += 1 + + # Processa o bloco coletado + agendamento = extrair_campos_linha_agendamento(bloco_agendamento) + + # Preenche date/specialty com o contexto caso o parser não tenha encontrado + if not agendamento["date"]: + agendamento["date"] = data_atual + if not agendamento["specialty"]: + agendamento["specialty"] = especialidade_atual + + # Só adiciona se tem dados mínimos + if agendamento["time"] and (agendamento["doctor"] or agendamento["patient"]): + agendamentos_finalizados.append(agendamento) + + if DEBUG: + print(f"Agendamento: {agendamento['date']} {agendamento['time']} - {agendamento['doctor']} - {agendamento['patient']} ({agendamento['patient_phone']})") + + i = j - 1 # Ajusta para continuar da posição correta + + i += 1 + +if DEBUG: + print(f"Total de agendamentos processados: {len(agendamentos_finalizados)}") + +# Retorna no formato esperado pelo n8n +return [{"json": agendamento} for agendamento in agendamentos_finalizados] diff --git a/scripts/backup_n8n_python_node.py b/scripts/backup_n8n_python_node.py new file mode 100644 index 0000000..2ae81d2 --- /dev/null +++ b/scripts/backup_n8n_python_node.py @@ -0,0 +1,323 @@ +import re +import json + +# Texto completo extraído do PDF (presume-se que vem no primeiro item) +texto_completo = items[0]['json']['text'] + +# Divide em linhas +linhas = texto_completo.split('\n') + +agendamentos_finalizados = [] +data_atual = "" +especialidade_atual = "" + +# Padrões regex +regex_hora = re.compile(r'^\d{2}:\d{2}') +regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') +# Aceita formatos com parênteses ou um bloco de 10/11 dígitos (fallback) +regex_telefone = re.compile(r'\(?\d{2}\)?\s*\d{4,5}-?\d{4}|\b\d{10,11}\b') +# prontuário: número (3+ dígitos) no final da linha +regex_record = re.compile(r'(\d{3,})\s*$') + +# Detectores de cabeçalho/página (usados para ignorar datas de header) +HEADER_INDICATORS = ("Página", "Page", "SIMAH", "Agendamentos de Consultas", "COFRAT") + +# Padrão que localiza nomes em MAIÚSCULAS (2-4 palavras) +name_pattern = re.compile(r'([A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}(?:\s+[A-ZÁÀÂÃÉÊÍÓÔÕÚÜÇ]{2,}){1,3})') + +# Prefixos a serem ignorados (removi "Data" e "Hora" daqui) +lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total") + +# DEBUG -> troque para True se quiser ver prints nos logs do node +DEBUG = True + +# --- Controle de ignorar datas que são header (muito útil pro caso que você reportou) --- +IGNORE_HEADER_DATE = True +HEADER_CONTEXT_LINES = 3 # quantas linhas antes considerar para detectar header + +def is_near_header(idx): + """Retorna True se a linha idx estiver perto de algo que pareça cabeçalho de página.""" + for k in range(0, HEADER_CONTEXT_LINES): + j = idx - k + if j < 0: + break + ln = linhas[j] + if any(ind in ln for ind in HEADER_INDICATORS): + return True + return False + +def extrair_campos_linha_agendamento(linhas_agendamento): + """ + Extrai os campos de um agendamento baseado na estrutura do bloco coletado. + bloco esperado já contém as linhas iniciais: "Data: ..." e "Especialidade: ..." (se houver). + """ + registro = { + "date": "", + "specialty": "", + "time": "", + "doctor": "", + "insurance": "", + "event": "", + "patient": "", + "patient_phone": "", + "record": "" + } + + for i, linha in enumerate(linhas_agendamento): + if not linha: + continue + linha = linha.strip() + + # Captura Data / Especialidade caso estejam no bloco (útil quando foram injetadas) + if linha.lower().startswith("data:"): + registro["date"] = linha.split(":", 1)[1].strip() + continue + if linha.lower().startswith("especialidade:"): + registro["specialty"] = linha.split(":", 1)[1].strip() + continue + + # Se a linha começa com horário, interpreta o resto do bloco relativo a esse agendamento + if regex_hora.match(linha): + registro["time"] = linha[:5] # HH:MM + resto_linha = linha[5:].strip() + # remove separadores iniciais (se houver) + if resto_linha.startswith("-") or resto_linha.startswith(":"): + resto_linha = resto_linha[1:].strip() + # inicialmente tenta pegar o médico na mesma linha + registro["doctor"] = resto_linha + + # Examina as próximas linhas do bloco para paciente / convênio / evento / telefones / prontuário + tail = linhas_agendamento[i+1:i+10] # olha até 9 linhas seguintes (ajustável) + patient = "" + phone = "" + insurance = "" + event = "" + record = "" + + for t in tail: + tln = t.strip() + if not tln: + continue + + # procura telefone na linha + mtel = regex_telefone.search(tln) + if mtel: + found_phone = mtel.group() + before = tln[:mtel.start()].strip() + after = tln[mtel.end():].strip() + # Decidir se 'before' é paciente ou convênio + if before and not re.search(r'\d', before): + # Provavelmente paciente + if not patient: + patient = before + else: + if not insurance: + insurance = before + else: + # fallback: se tiver texto antes, usa como convênio + if before and not insurance: + insurance = before + elif after and not insurance: + insurance = after + phone = found_phone + continue + + low = tln.lower() + # linhas rotuladas + if low.startswith("paciente") or low.startswith("paciente:"): + parts = tln.split(":", 1) + candidate = parts[1].strip() if len(parts) > 1 else "" + if candidate: + patient = candidate + continue + if any(k in low for k in ("convênio", "convenio", "plano", "seguradora", "empresa")): + parts = tln.split(":", 1) + insurance = parts[1].strip() if len(parts) > 1 else tln + continue + + # procura prontuário no final da linha + mrec = regex_record.search(tln) + if mrec: + record = mrec.group(1) + event_candidate = tln[:mrec.start()].strip() + # separa event/doctor se ambos estiverem presentes juntos + if event_candidate: + event = event_candidate + continue + + # heurísticas simples: primeira linha "limpa" (sem dígitos) costuma ser o paciente + if not patient and not re.search(r'\d', tln): + # mas evita pegar linhas como "Data :" ou que contenham a palavra Data + if "data" not in tln.lower() and not tln.endswith(":"): + patient = tln + continue + + # se já temos paciente, usa a próxima linha como convênio se não parece evento + if patient and not insurance and len(tln) < 80: + # evita confundir um possível nome de profissional com convênio por enquanto + insurance = tln + continue + + if not event: + event = tln + continue + + # Ajustes finais: + # 1) se event contém um nome em MAIÚSCULAS (ex.: "CONSULTARICARDO SUSSUMU NAKAYA"), + # extrai esse nome como doctor e limpa o event + if event: + mname = name_pattern.search(event) + if mname and not registro["doctor"]: + found_name = mname.group(1).strip() + registro["doctor"] = found_name + # remove a ocorrência encontrada do event (se possível) + event = event.replace(found_name, "").strip(" -:,.") + + # 2) se ainda não temos doctor, procura nas linhas tail um nome que combine com name_pattern + if not registro["doctor"]: + for t in tail: + tln = t.strip() + if not tln: + continue + m = name_pattern.search(tln) + if m: + candidate = m.group(1).strip() + # evita confundir com paciente + if candidate != patient: + registro["doctor"] = candidate + # caso esse nome tenha sido capturado como patient por engano, remove de patient + if patient and candidate in patient: + patient = patient.replace(candidate, "").strip(" -:,") + break + + registro["patient"] = patient + registro["patient_phone"] = phone + registro["insurance"] = insurance + registro["event"] = event + registro["record"] = record + + # Para cada horário só processamos a primeira ocorrência (como antes) + break + + return registro + +# Processamento principal +i = 0 +while i < len(linhas): + linha = linhas[i].strip() + + # Ignora linhas vazias + if not linha: + i += 1 + continue + + # Ignora linhas com prefixos de lixo (exclui Data/Hora para não descartar cabeçalhos úteis) + if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): + i += 1 + continue + + # Detecta nova seção de data/especialidade (mais permissivo) + # Se encontrar uma data, verifica se ela está perto de um header — se estiver, ignora + if regex_data.search(linha): + match_data = regex_data.search(linha) + if match_data: + # Detecta se a data está dentro do header (ex.: próxima a "Página", "SIMAH", etc.) + if IGNORE_HEADER_DATE and is_near_header(i): + if DEBUG: + print(f"Ignorando data de cabeçalho na linha {i}: {match_data.group()}") + i += 1 + continue + data_atual = match_data.group() + + # Procura especialidade na mesma linha ou nas próximas + if "Especialidade" in linha: + # exemplo: "Data: 01/01/2025 Especialidade: Cardiologia" + try: + especialidade_atual = linha.split("Especialidade:",1)[1].strip() + except: + especialidade_atual = linha.split("Especialidade",1)[1].strip() + else: + # Procura especialidade nas próximas 3 linhas (ou heurística) + found_spec = False + for j in range(i+1, min(i+4, len(linhas))): + l2 = linhas[j].strip() + if not l2: + continue + if "Especialidade" in l2: + especialidade_atual = l2.split("Especialidade:",1)[1].strip() if ":" in l2 else l2 + found_spec = True + break + # heurística: linha curta, sem hora/telefone/dígitos -> pode ser especialidade, + # MAS evita pegar linhas que contenham 'Data' ou terminem com ':' (como "Data :") + if (not regex_hora.match(l2) and not regex_telefone.search(l2) + and len(l2) < 60 and not re.search(r'\d', l2) + and "data" not in l2.lower() and not l2.endswith(":")): + especialidade_atual = l2 + found_spec = True + break + if not found_spec: + # se não encontrou, preserva a especialidade anterior (não sobrescreve por linhas estranhas) + pass + + if DEBUG: + print(f"Nova seção - Data: {data_atual}, Especialidade: {especialidade_atual}") + + i += 1 + continue + + # Detecta início de agendamento (linha com horário) + if regex_hora.match(linha): + # Coleta o bloco do agendamento (insere Data/Especialidade atuais para o parser) + bloco_agendamento = [f"Data: {data_atual}", f"Especialidade: {especialidade_atual}", linha] + + # Adiciona as próximas linhas até encontrar outro horário, "Sub - Total" ou linha de lixo + j = i + 1 + linhas_coletadas = 0 + max_linhas = 12 # Limita para evitar coletar dados de outros agendamentos + + while j < len(linhas) and linhas_coletadas < max_linhas: + proxima_linha = linhas[j].strip() + + # Para se encontrar outro horário, "Sub - Total", ou nova seção de data + if (regex_hora.match(proxima_linha) or + "Sub - Total" in proxima_linha or + regex_data.search(proxima_linha)): + break + + # Ignora linhas de lixo + if any(proxima_linha.startswith(prefixo) for prefixo in lixo_prefixos): + j += 1 + continue + + # Adiciona linha não vazia + if proxima_linha: + bloco_agendamento.append(proxima_linha) + linhas_coletadas += 1 + + j += 1 + + # Processa o bloco coletado + agendamento = extrair_campos_linha_agendamento(bloco_agendamento) + + # Preenche date/specialty com o contexto caso o parser não tenha encontrado + if not agendamento["date"]: + agendamento["date"] = data_atual + if not agendamento["specialty"]: + agendamento["specialty"] = especialidade_atual + + # Só adiciona se tem dados mínimos + if agendamento["time"] and (agendamento["doctor"] or agendamento["patient"]): + agendamentos_finalizados.append(agendamento) + + if DEBUG: + print(f"Agendamento: {agendamento['date']} {agendamento['time']} - {agendamento['doctor']} - {agendamento['patient']} ({agendamento['patient_phone']})") + + i = j - 1 # Ajusta para continuar da posição correta + + i += 1 + +if DEBUG: + print(f"Total de agendamentos processados: {len(agendamentos_finalizados)}") + +# Retorna no formato esperado pelo n8n +return [{"json": agendamento} for agendamento in agendamentos_finalizados] diff --git a/scripts/captura-107-corretamente.py b/scripts/captura-107-corretamente.py new file mode 100644 index 0000000..6d90da4 --- /dev/null +++ b/scripts/captura-107-corretamente.py @@ -0,0 +1,110 @@ +import re + +# --- FUNÇÃO DE EXTRAÇÃO DE BLOCO --- +def parse_appointment_block(block_lines): + """ + Recebe um bloco de 6 linhas e extrai os campos do agendamento. + """ + if len(block_lines) < 6: + return None + + EVENT_TYPES = ["CONSULTA", "RETORNO"] + + event_doctor_line = block_lines[4] + event = None + doctor = None + + # Tenta dividir a linha "Evento+Médico" + for event_type in EVENT_TYPES: + if event_doctor_line.upper().startswith(event_type): + event = event_type + doctor = event_doctor_line[len(event_type):].strip() + break + + # Fallback se não encontrou tipo + if event is None: + parts = event_doctor_line.split(maxsplit=1) + event = parts[0] + doctor = parts[1] if len(parts) > 1 else "" + + record = { + "time": block_lines[0], + "patient": block_lines[1], + "insurance": block_lines[2], + "patient_phone": block_lines[3].strip(' -'), + "event": event, + "doctor": doctor, + "record": block_lines[5] + } + return record + + +# --- CÓDIGO PRINCIPAL --- +texto_completo = items[0]['json']['text'] +linhas = [line.strip() for line in texto_completo.split('\n') if line.strip()] + +agendamentos_finalizados = [] +data_atual = "" +especialidade_atual = "" + +# Regex +regex_hora = re.compile(r'^\d{2}:\d{2}$') +regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') +HEADER_INDICATORS = ("Página", "SIMAH", "Agendamentos de Consultas") +lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total", + "Médico", "Paciente", "Convênio", "Telefone do Paciente", "Evento", "Prontuário") + +def is_near_header(idx, context_lines=3): + for k in range(0, context_lines): + j = idx - k + if j < 0: break + if any(ind in linhas[j] for ind in HEADER_INDICATORS): + return True + return False + +# --- LOOP --- +i = 0 +while i < len(linhas): + linha = linhas[i] + + # ignora lixo + if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): + i += 1 + continue + + # --- captura de data --- + match_data = regex_data.search(linha) + if match_data and not is_near_header(i): + data_atual = match_data.group(0) + i += 1 + continue + + # --- captura de especialidade --- + if "Especialidade" in linha: + parts = linha.split("Especialidade", 1) + if len(parts) > 1: + especialidade_atual = parts[1].lstrip(':').strip() + else: + if i + 1 < len(linhas): + especialidade_atual = linhas[i+1].strip() + i += 1 + i += 1 + continue + + # --- captura de agendamento (bloco de 6 linhas) --- + if regex_hora.match(linha): + if i + 5 < len(linhas): + bloco_de_linhas = linhas[i : i + 6] + agendamento = parse_appointment_block(bloco_de_linhas) + if agendamento: + agendamento['date'] = data_atual + agendamento['specialty'] = especialidade_atual + agendamentos_finalizados.append(agendamento) + i += 6 + else: + i += 1 + else: + i += 1 + +# --- RETORNO --- +return [{"json": ag} for ag in agendamentos_finalizados] diff --git a/scripts/captura-126-mas-doctor-errado.py b/scripts/captura-126-mas-doctor-errado.py new file mode 100644 index 0000000..39f428f --- /dev/null +++ b/scripts/captura-126-mas-doctor-errado.py @@ -0,0 +1,146 @@ +import re + +# --- FUNÇÃO DE EXTRAÇÃO DE BLOCO REVISADA --- +def parse_appointment_block(block_lines): + """ + Recebe um bloco de linhas e extrai os campos do agendamento de forma flexível. + """ + if len(block_lines) < 4: # Mínimo necessário: hora, paciente, convênio, evento + return None + + EVENT_TYPES = ["CONSULTA", "RETORNO"] + + # Inicializar dicionário com valores padrão + record = { + "time": "", + "patient": "", + "insurance": "", + "patient_phone": "", + "event": "", + "doctor": "", + "record": "" + } + + # Primeira linha é sempre o horário + record["time"] = block_lines[0] + + # Verificar se a segunda linha contém médico e paciente + if len(block_lines) > 1: + # Tentar separar médico e paciente (se estiverem na mesma linha) + parts = re.split(r'\s{2,}', block_lines[1]) + if len(parts) >= 2: + record["doctor"] = parts[0].strip() + record["patient"] = parts[1].strip() + else: + record["patient"] = block_lines[1].strip() + + # Linhas seguintes podem ser convênio, telefone, evento, etc. + for i in range(2, min(7, len(block_lines))): # Verificar até 7 linhas + line = block_lines[i] + + # Verificar se é um número de telefone + phone_match = re.search(r'\(?\d{2}\)?[\s-]?\d{4,5}[\s-]?\d{4}', line) + if phone_match and not record["patient_phone"]: + record["patient_phone"] = phone_match.group() + # O restante da linha provavelmente é o convênio + insurance_part = line.replace(record["patient_phone"], "").strip().rstrip('-').strip() + if insurance_part and not record["insurance"]: + record["insurance"] = insurance_part + + # Verificar se é um evento + elif any(event in line.upper() for event in EVENT_TYPES) and not record["event"]: + record["event"] = line.strip() + + # Verificar se é um número de prontuário + elif re.match(r'\d{2,3}\.\d{2,3}', line) and not record["record"]: + record["record"] = line.strip() + + # Se não for nenhum dos acima, pode ser convênio ou informação adicional + elif not record["insurance"] and not phone_match: + record["insurance"] = line.strip().rstrip('-').strip() + + return record + +# --- CÓDIGO PRINCIPAL --- +texto_completo = items[0]['json']['text'] +linhas = [line.strip() for line in texto_completo.split('\n') if line.strip()] + +agendamentos_finalizados = [] +data_atual = "" +especialidade_atual = "" + +# Regex +regex_hora = re.compile(r'^\d{2}:\d{2}$') +regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') +HEADER_INDICATORS = ("Página", "SIMAH", "Agendamentos de Consultas") +lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total", + "Médico", "Paciente", "Convênio", "Telefone do Paciente", "Evento", "Prontuário") + +def is_near_header(idx, context_lines=3): + for k in range(0, context_lines): + j = idx - k + if j < 0: break + if any(ind in linhas[j] for ind in HEADER_INDICATORS): + return True + return False + +# --- LOOP PRINCIPAL REVISADO --- +i = 0 +while i < len(linhas): + linha = linhas[i] + + # ignora lixo + if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): + i += 1 + continue + + # --- captura de data --- + match_data = regex_data.search(linha) + if match_data and not is_near_header(i): + data_atual = match_data.group(0) + i += 1 + continue + + # --- captura de especialidade --- + if "Especialidade" in linha: + parts = linha.split("Especialidade", 1) + if len(parts) > 1: + especialidade_atual = parts[1].lstrip(':').strip() + else: + if i + 1 < len(linhas): + especialidade_atual = linhas[i+1].strip() + i += 1 + i += 1 + continue + + # --- captura de agendamento --- + if regex_hora.match(linha): + # Coletar todas as linhas relevantes para este agendamento + bloco_de_linhas = [linha] # Começa com a linha do horário + + # Coletar linhas subsequentes até encontrar outro horário ou cabeçalho + j = i + 1 + while j < len(linhas): + next_line = linhas[j] + + # Parar se encontrar outro horário ou cabeçalho + if regex_hora.match(next_line) or any(next_line.startswith(p) for p in lixo_prefixos): + break + + bloco_de_linhas.append(next_line) + j += 1 + + # Processar o bloco + agendamento = parse_appointment_block(bloco_de_linhas) + if agendamento: + agendamento['date'] = data_atual + agendamento['specialty'] = especialidade_atual + agendamentos_finalizados.append(agendamento) + + # Avançar para a próxima linha após o bloco + i = j + else: + i += 1 + +# --- RETORNO --- +return [{"json": ag} for ag in agendamentos_finalizados] \ No newline at end of file diff --git a/scripts/captura-corretamente.py b/scripts/captura-corretamente.py new file mode 100644 index 0000000..2f0111b --- /dev/null +++ b/scripts/captura-corretamente.py @@ -0,0 +1,110 @@ +import re + +# --- FUNÇÃO DE EXTRAÇÃO DE BLOCO (Sua versão original, sem alterações) --- +def parse_appointment_block(block_lines): + if len(block_lines) < 6: + return None + EVENT_TYPES = ["CONSULTA", "RETORNO"] + event_doctor_line = block_lines[4] + event, doctor = None, None + for event_type in EVENT_TYPES: + if event_doctor_line.upper().startswith(event_type): + event = event_type + doctor = event_doctor_line[len(event_type):].strip() + break + if event is None: + parts = event_doctor_line.split(maxsplit=1) + event = parts[0] + doctor = parts[1] if len(parts) > 1 else "" + record = { + "time": block_lines[0], "patient": block_lines[1], "insurance": block_lines[2], + "patient_phone": block_lines[3].strip(' -'), "event": event, "doctor": doctor, + "record": block_lines[5] + } + return record + +# --- CÓDIGO PRINCIPAL (Seu código com a correção no loop) --- +texto_completo = items[0]['json']['text'] +linhas = [line.strip() for line in texto_completo.split('\n') if line.strip()] + +agendamentos_finalizados = [] +data_atual = "" +especialidade_atual = "" + +# Regex e constantes +regex_hora = re.compile(r'^\d{2}:\d{2}$') +regex_data = re.compile(r'\d{2}/\d{2}/\d{4}') +HEADER_INDICATORS = ("Página", "SIMAH", "Agendamentos de Consultas") +lixo_prefixos = ("Página", "SIMAH", "Agendamentos de Consultas", "COFRAT", "Sub - Total", + "Médico", "Paciente", "Convênio", "Telefone do Paciente", "Evento", "Prontuário") + +def is_near_header(idx, context_lines=3): + for k in range(0, context_lines): + j = idx - k + if j < 0: break + if any(ind in linhas[j] for ind in HEADER_INDICATORS): + return True + return False + +# --- LOOP --- +i = 0 +while i < len(linhas): + linha = linhas[i] + + # Lógica de ignorar lixo (mantida) + if any(linha.startswith(prefixo) for prefixo in lixo_prefixos): + i += 1 + continue + + # Lógica de captura de data (mantida) + match_data = regex_data.search(linha) + if match_data and not is_near_header(i): + data_atual = match_data.group(0) + i += 1 + continue + + # Lógica de captura de especialidade (mantida) + if "Especialidade" in linha: + parts = linha.split("Especialidade", 1) + specialty_candidate = parts[1].lstrip(':').strip() if len(parts) > 1 else "" + if specialty_candidate: + especialidade_atual = specialty_candidate + elif i + 1 < len(linhas): + especialidade_atual = linhas[i+1].strip() + i += 1 + i += 1 + continue + + # --- LÓGICA DE CAPTURA DE AGENDAMENTO (COM A CORREÇÃO FINAL) --- + if regex_hora.match(linha): + if i + 5 < len(linhas): + # **A CORREÇÃO ESTÁ AQUI: Verificação de segurança antes de processar** + # Se a 6ª linha for um horário, o bloco está corrompido. + if regex_hora.match(linhas[i+5]): + # Processa um bloco de 5 linhas, adicionando uma 6ª linha vazia para o prontuário. + bloco_corrompido = linhas[i : i + 5] + [""] + agendamento = parse_appointment_block(bloco_corrompido) + if agendamento: + agendamento['date'] = data_atual + agendamento['specialty'] = especialidade_atual + agendamentos_finalizados.append(agendamento) + # Avança 5 linhas, pois foi o que consumimos. + i += 5 + continue + else: + # O bloco é normal, processa como antes. + bloco_de_linhas = linhas[i : i + 6] + agendamento = parse_appointment_block(bloco_de_linhas) + if agendamento: + agendamento['date'] = data_atual + agendamento['specialty'] = especialidade_atual + agendamentos_finalizados.append(agendamento) + # Avança 6 linhas. + i += 6 + continue + + # Se a linha não foi processada por nenhuma regra acima, avança 1. + i += 1 + +# --- RETORNO --- +return [{"json": ag} for ag in agendamentos_finalizados] \ No newline at end of file diff --git a/scripts/chatwoot.py b/scripts/chatwoot.py new file mode 100644 index 0000000..3b8d434 --- /dev/null +++ b/scripts/chatwoot.py @@ -0,0 +1,13 @@ +import requests + +url = "https://dev-chatwoot.vldzc8.easypanel.host/api/v1/accounts/2/conversations/10/labels" + +payload = { "labels": ["label 1", "label 2"] } +headers = { + "api_access_token": "etC1hQDDNdkp2n9nDnoHLJob", + "Content-Type": "application/json" +} + +response = requests.post(url, json=payload, headers=headers) + +print(response.json()) \ No newline at end of file diff --git a/scripts/del.py b/scripts/del.py new file mode 100644 index 0000000..4500107 --- /dev/null +++ b/scripts/del.py @@ -0,0 +1,34 @@ +import requests + +# Dados da API +url = 'https://graph.facebook.com/v22.0/801077859762875/messages' # Substitua pelo seu phone_number_id +access_token = 'EAAqlbxdDZBOgBPz9JCyf7WdcEV9dnr1iqoAlTNVhPMbcIFJpNvaTpXHHFoFPCPC1jUqV1ZAz2bgNVsLpswpkyvaOH7f7CVT0soSSIYOSeNCLfefku07ucjj6exltjuVdqnXbPbw5R9QCXpeFfUkOThLT9nbBM8smLcXADS36lapTfeL3zlqY45U2YpjAZDZD' # Substitua pelo seu token de acesso + +# Corpo da requisição +payload = { + "messaging_product": "whatsapp", + "to": "5511959044561", # Número do destinatário com código do país + "type": "text", + "text": { + "body": + """ +Olá, Brandon! Se você recebeu essa mensagem, então funcionou. + """ + } +} + +# Cabeçalhos +headers = { + "Authorization": f"Bearer {access_token}", + "Content-Type": "application/json" +} + +# Envio da requisição +response = requests.post(url, json=payload, headers=headers) + +# Resultado +if response.status_code == 200: + print("Mensagem enviada com sucesso!") +else: + print(f"Erro ao enviar mensagem: {response.status_code}") + print(response.text) diff --git a/scripts/mm_lite.py b/scripts/mm_lite.py new file mode 100644 index 0000000..3c39c0e --- /dev/null +++ b/scripts/mm_lite.py @@ -0,0 +1,25 @@ +import requests + +# Substitua pelos seus dados reais +waba_id = '1345055953751400' +access_token = 'EAAqlbxdDZBOgBP3TFNaaNgI19DwHRN6Lj4h4oY2DEkLZAvznGisfdAZARrw7MYh49onwZAp1hZCvJ8ZBtaxK8xuShae06zFHCfR7ZCLqeQyIH1VWVpwXYW4yJmlNQnKYNxVvfxAtBpZAWh9xgRrsszKnMjZBRCmF9KuZBMkrRxaW2d5YEfnvjarQ6NVN2RZAHM4H7itiYaI7imoUrhFjzpVkUaQLZC0JzqPFCtlxFqqv2fOIbAZDZD' # Seu token de acesso + +# URL da requisição +url = f'https://graph.facebook.com/v24.0/{waba_id}?fields=marketing_messages_onboarding_status' + +# Cabeçalhos +headers = { + 'Authorization': f'Bearer {access_token}' +} + +# Envio da requisição +response = requests.get(url, headers=headers) + +# Resultado +if response.status_code == 200: + data = response.json() + status = data.get('marketing_messages_onboarding_status') + print(f"Status de elegibilidade: {status}") +else: + print(f"Erro ao consultar elegibilidade: {response.status_code}") + print(response.text) From f4e3097c992a43c53c3347042909f11610014748 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Thu, 30 Oct 2025 00:21:04 -0300 Subject: [PATCH 43/60] sumarized version --- cofrat.py | 283 ++++++++++++++++++ notebooks/transform.ipynb | 55 ++++ requirements.txt | 6 +- utils.py | 603 +++++++++++++++----------------------- 4 files changed, 585 insertions(+), 362 deletions(-) create mode 100644 cofrat.py create mode 100644 notebooks/transform.ipynb diff --git a/cofrat.py b/cofrat.py new file mode 100644 index 0000000..3945dd5 --- /dev/null +++ b/cofrat.py @@ -0,0 +1,283 @@ +import streamlit as st +import pandas as pd +from datetime import datetime + +# --- Configuração da Página --- +st.set_page_config( + page_title="Dashboard de Agendamentos", + page_icon="🗓️", + layout="wide" +) + +# --- CSS Customizado para Estética Aprimorada --- +st.markdown(""" + +""", unsafe_allow_html=True) + + +# --- Dados de Amostra --- +data = { + 'Horário': ['08:00', '08:30', '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30'], + 'Paciente': ['Maria Silva', 'João Santos', 'Ana Costa', 'Pedro Oliveira', 'Carla Mendes', 'Lucas Pereira', 'Fernanda Lima', 'Ricardo Alves', 'Beatriz Souza', 'Tiago Martins'], + 'Contato': ['+55 11 98765-4321', '+55 11 98765-4322', '+55 11 98765-4323', '+55 11 98765-4324', '+55 11 98765-4325', '+55 11 98765-4326', '+55 11 98765-4327', '+55 11 98765-4328', '+55 11 98765-4329', '+55 11 98765-4330'], + 'Tipo': ['Fisioterapia', 'Ortopedia', 'Fisioterapia', 'Terapia', 'Ortopedia', 'Fisioterapia', 'Terapia', 'Fisioterapia', 'Terapia', 'Ortopedia'], + 'Terapeuta': ['Dr. Carlos Mendes', 'Dra. Ana Paula', 'Dr. Carlos Mendes', 'Dr. Roberto Lima', 'Dra. Ana Paula', 'Dr. Carlos Mendes', 'Dr. Roberto Lima', 'Dr. Carlos Mendes', 'Dr. Roberto Lima', 'Dra. Ana Paula'], + 'Sala': ['Sala 1', 'Sala 2', 'Sala 1', 'Sala 3', 'Sala 2', 'Sala 1', 'Sala 3', 'Sala 1', 'Sala 3', 'Sala 2'], + 'Status': ['Confirmado', 'Cancelado', 'Confirmado', 'Aguardando', 'Em Atendimento', 'Confirmado', 'Cancelado', 'Confirmado', 'Aguardando', 'Concluído'] +} +df = pd.DataFrame(data) + +# --- CABEÇALHO --- +st.markdown(""" +
+
+

Agendamentos do Dia

+

Sábado, 25 de Outubro de 2025

+
+
+ +
+
+""", unsafe_allow_html=True) + +# Colocando os botões do cabeçalho em colunas para alinhá-los à direita +_, btn_col = st.columns([0.8, 0.2]) +with btn_col: + btn1, btn2 = st.columns(2) + btn1.button("Ver Disparos", key="ver_disparos", use_container_width=True) + btn2.button("🔄 Atualizar", type="primary", key="atualizar", use_container_width=True) + + +# --- CARTÕES DE RESUMO --- +status_counts = df['Status'].value_counts() +confirmados = status_counts.get('Confirmado', 0) +cancelados = status_counts.get('Cancelado', 0) +aguardando = status_counts.get('Aguardando', 0) +em_atendimento = status_counts.get('Em Atendimento', 0) +concluidos = status_counts.get('Concluído', 0) + +cols = st.columns(5) +with cols[0]: + st.markdown(f'

Confirmados

✅ {confirmados}

', unsafe_allow_html=True) +with cols[1]: + st.markdown(f'

Cancelados

❌ {cancelados}

', unsafe_allow_html=True) +with cols[2]: + st.markdown(f'

Aguardando

🕒 {aguardando}

', unsafe_allow_html=True) +with cols[3]: + st.markdown(f'

Em Atendimento

➡️ {em_atendimento}

', unsafe_allow_html=True) +with cols[4]: + st.markdown(f'

Concluídos

✔️ {concluidos}

', unsafe_allow_html=True) + +st.write("") # Espaçamento + +# --- FILTROS --- +with st.container(): + st.markdown('
', unsafe_allow_html=True) + st.write("
🇾 Filtros
", unsafe_allow_html=True) + + f_col1, f_col2, f_col3, f_col4 = st.columns([2, 1, 1, 1]) + with f_col1: + busca = st.text_input("Buscar", placeholder="Nome, telefone ou terapeuta...", label_visibility="collapsed") + with f_col2: + status_filter = st.selectbox("Status", ["Todos"] + list(df['Status'].unique()), label_visibility="collapsed") + with f_col3: + tipo_sessao_filter = st.selectbox("Tipo de Sessão", ["Todos"] + list(df['Tipo'].unique()), label_visibility="collapsed") + with f_col4: + terapeuta_filter = st.selectbox("Terapeuta", ["Todos"] + list(df['Terapeuta'].unique()), label_visibility="collapsed") + st.markdown('
', unsafe_allow_html=True) + +# --- LÓGICA DE FILTRAGEM --- +df_filtrado = df.copy() +if busca: + df_filtrado = df_filtrado[df_filtrado.apply(lambda row: busca.lower() in str(row).lower(), axis=1)] +if status_filter != "Todos": + df_filtrado = df_filtrado[df_filtrado['Status'] == status_filter] +if tipo_sessao_filter != "Todos": + df_filtrado = df_filtrado[df_filtrado['Tipo'] == tipo_sessao_filter] +if terapeuta_filter != "Todos": + df_filtrado = df_filtrado[df_filtrado['Terapeuta'] == terapeuta_filter] + +# --- LISTA DE AGENDAMENTOS --- +st.header(f"Lista de Agendamentos ({len(df_filtrado)} de {len(df)})") +st.caption("Todos os agendamentos programados para hoje") + +# Cabeçalho da lista customizado +header_cols = st.columns([0.8, 1.5, 1.5, 1, 1.5, 0.8, 1, 1.5]) +headers = ['Horário', 'Paciente', 'Contato', 'Tipo', 'Terapeuta', 'Sala', 'Status', 'Ações'] +for col, header in zip(header_cols, headers): + col.markdown(f'
{header}
', unsafe_allow_html=True) + +# Função para criar o badge de status +def status_to_html(status): + status_class = status.lower().replace(" ", "-").replace("í", "i").replace("ç", "c") + return f'
{status}
' + +# Exibindo os dados em cards +if df_filtrado.empty: + st.info("Nenhum agendamento encontrado com os filtros selecionados.") +else: + for index, row in df_filtrado.iterrows(): + with st.container(): + st.markdown('
', unsafe_allow_html=True) + cols = st.columns([0.8, 1.5, 1.5, 1, 1.5, 0.8, 1, 1.5]) + cols[0].markdown(f"🕒 {row['Horário']}") + cols[1].markdown(f"**{row['Paciente']}**") + cols[2].text(row['Contato']) + cols[3].text(row['Tipo']) + cols[4].text(f"👨‍⚕️ {row['Terapeuta']}") + cols[5].text(row['Sala']) + cols[6].markdown(status_to_html(row['Status']), unsafe_allow_html=True) + + with cols[7]: + st.markdown('
', unsafe_allow_html=True) + action_cols = st.columns([1, 1]) + if row['Status'] == 'Cancelado': + action_cols[0].button("Repor", key=f"repor_{index}", help="Repor este agendamento") + action_cols[1].button("Ver Disparo", key=f"disparo_{index}", help="Ver detalhes do disparo de mensagem") + st.markdown('
', unsafe_allow_html=True) + + st.markdown('
', unsafe_allow_html=True) \ No newline at end of file diff --git a/notebooks/transform.ipynb b/notebooks/transform.ipynb new file mode 100644 index 0000000..e8a129d --- /dev/null +++ b/notebooks/transform.ipynb @@ -0,0 +1,55 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "be241e8f", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "df = pd.read_clipboard()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d7949bc", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bed618e4", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "cofrat-app", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/requirements.txt b/requirements.txt index 935c3d2..39aca81 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -numpy==2.3.3 +numpy==2.3.4 pandas==2.3.3 python-dotenv==1.1.1 python_dateutil==2.9.0.post0 Requests==2.32.5 streamlit==1.50.0 -streamlit_option_menu -supabase==2.22.0 \ No newline at end of file +streamlit_option_menu==0.4.0 +supabase==2.22.2 \ No newline at end of file diff --git a/utils.py b/utils.py index 19328f3..10ccbd1 100644 --- a/utils.py +++ b/utils.py @@ -1125,361 +1125,211 @@ def approval_workflow_page(): # --- [AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): """ - Exibe a página de confirmação em massa com formatação de preview aprimorada, - layout ajustado, filtros e CRUD de templates. + Exibe a Central de Disparos para ler um arquivo Excel limpo (.xlsx), + aplicar transformações e enviar os dados via POST. Inclui a funcionalidade de "Selecionar Todos". """ - # --- Importações necessárias --- + # --- Importações e Configurações --- import pandas as pd - import os - from datetime import date, timedelta + import re + from datetime import date, datetime, time import requests - - st.write('##### Comunicação em massa para agendamentos') - st.write('Esta página permite confirmar ou cancelar agendamentos em massa. Use os filtros para selecionar um período e refinar a lista de pacientes antes de enviar as comunicações.') - st.write('') - - # --- FUNÇÕES HELPER --- - - # Função para carregar dados do Baserow - def get_confirmation_data_from_baserow(api_key): - if not api_key: - st.error("A chave da API do Baserow (BASEROW_KEY) não foi configurada.") - return pd.DataFrame() - url = "https://api.baserow.io/api/database/rows/table/681080/?user_field_names=true&size=200" - headers = {"Authorization": f"Token {api_key}"} - all_rows = [] - try: - while url: - response = requests.get(url, headers=headers) - response.raise_for_status() - data = response.json() - all_rows.extend(data.get('results', [])) - url = data.get('next') - if not all_rows: return pd.DataFrame() - df = pd.DataFrame(all_rows) - expected_columns = ['Data do Agendamento', 'Horário', 'Nome do Paciente', 'Convênio', 'Evento', 'Profissional', 'Especialidade', 'Telefone', 'Status do Agendamento'] - for col in expected_columns: - if col not in df.columns: - st.error(f"Erro Crítico: A coluna '{col}' não foi encontrada na sua tabela do Baserow.") - return pd.DataFrame() - column_mapping = {'Data do Agendamento': 'scheduled_date', 'Horário': 'time', 'Nome do Paciente': 'name', 'Convênio': 'insurance', 'Evento': 'event', 'Profissional': 'professional', 'Especialidade': 'category', 'Telefone': 'phone', 'Status do Agendamento': 'status'} - df.rename(columns=column_mapping, inplace=True) - df['scheduled_date'] = pd.to_datetime(df['scheduled_date'], dayfirst=True, errors='coerce').dt.date - df.dropna(subset=['scheduled_date'], inplace=True) - return df - except Exception as e: - st.error(f"Ocorreu um erro ao buscar os dados do Baserow: {e}") - return pd.DataFrame() - - # Funções para CRUD de templates locais - DATA_DIR = "data" - TEMPLATES_FILE = os.path.join(DATA_DIR, "message_templates.csv") + import io + + # --- FUNÇÃO HELPER PARA PROCESSAR O DATAFRAME LIMPO --- + def process_clean_excel(df): + """ + Aplica as transformações necessárias em um DataFrame já limpo. + Normaliza os nomes das colunas e cria a coluna 'horario_ajustado'. + """ + df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_') + + required_columns = ['horário', 'número_de_telefone_ajustado'] + missing_cols = [col for col in required_columns if col not in df.columns] + if missing_cols: + raise ValueError(f"As colunas obrigatórias a seguir não foram encontradas no arquivo: {', '.join(missing_cols)}. Verifique o cabeçalho do seu arquivo Excel.") - def load_templates(): - if not os.path.exists(DATA_DIR): - os.makedirs(DATA_DIR) - if not os.path.exists(TEMPLATES_FILE): - return pd.DataFrame(columns=["area", "message"]) - return pd.read_csv(TEMPLATES_FILE) + df['horário'] = df['horário'].astype(str) - def save_templates(df): - df.to_csv(TEMPLATES_FILE, index=False) + def adjust_time(time_str): + try: + if isinstance(time_str, time): + time_str = time_str.strftime('%H:%M:%S') + + parts = time_str.split(':') + hour = int(parts[0]) + minute = int(parts[1]) + adjusted_minute = (minute // 10) * 10 + return f"{hour:02d}:{adjusted_minute:02d}" + except (ValueError, IndexError): + return time_str + + df['horario_ajustado'] = df['horário'].apply(adjust_time) + + df.rename(columns={'número_de_telefone_ajustado': 'telefone_ajustado'}, inplace=True) - # --- INICIALIZAÇÃO E CARGA DE DADOS --- - load_dotenv() - BASEROW_KEY = os.getenv("BASEROW_KEY") - df = get_confirmation_data_from_baserow(BASEROW_KEY) - templates_df = load_templates() + return df # --- INICIALIZAÇÃO DO SESSION STATE --- - if 'conf_start_date' not in st.session_state: - st.session_state.conf_start_date = date.today() - st.session_state.conf_end_date = date.today() + timedelta(days=7) - st.session_state.conf_prof_filter = "Todos" - st.session_state.conf_cat_filter = "Todos" - st.session_state.conf_status_filter = "Todos" - st.session_state.conf_patient_filter = "Todos" - st.session_state.conf_insurance_filter = "Todos" - st.session_state.conf_event_filter = "Todos" - st.session_state.conf_search_term = "" - st.session_state.show_preview_dialog = False - st.session_state.show_send_confirmation = False - st.session_state.template_area = "" - - if 'message_template' not in st.session_state: - st.session_state.message_template = "Olá {$primeiro_nome}!\n\nSua consulta está agendada para o dia {$data}, às {$horario}, com Dr. {$profissional}.\n\nCaso não possa comparecer, por favor, avise com antecedência." - - # --- LÓGICA DE FILTRAGEM --- - filtered_df = df.copy() - if not df.empty: - if st.session_state.conf_start_date > st.session_state.conf_end_date: - st.error("A data inicial não pode ser posterior à data final.") - filtered_df = pd.DataFrame() - else: - date_mask = (filtered_df['scheduled_date'] >= st.session_state.conf_start_date) & (filtered_df['scheduled_date'] <= st.session_state.conf_end_date) - filtered_df = filtered_df[date_mask] - if st.session_state.conf_prof_filter != "Todos": filtered_df = filtered_df[filtered_df['professional'] == st.session_state.conf_prof_filter] - if st.session_state.conf_cat_filter != "Todos": filtered_df = filtered_df[filtered_df['category'] == st.session_state.conf_cat_filter] - if st.session_state.conf_status_filter != "Todos": filtered_df = filtered_df[filtered_df['status'] == st.session_state.conf_status_filter] - if st.session_state.conf_patient_filter != "Todos": filtered_df = filtered_df[filtered_df['name'] == st.session_state.conf_patient_filter] - if st.session_state.conf_insurance_filter != "Todos": filtered_df = filtered_df[filtered_df['insurance'] == st.session_state.conf_insurance_filter] - if st.session_state.conf_event_filter != "Todos": filtered_df = filtered_df[filtered_df['event'] == st.session_state.conf_event_filter] - if st.session_state.conf_search_term: - filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.conf_search_term, case=False, na=False)] - - # --- DIÁLOGOS --- - @st.dialog("Preview da Mensagem") - def preview_dialog(): - # Função auxiliar para formatar o horário - def format_time_for_preview(time_str): - try: - hour, minute = map(int, time_str.split(':')) - rounded_minute = (minute // 10) * 10 - return f"{hour:02d}:{rounded_minute:02d}" - except: - return time_str # Retorna o original se houver erro de formato + if 'processed_df' not in st.session_state: + st.session_state.processed_df = None + if 'edited_df' not in st.session_state: + st.session_state.edited_df = None + if 'uploaded_file_name' not in st.session_state: + st.session_state.uploaded_file_name = None + + # --- LAYOUT DO CABEÇALHO --- + # [AJUSTE] Botões do cabeçalho restaurados + st.markdown(""" + + """, unsafe_allow_html=True) - message_template = st.session_state.get('message_template', "Olá, {$primeiro_nome}!") - if 'edited_df' in st.session_state and not st.session_state.edited_df.empty: - selected_patients_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] - if selected_patients_df.empty: - st.warning("Nenhum paciente selecionado para visualizar.") - else: - first_selected_row_display = selected_patients_df.iloc[0] - original_index = first_selected_row_display.name - full_data_row = filtered_df.loc[original_index] - st.markdown(f"**Para: {full_data_row['name']}**") - - # [MODIFICADO] Aplica as novas formatações - patient_name = str(full_data_row['name']).split(' ')[0].capitalize() - professional_name = str(full_data_row['professional']).title() - formatted_time = format_time_for_preview(str(full_data_row['time'])) - - preview_message = message_template.replace('{$primeiro_nome}', patient_name)\ - .replace('{$modalidade}', str(full_data_row['category']))\ - .replace('{$horario}', formatted_time)\ - .replace('{$data}', full_data_row['scheduled_date'].strftime('%d/%m/%Y'))\ - .replace('{$profissional}', professional_name) - - # [MODIFICADO] Substitui \n por
para renderizar quebras de linha - html_message = preview_message.replace('\n', '
') - - st.markdown(f'
{html_message}
', unsafe_allow_html=True) - else: - st.warning("Não há dados de agendamento para visualizar.") - if st.button("Fechar", use_container_width=True, key="close_preview"): - st.session_state.show_preview_dialog = False - st.rerun() + header_cols = st.columns([3, 1.5, 1.5]) + with header_cols[0]: + st.title("Central de Disparos") + st.caption("Clínica de Ortopedia e Terapia") + with header_cols[1]: + st.button("Ver Agendamentos", use_container_width=True) + with header_cols[2]: + st.button("✚ Novo Disparo", use_container_width=True, type="primary") + + st.divider() - @st.dialog("Confirmar Envio") - def confirm_send_dialog(selected_count): - st.warning(f"Você tem certeza que deseja enviar a mensagem para {selected_count} paciente(s) selecionado(s)?") - - col1, col2 = st.columns(2) - if col1.button("Sim, Enviar Agora", type="primary", use_container_width=True): - selected_contacts_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] - message_to_send = st.session_state.get('message_template', "") - selected_indices = selected_contacts_df.index - full_data_of_selected = filtered_df.loc[selected_indices] - full_data_of_selected['scheduled_date'] = full_data_of_selected['scheduled_date'].astype(str) - contacts_payload = full_data_of_selected.to_dict(orient='records') - final_payload = {"message_template": message_to_send, "contacts": contacts_payload} - WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/disparo-em-massa" - - with st.spinner(f"Enviando {len(contacts_payload)} mensagens..."): - try: - response = requests.post(WEBHOOK_URL, json=final_payload, timeout=30) - if 200 <= response.status_code < 300: - st.success(f"✅ Sucesso! A automação foi acionada para {len(contacts_payload)} contatos.") - else: - st.error(f"❌ Falha ao enviar. O servidor respondeu com: {response.status_code} - {response.text}") - except requests.exceptions.RequestException as e: - st.error(f"❌ Erro de conexão ao tentar acionar o webhook: {e}") - - st.session_state.show_send_confirmation = False - st.rerun() + # --- SEÇÃO DE UPLOAD E PROCESSAMENTO --- + st.subheader("1. Carregar Arquivo de Agendamentos (.xlsx)") + + uploaded_file = st.file_uploader( + "Selecione o arquivo Excel já tratado com os agendamentos", + type=["xlsx"], + key="excel_uploader" + ) - if col2.button("Cancelar", use_container_width=True): - st.session_state.show_send_confirmation = False - st.rerun() + if uploaded_file is not None: + if uploaded_file.name != st.session_state.uploaded_file_name: + st.session_state.processed_df = None + st.session_state.edited_df = None + st.session_state.uploaded_file_name = uploaded_file.name + + if st.session_state.processed_df is None: + if st.button("⚙️ Processar Arquivo", use_container_width=True, type="primary"): + with st.spinner("Lendo e processando o arquivo..."): + try: + df = pd.read_excel(uploaded_file) + st.session_state.processed_df = process_clean_excel(df) + + editable_df = st.session_state.processed_df.copy() + editable_df.insert(0, 'Selecionar', False) + st.session_state.edited_df = editable_df + + st.success("Arquivo processado com sucesso!") + st.rerun() + except Exception as e: + st.error(f"Ocorreu um erro ao processar o arquivo: {e}") - # --- SEÇÃO DE FILTROS RETRÁTIL --- - with st.expander("🔍 Filtros de Agendamento", expanded=True): - search_col, btns_col = st.columns([3, 1.2]) - search_col.text_input( - "Buscar paciente por nome:", - key="conf_search_term", - placeholder="Digite o nome do paciente para buscar..." - ) + # --- SEÇÃO DE VISUALIZAÇÃO E FILTROS --- + if st.session_state.processed_df is not None: + df_processed = st.session_state.processed_df - with btns_col: - b1, b2 = st.columns(2) - def clear_confirmation_filters(): - st.session_state.conf_start_date = date.today() - st.session_state.conf_end_date = date.today() + timedelta(days=7) - st.session_state.conf_prof_filter = "Todos" - st.session_state.conf_cat_filter = "Todos" - st.session_state.conf_status_filter = "Todos" - st.session_state.conf_patient_filter = "Todos" - st.session_state.conf_insurance_filter = "Todos" - st.session_state.conf_event_filter = "Todos" - st.session_state.conf_search_term = "" - b1.button("Limpar", on_click=clear_confirmation_filters, use_container_width=True, help="Limpar todos os filtros") - - if b2.button("Atualizar", use_container_width=True, help="Atualizar dados da página"): - st.rerun() - - st.divider() + df_processed['data'] = pd.to_datetime(df_processed['data'], errors='coerce') + df_processed.dropna(subset=['data'], inplace=True) - date_col1, date_col2 = st.columns(2) - date_col1.date_input("Data Inicial:", key="conf_start_date") - date_col2.date_input("Data Final:", key="conf_end_date") + start_date = df_processed['data'].min() + end_date = df_processed['data'].max() - if not df.empty: - f_col1, f_col2, f_col3 = st.columns(3) - f_col1.selectbox("Profissionais", ["Todos"] + sorted(df['professional'].unique().tolist()), key="conf_prof_filter") - f_col2.selectbox("Categorias", ["Todos"] + sorted(df['category'].unique().tolist()), key="conf_cat_filter") - f_col3.selectbox("Status", ["Todos"] + sorted(df['status'].unique().tolist()), key="conf_status_filter") - - f_col4, f_col5, f_col6 = st.columns(3) - f_col4.selectbox("Pacientes (lista completa)", ["Todos"] + sorted(df['name'].unique().tolist()), key="conf_patient_filter") - f_col5.selectbox("Convênios", ["Todos"] + sorted(df['insurance'].unique().tolist()), key="conf_insurance_filter") - f_col6.selectbox("Eventos", ["Todos"] + sorted(df['event'].unique().tolist()), key="conf_event_filter") - - # --- CABEÇALHO E RESUMO DE AGENDAMENTOS --- - st.write("---") - start_date_str = st.session_state.conf_start_date.strftime('%d/%m/%Y') - end_date_str = st.session_state.conf_end_date.strftime('%d/%m/%Y') - st.header(f"Agendamentos de {start_date_str} até {end_date_str}") - - # --- [CORRIGIDO] TABELA DE AGENDAMENTOS E ESTATÍSTICAS --- - if filtered_df.empty: - st.warning("Nenhum agendamento encontrado para os filtros selecionados.") - st.session_state.edited_df = pd.DataFrame() - else: - # [CORRIGIDO] O cálculo das estatísticas foi movido para DENTRO deste bloco 'else'. - # Isso garante que o código só tente acessar a coluna 'status' se o DataFrame não estiver vazio. - total_agendamentos = len(filtered_df) - confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) - pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) - reagendados = len(filtered_df[filtered_df['status'] == 'Reagendado']) - cancelados = len(filtered_df[filtered_df['status'] == 'Cancelado']) + start_date_str = start_date.strftime('%d/%m/%Y') if pd.notna(start_date) else "N/A" + end_date_str = end_date.strftime('%d/%m/%Y') if pd.notna(end_date) else "N/A" - st.markdown(f""" -
- {total_agendamentos} agendamentos - {confirmados} confirmados - {pendentes} pendentes - {reagendados} reagendados - {cancelados} cancelados -
- """, unsafe_allow_html=True) + st.header(f"Agendamentos de {start_date_str} até {end_date_str}") - base_df = filtered_df[['name', 'time', 'category', 'professional', 'status', 'phone']].copy() - base_df.rename(columns={ - 'name': 'Paciente', 'time': 'Horário', 'category': 'Modalidade', - 'professional': 'Profissional', 'status': 'Status', 'phone': 'Telefone' - }, inplace=True) + with st.expander("🔍 Filtros de Agendamento", expanded=False): + st.info("Filtros podem ser adicionados aqui para refinar a visualização.") - if 'edited_df' not in st.session_state or not st.session_state.edited_df.index.equals(base_df.index): - base_df.insert(0, 'Selecionar', False) - st.session_state.edited_df = base_df + st.subheader("2. Selecione os Pacientes para Envio") + # --- [NOVO] LÓGICA PARA "SELECIONAR TODOS" --- def toggle_all(): + # Pega o novo valor do checkbox "Selecionar Todos" new_value = st.session_state.select_all_checkbox + # Cria uma cópia do dataframe em edição para evitar problemas de referência df_copy = st.session_state.edited_df.copy() + # Define toda a coluna "Selecionar" para o novo valor df_copy['Selecionar'] = new_value + # Atualiza o dataframe no session_state st.session_state.edited_df = df_copy - action_col1, action_col2 = st.columns([3, 1]) - with action_col1: - all_selected = all(st.session_state.edited_df['Selecionar']) if not st.session_state.edited_df.empty else False - st.checkbox("Selecionar Todos", value=all_selected, on_change=toggle_all, key="select_all_checkbox") - with action_col2: - if st.button("🔄 Atualizar Tabela", use_container_width=True, help="Recarregar dados do Baserow"): - st.rerun() + # Verifica se todos os itens já estão selecionados para definir o estado inicial do checkbox + all_selected = False + if st.session_state.edited_df is not None and not st.session_state.edited_df.empty: + all_selected = st.session_state.edited_df['Selecionar'].all() + + # Cria o checkbox na interface + st.checkbox( + "Selecionar Todos", + value=all_selected, + on_change=toggle_all, + key="select_all_checkbox" + ) + + # --- FIM DA LÓGICA "SELECIONAR TODOS" --- edited_df_output = st.data_editor( st.session_state.edited_df, use_container_width=True, hide_index=True, - disabled=['Paciente', 'Horário', 'Modalidade', 'Profissional', 'Status', 'Telefone'], + disabled=st.session_state.edited_df.columns.drop('Selecionar'), key='appointments_editor' ) st.session_state.edited_df = edited_df_output - # --- LAYOUT DE AÇÕES E TEMPLATE --- - st.write("---") - - with st.container(border=True): - st.subheader("📋 Template e Envio de Mensagem") - st.caption("Configure a mensagem que será enviada aos pacientes selecionados na tabela acima.") - - content = st.text_area( - "Mensagem:", - value=st.session_state.message_template, - height=250, - key='message_template_input' - ) - st.session_state.message_template = content - - st.text_input("Área/Categoria do Template:", key="template_area") - - st.markdown("**Variáveis:** `{$primeiro_nome}`, `{$modalidade}`, `{$horario}`, `{$data}`, `{$profissional}`") - st.write("") + st.divider() + st.subheader("3. Escolha o Template e Envie") - btn_cols = st.columns(3) + templates = { + "Confirmacao_Agendamento": "Olá, {nome_do_paciente}! Sua consulta com Dr(a). {nome_do_médico} está confirmada para o dia {data} às {horario_ajustado}. Até breve!", + "Lembrete_48h": "Lembrete: sua consulta com Dr(a). {nome_do_médico} é depois de amanhã, dia {data} às {horario_ajustado}. Contamos com sua presença!", + } + selected_template_name = st.selectbox("Selecione o template de mensagem:", options=list(templates.keys())) - if btn_cols[0].button("Salvar Template", use_container_width=True): - if st.session_state.template_area and st.session_state.message_template: - new_template = pd.DataFrame([{"area": st.session_state.template_area, "message": st.session_state.message_template}]) - updated_templates_df = pd.concat([templates_df, new_template], ignore_index=True) - save_templates(updated_templates_df) - st.toast("Template salvo com sucesso!") - st.rerun() - else: - st.warning("Preencha a Área e a Mensagem para salvar o template.") + st.info("Pré-visualização do template selecionado:") + st.code(templates[selected_template_name], language="text") - btn_cols[1].button("Visualizar Preview", use_container_width=True, on_click=lambda: st.session_state.update(show_preview_dialog=True)) - - selected_count = int(st.session_state.edited_df['Selecionar'].sum()) if 'edited_df' in st.session_state and not st.session_state.edited_df.empty else 0 + btn_cols = st.columns(2) - if btn_cols[2].button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary"): - if selected_count > 0: - st.session_state.show_send_confirmation = True - st.rerun() - else: - st.warning("Nenhum paciente selecionado para o envio.") - - st.divider() - - st.subheader("Templates Salvos") - st.caption("Delete mensagens pré-definidas.") - - if not templates_df.empty: - template_cols = st.columns(3) - for index, row in templates_df.iterrows(): - with template_cols[index % 3]: - with st.container(border=True): - st.markdown(f"**Área:** {row['area']}") - st.code(row['message'], language=None) + with btn_cols[0]: + btn_cols[0].button("Visualizar Preview", use_container_width=True) + + with btn_cols[1]: + selected_count = int(st.session_state.edited_df['Selecionar'].sum()) + if st.button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary"): + if selected_count > 0: + selected_rows_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] - # [MODIFICADO] Botão Deletar agora ocupa a largura total - if st.button("Deletar", key=f"del_{index}", use_container_width=True): - updated_templates_df = templates_df.drop(index) - save_templates(updated_templates_df) - st.toast(f"Template '{row['area']}' deletado!") - st.rerun() - else: - st.info("Nenhum template salvo ainda. Crie um acima para começar.") + selected_rows_df['data'] = pd.to_datetime(selected_rows_df['data']).dt.strftime('%d/%m/%Y') + + contacts_payload = selected_rows_df.to_dict(orient='records') + + final_payload = { + "template_name": selected_template_name, + "contacts": contacts_payload + } + + WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/disparo-em-massa" + + with st.spinner(f"Enviando {len(contacts_payload)} mensagens..."): + try: + response = requests.post(WEBHOOK_URL, json=final_payload, timeout=30) + if 200 <= response.status_code < 300: + st.success(f"✅ Sucesso! A automação foi acionada para {len(contacts_payload)} contatos.") + else: + st.error(f"❌ Falha ao enviar. O servidor respondeu com: {response.status_code} - {response.text}") + except requests.exceptions.RequestException as e: + st.error(f"❌ Erro de conexão ao tentar acionar o webhook: {e}") + else: + st.warning("Nenhum paciente selecionado para o envio.") + - # --- Execução dos diálogos --- - if st.session_state.get('show_preview_dialog', False): - preview_dialog() - - if st.session_state.get('show_send_confirmation', False): - selected_count = int(st.session_state.edited_df['Selecionar'].sum()) - confirm_send_dialog(selected_count) # --- PÁGINA DE PACIENTES --- def patients_page(): @@ -1586,59 +1436,94 @@ def automations_page(): st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") -# --- LÓGICA PRINCIPAL DO APLICATIVO (LOGADO) COM MENU st.radio --- +# --- LÓGICA PRINCIPAL DO APLICATIVO COM MENU SUPERIOR --- def main_app(logo_path): """ - Renderiza a sidebar e controla o roteamento de páginas usando um menu st.radio - nativo para garantir máxima estabilidade e compatibilidade. + Renderiza um menu de navegação superior minimalista e controla o roteamento de páginas, + substituindo completamente a barra lateral. """ - with st.sidebar: - display_logo(logo_path, width=110, use_column=False) - st.write("---") - - # --- [MENU SIMPLIFICADO] Substituído por st.radio para máxima estabilidade --- - # Lista de todas as páginas disponíveis na aplicação - page_options = [ - "Página Inicial", - "Aprovação", - "Agenda do Dia", - "Gestão", - "Pacientes", - "Automações", - "Confirmação", - "Suporte" - ] + # --- CSS Customizado para o novo estilo de menu --- + st.markdown(""" + + """, unsafe_allow_html=True) - # O roteamento de páginas continua funcionando da mesma forma - if selected_page == "Suporte": - st.info("Redirecionando para o WhatsApp...") - st.markdown("### 📱 Suporte via WhatsApp") - st.markdown("[Clique aqui para abrir o WhatsApp](https://wa.me/+5511959044561)") - st.stop() + # --- Inicialização da página ativa (padrão: Confirmação) --- + if 'active_page' not in st.session_state: + st.session_state.active_page = "Confirmação" + + # --- Função para ser chamada no clique do botão para mudar de página --- + def set_page(page_name): + st.session_state.active_page = page_name + + # --- Definição do Menu Superior Alinhado à Direita --- + # Usamos uma coluna "spacer" para empurrar os botões para a direita + spacer, col_conf, col_auto = st.columns([10, 2, 2]) # Aumente o primeiro número para mais espaço à esquerda + + with col_conf: + st.button( + "Confirmação", + on_click=set_page, + args=("Confirmação",), + use_container_width=True, + # O botão é "primary" se for a página ativa, senão é "secondary" + type="primary" if st.session_state.active_page == "Confirmação" else "secondary" + ) + with col_auto: + st.button( + "Automações", + on_click=set_page, + args=("Automações",), + use_container_width=True, + type="primary" if st.session_state.active_page == "Automações" else "secondary" + ) + + # --- Mapeamento e Renderização da Página Ativa --- page_map = { - 'Página Inicial': home_page, - 'Aprovação': approval_workflow_page, - 'Agenda do Dia': daily_schedule_page, - 'Gestão': management_page, 'Confirmação': confirmation_page, - 'Pacientes': patients_page, 'Automações': automations_page } - # Chama a função da página selecionada - page_function = page_map.get(selected_page, home_page) - page_function() \ No newline at end of file + # Chama a função da página que está atualmente selecionada + page_function = page_map.get(st.session_state.active_page) + if page_function: + page_function() + else: + # Fallback caso algo dê errado, renderiza a página de confirmação + confirmation_page() \ No newline at end of file From 7d1b42582784be99582f3e71d549c69c0eb79ea2 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Thu, 30 Oct 2025 16:20:36 -0300 Subject: [PATCH 44/60] chore: main --- utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 10ccbd1..d68464c 100644 --- a/utils.py +++ b/utils.py @@ -1504,7 +1504,8 @@ def set_page(page_name): # O botão é "primary" se for a página ativa, senão é "secondary" type="primary" if st.session_state.active_page == "Confirmação" else "secondary" ) - + + with col_auto: st.button( "Automações", From 1cd077c38dd9f1722bee045a6a1852143191ade9 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 17 Nov 2025 20:00:18 -0300 Subject: [PATCH 45/60] feature: new version published --- .streamlit/config.toml | 6 +- requirements.txt | 9 +- style.css | 7 + utils.py | 1322 +++------------------------------------- 4 files changed, 91 insertions(+), 1253 deletions(-) diff --git a/.streamlit/config.toml b/.streamlit/config.toml index 83caff7..09cb8dc 100644 --- a/.streamlit/config.toml +++ b/.streamlit/config.toml @@ -1,7 +1,7 @@ [theme] base="light" -primaryColor="#28a745" #294960 -backgroundColor="#f7f8fa" -secondaryBackgroundColor="#FFFFFF" +primaryColor="#08b13c" +backgroundColor="#fafafaff" +secondaryBackgroundColor="#ffffff" textColor="#262730" font="sans serif" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 39aca81..b081ae3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,9 @@ -numpy==2.3.4 +numpy==2.3.5 pandas==2.3.3 -python-dotenv==1.1.1 +python-dotenv==1.2.1 python_dateutil==2.9.0.post0 Requests==2.32.5 -streamlit==1.50.0 +streamlit==1.44.1 +streamlit_antd_components==0.3.2 streamlit_option_menu==0.4.0 -supabase==2.22.2 \ No newline at end of file +supabase==2.24.0 \ No newline at end of file diff --git a/style.css b/style.css index 3d07464..ece1e25 100644 --- a/style.css +++ b/style.css @@ -344,4 +344,11 @@ div[data-testid="stProgressBar"] > div { /* Remove a borda da última linha para um visual mais limpo */ .agenda-table-container .row:last-child .cell { border-bottom: none !important; +} + +[data-testid="stSidebar"] { + background-image: url(https://64.media.tumblr.com/355a567fb354a9948da47cfa3fd60c6b/3738600cda58d8af-d9/s500x750/769f82598ee8e7a9bae7a8da6e5ebc995cc935d5.pnj); + background-size: 130px; + background-repeat: no-repeat; + background-position: 30px 30px; } \ No newline at end of file diff --git a/utils.py b/utils.py index d68464c..3bf6332 100644 --- a/utils.py +++ b/utils.py @@ -1,17 +1,20 @@ # utils.py import streamlit as st from streamlit_option_menu import option_menu -from datetime import date, timedelta +from datetime import date, timedelta, datetime, time import pandas as pd from dateutil.relativedelta import relativedelta import numpy as np from supabase import create_client, Client from dotenv import load_dotenv import os -import time -from datetime import datetime import requests import base64 +import streamlit_antd_components as sac +import re +import io + + # --- FUNÇÃO PARA CARREGAR IMAGEM (LOCAL E ONLINE) --- def load_image_as_base64(image_path): @@ -23,6 +26,7 @@ def load_image_as_base64(image_path): except: return None +# --- FUNÇÃO PARA EXIBIR LOGO COM FALLBACK --- def display_logo(logo_path, width=200, use_column=True): """Exibe logo com fallback para base64 se o caminho não funcionar.""" # Tenta carregar como base64 @@ -96,1132 +100,80 @@ def login_form(logo_path): except Exception: st.error("Arquivo de segredos (secrets.toml) não encontrado ou mal configurado.") -# --- FUNÇÕES HELPER PARA CARDS --- -def create_metric_card(label, value, delta, delta_color): - delta_class = {"normal": "delta-positive", "inverse": "delta-negative"}.get(delta_color, "delta-neutral") - return f'
{label}
{value}
{delta}
' - -# --- FUNÇÃO HELPER PARA SUMMARY CARDS --- -def create_summary_card(label, value): - return f'
{value}
{label}
' - -# --- PÁGINA INICIAL (DASHBOARD COM CARD DE PACIENTES ÚNICOS) --- -def home_page(): - """ - Exibe um dashboard estável e informativo, com uma linha adicional de cards - numéricos, incluindo o total de pacientes únicos no período. - """ - st.markdown(""" -
-
-
-

Painel de Performance da Clínica

-

Use os filtros para analisar a operação em diferentes períodos

-
-
- """, unsafe_allow_html=True) - - # --- BUSCA E PREPARAÇÃO DOS DADOS --- - load_dotenv() - BASEROW_KEY = os.getenv("BASEROW_KEY") - - @st.cache_data(ttl=600) # Cache de 10 minutos - def load_data_from_baserow(): - df = get_daily_agenda_from_baserow(BASEROW_KEY) - if not df.empty: - df['scheduled_date'] = pd.to_datetime(df['scheduled_date']).dt.date - return df - - df = load_data_from_baserow() - - if df.empty: - st.warning("Não foi possível carregar os dados para o dashboard. Verifique a conexão ou a fonte de dados.") - return - - # --- FILTROS DE DATA INTERATIVOS --- - today = date.today() - - with st.expander("🗓️ Selecionar Período", expanded=True): - periodo_selecionado = st.selectbox( - "Filtro rápido", - options=["Este Mês", "Esta Semana", "Últimos 30 dias", "Hoje", "Período Customizado"], - key="period_filter" - ) - - if periodo_selecionado == "Hoje": - start_date = today - end_date = today - elif periodo_selecionado == "Esta Semana": - start_date = today - timedelta(days=today.weekday()) - end_date = start_date + timedelta(days=6) - elif periodo_selecionado == "Este Mês": - start_date = today.replace(day=1) - end_date = today.replace(day=1) + relativedelta(months=1) - timedelta(days=1) - elif periodo_selecionado == "Últimos 30 dias": - start_date = today - timedelta(days=29) - end_date = today - else: # Período Customizado - col1, col2 = st.columns(2) - start_date = col1.date_input("Data Inicial", today - timedelta(days=6)) - end_date = col2.date_input("Data Final", today) - - df_filtered = df[(df['scheduled_date'] >= start_date) & (df['scheduled_date'] <= end_date)] - - if df_filtered.empty: - st.info(f"Nenhum agendamento encontrado para o período de {start_date.strftime('%d/%m/%Y')} a {end_date.strftime('%d/%m/%Y')}.") - return - - # --- CÁLCULO DAS MÉTRICAS DE INSIGHT (KPIs) --- - total_agendamentos = len(df_filtered) - confirmados = len(df_filtered[df_filtered['status'] == 'Confirmado']) - cancelados = len(df_filtered[df_filtered['status'] == 'Cancelado']) - - taxa_confirmacao = (confirmados / total_agendamentos * 100) if total_agendamentos > 0 else 0 - taxa_cancelamento = (cancelados / total_agendamentos * 100) if total_agendamentos > 0 else 0 - - num_dias = (end_date - start_date).days + 1 - media_diaria = total_agendamentos / num_dias if num_dias > 0 else 0 - - # --- EXIBIÇÃO DOS KPIs --- - st.markdown(f"#### Indicadores de {start_date.strftime('%d/%m/%Y')} a {end_date.strftime('%d/%m/%Y')}") - kpi_cols = st.columns(4) - kpi_cols[0].markdown(create_metric_card("Taxa de Confirmação", f"{taxa_confirmacao:.1f}%", "Eficiência da comunicação", "normal"), unsafe_allow_html=True) - kpi_cols[1].markdown(create_metric_card("Taxa de Cancelamento", f"{taxa_cancelamento:.1f}%", "Agendamentos perdidos", "inverse"), unsafe_allow_html=True) - kpi_cols[2].markdown(create_metric_card("Total de Atendimentos", f"{total_agendamentos}", "Volume no período", "off"), unsafe_allow_html=True) - kpi_cols[3].markdown(create_metric_card("Média Diária", f"{media_diaria:.1f}", "Atendimentos / dia", "off"), unsafe_allow_html=True) - - st.divider() - - # --- RESUMO OPERACIONAL COM CARDS --- - st.markdown("#### Resumo Operacional do Período") - - # Cálculos para os novos cards - pendentes = len(df_filtered[df_filtered['status'] == 'Pendente']) - - # [NOVO CARD] Calcula o número de pacientes únicos (contando nomes distintos) - pacientes_unicos = df_filtered['name'].nunique() - - # Exibição da nova linha de cards - summary_cols = st.columns(4) - summary_cols[0].markdown(create_summary_card("Confirmados", f"{confirmados}"), unsafe_allow_html=True) - summary_cols[1].markdown(create_summary_card("Pendentes", f"{pendentes}"), unsafe_allow_html=True) - summary_cols[2].markdown(create_summary_card("Cancelados", f"{cancelados}"), unsafe_allow_html=True) - summary_cols[3].markdown(create_summary_card("Pacientes Únicos", f"{pacientes_unicos}"), unsafe_allow_html=True) - -# --- PÁGINA DE APROVAÇÃO --- -def get_sample_appointments(): - """ - Retorna uma lista expandida de agendamentos fictícios para a fila de aprovação, - conectando-se com os dados da página 'Agenda do Dia'. - """ - today = date.today() - - # Dicionário para traduzir os dias da semana para português - dias_semana = { - 0: "segunda-feira", 1: "terça-feira", 2: "quarta-feira", - 3: "quinta-feira", 4: "sexta-feira", 5: "sábado", 6: "domingo" - } - meses = { - 1: "janeiro", 2: "fevereiro", 3: "março", 4: "abril", 5: "maio", 6: "junho", - 7: "julho", 8: "agosto", 9: "setembro", 10: "outubro", 11: "novembro", 12: "dezembro" - } - - # Função auxiliar para formatar a data de forma amigável - def format_date(d): - dia_semana = dias_semana[d.weekday()] - return f"{dia_semana}, {d.day} de {meses[d.month]} de {d.year}" - - return [ - # --- 3 Exemplos para a aba "Carteirinha" --- - { - "name": "Letícia Barros de Souza", "initials": "LB", "phone": "(31) 98765-4321", - "specialty": "Cardiologia", "date": format_date(today + timedelta(days=3)), "time": "14:30", - "professional": "Dr. Lucas Martins", "insurance": "SulAmérica", - "card_number": "2 345 678901 23-4", "event": "Check-up Anual", - "notes": "Paciente solicitou reagendamento da semana passada. Verificar histórico de pressão arterial.", - "type": "Carteirinha" - }, - { - "name": "Pedro Lima Santos", "initials": "PL", "phone": "(11) 96543-2109", - "specialty": "Nutrição", "date": format_date(today - timedelta(days=22)), "time": "16:00", - "professional": "Dr. Roberto Lima", "insurance": "NotreDame Intermédica", - "card_number": "4 567 890123 45-6", "event": "Consulta de Acompanhamento", - "notes": "Paciente em processo de reeducação alimentar. Apresentar diário alimentar.", - "type": "Carteirinha" - }, - { - "name": "Marcos Aurélio Bastos", "initials": "MA", "phone": "(61) 98234-5678", - "specialty": "Fisioterapia", "date": format_date(today + timedelta(days=2)), "time": "08:00", - "professional": "Dra. Ana Costa", "insurance": "Unimed", - "card_number": "5 678 901234 56-7", "event": "Sessão de Reabilitação", - "notes": "Paciente em reabilitação de cirurgia no ombro. 5ª sessão de 10.", - "type": "Carteirinha" - }, - - # --- 4 Exemplos para a aba "Agendamento" --- - { - "name": "Ricardo Gomes Alves", "initials": "RG", "phone": "(81) 99876-5432", - "specialty": "Ortopedia", "date": format_date(today), "time": "09:00", - "professional": "Dr. Carlos Mendes", "insurance": "Amil", - "card_number": "1 234 567890 12-3", "event": "Primeira Consulta", - "notes": "Paciente encaminhado com suspeita de lesão no menisco. Trazer exames anteriores.", - "type": "Agendamento" - }, - { - "name": "Patrícia Moreira Lima", "initials": "PM", "phone": "(21) 97654-3210", - "specialty": "Ortopedia", "date": format_date(today + timedelta(days=8)), "time": "11:00", - "professional": "Dr. Carlos Mendes", "insurance": "Bradesco Saúde", - "card_number": "3 456 789012 34-5", "event": "Retorno", - "notes": "Retorno para avaliação de fisioterapia pós-fratura no tornozelo.", - "type": "Agendamento" - }, - { - "name": "Vanessa Ribeiro Costa", "initials": "VR", "phone": "(48) 99123-4567", - "specialty": "Psicologia", "date": format_date(today + timedelta(days=1)), "time": "10:30", - "professional": "Dra. Sofia Almeida", "insurance": "Particular", - "card_number": "N/A", "event": "Sessão de Terapia", - "notes": "Primeira sessão. Foco em ansiedade e estresse no trabalho.", - "type": "Agendamento" - }, - { - "name": "Cláudia Ohana Dias", "initials": "CO", "phone": "(71) 99988-7766", - "specialty": "Cardiologia", "date": format_date(today + timedelta(days=5)), "time": "15:00", - "professional": "Dr. Lucas Martins", "insurance": "CASSI", - "card_number": "6 789 012345 67-8", "event": "Exame (MAPA)", - "notes": "Paciente precisa de instruções pré-exame. Entrar em contato para confirmar o recebimento das orientações.", - "type": "Agendamento" - } - ] - -# --- [NOVO] Função para exibir a mensagem de conclusão da CARTEIRINHA --- -def display_carteirinha_completion_message(): - """Exibe a mensagem de conclusão específica para a fila de Carteirinha.""" - st.markdown(""" -
-
-

Parabéns!

-

Você completou todas as confirmações pendentes referente a carteirinha.

-
- """, unsafe_allow_html=True) - -# --- [MODIFICADO] Função para exibir a mensagem de conclusão do AGENDAMENTO (com botão de reset) --- -def display_agendamento_completion_message(): - """Exibe a mensagem de conclusão quando todos os agendamentos são processados.""" - st.markdown(""" -
-
-

Parabéns!

-

Todos os agendamentos pendentes foram processados.

-
- """, unsafe_allow_html=True) - - # Centraliza o botão usando colunas - _, col2, _ = st.columns([1, 1.2, 1]) - with col2: - if st.button("Reiniciar Todas as Filas", width='stretch', key="reset_queues"): - # Reinicializa todas as variáveis de estado das filas - all_apps = get_sample_appointments() - st.session_state.carteirinha_appointments = [app for app in all_apps if app.get('type') == 'Carteirinha'] - st.session_state.agendamento_appointments = [app for app in all_apps if app.get('type') == 'Agendamento'] - st.session_state.carteirinha_pending = len(st.session_state.carteirinha_appointments) - st.session_state.agendamento_pending = len(st.session_state.agendamento_appointments) - st.session_state.carteirinha_index = 0 - st.session_state.agendamento_index = 0 - st.rerun() - -# --- DADOS E FUNÇÕES PARA A PÁGINA DE AGENDA DO DIA --- -def get_daily_agenda_for_dataframe(): - """Retorna dados fictícios para a tabela da agenda com mais variedade e datas dinâmicas.""" - today = date.today() - # Função auxiliar para criar datas relativas ao dia de hoje - def d(days_offset): - return (today + timedelta(days=days_offset)).strftime('%Y-%m-%d') - - return [ - # --- Agendamentos para a semana atual --- - {"name": "Juliana Martins", "scheduled_date": d(0), "professional": "Dra. Ana Costa", "category": "Fisioterapia", "status": "Confirmado"}, - {"name": "Ricardo Gomes", "scheduled_date": d(0), "professional": "Dr. Carlos Mendes", "category": "Ortopedia", "status": "Pendente"}, - {"name": "Fernanda Lima", "scheduled_date": d(1), "professional": "Dr. Roberto Lima", "category": "Nutrição", "status": "Confirmado"}, - {"name": "Bruno Azevedo", "scheduled_date": d(2), "professional": "Dra. Sofia Almeida", "category": "Psicologia", "status": "Confirmado"}, - {"name": "Letícia Barros", "scheduled_date": d(3), "professional": "Dr. Lucas Martins", "category": "Cardiologia", "status": "Reagendando"}, - {"name": "Vinicius Moraes", "scheduled_date": d(-1), "professional": "Dra. Ana Costa", "category": "Fisioterapia", "status": "Confirmado"}, - {"name": "Camila Rocha", "scheduled_date": d(-2), "professional": "Dr. Carlos Mendes", "category": "Ortopedia", "status": "Cancelado"}, - - # --- Agendamentos de semanas anteriores --- - {"name": "Daniela Vieira", "scheduled_date": d(-7), "professional": "Dra. Sofia Almeida", "category": "Psicologia", "status": "Confirmado"}, - {"name": "Gustavo Pereira", "scheduled_date": d(-10), "professional": "Dr. Lucas Martins", "category": "Cardiologia", "status": "Confirmado"}, - {"name": "Amanda Nunes", "scheduled_date": d(-12), "professional": "Dr. Roberto Lima", "category": "Nutrição", "status": "Cancelado"}, - {"name": "Felipe Arruda", "scheduled_date": d(-15), "professional": "Dra. Ana Costa", "category": "Fisioterapia", "status": "Confirmado"}, - - # --- Agendamentos de semanas futuras --- - {"name": "Patrícia Moreira", "scheduled_date": d(8), "professional": "Dr. Carlos Mendes", "category": "Ortopedia", "status": "Pendente"}, - {"name": "Thiago Brandão", "scheduled_date": d(11), "professional": "Dr. Roberto Lima", "category": "Nutrição", "status": "Confirmado"}, - {"name": "Larissa Farias", "scheduled_date": d(14), "professional": "Dra. Sofia Almeida", "category": "Psicologia", "status": "Confirmado"}, - {"name": "Eduardo Costa", "scheduled_date": d(20), "professional": "Dr. Lucas Martins", "category": "Cardiologia", "status": "Confirmado"}, - - # --- Dados originais com datas ajustadas para o passado --- - {"name": "Maria Silva Santos", "scheduled_date": d(-30), "professional": "Dr. Carlos Mendes", "category": "Ortopedia", "status": "Confirmado"}, - {"name": "João Carlos Oliveira", "scheduled_date": d(-29), "professional": "Dra. Ana Costa", "category": "Fisioterapia", "status": "Confirmado"}, - {"name": "Ana Paula Costa", "scheduled_date": d(-28), "professional": "Dr. Carlos Mendes", "category": "Ortopedia", "status": "Cancelado"}, - {"name": "Pedro Lima Santos", "scheduled_date": d(-22), "professional": "Dr. Roberto Lima", "category": "Nutrição", "status": "Reagendando"}, - {"name": "Carla Ferreira", "scheduled_date": d(-45), "professional": "Dra. Ana Costa", "category": "Fisioterapia", "status": "Confirmado"}, - {"name": "Roberto Silva", "scheduled_date": d(-40), "professional": "Dr. Roberto Lima", "category": "Nutrição", "status": "Confirmado"}, - {"name": "Beatriz Oliveira", "scheduled_date": d(-60), "professional": "Dr. Carlos Mendes", "category": "Ortopedia", "status": "Confirmado"}, - {"name": "Gabriel Santos", "scheduled_date": d(-50), "professional": "Dra. Ana Costa", "category": "Fisioterapia", "status": "Cancelado"}, - ] - -# --- Função para calcular o intervalo de datas --- -def get_date_range(selected_date, view_mode): - """Calcula o intervalo de datas com base no modo de visualização.""" - if view_mode == "Todo o período": - return date.min, date.max - if view_mode == "Dia": - return selected_date, selected_date - elif view_mode == "Semana": - start_of_week = selected_date - timedelta(days=selected_date.weekday()) - end_of_week = start_of_week + timedelta(days=6) - return start_of_week, end_of_week - elif view_mode == "Mês": - start_of_month = selected_date.replace(day=1) - end_of_month = start_of_month + relativedelta(months=1) - timedelta(days=1) - return start_of_month, end_of_month - elif view_mode == "Trimestre": - current_quarter = (selected_date.month - 1) // 3 + 1 - start_month_of_quarter = 3 * current_quarter - 2 - start_of_quarter = date(selected_date.year, start_month_of_quarter, 1) - end_of_quarter = start_of_quarter + relativedelta(months=3) - timedelta(days=1) - return start_of_quarter, end_of_quarter - - -# --- FUNÇÃO DEDICADA PARA BUSCAR METADADOS DO BANCO DE DADOS --- -def fetch_metadata_from_db(supabase_client): - """ - Busca os metadados dos PDFs da tabela 'pdf_metadata' e retorna um DataFrame. - """ - try: - response = supabase_client.table('pdf_metadata').select( - 'id, created_at, data_upload, nome_arquivo, info_extraida' - ).order('created_at', desc=True).execute() - - data = response.data - if not data: - return pd.DataFrame() - - df = pd.DataFrame(data) - df = df.rename(columns={'data_upload': 'upload_date', 'nome_arquivo': 'file_name', 'info_extraida': 'extracted'}) - return df - - except Exception as e: - st.error(f"Não foi possível buscar os metadados do banco de dados: {e}") - return pd.DataFrame() - - -def get_daily_agenda_from_baserow(api_key): - """ - Busca TODOS os dados da agenda da API do Baserow, incluindo a coluna 'Status do Agendamento'. - """ - if not api_key: - st.error("A chave da API do Baserow (BASEROW_KEY) não foi configurada nos segredos do ambiente.") - return pd.DataFrame() - - url = "https://api.baserow.io/api/database/rows/table/681080/?user_field_names=true&size=200" - headers = {"Authorization": f"Token {api_key}"} - all_rows = [] - - try: - while url: - response = requests.get(url, headers=headers) - response.raise_for_status() - data = response.json() - all_rows.extend(data.get('results', [])) - url = data.get('next') - - if not all_rows: - st.warning("Nenhum dado de agendamento foi encontrado na tabela do Baserow.") - return pd.DataFrame() - - df = pd.DataFrame(all_rows) - - # --- [MODIFICADO] Adicionada a coluna 'Status do Agendamento' --- - expected_baserow_columns = [ - 'Data do Agendamento', 'Horário', 'Nome do Paciente', 'Convênio', - 'Evento', 'Profissional', 'Especialidade', 'Status do Agendamento' - ] - - for col in expected_baserow_columns: - if col not in df.columns: - st.error(f"Erro Crítico: A coluna '{col}' não foi encontrada na sua tabela do Baserow. Verifique se o nome da coluna está exatamente correto.") - return pd.DataFrame() - - # --- [MODIFICADO] Mapeamento da nova coluna para 'status' --- - column_mapping = { - 'Data do Agendamento': 'scheduled_date', - 'Horário': 'time', - 'Nome do Paciente': 'name', - 'Convênio': 'insurance', - 'Evento': 'event', - 'Profissional': 'professional', - 'Especialidade': 'category', - 'Status do Agendamento': 'status' # Mapeia a coluna do Baserow para a coluna 'status' do DataFrame - } - df.rename(columns=column_mapping, inplace=True) - - # Remove a linha que definia um status padrão, pois agora ele vem do Baserow - # df['status'] = 'Pendente' - - df['scheduled_date'] = pd.to_datetime(df['scheduled_date'], dayfirst=True, errors='coerce') - df.dropna(subset=['scheduled_date'], inplace=True) - - return df - - except requests.exceptions.RequestException as e: - st.error(f"Erro ao conectar com a API do Baserow: {e}") - return pd.DataFrame() - except Exception as e: - st.error(f"Ocorreu um erro inesperado ao processar os dados do Baserow: {e}") - return pd.DataFrame() - -# --- Função para limpar todos os filtros --- -def clear_filters_callback(): - """Função de callback para limpar todos os filtros.""" - st.session_state.view_mode = "Todo o período" - st.session_state.selected_date = date.today() # Modificado para usar a data atual - st.session_state.prof_filter = "Todos" - st.session_state.cat_filter = "Todos" - st.session_state.status_filter = "Todos" - st.session_state.patient_filter = "Todos" # Adicionado para limpar o filtro de paciente - st.session_state.insurance_filter = "Todos" # Adicionado para limpar o filtro de convênio - st.session_state.event_filter = "Todos" # Adicionado para limpar o filtro de evento - st.session_state.search_term = "" - -# --- PÁGINAS --- -# --- PÁGINA DA AGENDA DO DIA --- -def daily_schedule_page(): - """Exibe a agenda do dia com filtros e funcionalidade de upload para o Supabase, utilizando o status real do Baserow.""" - - # Inicialização de session_state - if 'extraction_status' not in st.session_state: - st.session_state.extraction_status = {} - if 'files_df' not in st.session_state: - st.session_state.files_df = None - if 'last_upload_time' not in st.session_state: - st.session_state.last_upload_time = None - - load_dotenv() - try: - supabase_url = os.getenv("SUPABASE_URL") - supabase_key = os.getenv("SUPABASE_KEY") - BASEROW_KEY = os.getenv("BASEROW_KEY") - if not supabase_url or not supabase_key: - st.error("As credenciais do Supabase não foram encontradas.") - st.stop() - supabase: Client = create_client(supabase_url, supabase_key) - except Exception as e: - st.error(f"Ocorreu um erro ao inicializar a conexão com o Supabase: {e}") - st.stop() - - # Carrega metadados apenas uma vez - if st.session_state.files_df is None: - with st.spinner("Carregando metadados dos arquivos..."): - st.session_state.files_df = fetch_metadata_from_db(supabase) - - # [MODIFICADO] Adicionado botão de atualização ao lado do título do filtro - header_cols = st.columns([3, 1]) - with header_cols[0]: - st.subheader("Filtros") - with header_cols[1]: - if st.button("🔄 Atualizar Página", use_container_width=True, help="Recarrega os dados da agenda do Baserow"): - st.rerun() - - # Inicialização dos filtros (apenas uma vez) - if "view_mode" not in st.session_state: - # [MODIFICADO] Alterado o filtro padrão para "Todo o período" - st.session_state.view_mode = "Todo o período" - st.session_state.selected_date = date.today() - st.session_state.prof_filter = "Todos" - st.session_state.cat_filter = "Todos" - st.session_state.status_filter = "Todos" - st.session_state.search_term = "" - st.session_state.patient_filter = "Todos" - st.session_state.insurance_filter = "Todos" - st.session_state.event_filter = "Todos" - - df = get_daily_agenda_from_baserow(BASEROW_KEY) - - if df.empty: - st.warning("Não foi possível carregar os dados da agenda para aplicar os filtros.") - else: - df['scheduled_date'] = df['scheduled_date'].dt.date - - with st.container(border=False): - col1, col2 = st.columns([3, 2]) - # O index=4 corresponde a "Todo o período" na lista de opções - col1.radio("Visualização:", ["Dia", "Semana", "Mês", "Trimestre", "Todo o período"], horizontal=True, key="view_mode", index=4) - col2.date_input("Data:", key="selected_date", disabled=(st.session_state.view_mode == "Todo o período")) - - f_col1, f_col2, f_col3, f_col4, f_col5, f_col6 = st.columns(6) - f_col1.selectbox("Profissionais", ["Todos"] + sorted(df['professional'].unique().tolist()), key="prof_filter") - f_col2.selectbox("Categorias", ["Todos"] + sorted(df['category'].unique().tolist()), key="cat_filter") - - status_options = ["Todos"] + sorted(df['status'].unique().tolist()) - f_col3.selectbox("Status", status_options, key="status_filter") - - f_col4.selectbox("Pacientes", ["Todos"] + sorted(df['name'].unique().tolist()), key="patient_filter") - f_col5.selectbox("Convênios", ["Todos"] + sorted(df['insurance'].unique().tolist()), key="insurance_filter") - f_col6.selectbox("Eventos", ["Todos"] + sorted(df['event'].unique().tolist()), key="event_filter") - - search_col, btn_col = st.columns([4, 1.08]) - search_col.text_input("Buscar paciente...", placeholder="Buscar paciente...", label_visibility="collapsed", key="search_term") - btn_col.button("Limpar Filtros", on_click=clear_filters_callback) - - # Remove possíveis duplicatas ANTES de filtrar - df = df.drop_duplicates(subset=['scheduled_date', 'time', 'name'], keep='first') - - # Aplicação dos filtros - start_date, end_date = get_date_range(st.session_state.selected_date, st.session_state.view_mode) - filtered_df = df - - if st.session_state.view_mode != "Todo o período": - filtered_df = df[(df['scheduled_date'] >= start_date) & (df['scheduled_date'] <= end_date)] - if st.session_state.prof_filter != "Todos": - filtered_df = filtered_df[filtered_df['professional'] == st.session_state.prof_filter] - if st.session_state.cat_filter != "Todos": - filtered_df = filtered_df[filtered_df['category'] == st.session_state.cat_filter] - if st.session_state.status_filter != "Todos": - filtered_df = filtered_df[filtered_df['status'] == st.session_state.status_filter] - if st.session_state.patient_filter != "Todos": - filtered_df = filtered_df[filtered_df['name'] == st.session_state.patient_filter] - if st.session_state.insurance_filter != "Todos": - filtered_df = filtered_df[filtered_df['insurance'] == st.session_state.insurance_filter] - if st.session_state.event_filter != "Todos": - filtered_df = filtered_df[filtered_df['event'] == st.session_state.event_filter] - if st.session_state.search_term: - filtered_df = filtered_df[filtered_df['name'].str.contains(st.session_state.search_term, case=False, na=False)] - - # Remove linhas com valores nulos críticos - filtered_df = filtered_df.dropna(subset=['scheduled_date', 'name']) - - # Cabeçalho - if st.session_state.view_mode == "Dia": - st.header(f"Agendamentos para {st.session_state.selected_date.strftime('%d/%m/%Y')}") - elif st.session_state.view_mode == "Todo o período": - st.header("Exibindo todos os agendamentos") - else: - st.header(f"Agendamentos de {start_date.strftime('%d/%m/%Y')} até {end_date.strftime('%d/%m/%Y')}") - - # Estatísticas - total_agendamentos = len(filtered_df) - confirmados = len(filtered_df[filtered_df['status'] == 'Confirmado']) - pendentes = len(filtered_df[filtered_df['status'] == 'Pendente']) - reagendados = len(filtered_df[filtered_df['status'] == 'Reagendado']) - cancelados = len(filtered_df[filtered_df['status'] == 'Cancelado']) - - st.markdown(f""" -
- {total_agendamentos} agendamentos - {confirmados} confirmados - {pendentes} pendentes - {reagendados} reagendados - {cancelados} cancelados -
- """, unsafe_allow_html=True) - - # Exibição da tabela - display_df = filtered_df.copy() - display_df['scheduled_date'] = pd.to_datetime(display_df['scheduled_date']).dt.strftime('%d/%m/%Y') - display_columns_order = ['scheduled_date', 'time', 'name', 'insurance', 'event', 'status'] - display_df = display_df[display_columns_order] - display_df.rename(columns={ - 'scheduled_date': 'Data Agendada', - 'time': 'Horário', - 'name': 'Paciente', - 'insurance': 'Convênio', - 'event': 'Evento', - 'status': 'Status' - }, inplace=True) - - st.markdown('
', unsafe_allow_html=True) - st.dataframe(display_df, hide_index=True) - st.markdown('
', unsafe_allow_html=True) - - # --- UPLOAD DE ARQUIVOS (SEM CONTADOR) --- - st.write("---") - - uploaded_files = st.file_uploader( - "Arraste e solte os arquivos aqui", - type="pdf", - accept_multiple_files=True, - key="file_uploader" - ) - - if uploaded_files: - upload_button = st.button("📤 Fazer Upload dos Arquivos", type="primary", use_container_width=True) - - if upload_button: - success_count = 0 - error_count = 0 - duplicate_count = 0 - - progress_bar = st.progress(0) - status_text = st.empty() - - for idx, uploaded_file in enumerate(uploaded_files): - file_name_with_date = f"{date.today().strftime('%Y-%m-%d')}_{uploaded_file.name}" - file_path_in_bucket = f"pdfs-agendamento/{file_name_with_date}" - - status_text.text(f"Processando {idx + 1}/{len(uploaded_files)}: {uploaded_file.name}") - - try: - # Upload para o Storage - supabase.storage.from_("cofrat").upload( - path=file_path_in_bucket, - file=uploaded_file.getvalue(), - file_options={"content-type": "application/pdf"} - ) - - # Registro no banco de dados - supabase.table('pdf_metadata').insert({ - 'data_upload': date.today().isoformat(), - 'nome_arquivo': file_name_with_date, - 'info_extraida': 'Não' - }).execute() - - success_count += 1 - - except Exception as e: - if "Duplicate" in str(e) or "already exists" in str(e).lower(): - duplicate_count += 1 - else: - error_count += 1 - st.error(f'❌ Erro ao processar "{uploaded_file.name}": {e}') - - progress_bar.progress((idx + 1) / len(uploaded_files)) - - # Limpa a barra de progresso - progress_bar.empty() - status_text.empty() - - # Mensagem de resultado - if success_count > 0: - st.success(f'✅ {success_count} arquivo(s) enviado(s) com sucesso!') - if duplicate_count > 0: - st.warning(f'⚠️ {duplicate_count} arquivo(s) já existia(m) no sistema.') - if error_count > 0: - st.error(f'❌ {error_count} arquivo(s) com erro no upload.') - - # Atualiza a lista de arquivos apenas se houve sucesso - if success_count > 0 or duplicate_count > 0: - st.session_state.files_df = fetch_metadata_from_db(supabase) - st.session_state.last_upload_time = time.time() - st.rerun() - - # --- LISTA DE ARQUIVOS --- - st.write("---") - - col_header1, col_header2 = st.columns([3, 1]) - with col_header1: - st.subheader("Status da Extração de Arquivos") - with col_header2: - if st.button("🔄 Atualizar Lista", use_container_width=True): - st.session_state.files_df = fetch_metadata_from_db(supabase) - # Limpa status de extração para arquivos já extraídos - for file_id in list(st.session_state.extraction_status.keys()): - if not st.session_state.files_df[st.session_state.files_df['id'] == file_id].empty: - if st.session_state.files_df[st.session_state.files_df['id'] == file_id]['extracted'].iloc[0] == 'Sim': - del st.session_state.extraction_status[file_id] - st.rerun() - - files_df = st.session_state.files_df - if files_df.empty: - st.info("Nenhum metadado de arquivo encontrado no banco de dados.") - else: - with st.container(border=True): - # Cabeçalho - header_cols = st.columns([2, 4, 2, 3]) - header_cols[0].markdown("**Data de upload**") - header_cols[1].markdown("**Nome do arquivo**") - header_cols[2].markdown("**Info Extraída**") - header_cols[3].markdown("
Ações
", unsafe_allow_html=True) - - # Linhas - for index, row in files_df.iterrows(): - st.divider() - col1, col2, col3, col4 = st.columns([2, 4, 2, 3]) - - col1.write(datetime.strptime(row['upload_date'], '%Y-%m-%d').strftime('%d/%m/%Y')) - col2.write(row['file_name']) - - current_extraction_status = st.session_state.extraction_status.get(row['id'], None) - - if current_extraction_status == 'pending': - col3.markdown("Extraindo... ", unsafe_allow_html=True) - elif row['extracted'] == 'Sim': - col3.markdown("Sim", unsafe_allow_html=True) - else: - col3.markdown("Não", unsafe_allow_html=True) - - with col4: - btn_cols = st.columns(2) - is_disabled = current_extraction_status == 'pending' - - if row['extracted'] != 'Sim' and current_extraction_status != 'pending': - if btn_cols[0].button("Extrair", key=f"extract_{row['id']}", use_container_width=True, disabled=is_disabled): - WEBHOOK_URL = "https://webhook.erudieto.com.br/webhook/cofrat-pdf" - payload = {'fileName': row['file_name'], 'fileId': row['id']} - - st.session_state.extraction_status[row['id']] = 'pending' - - try: - response = requests.post(WEBHOOK_URL, json=payload, timeout=5) - - if response.status_code in [200, 202]: - st.success(f"✅ Extração iniciada para '{row['file_name']}'") - st.rerun() - else: - st.error(f"❌ Falha ao iniciar extração (código {response.status_code})") - st.session_state.extraction_status[row['id']] = 'failed' - st.rerun() - except requests.exceptions.RequestException as e: - st.error(f"❌ Erro de conexão: {e}") - st.session_state.extraction_status[row['id']] = 'failed' - st.rerun() - elif current_extraction_status == 'pending': - btn_cols[0].markdown('
Extraindo...
', unsafe_allow_html=True) - else: - btn_cols[0].button("Extraído", key=f"extracted_disabled_{row['id']}", use_container_width=True, disabled=True) - - if btn_cols[1].button("🗑️", key=f"delete_{row['id']}", help=f"Deletar {row['file_name']}", use_container_width=True, disabled=is_disabled): - st.session_state.file_to_delete = row - st.rerun() - - # --- MODAL DE CONFIRMAÇÃO DE DELEÇÃO --- - if 'file_to_delete' in st.session_state and st.session_state.file_to_delete is not None: - file_info = st.session_state.file_to_delete - - @st.dialog("Confirmar Deleção") - def confirm_delete(): - st.warning(f"Você tem certeza que deseja deletar permanentemente o arquivo **{file_info['file_name']}**?") - st.write("Esta ação removerá o arquivo do armazenamento e seu registro do banco de dados. Não pode ser desfeita.") - - col1, col2 = st.columns(2) - - if col1.button("✅ Sim, deletar", type="primary", use_container_width=True): - try: - supabase.storage.from_("cofrat").remove([f"pdfs-agendamento/{file_info['file_name']}"]) - supabase.table('pdf_metadata').delete().eq('id', file_info['id']).execute() - - st.success("✅ Arquivo deletado com sucesso!") - st.session_state.file_to_delete = None - st.session_state.files_df = fetch_metadata_from_db(supabase) - if file_info['id'] in st.session_state.extraction_status: - del st.session_state.extraction_status[file_info['id']] - time.sleep(0.5) - st.rerun() - - except Exception as e: - st.error(f"❌ Erro ao deletar: {e}") - st.session_state.file_to_delete = None - st.rerun() - - if col2.button("❌ Cancelar", use_container_width=True): - st.session_state.file_to_delete = None - st.rerun() - - confirm_delete() - -# --- [AJUSTADA] PÁGINA DE GESTÃO --- -def management_page(): - """ - Página de gestão com abas para Médicos, Modalidades e Agendas, usando st.tabs. - """ - st.write('##### Organize cadastros, especialidades e agendas com eficiência') - st.write('Esta página permite o cadastro e edição dos médicos, com controle de status (Ativo/Inativo) conforme disponibilidade de agenda. Também é possível gerenciar as modalidades de atendimento — como Fisioterapia, Ortopedia, RPG e outras — e configurar os horários de disponibilidade de cada profissional. Tudo em um só lugar, para garantir uma operação fluida e organizada.') - st.write('') - - # Substituído sac.segmented por st.tabs para uma solução nativa do Streamlit - tab1, tab2, tab3 = st.tabs(["🧑‍⚕️ Médicos", "🏷️ Modalidades", "🗓️ Agendas"]) - - with tab1: - header_cols = st.columns([3, 1]) - with header_cols[0]: - st.subheader("Profissionais de Saúde") - with header_cols[1]: - st.button("✚ Adicionar Profissional", type="primary", use_container_width=True) - - professionals = [ - {"name": "Dra. Liliane Santos", "specialty": "Fisioterapia", "schedule": "Segunda a Sexta", "capacity": 10}, - {"name": "Dr. Roberto Silva", "specialty": "Ortopedia", "schedule": "Segunda a Sexta", "capacity": 8}, - {"name": "Dra. Carla Mendes", "specialty": "Fisioterapia Infantil", "schedule": "Segunda a Sexta", "capacity": 6}, - ] - - cols = st.columns(3) - for i, prof in enumerate(professionals): - with cols[i % 3]: - with st.container(border=True): - st.markdown(f"##### 🩺 {prof['name']}") - st.write(prof['specialty']) - st.write(f"🕒 {prof['schedule']}") - st.write(f"Capacidade: {prof['capacity']} pacientes/horário") - - btn_cols = st.columns(2) - btn_cols[0].button("Editar", key=f"edit_{i}", use_container_width=True) - btn_cols[1].button("Desativar", key=f"del_{i}", use_container_width=True) - - with tab2: - header_cols = st.columns([3, 1]) - with header_cols[0]: - st.subheader("Modalidades de Atendimento") - with header_cols[1]: - st.button("✚ Adicionar Modalidade", type="primary", use_container_width=True) - - modalities = [ - {"name": "Fisioterapia", "desc": "Tratamento de reabilitação física"}, - {"name": "Ortopedia", "desc": "Consultas e tratamentos ortopédicos"}, - {"name": "Fisioterapia Infantil", "desc": "Fisioterapia especializada para crianças"}, - ] - - cols = st.columns(3) - for i, mod in enumerate(modalities): - with cols[i % 3]: - with st.container(border=True, height=180): - st.markdown(f"##### {mod['name']}") - st.write(mod['desc']) - st.write("") - - btn_cols = st.columns(2) - btn_cols[0].button("Editar", key=f"edit_mod_{i}", use_container_width=True) - btn_cols[1].button("🗑️", key=f"del_mod_{i}", use_container_width=True) - - with tab3: - st.subheader("Configuração de Agendas") - - agendas = [ - {"name": "Dra. Liliane Santos", "specialty": "Fisioterapia", "schedule": [ - ("Segunda-feira", "08:00 - 17:00", 10), ("Terça-feira", "08:00 - 17:00", 10), - ("Quarta-feira", "08:00 - 17:00", 10), ("Quinta-feira", "08:00 - 17:00", 10), - ("Sexta-feira", "08:00 - 17:00", 10) - ]}, - {"name": "Dr. Roberto Silva", "specialty": "Ortopedia", "schedule": [ - ("Segunda-feira", "09:00 - 16:00", 8), ("Quarta-feira", "09:00 - 16:00", 8), - ("Sexta-feira", "09:00 - 16:00", 8) - ]}, - {"name": "Dra. Carla Mendes", "specialty": "Fisioterapia Infantil", "schedule": [ - ("Terça-feira", "08:00 - 12:00", 6), ("Quinta-feira", "08:00 - 12:00", 6) - ]}, - ] - - for i, agenda in enumerate(agendas): - with st.container(border=True): - header_cols = st.columns([3, 1]) - with header_cols[0]: - st.markdown(f"##### 🧑‍⚕️ {agenda['name']}") - st.caption(agenda['specialty']) - with header_cols[1]: - st.button("Editar", key=f"edit_agenda_{i}", use_container_width=True, type="primary") - - st.write("") - - for day, time, cap in agenda['schedule']: - day_cols = st.columns([2, 2, 1]) - day_cols[0].text(day) - day_cols[1].text(time) - day_cols[2].button(f"Cap: {cap}", key=f"cap_{i}_{day}", disabled=True, use_container_width=True) - st.write("") - -# --- [NOVA PÁGINA OTIMIZADA PARA UX - VERSÃO CORRIGIDA E NATIVA] --- -def approval_workflow_page(): - """ - Exibe uma interface de fluxo de trabalho otimizada para aprovações, - construída inteiramente com componentes nativos do Streamlit para máxima - estabilidade e com keys únicas para evitar erros de ID. - """ - st.markdown('', unsafe_allow_html=True) - - # --- Bloco de inicialização do estado da sessão --- - if 'carteirinha_appointments' not in st.session_state: - all_apps = get_sample_appointments() - st.session_state.carteirinha_appointments = [app for app in all_apps if app.get('type') == 'Carteirinha'] - st.session_state.agendamento_appointments = [app for app in all_apps if app.get('type') == 'Agendamento'] - - if 'active_carteirinha_idx' not in st.session_state: - st.session_state.active_carteirinha_idx = 0 - if 'active_agendamento_idx' not in st.session_state: - st.session_state.active_agendamento_idx = 0 - - if 'reschedule_mode' not in st.session_state: - st.session_state.reschedule_mode = False - - # --- Títulos e Abas Principais --- - st.subheader("Fluxo de Aprovação") - st.caption("Selecione um item pendente na lista à esquerda para ver os detalhes e tomar uma ação à direita.") - - carteirinha_count = len(st.session_state.carteirinha_appointments) - agendamento_count = len(st.session_state.agendamento_appointments) - - tab1, tab2 = st.tabs([ - f"📥 Carteirinhas Pendentes ({carteirinha_count})", - f"🗓️ Agendamentos Pendentes ({agendamento_count})" - ]) - - # --- Aba de Carteirinhas --- - with tab1: - if not st.session_state.carteirinha_appointments: - display_carteirinha_completion_message() - else: - if st.session_state.active_carteirinha_idx >= len(st.session_state.carteirinha_appointments): - st.session_state.active_carteirinha_idx = 0 - - col_list, col_detail = st.columns([1, 2], gap="large") - - # Coluna da Lista de Itens - with col_list: - st.markdown("##### Na Fila") - for idx, app in enumerate(st.session_state.carteirinha_appointments): - with st.container(border=True): - is_selected = (idx == st.session_state.active_carteirinha_idx) - st.write(f"**{app['name']}**" if is_selected else app['name']) - st.caption(app['specialty']) - if st.button("Ver Detalhes", key=f"view_cart_{idx}", use_container_width=True): - st.session_state.active_carteirinha_idx = idx - st.rerun() - - # Coluna de Detalhes e Ações - with col_detail: - active_idx = st.session_state.active_carteirinha_idx - current_appointment = st.session_state.carteirinha_appointments[active_idx] - - st.markdown("##### Detalhes para Aprovação") - - # Card de detalhes com componentes nativos - with st.container(border=True): - c1, c2 = st.columns([1, 4]) - with c1: - st.subheader(current_appointment['initials']) - with c2: - st.subheader(current_appointment['name']) - st.caption(f"📞 {current_appointment['phone']}") - - st.divider() - - dc1, dc2 = st.columns(2) - with dc1: - st.caption("Profissional") - st.write(f"🧑‍⚕️ {current_appointment['professional']}") - st.caption("Convênio") - st.write(f"🏢 {current_appointment['insurance']}") - with dc2: - st.caption("Carteirinha") - st.write(f"💳 {current_appointment['card_number']}") - st.caption("Modalidade") - st.write(f"🏷️ {current_appointment['specialty']}") - - st.divider() - st.caption("Observações") - st.info(current_appointment['notes']) - - st.write("") - st.markdown("##### Ações") - action_cols = st.columns(2) - if action_cols[0].button("✓ Aprovar Início de Agendamento", key="approve_carteirinha", use_container_width=True, type="primary"): - st.toast(f"Início de agendamento para {current_appointment['name']} aprovado!", icon="✅") - st.session_state.carteirinha_appointments.pop(active_idx) - st.rerun() - - if action_cols[1].button("✕ Cancelar", key="cancel_carteirinha", use_container_width=True): - st.toast(f"Item de {current_appointment['name']} cancelado.", icon="🗑️") - st.session_state.carteirinha_appointments.pop(active_idx) - st.rerun() - - # --- Aba de Agendamentos --- - with tab2: - if not st.session_state.agendamento_appointments: - display_agendamento_completion_message() - else: - if st.session_state.active_agendamento_idx >= len(st.session_state.agendamento_appointments): - st.session_state.active_agendamento_idx = 0 - - col_list, col_detail = st.columns([1, 2], gap="large") - - # Coluna da Lista de Itens - with col_list: - st.markdown("##### Na Fila") - for idx, app in enumerate(st.session_state.agendamento_appointments): - with st.container(border=True): - is_selected = (idx == st.session_state.active_agendamento_idx) - st.write(f"**{app['name']}**" if is_selected else app['name']) - st.caption(f"{app['date']} às {app['time']}") - if st.button("Ver Detalhes", key=f"view_agend_{idx}", use_container_width=True): - st.session_state.active_agendamento_idx = idx - st.session_state.reschedule_mode = False - st.rerun() - - # Coluna de Detalhes e Ações - with col_detail: - active_idx = st.session_state.active_agendamento_idx - current_appointment = st.session_state.agendamento_appointments[active_idx] - - st.markdown("##### Detalhes para Aprovação") - # Card de detalhes com componentes nativos - with st.container(border=True): - c1, c2 = st.columns([1, 4]) - with c1: - st.subheader(current_appointment['initials']) - with c2: - st.subheader(current_appointment['name']) - st.caption(f"📞 {current_appointment['phone']}") - - st.divider() - - dc1, dc2, dc3 = st.columns(3) - with dc1: - st.caption("Data") - st.write(f"🗓️ {current_appointment['date']}") - with dc2: - st.caption("Horário") - st.write(f"🕒 {current_appointment['time']}") - with dc3: - st.caption("Modalidade") - st.write(f"🏷️ {current_appointment['specialty']}") - - st.caption("Profissional") - st.write(f"🧑‍⚕️ {current_appointment['professional']}") - - st.divider() - st.caption("Observações") - st.info(current_appointment['notes']) - - st.write("") - st.markdown("##### Ações") - if st.session_state.reschedule_mode: - with st.container(border=True): - st.markdown(f"**Reagendando para:** {current_appointment['name']}") - st.date_input("Nova Data", key="new_date") - st.time_input("Novo Horário", key="new_time") - - reschedule_cols = st.columns(2) - if reschedule_cols[0].button("Confirmar Reagendamento", key="confirm_reschedule", use_container_width=True, type="primary"): - st.toast("Sugestão de reagendamento enviada!", icon="👍") - st.session_state.agendamento_appointments.pop(active_idx) - st.session_state.reschedule_mode = False - st.rerun() - if reschedule_cols[1].button("Cancelar Ação", key="cancel_reschedule", use_container_width=True): - st.session_state.reschedule_mode = False - st.rerun() - else: - action_cols = st.columns(3) - if action_cols[0].button("✓ Aprovar", key="approve_agendamento", use_container_width=True, type="primary"): - st.toast(f"Agendamento de {current_appointment['name']} aprovado!", icon="✅") - st.session_state.agendamento_appointments.pop(active_idx) - st.rerun() - if action_cols[1].button("↻ Reagendar", key="reschedule_agendamento", use_container_width=True): - st.session_state.reschedule_mode = True - st.rerun() - if action_cols[2].button("✕ Cancelar", key="cancel_agendamento", use_container_width=True): - st.toast(f"Agendamento de {current_appointment['name']} cancelado.", icon="🗑️") - st.session_state.agendamento_appointments.pop(active_idx) - st.rerun() - - -# --- [AJUSTADA] PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- +# --- PÁGINA DE CONFIRMAÇÃO DE AGENDAMENTOS --- def confirmation_page(): """ - Exibe a Central de Disparos para ler um arquivo Excel limpo (.xlsx), - aplicar transformações e enviar os dados via POST. Inclui a funcionalidade de "Selecionar Todos". + Exibe a Central de Disparos para ler o arquivo Excel 'agenda_do_dia', + validar, preparar os dados e enviá-los via POST. + Nesta versão, a coluna 'data' é tratada como texto para evitar erros de conversão. """ # --- Importações e Configurações --- import pandas as pd - import re - from datetime import date, datetime, time import requests - import io + import streamlit as st - # --- FUNÇÃO HELPER PARA PROCESSAR O DATAFRAME LIMPO --- + # --- FUNÇÃO HELPER AJUSTADA PARA O ARQUIVO EXCEL DA IMAGEM --- def process_clean_excel(df): """ - Aplica as transformações necessárias em um DataFrame já limpo. - Normaliza os nomes das colunas e cria a coluna 'horario_ajustado'. + Valida e prepara o DataFrame. Normaliza os nomes das colunas e os alinha + com os templates de mensagem. """ - df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_') + # Garante que a coluna 'data' seja lida como texto desde o início + if 'Data' in df.columns: + df['Data'] = df['Data'].astype(str) + + df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_').str.replace('ú', 'u').str.replace('é', 'e').str.replace('ç', 'c').str.replace('ã', 'a') - required_columns = ['horário', 'número_de_telefone_ajustado'] + required_columns = ['data', 'horario', 'medico', 'paciente', 'numero_de_telefone_ajustado'] missing_cols = [col for col in required_columns if col not in df.columns] if missing_cols: - raise ValueError(f"As colunas obrigatórias a seguir não foram encontradas no arquivo: {', '.join(missing_cols)}. Verifique o cabeçalho do seu arquivo Excel.") + raise ValueError(f"As colunas obrigatórias a seguir não foram encontradas no arquivo: {', '.join(missing_cols)}. Verifique o arquivo Excel.") - df['horário'] = df['horário'].astype(str) - - def adjust_time(time_str): - try: - if isinstance(time_str, time): - time_str = time_str.strftime('%H:%M:%S') - - parts = time_str.split(':') - hour = int(parts[0]) - minute = int(parts[1]) - adjusted_minute = (minute // 10) * 10 - return f"{hour:02d}:{adjusted_minute:02d}" - except (ValueError, IndexError): - return time_str - - df['horario_ajustado'] = df['horário'].apply(adjust_time) + df.rename(columns={ + 'paciente': 'nome_do_paciente', + 'medico': 'nome_do_medico', + 'horario': 'horario_ajustado', + 'numero_de_telefone_ajustado': 'telefone_ajustado' + }, inplace=True) - df.rename(columns={'número_de_telefone_ajustado': 'telefone_ajustado'}, inplace=True) - return df # --- INICIALIZAÇÃO DO SESSION STATE --- - if 'processed_df' not in st.session_state: - st.session_state.processed_df = None if 'edited_df' not in st.session_state: st.session_state.edited_df = None if 'uploaded_file_name' not in st.session_state: st.session_state.uploaded_file_name = None # --- LAYOUT DO CABEÇALHO --- - # [AJUSTE] Botões do cabeçalho restaurados - st.markdown(""" - - """, unsafe_allow_html=True) - - header_cols = st.columns([3, 1.5, 1.5]) - with header_cols[0]: - st.title("Central de Disparos") - st.caption("Clínica de Ortopedia e Terapia") - with header_cols[1]: - st.button("Ver Agendamentos", use_container_width=True) - with header_cols[2]: - st.button("✚ Novo Disparo", use_container_width=True, type="primary") - + st.title("Central de Disparos") + st.caption("Clínica de Ortopedia e Terapia") st.divider() # --- SEÇÃO DE UPLOAD E PROCESSAMENTO --- st.subheader("1. Carregar Arquivo de Agendamentos (.xlsx)") uploaded_file = st.file_uploader( - "Selecione o arquivo Excel já tratado com os agendamentos", + "Selecione o arquivo Excel gerado (ex: agenda_do_dia_...)", type=["xlsx"], key="excel_uploader" ) if uploaded_file is not None: if uploaded_file.name != st.session_state.uploaded_file_name: - st.session_state.processed_df = None st.session_state.edited_df = None st.session_state.uploaded_file_name = uploaded_file.name - if st.session_state.processed_df is None: + if st.session_state.edited_df is None: if st.button("⚙️ Processar Arquivo", use_container_width=True, type="primary"): with st.spinner("Lendo e processando o arquivo..."): try: - df = pd.read_excel(uploaded_file) - st.session_state.processed_df = process_clean_excel(df) + # Lê o Excel, garantindo que a coluna de data seja tratada como texto + df = pd.read_excel(uploaded_file, dtype={'Data': str}) - editable_df = st.session_state.processed_df.copy() - editable_df.insert(0, 'Selecionar', False) - st.session_state.edited_df = editable_df + processed_df = process_clean_excel(df) + + processed_df.insert(0, 'Selecionar', False) + st.session_state.edited_df = processed_df st.success("Arquivo processado com sucesso!") st.rerun() @@ -1229,51 +181,23 @@ def adjust_time(time_str): st.error(f"Ocorreu um erro ao processar o arquivo: {e}") # --- SEÇÃO DE VISUALIZAÇÃO E FILTROS --- - if st.session_state.processed_df is not None: - df_processed = st.session_state.processed_df - - df_processed['data'] = pd.to_datetime(df_processed['data'], errors='coerce') - df_processed.dropna(subset=['data'], inplace=True) - - start_date = df_processed['data'].min() - end_date = df_processed['data'].max() - - start_date_str = start_date.strftime('%d/%m/%Y') if pd.notna(start_date) else "N/A" - end_date_str = end_date.strftime('%d/%m/%Y') if pd.notna(end_date) else "N/A" - - st.header(f"Agendamentos de {start_date_str} até {end_date_str}") - - with st.expander("🔍 Filtros de Agendamento", expanded=False): - st.info("Filtros podem ser adicionados aqui para refinar a visualização.") + if st.session_state.edited_df is not None: + # REMOVIDO: Bloco que calculava data de início e fim. + st.header("Agendamentos Carregados") + st.caption("Revise os dados e selecione os pacientes para o envio.") st.subheader("2. Selecione os Pacientes para Envio") - # --- [NOVO] LÓGICA PARA "SELECIONAR TODOS" --- def toggle_all(): - # Pega o novo valor do checkbox "Selecionar Todos" new_value = st.session_state.select_all_checkbox - # Cria uma cópia do dataframe em edição para evitar problemas de referência df_copy = st.session_state.edited_df.copy() - # Define toda a coluna "Selecionar" para o novo valor df_copy['Selecionar'] = new_value - # Atualiza o dataframe no session_state st.session_state.edited_df = df_copy - # Verifica se todos os itens já estão selecionados para definir o estado inicial do checkbox - all_selected = False - if st.session_state.edited_df is not None and not st.session_state.edited_df.empty: - all_selected = st.session_state.edited_df['Selecionar'].all() + all_selected = st.session_state.edited_df['Selecionar'].all() if not st.session_state.edited_df.empty else False - # Cria o checkbox na interface - st.checkbox( - "Selecionar Todos", - value=all_selected, - on_change=toggle_all, - key="select_all_checkbox" - ) + st.checkbox("Selecionar Todos", value=all_selected, on_change=toggle_all, key="select_all_checkbox") - # --- FIM DA LÓGICA "SELECIONAR TODOS" --- - edited_df_output = st.data_editor( st.session_state.edited_df, use_container_width=True, @@ -1287,8 +211,8 @@ def toggle_all(): st.subheader("3. Escolha o Template e Envie") templates = { - "Confirmacao_Agendamento": "Olá, {nome_do_paciente}! Sua consulta com Dr(a). {nome_do_médico} está confirmada para o dia {data} às {horario_ajustado}. Até breve!", - "Lembrete_48h": "Lembrete: sua consulta com Dr(a). {nome_do_médico} é depois de amanhã, dia {data} às {horario_ajustado}. Contamos com sua presença!", + "Confirmacao_Agendamento": "Olá, {nome_do_paciente}! Sua consulta com Dr(a). {nome_do_medico} está confirmada para o dia {data} às {horario_ajustado}. Até breve!", + "Lembrete_48h": "Lembrete: sua consulta com Dr(a). {nome_do_medico} é depois de amanhã, dia {data} às {horario_ajustado}. Contamos com sua presença!", } selected_template_name = st.selectbox("Selecione o template de mensagem:", options=list(templates.keys())) @@ -1298,16 +222,18 @@ def toggle_all(): btn_cols = st.columns(2) with btn_cols[0]: - btn_cols[0].button("Visualizar Preview", use_container_width=True) + if st.button("Visualizar Preview", use_container_width=True): + st.info("Funcionalidade de preview a ser implementada.") with btn_cols[1]: selected_count = int(st.session_state.edited_df['Selecionar'].sum()) if st.button(f"✉️ Enviar Mensagens ({selected_count})", use_container_width=True, type="primary"): if selected_count > 0: - selected_rows_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']] + selected_rows_df = st.session_state.edited_df[st.session_state.edited_df['Selecionar']].copy() - selected_rows_df['data'] = pd.to_datetime(selected_rows_df['data']).dt.strftime('%d/%m/%Y') + # REMOVIDO: Qualquer conversão de data. A coluna já é texto. + selected_rows_df = selected_rows_df.fillna('') contacts_payload = selected_rows_df.to_dict(orient='records') final_payload = { @@ -1329,40 +255,7 @@ def toggle_all(): else: st.warning("Nenhum paciente selecionado para o envio.") - - -# --- PÁGINA DE PACIENTES --- -def patients_page(): - st.write('##### Gerencie os cadastros de pacientes com praticidade') - st.write('Esta página permite o cadastro e edição dos dados dos pacientes, garantindo que todas as informações estejam organizadas e acessíveis para os atendimentos.') - st.write('') - - - header_cols = st.columns([3, 1]) - with header_cols[0]: - st.subheader("Cadastro de Pacientes") - with header_cols[1]: - st.button("✚ Novo Paciente", type="primary", width='stretch') - - filter_cols = st.columns([3, 1]) - filter_cols[0].text_input("Buscar por nome, telefone ou email...", placeholder="🔍 Buscar por nome, telefone ou email...", label_visibility="collapsed") - filter_cols[1].button("Filtros", width='stretch') - - # Dados de exemplo para a tabela de pacientes - data = { - 'PACIENTE': ['Maria Silva Santos', 'João Carlos Oliveira', 'Ana Paula Costa', 'Pedro Lima Santos'], - 'CONTATO': ['maria.silva@email.com', 'joao.carlos@email.com', 'ana.paula@email.com', 'pedro.lima@email.com'], - 'CONVÊNIO': ['Unimed', 'Bradesco Saúde', 'SulAmérica', 'Amil'], - 'ÚLTIMO ATENDIMENTO': ['09/01/2024', '11/01/2024', '13/01/2024', '14/12/2023'], - 'TOTAL DE CONSULTAS': [15, 8, 3, 12], - 'STATUS': ['Ativo', 'Ativo', 'Ativo', 'Inativo'] - } - df_patients = pd.DataFrame(data) - - st.dataframe(df_patients, width='stretch', hide_index=True) - st.caption("Ações como editar e excluir podem ser adicionadas ao selecionar uma linha ou através de um menu de contexto em futuras implementações.") - - +# --- PÁGINA DE AUTOMAÇÕES --- def automations_page(): """ Exibe a página de Automações, permitindo acionar fluxos de trabalho externos. @@ -1435,96 +328,33 @@ def automations_page(): except requests.exceptions.RequestException as e: st.error(f"❌ Ocorreu um erro de conexão ao tentar acionar o webhook: {e}") - -# --- LÓGICA PRINCIPAL DO APLICATIVO COM MENU SUPERIOR --- +# --- LÓGICA PRINCIPAL DO APLICATIVO COM MENU LATERAL --- def main_app(logo_path): """ - Renderiza um menu de navegação superior minimalista e controla o roteamento de páginas, - substituindo completamente a barra lateral. + Função principal que renderiza a interface do usuário, + incluindo o menu lateral e a página selecionada. """ - # --- CSS Customizado para o novo estilo de menu --- - st.markdown(""" - - """, unsafe_allow_html=True) - - # --- Inicialização da página ativa (padrão: Confirmação) --- - if 'active_page' not in st.session_state: - st.session_state.active_page = "Confirmação" - - # --- Função para ser chamada no clique do botão para mudar de página --- - def set_page(page_name): - st.session_state.active_page = page_name + # --- Definição do Menu Lateral --- + with st.sidebar: + st.write("\n") + selected = sac.menu( + items=[ + sac.MenuItem('Confirmação', icon='send'), + sac.MenuItem('Automações', icon='lightning-charge'), + sac.MenuItem('Aprovação', icon='card-checklist', tag=sac.Tag('Em breve', color='purple', bordered=False), disabled=True), + sac.MenuItem('Agenda', icon='calendar', tag=sac.Tag('Em breve', color='purple', bordered=False), disabled=True), + sac.MenuItem('Emails', icon='envelope', tag=sac.Tag('Em breve', color='purple', bordered=False), disabled=True), + sac.MenuItem('Ligações', icon='telephone', tag=sac.Tag('Em breve', color='purple', bordered=False), disabled=True), + sac.MenuItem('Uso', icon='pie-chart', tag=sac.Tag('Em breve', color='purple', bordered=False), disabled=True), + ], + color='#08b13c', + open_all=False, + index=0 + ) - # --- Definição do Menu Superior Alinhado à Direita --- - # Usamos uma coluna "spacer" para empurrar os botões para a direita - spacer, col_conf, col_auto = st.columns([10, 2, 2]) # Aumente o primeiro número para mais espaço à esquerda + if selected == 'Confirmação': + confirmation_page() + elif selected == 'Automações': + automations_page() - with col_conf: - st.button( - "Confirmação", - on_click=set_page, - args=("Confirmação",), - use_container_width=True, - # O botão é "primary" se for a página ativa, senão é "secondary" - type="primary" if st.session_state.active_page == "Confirmação" else "secondary" - ) - - - with col_auto: - st.button( - "Automações", - on_click=set_page, - args=("Automações",), - use_container_width=True, - type="primary" if st.session_state.active_page == "Automações" else "secondary" - ) - # --- Mapeamento e Renderização da Página Ativa --- - page_map = { - 'Confirmação': confirmation_page, - 'Automações': automations_page - } - - # Chama a função da página que está atualmente selecionada - page_function = page_map.get(st.session_state.active_page) - if page_function: - page_function() - else: - # Fallback caso algo dê errado, renderiza a página de confirmação - confirmation_page() \ No newline at end of file From 084f74b790c121fff9c8273961d762926eefe834 Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 17 Nov 2025 20:10:01 -0300 Subject: [PATCH 46/60] chore --- main.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index 7061d38..acc8b27 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,17 @@ # main.py import streamlit as st from utils import login_form, main_app +import os # 1. Importe o módulo 'os' + +# --- CAMINHOS DAS IMAGENS CORRIGIDOS --- +# Pega o caminho absoluto do diretório onde o script está rodando +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) + +# Constrói o caminho completo para cada arquivo +LOGO_SYMBOL_PATH = os.path.join(BASE_DIR, "images", "cofrat-logo.png") +LOGO_EXTENDED_PATH = os.path.join(BASE_DIR, "images", "cofrat-logotipo.png") +CSS_PATH = os.path.join(BASE_DIR, "style.css") -# --- CAMINHOS DAS IMAGENS LOCAIS --- -LOGO_SYMBOL_PATH = "./images/cofrat-logo.png" -LOGO_EXTENDED_PATH = "./images/cofrat-logotipo.png" # --- CONFIGURAÇÃO DA PÁGINA --- st.set_page_config( @@ -20,10 +27,11 @@ def load_css(file_name): with open(file_name, encoding="utf-8") as f: st.markdown(f"", unsafe_allow_html=True) -# Carrega o nosso arquivo de estilos -load_css("style.css") +# Carrega o nosso arquivo de estilos usando o caminho absoluto +load_css(CSS_PATH) # --- GATEKEEPER PRINCIPAL --- +# (O resto do seu código permanece o mesmo) # Inicializa o estado de autenticação se ele não existir if "authentication_status" not in st.session_state: st.session_state["authentication_status"] = False From 3b407e4274f7be899cd2f3a03c57ac83cbc34b5d Mon Sep 17 00:00:00 2001 From: Brandon Aguiar Date: Mon, 17 Nov 2025 21:22:10 -0300 Subject: [PATCH 47/60] new attempt --- main.py | 24 ++--- style.css | 6 -- utils.py | 298 ++++++++++++++++-------------------------------------- 3 files changed, 100 insertions(+), 228 deletions(-) diff --git a/main.py b/main.py index acc8b27..484d9bf 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,14 @@ # main.py import streamlit as st from utils import login_form, main_app -import os # 1. Importe o módulo 'os' +import os -# --- CAMINHOS DAS IMAGENS CORRIGIDOS --- -# Pega o caminho absoluto do diretório onde o script está rodando +# --- CAMINHOS ABSOLUTOS (BOA PRÁTICA) --- BASE_DIR = os.path.dirname(os.path.abspath(__file__)) - -# Constrói o caminho completo para cada arquivo LOGO_SYMBOL_PATH = os.path.join(BASE_DIR, "images", "cofrat-logo.png") LOGO_EXTENDED_PATH = os.path.join(BASE_DIR, "images", "cofrat-logotipo.png") CSS_PATH = os.path.join(BASE_DIR, "style.css") - # --- CONFIGURAÇÃO DA PÁGINA --- st.set_page_config( page_title="Plataforma de Gestão dos Atendimentos", @@ -21,25 +17,27 @@ initial_sidebar_state="expanded" ) -# VERSÃO CORRIGIDA +# --- FUNÇÃO PARA CARREGAR CSS --- def load_css(file_name): """Carrega um arquivo CSS externo para dentro do app Streamlit.""" - with open(file_name, encoding="utf-8") as f: - st.markdown(f"", unsafe_allow_html=True) + try: + with open(file_name, encoding="utf-8") as f: + st.markdown(f"", unsafe_allow_html=True) + except FileNotFoundError: + st.warning(f"Arquivo CSS não encontrado em: {file_name}") -# Carrega o nosso arquivo de estilos usando o caminho absoluto +# Carrega o nosso arquivo de estilos load_css(CSS_PATH) # --- GATEKEEPER PRINCIPAL --- -# (O resto do seu código permanece o mesmo) # Inicializa o estado de autenticação se ele não existir if "authentication_status" not in st.session_state: st.session_state["authentication_status"] = False # Verifica o estado de autenticação para decidir o que mostrar if not st.session_state["authentication_status"]: - # MODIFICAÇÃO: Passe o caminho do logo para a função + # Se não estiver logado, mostra o formulário de login login_form(logo_path=LOGO_EXTENDED_PATH) else: - # Passa o caminho do logo para a função que renderiza o app principal + # Se estiver logado, renderiza o aplicativo principal main_app(logo_path=LOGO_EXTENDED_PATH) \ No newline at end of file diff --git a/style.css b/style.css index ece1e25..0a2a25d 100644 --- a/style.css +++ b/style.css @@ -346,9 +346,3 @@ div[data-testid="stProgressBar"] > div { border-bottom: none !important; } -[data-testid="stSidebar"] { - background-image: url(https://64.media.tumblr.com/355a567fb354a9948da47cfa3fd60c6b/3738600cda58d8af-d9/s500x750/769f82598ee8e7a9bae7a8da6e5ebc995cc935d5.pnj); - background-size: 130px; - background-repeat: no-repeat; - background-position: 30px 30px; -} \ No newline at end of file diff --git a/utils.py b/utils.py index 3bf6332..745acd5 100644 --- a/utils.py +++ b/utils.py @@ -1,22 +1,11 @@ # utils.py import streamlit as st -from streamlit_option_menu import option_menu -from datetime import date, timedelta, datetime, time +import streamlit_antd_components as sac import pandas as pd -from dateutil.relativedelta import relativedelta -import numpy as np -from supabase import create_client, Client -from dotenv import load_dotenv -import os import requests import base64 -import streamlit_antd_components as sac -import re -import io - - -# --- FUNÇÃO PARA CARREGAR IMAGEM (LOCAL E ONLINE) --- +# --- FUNÇÃO PARA CARREGAR IMAGEM --- def load_image_as_base64(image_path): """Carrega imagem local e converte para base64.""" try: @@ -26,26 +15,21 @@ def load_image_as_base64(image_path): except: return None -# --- FUNÇÃO PARA EXIBIR LOGO COM FALLBACK --- +# --- FUNÇÃO PARA EXIBIR LOGO NO CORPO PRINCIPAL (PARA LOGIN) --- def display_logo(logo_path, width=200, use_column=True): - """Exibe logo com fallback para base64 se o caminho não funcionar.""" - # Tenta carregar como base64 + """Exibe o logo da aplicação no corpo principal.""" img_base64 = load_image_as_base64(logo_path) if use_column: - logo_col1, logo_col2, logo_col3 = st.columns([1.4, 1, 1]) - with logo_col2: + _, logo_col, _ = st.columns([1.4, 1, 1]) + with logo_col: if img_base64: st.markdown( f'', unsafe_allow_html=True ) else: - # Fallback: tenta carregar diretamente - try: - st.image(logo_path, width=width) - except: - st.warning("Logo não encontrado") + st.warning("Logo não encontrado") else: if img_base64: st.markdown( @@ -53,22 +37,18 @@ def display_logo(logo_path, width=200, use_column=True): unsafe_allow_html=True ) else: - try: - st.image(logo_path, width=width) - except: - st.warning("Logo não encontrado") + st.warning("Logo não encontrado") -# --- FUNÇÃO DE LOGIN CENTRALIZADA E ESTILIZADA --- +# --- FUNÇÃO DE LOGIN --- def login_form(logo_path): """Exibe o logotipo e o formulário de login centralizado.""" st.markdown('', unsafe_allow_html=True) - # Exibe o logo display_logo(logo_path, width=200, use_column=True) st.write("\n") - col1, col2, col3 = st.columns([1, 2, 1]) - with col2: + _, col, _ = st.columns([1, 2, 1]) + with col: with st.form("login_form_styled"): st.markdown("""