pdfreader / app.py.py
hydrometeo's picture
Upload 2 files
8ed6346 verified
import pdfplumber
import pandas as pd
import streamlit as st
# Streamlit UI
# carro = st.text_input("Nome do veículo")
# st.write("Nome do veiculo é: ", carro)
option1 = st.selectbox(
"Selecione a seguradora atual",
('00',"01", "02", "03","04", "05", "06","07", "08", "09","10", "11", "12"))
option = st.selectbox(
"Selecione a seguradora com a melhor opcao",
('00',"01", "02", "03","04", "05", "06","07", "08", "09","10", "11", "12"))
if option1==option:
st.warning('Seguradora atual igual seguradora com melhor opcao!', icon="⚠️")
pdf_file = st.file_uploader('Choose your .pdf file', type="pdf")
if pdf_file is not None:
parameters = ['APP', 'Assistência 24 Horas', 'Valor do seguro', 'Carro Reserva',
'Fipe', 'Retrovisores/Faróis/Lanternas', 'Cobertura de Vidros', 'Franquia',
'RCF - Danos Materiais', 'RCF - Danos Corporais', 'RCF - Danos Morais']
data = {key: [] for key in parameters}
# Open and read the uploaded PDF file
with pdfplumber.open(pdf_file) as pdf:
lines = []
for page in pdf.pages:
text = page.extract_text()
if text:
lines.extend(text.split('\n'))
if lines:
indexes_list = []
# Loop through each line and search for the pattern
for index, item in enumerate(lines):
if item.startswith('R$'):
initial_index = index - 1
indexes_list.append(initial_index)
if indexes_list:
index_initial = indexes_list[0]
# st.text(index_initial)
# st.text(lines[index_initial])
# Process each line once, and extract all required fields
for item in lines:
if "APP:" in item:
result_app = item.split("APP:")[1]
result_app = result_app.replace('Selecione...', 'R$ 0,00').strip()
result_app = result_app.split('R$')[1:]
result_app2 = list(lines[index_initial + 7]) # This converts the 7th element of 'lines' into a list
# Assuming you want to split a string inside the list, you should access that string first
# For example, if 'lines[index_initial + 7]' is a single string:
result_app2 = lines[index_initial + 7].replace('Selecione...', 'R$ 0,00').strip() # Access the string directly
result_app2 = result_app2.split('R$')[1:] # Now apply the split on the string
data['APP'] = result_app+result_app2
# Extract "Assistência 24 Horas:" information
elif "Assistência 24 Horas:" in item:
result_assistencia = item.split("Assistência 24 Horas:")[1]
result_assistencia = (result_assistencia
.replace('Km Ilimitada', '10000 KM')
.replace('Plano M', '10000 KM')
.replace('km', 'KM').replace('Km', 'KM').strip())
result_assistencia = result_assistencia.split('KM')[:-1]
result_assistencia = [i.strip() for i in result_assistencia]
result_assistencia = ['ilimitado' if i == '10000' or i == 'Plano M' else i for i in result_assistencia]
result_assistencia2= lines[index_initial + 8]
result_assistencia2= (result_assistencia2
.replace('Km Ilimitada', '10000 KM')
.replace('km', 'KM').replace('Km', 'KM').strip())
result_assistencia2 = result_assistencia2.split('KM')[:-1]
result_assistencia2 = [i.strip() for i in result_assistencia2]
result_assistencia2 = ['ilimitado' if i == '10000' or i == 'Plano M' else i for i in result_assistencia2]
data['Assistência 24 Horas'] = result_assistencia + result_assistencia2
# Extract "Cobertura de Vidros:" information
elif "Cobertura de Vidros: " in item:
result_vidros = item.split("Cobertura de Vidros: ")[1]
result_vidros = result_vidros.split(' ')[1:]
result_vidros2= lines[index_initial + 9]
result_vidros2 = item.split("Cobertura de Vidros: ")[1]
result_vidros2 = result_vidros2.split(' ')
data['Cobertura de Vidros'] = result_vidros+result_vidros2
# Extract "Retrovisores/Faróis/Lanternas:" information
elif "Retrovisores/Faróis/Lanternas:" in item:
result_retrovisores = item.split("Retrovisores/Faróis/Lanternas:")[1]
result_retrovisores = result_retrovisores.split(' ')[1:]
result_retrovisores2=lines[index_initial + 10]
result_retrovisores2 = result_retrovisores2.split(' ')#[1:]
data['Retrovisores/Faróis/Lanternas'] = result_retrovisores +result_retrovisores2
# Extract "% Fipe:" information
elif "% Fipe: " in item:
result_fipe = item.split("% Fipe: ")[1]
result_fipe = result_fipe.replace(' ', '').split('%')[:-1]
result_fipe2=lines[index_initial + 2]
result_fipe2=result_fipe2.replace(' ', '').split('%')[:-1]
data['Fipe'] = result_fipe+result_fipe2
# Extract "Carro Reserva:" information
elif item.startswith('Carro Reserva:'):
result_reserva = item.split("Carro Reserva:")[1].strip().split('AR')[:-1]
result_reserva = [i.strip() for i in result_reserva]
result_reserva2=lines[index_initial+11]
result_reserva2= result_reserva2.strip().split('AR')[:-1]
result_reserva2 = [i.strip() for i in result_reserva2]
data['Carro Reserva'] = result_reserva+result_reserva2
# Extract "Carro Reserva:" information
elif item.startswith('Forma de Pagamento:'):
result_pagamento = item.split("Forma de Pagamento:")[1]
result_pagamento= result_pagamento.split(' ')
result_pagamento= [i for i in result_pagamento if i in ['Cartão','Carnê']]
result_pagamento2=lines[index_initial + 12]
result_pagamento2= result_pagamento2.split(' ')
result_pagamento2= [i for i in result_pagamento2 if i in ['Cartão','Carnê']]
data['Forma de Pagamento'] = result_pagamento+result_pagamento2
# Extract "Valor do seguro"
elif item.startswith('Valor do seguro'):
result_valor_seguro = item.split('Valor do seguro')
result_valor_seguro = result_valor_seguro[1].split('R$')
result_valor_seguro = result_valor_seguro[1:]
result_valor_seguro = [i.strip() for i in result_valor_seguro]
result_valor_seguro2=lines[index_initial + 1]
result_valor_seguro2 = result_valor_seguro2.split('R$')
result_valor_seguro2 = result_valor_seguro2[1:]
result_valor_seguro2 = [i.strip() for i in result_valor_seguro2]
data['Valor do seguro'] = result_valor_seguro+result_valor_seguro2
# Extract "Franquia"
elif item.startswith('Franquia'):
result_franquia = item.split('Franquia')
result_franquia = result_franquia[1].split('R$')
result_franquia = result_franquia[1:]
result_franquia = [i.strip() for i in result_franquia]
result_franquia2=lines[index_initial+3]
result_franquia2 = result_franquia2.split('R$')
result_franquia2 = result_franquia2[1:]
result_franquia2 = [i.strip() for i in result_franquia2]
data['Franquia'] = result_franquia+result_franquia2
# Extract "RCF - Danos Materiais"
elif item.startswith('RCF - Danos Materiais'):
result_rcf_materiais = item.split('RCF - Danos Materiais')
result_rcf_materiais = result_rcf_materiais[1].split('R$')
result_rcf_materiais = result_rcf_materiais[1:]
result_rcf_materiais = [i.strip() for i in result_rcf_materiais]
result_rcf_materiais2=lines[index_initial+4]
result_rcf_materiais2 = result_rcf_materiais2.split('R$')
result_rcf_materiais2 = result_rcf_materiais2[1:]
result_rcf_materiais2 = [i.strip() for i in result_rcf_materiais2]
data['RCF - Danos Materiais'] = result_rcf_materiais + result_rcf_materiais2
# Extract "RCF - Danos Corporais"
elif item.startswith('RCF - Danos Corporais'):
result_rcf_corporais = item.split('RCF - Danos Corporais')
result_rcf_corporais = result_rcf_corporais[1].split('R$')
result_rcf_corporais = result_rcf_corporais[1:]
result_rcf_corporais = [i.strip() for i in result_rcf_corporais]
result_rcf_corporais2=lines[index_initial+5]
result_rcf_corporais2 = result_rcf_corporais2.split('R$')
result_rcf_corporais2 = result_rcf_corporais2[1:]
result_rcf_corporais2 = [i.strip() for i in result_rcf_corporais2]
data['RCF - Danos Corporais'] = result_rcf_corporais + result_rcf_corporais2
# Extract "RCF - Danos Morais"
elif item.startswith('RCF - Danos Morais'):
result_rcf_morais = item.split('RCF - Danos Morais')
result_rcf_morais = result_rcf_morais[1].split('R$')
result_rcf_morais = result_rcf_morais[1:]
result_rcf_morais = [i.strip() for i in result_rcf_morais]
result_rcf_morais2=lines[index_initial+6]
result_rcf_morais2 = result_rcf_morais2.split('R$')
result_rcf_morais2 = result_rcf_morais2[1:]
result_rcf_morais2 = [i.strip() for i in result_rcf_morais2]
data['RCF - Danos Morais'] = result_rcf_morais + result_rcf_morais2
elif item.startswith('Item:'):
veiculo = item.split('Item:')
elif item.startswith('Proponente:'):
nome_cliente= item.split('Proponente:')
# for i in data.keys():
# st.text(f'{i}: {len(data[i])}')
# Create DataFrame and apply formatting
df = pd.DataFrame(data)
for i in df.columns:
if i in ['APP', 'Valor do seguro', 'Franquia', 'RCF - Danos Materiais', 'RCF - Danos Corporais', 'RCF - Danos Morais']:
df[i] = df[i].apply(lambda x: 'R$ ' + x)
if i == 'Assistência 24 Horas':
df[i] = df[i].apply(lambda x: x + ' km' if x != 'ilimitado' else x)
if i == 'Carro Reserva':
df[i] = df[i].apply(lambda x: x + ' ar')
if i == 'Fipe':
df[i] = df[i].apply(lambda x: x + '%')
df = df[['APP', 'Assistência 24 Horas', 'Carro Reserva',
'Fipe', 'Retrovisores/Faróis/Lanternas', 'Cobertura de Vidros',
'RCF - Danos Materiais', 'RCF - Danos Corporais',
'RCF - Danos Morais', 'Forma de Pagamento', 'Franquia', 'Valor do seguro']]
df.rename(columns={'APP':'Acidentes pessoais de passageiros'}, inplace=True)
option_selected=int(option)
melhor_opcao = df.loc[[option_selected]]
melhor_opcao.drop(columns='Forma de Pagamento',inplace=True)
option_selected_atual=int(option1)
atual_opcao = df.loc[[option_selected_atual]]
seguradora_atual = df.loc[[option_selected_atual]]
seguradora_atual.drop(columns='Forma de Pagamento',inplace=True)
# st.dataframe(seguradora_atual)
df.drop(index=option_selected,inplace=True)
df=df[['Valor do seguro','Franquia']]
# st.dataframe(df)
# Assuming df is your DataFrame
# for index, row in df.iterrows():
# valorSeguro=float(row[2][3:].replace('.', '').replace(',', '.'))
# seguradora= f'SEGURADORA {index}'+'\n'
# result = seguradora+'\n'.join([f'{col}: {row[col]}' for col in df.columns])
# st.text(result)
# st.text('\n'+'Pagamento parcelado:')
# for i in range(1,7):
# st.text(f'{i} x R$ {round(valorSeguro/i,2)}')
# st.text('__________________________')
all_output_atual = ''
for index, row in seguradora_atual.iterrows():
# Convert the "Valor do seguro" column to a float by removing 'R$', and replacing the comma
textoInicial= f'''Bom dia{nome_cliente[1]},\n\nO seguro do seu veículo está vencendo. Segue a melhor condição para a renovação da sua apólice.\n\n'''
valorSeguro = float(row[-1][3:].replace('.', '').replace(',', '.'))
seguradora = f'Veículo - {veiculo[1]}\n\nCOBERTURAS SEGURADORA {index} ATUAL:\n'
# Create the result string for the current row
result =textoInicial+ seguradora + '\n'.join([f'{col}: {row[col]}' for col in seguradora_atual.columns])
# Add to all_output
all_output_atual += result + '\n'
all_output_atual += '\n' + 'Pagamento parcelado:\n'
# Add parcel information
for i in range(1, 7):
# Correct the round function usage
valor_parcela = round(valorSeguro / i, 2)
valor_parcela_str = str(valor_parcela).replace('.', ',')
all_output_atual += f'{i} x R$ {valor_parcela_str}\n'
all_output = ''
for index, row in melhor_opcao.iterrows():
# Convert the "Valor do seguro" column to a float by removing 'R$', and replacing the comma
# textoInicial= f'''Bom dia{nome_cliente[1]},\n\nO seguro do seu veículo está vencendo. Segue a melhor condição para a renovação da sua apólice.\n\n'''
valorSeguro = float(row[-1][3:].replace('.', '').replace(',', '.'))
seguradora = f'\nCOBERTURAS DA SEGURADORA {index} COM A MELHOR CONDICAO:\n'
# Create the result string for the current row
result = seguradora+'\n'.join([f'{col}: {row[col]}' for col in melhor_opcao.columns])
# Add to all_output
all_output += result + '\n'
all_output += '\n' + 'Pagamento parcelado:\n'
# Add parcel information
for i in range(1, 7):
# Correct the round function usage
valor_parcela = round(valorSeguro / i, 2)
valor_parcela_str = str(valor_parcela).replace('.', ',')
all_output += f'{i} x R$ {valor_parcela_str}\n'
all_output2=''
for index, row in df.iterrows():
# Convert the "Valor do seguro" column to a float by removing 'R$', and replacing the comma
valorSeguro = float(row[-1][3:].replace('.', '').replace(',', '.'))
# Create the result string for the current row
result = f'''SEGURADORA {index}:\n'''+'\n'.join([f'{col}: {row[col]}' for col in df.columns])
# Add to all_output
all_output2 +='\n' +result + '\n'
# for i in range(1, 7):
# # Correct the round function usage
# valor_parcela = round(valorSeguro / i, 2)
# valor_parcela_str = str(valor_parcela).replace('.', ',')
# all_output2 += f'{i} x R$ {valor_parcela_str}\n'
st.code(all_output_atual+all_output+'\nDEMAIS SEGURADORAS PESQUISADAS:'+all_output2+'\nAo seu dispor para esclarecimentos ou alterações necessárias.')