Last active
August 15, 2024 21:32
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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