LRAMIRIO/sisreq-docker-final2
0
1import streamlit as st2import pytesseract3from pdf2image import convert_from_bytes4from PIL import Image5import pandas as pd6import re7import io8 9st.set_page_config(page_title="SISREQ - Extração de Requisição", layout="centered")10 11st.title("📄 SISREQ - Extração de Itens de Requisições PDF")12uploaded_file = st.file_uploader("Envie o arquivo PDF da requisição", type=["pdf"])13 14def formatar_descricao(texto):15 texto = texto.strip().strip('"').strip("'")16 texto = re.sub(r'\s+', ' ', texto)17 frases = re.split(r'(?<=[.?!])\s+', texto)18 frases = [f"{frase.strip().capitalize()}." if not frase.endswith('.') else frase.strip().capitalize() for frase in frases]19 return ' '.join(frases)20 21if uploaded_file:22 imagens = convert_from_bytes(uploaded_file.read())23 texto_total = ""24 st.subheader("🔍 Pré-visualização do OCR (texto bruto):")25 for imagem in imagens:26 texto = pytesseract.image_to_string(imagem, lang='por')27 texto_total += texto + "28"29 st.text_area("Texto Extraído (OCR)", texto_total, height=300)30 31 blocos = []32 bloco = ""33 for linha in texto_total.split("\n"):34 bloco += linha + "\n"35 if "Valor total" in linha:36 blocos.append(bloco)37 bloco = ""38 39 def extrair_campos(texto):40 def campo(regex):41 r = re.search(regex, texto, re.DOTALL | re.IGNORECASE)42 return r.group(1).strip().replace('\n', ' ') if r else ""43 return {44 'Item': campo(r"Item\s*:? ?(\d+)"),45 'CATMAT': campo(r"CATMAT\s*:? ?(\d+)"),46 'Descrição Detalhada': formatar_descricao(campo(r"Descrição detalhada\s*:? ?(.*?)Unidade")),47 'Unidade': campo(r"Unidade\s*:? ?([\w\s]+)"),48 'Quantidade': campo(r"Quantidade\s*:? ?(\d+)"),49 'Valor Unitário': campo(r"Valor unitário\s*:? ?R\$\s*([\d.,]+)").replace(".", "").replace(",", "."),50 'Valor Total': campo(r"Valor total\s*:? ?R\$\s*([\d.,]+)").replace(".", "").replace(",", "."),51 }52 53 dados = [extrair_campos(bloco) for bloco in blocos]54 df = pd.DataFrame(dados)55 56 st.subheader("📊 Tabela Extraída")57 st.dataframe(df)58 59 output = io.BytesIO()60 with pd.ExcelWriter(output, engine='openpyxl') as writer:61 df.to_excel(writer, index=False, sheet_name="Itens Extraídos")62 st.download_button("📥 Baixar Planilha Excel", data=output.getvalue(), file_name="itens_extraidos.xlsx")