Skip to content

Instantly share code, notes, and snippets.

@eng-rodrigocunha
Last active August 15, 2024 21:32
Show Gist options
  • Save eng-rodrigocunha/6cd05c03d0499a672116a5d19f43fe7c to your computer and use it in GitHub Desktop.
Save eng-rodrigocunha/6cd05c03d0499a672116a5d19f43fe7c to your computer and use it in GitHub Desktop.
Formata arquivo leiaute de importação de Permissionários de Serviços Públicos da Secretaria Municipal de Transportes da Prefeitura da Cidade do Rio de Janeiro ao Tribunal Superior Eleitoral (https://www.tse.jus.br/eleicoes/eleicoes-2022/prestacao-de-contas/nota-fiscal-eletronica-e-informacoes-de-permissionarios-fiscalizaje)
"""
Formata arquivo leiaute de importação de permissionários do TSE
Formata arquivo leiaute de importação de Permissionários de Serviços Públicos da
Secretaria Municipal de Transportes da Prefeitura da Cidade do Rio de Janeiro
ao Tribunal Superior Eleitoral
https://www.tse.jus.br/eleicoes/eleicoes-2022/prestacao-de-contas/nota-fiscal-eletronica-e-informacoes-de-permissionarios-fiscalizaje
"""
# import sys
# !{sys.executable} -m pip install --upgrade numpy pandas
# !{sys.executable} -m pip install xlrd
# !{sys.executable} -m pip install --upgrade pip
# !{sys.executable} -m pip install unidecode
import pandas as pd
from unidecode import unidecode
from datetime import datetime
from pytz import timezone
# Função para preencher com zeros à esquerda
def preencher_zeros_esq(valor, tamanho):
return str(valor).zfill(tamanho)
# Função para preencher à direita
def preencher_dir(valor, p, tamanho):
return str(valor).ljust(tamanho, p)
# Função para formatar a data
def formatar_data(data):
return data.strftime("%d%m%Y")
# Função para formatar modo
def formata_modo(modo):
if modo == "STPC":
return "Servico de Transporte de Passageiro Complementar Comunitario Cabritinho STPC"
if modo == "STAE":
return "Servico de Transporte Acessivel Exclusivo STAE"
if modo == "STPL":
return "Servico de Transporte Publico Local STPL"
else:
return modo
# Lê o arquivo Excel
arquivo_excel = 'ListagemPermissionario.xls'
df = pd.read_excel(arquivo_excel, dtype={"CPF": str})
# Filtra as linhas onde CPF não é nulo e não é igual a "0"
df = df.dropna(subset=['CPF'])
df = df[df['CPF'] != "0"]
# Formatar os dados conforme a estrutura da imagem
df['Registro'] = 2 # Valor fixo
df['Tipo de pessoa'] = 'F'
df['CPF/CNPJ'] = df['CPF'].apply(lambda x: preencher_zeros_esq(x, 11))
df['Nome do permissionário'] = df['Nome'].apply(unidecode)
df['Data da permissão'] = df['DataAutorizacao'].apply(formatar_data)
df['Data de validade'] = "31129999"
df['Tipo de permissionário'] = df['Modal'].apply(formata_modo)
# Ajustar as posições e tamanhos dos campos
dados_formatados = pd.DataFrame()
dados_formatados['Registro'] = df['Registro']
dados_formatados['Tipo de pessoa'] = df['Tipo de pessoa']
dados_formatados['CPF/CNPJ'] = df['CPF/CNPJ'].apply(lambda x: preencher_zeros_esq(x, 14))
dados_formatados['Nome do permissionário'] = df['Nome do permissionário'].apply(lambda x: preencher_dir(x, "0", 100))
dados_formatados['Data da permissão'] = df['Data da permissão'].apply(str)
dados_formatados['Data de validade'] = df['Data de validade']
dados_formatados['Tipo de permissionário'] = df['Tipo de permissionário'].apply(lambda x: preencher_dir(x, "0", 100))
# Defina as strings do header e footer
first_line = f"1RJ42498733000148{datetime.now(tz=timezone('America/Sao_Paulo')).strftime('%d%m%Y')}0000000000{datetime.now(tz=timezone('America/Sao_Paulo')).strftime('%Y%m')}00010000000000100ATSEPER{' '*167}"
last_line = f"9{preencher_zeros_esq(str(len(dados_formatados)), 9)}{' '*222}"
# Concatena todos os valores do DataFrame
concatenated_data = dados_formatados.apply(lambda row: ''.join(map(str, row)), axis=1)
# Adiciona a primeira e a última linha
all_data = [first_line] + concatenated_data.tolist() + [last_line]
# Escreve os dados em um arquivo TXT
with open("20240806_permissionarios_tratados_0_REV05.txt", "w") as file:
file.write('\n'.join(all_data))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment