import streamlit as st import pandas as pd import pdfplumber import re import io from fpdf import FPDF # --- CONFIGURAÇÃO --- st.set_page_config(page_title="Módulo 1 - Análise Tributária", layout="wide") def format_brl(val): return f"R$ {val:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.') # --- EXTRATOR DE DADOS PDF PGDAS-D --- def extrair_dados_pgdas_pdf(pdf_file): """Efetua a leitura do PDF da PGDAS-D para base da análise""" texto_completo = "" dados = {"faturamento": 0.0, "pa": "", "das_pago": 0.0} with pdfplumber.open(pdf_file) as pdf: for page in pdf.pages: texto_completo += page.extract_text() # Regex para capturar Período de Apuração (Ex: 05/2023) pa_match = re.search(r"Apuração\s+(\d{2}/\d{4})", texto_completo) if pa_match: dados["pa"] = pa_match.group(1) # Regex para capturar Receita Bruta Total (RBT12 ou Mensal) # Procuramos o valor após "Receita Bruta Total" ou "Receita Bruta do PA" receita_match = re.search(r"Receita Bruta do PA.*?([\d\.,]+)", texto_completo, re.DOTALL) if receita_match: valor_str = receita_match.group(1).replace('.', '').replace(',', '.') dados["faturamento"] = float(valor_str) # Valor do Principal (DAS pago) das_match = re.search(r"Valor do Principal.*?([\d\.,]+)", texto_completo, re.DOTALL) if das_match: valor_das = das_match.group(1).replace('.', '').replace(',', '.') dados["das_pago"] = float(valor_das) return dados # --- CÁLCULOS TRIBUTÁRIOS --- def apuracao_comparativa(faturamento, folha, margem_lucro): lucro = faturamento * (margem_lucro / 100) # Lucro Presumido (Serviço - 32%) irpj_lp = (faturamento * 0.32) * 0.15 + (max(0, (faturamento * 0.32) - 20000) * 0.10) csll_lp = (faturamento * 0.32) * 0.09 pis_lp = faturamento * 0.0065 cofins_lp = faturamento * 0.03 total_lp = irpj_lp + csll_lp + pis_lp + cofins_lp # Lucro Real pis_lr = faturamento * 0.0165 cofins_lr = faturamento * 0.076 irpj_lr = lucro * 0.15 + (max(0, lucro - 20000) * 0.10) csll_lr = lucro * 0.09 total_lr = max(0, irpj_lr) + max(0, csll_lr) + max(0, pis_lr) + max(0, cofins_lr) return { "Presumido": total_lp, "Real": total_lr } # --- INTERFACE --- st.title("📊 Módulo 1: Análise Tributária Comparativa Profissional") st.markdown("---") # Seleção de Regime regime_atual = st.selectbox("Informe o Regime Atual da Empresa:", ["Simples Nacional", "Simples Híbrido", "Lucro Presumido", "Lucro Real"]) # Bloco Simples Nacional (Importação PDF) faturamento_base = 0.0 imposto_atual_base = 0.0 if "Simples" in regime_atual: st.subheader("📄 Leitura de PGDAS-D (PDF)") uploaded_pdf = st.file_uploader("Importar última Declaração PGDAS (PDF)", type="pdf") if uploaded_pdf: with st.spinner("Analisando PDF..."): dados_extraidos = extrair_dados_pgdas_pdf(uploaded_pdf) if dados_extraidos["faturamento"] > 0: st.success(f"Dados importados com sucesso! PA: {dados_extraidos['pa']}") faturamento_base = dados_extraidos["faturamento"] imposto_atual_base = dados_extraidos["das_pago"] else: st.error("Não foi possível identificar os valores no PDF. Verifique se o arquivo é uma declaração PGDAS-D válida.") # Campos Complementares col1, col2, col3 = st.columns(3) with col1: faturamento_manual = st.number_input("Faturamento Mensal (R$):", value=faturamento_base, step=1000.0) with col2: folha_mensal = st.number_input("Folha de Pagamento + Pró-Labore (R$):", value=0.0, step=500.0) with col3: margem_estimada = st.slider("Margem de Lucro Real Estimada (%):", 5, 50, 20) if faturamento_manual > 0: comparativo = apuracao_comparativa(faturamento_manual, folha_mensal, margem_estimada) # Exibição dos Resultados st.markdown("### 📋 Resultado do Comparativo Mensal") data_resumo = { "Regime Tributário": ["Simples Nacional (Atual)", "Lucro Presumido", "Lucro Real"], "Carga Tributária": [imposto_atual_base, comparativo["Presumido"], comparativo["Real"]], "Alíquota Efetiva": [ (imposto_atual_base/faturamento_manual)*100, (comparativo["Presumido"]/faturamento_manual)*100, (comparativo["Real"]/faturamento_manual)*100 ] } df = pd.DataFrame(data_resumo) st.table(df.style.format({"Carga Tributária": "R$ {:,.2f}", "Alíquota Efetiva": "{:.2f}%"})) # --- PONTOS DE OBSERVAÇÃO E OBRIGAÇÕES --- st.markdown("### 🔍 Análise de Observações e Procedimentos Obrigatórios") obs_col1, obs_col2 = st.columns(2) with obs_col1: st.warning("**⚠️ Pontos de Observação (Simples vs Híbrido)**") st.write(f""" - **Limite de Faturamento:** Acompanhar o sublimite de R$ 3,6 milhões para ICMS/ISS. - **Fator R:** Com folha de {format_brl(folha_mensal)}, o Fator R é {(folha_mensal/faturamento_manual)*100:.2f}%. Se abaixo de 28%, o Anexo V pode ser mais oneroso. - **Híbrido:** Possibilidade de segregação de receitas entre atividades (Anexos I, II, III, IV e V). """) with obs_col2: st.info("**📋 Declarações e Procedimentos**") st.write(""" - **Simples:** PGDAS-D (Mensal), DEFIS (Anual). - **Presumido/Real:** EFD ICMS/IPI, EFD Contribuições, DCTF, ECD e ECF (Escrituração Contábil Obrigatória). - **Recomendação:** No Lucro Real, o controle de estoque e a nota fiscal de entrada são críticos para o aproveitamento de créditos. """) st.markdown("---") st.caption("Desenvolvimento Módulo 1 concluído. Tecnologia: OCR estruturado para PDF PGDAS.")