open-source and licensed version of our analytics package for investment funds. It provides tools for automatically downloading datasets, performing analyses, and generating dashboards with key metrics. This version does not include sensitive data—users must have their own fund account with login credentials to adapt and utilize the package
datasaver.py Sistema de processamento de dados de estoque que realiza análises e cálculos de métricas financeiras a partir de arquivos de dados.
- Processamento automático de múltiplas pastas de dados
- Cálculo de diversas métricas financeiras:
- Taxa média de operações
- Fluxos de pagamento (diário, semanal e mensal)
- Percentual de PDD
- Análise de vencimentos
- Concentração por sacado
- Pagamentos por ano
- Métricas de inadimplência
- Prazos médios ponderados
- Volume por CAPAG
- E mais...
- Controle de pastas processadas para evitar reprocessamento
- Exportação dos resultados em formato JSON
.
├── datasaver.py
├── estoques/
│ ├── processador_pastas.py
│ ├── importador_dados.py
│ ├── processar_dados.py
│ └── processar_metricas.py
├── data/
│ └── YYYY-MM-DD/
│ └── arquivos_de_dados
└── results/
├── processed_folders.json
└── results_YYYY-MM-DD.json
- Clone o repositório
- Instale as dependências:
pip install -r requirements.txt
- Coloque seus arquivos de dados na pasta
dataem subpastas com formato de data (YYYY-MM-DD)
Execute o script principal:
python main.pyO script irá:
- Identificar pastas válidas em
data/ - Processar cada pasta não processada anteriormente
- Calcular todas as métricas configuradas
- Salvar os resultados em arquivos JSON na pasta
results/
Os resultados são salvos em arquivos JSON contendo:
- Informações da pasta processada
- Lista de arquivos processados
- Métricas calculadas por ProcessarDados
- Métricas calculadas por ProcessarMetricas
- Estatísticas e análises de concentração
- Índices e taxas calculadas
O sistema utiliza duas classes principais para processamento:
- Cálculo de taxas médias
- Análise de fluxos de pagamento
- Cálculo de PDD
- Análise de vencimentos
- Concentração por sacado
- Cálculo de métricas financeiras
- Estatísticas gerais
- Análise de concentração por cedente/sacado
- Cálculo de prazos médios
- Índices de inadimplência
O sistema mantém um arquivo processed_folders.json que registra as pastas já processadas, evitando reprocessamento desnecessário.
- Modifique a lista
ignore_listem ProcessadorPastas para ignorar pastas específicas - Ajuste os parâmetros de cálculo nas classes ProcessarDados e ProcessarMetricas
- Adicione novos cálculos e métricas conforme necessário
Apenas os membros especializados da empresa têm autorização para contribuir
- Certifique-se de que os arquivos de dados estão no formato esperado
- Verifique a documentação das classes individuais para mais detalhes sobre os cálculos
- Mantenha backup dos dados originais antes do processamento
script downloader.py Este script automatiza o processo de download de relatórios de posição do FIDC Midian através do portal FSEngine.
- Login automático no portal FSEngine
- Navegação até a seção de relatórios do FIDC Midian
- Download automático dos relatórios de posição
- Organização dos arquivos por data em pastas específicas
- Controle de relatórios já baixados para evitar duplicidade
- Suporte para arquivos ZIP e CSV
- Processamento em lote de múltiplas páginas de relatórios
- Python 3.6+
- Selenium WebDriver
- Google Chrome
- ChromeDriver compatível com sua versão do Chrome
pip install selenium.
algum diretorio ├── script.py
downloads/
├── processed_dates.txt
└── YYYY-MM-DD/
└── arquivos_extraidos
- Instale as dependências necessárias
- Certifique-se de que o ChromeDriver está instalado e acessível
- Configure as credenciais de acesso no script:
username_field.send_keys("seu_email@exemplo.com") password_field.send_keys("sua_senha")
Execute o script: O script irá:
- Criar uma pasta "downloads" no diretório atual (se não existir)
- Fazer login no portal
- Navegar até a seção de relatórios
- Baixar os relatórios não processados anteriormente
- Organizar os arquivos em pastas por data
O script mantém um arquivo processed_dates.txt que registra as datas dos relatórios já processados, evitando downloads duplicados em execuções futuras.
- Altere
min_pagepara definir até qual página o script deve retroceder - Descomente a linha
chrome_options.add_argument("--headless")para executar em modo headless - Modifique
downloads_basepara alterar o diretório de download
O script inclui:
- Espera dinâmica por elementos da página
- Tratamento de diferentes formatos de arquivo (ZIP/CSV)
- Verificação de downloads completos
- Logging de operações e erros
- Não armazenar credenciais diretamente no código, como login e senha
- Considere usar variáveis de ambiente ou arquivo de configuração separado para credenciais
- Funciona apenas com o Google Chrome
- Requer conexão estável com a internet
- Específico para a estrutura atual do portal FSEngine
ProcessadorPastas é uma classe para gerenciar diretórios que seguem o padrão de nomenclatura YYYY-MM-DD, identificando automaticamente a pasta de dados (Data) e listando arquivos .csv organizados por data.
- Busca automática da pasta
Datano diretório do projeto. - Filtra e ordena pastas pelo formato
YYYY-MM-DD. - Lista arquivos
.csvcontidos nas subpastas. - Identifica a pasta mais recente com nome padronizado.
A classe utiliza módulos padrão do Python, sem necessidade de instalação de pacotes externos.
# iniclz a classe autmtc buscando a pasta 'data'
processador = ProcessadorPastas()
#
# exibe a lista de arqvs csv
print(processador.list_files)
#
# exibe a lista de pasts valds ordnds por data
print(processador.valid_folders)
# obthm a pasta mais recnte disponivel
print(processador.latest_folder)encontrar_data()→ Procura pela pastaDatano diretório do projeto.nome_pasta_valido(nome_pasta)→ Verifica se o nome da pasta segue o formatoYYYY-MM-DD.obter_pastas_validas()→ Retorna a lista de pastas ordenadas por data.obter_ultima_pasta()→ Retorna a pasta mais recente.
- Caso a pasta
Datanão seja encontrada, a classe emite um aviso e não processa arquivos. - Arquivos
.csvsão considerados apenas se estiverem dentro de subpastas com nomes no formato correto.
encontrar_data()→ Procura pela pastaDatano diretório do projeto.nome_pasta_valido(nome_pasta)→ Verifica se o nome da pasta segue o formatoYYYY-MM-DD.obter_pastas_validas()→ Retorna a lista de pastas ordenadas por data.obter_ultima_pasta()→ Retorna a pasta mais recente.
ImportadorDados é responsável por localizar e carregar um arquivo de feriados automaticamente no repositório, além de importar grandes volumes de dados otimizando memória e desempenho.
- Busca o arquivo de feriados nacionais no repositório de forma automática.
- Carrega e processa feriados, removendo valores inválidos.
- Define datas de referência para seleção de estoque.
- Importa e otimiza a leitura de arquivos CSV grandes, convertendo e ajustando tipos de dados.
#from importador_dados import ImportadorDados
importador = ImportadorDados()
print("Feriados carregados:", importador.holidays)
print("Data de referência:", importador.ref_date)
print("Último dia útil do mês anterior:", importador.eom_date)
df_final = importador.importar_dados(processador_pastas.list_files)encontrar_repo_root()→ Identifica o diretório raiz do repositório.encontrar_arquivo_feriados()→ Busca automaticamente pelo arquivo de feriados no repositório.carregar_feriados()→ Lê o arquivo de feriados e remove dados inválidos.definir_datas_referencia()→ Define as datas de referência e o último dia útil do mês anterior.importar_dados(list_files)→ Processa arquivos CSV grandes de forma otimizada.
- Menos consumo de memória → Processamento em chunks evita carregamento de arquivos gigantes.
- Conversão de dados otimizada → Uso de métodos vetorizados para acelerar a conversão.
- Descarte imediato de colunas desnecessárias → Liberação de memória durante o processamento.
- Validação distribuída → Os dados são validados por partes, evitando erros acumulados.
- Menos impacto de impressão → Redução de mensagens desnecessárias para agilizar a execução.
| Classe | Função | Tipo de Retorno | Descrição Resumida |
|---|---|---|---|
| ProcessarMetricas | adicionar_colunas() |
pd.DataFrame |
Adiciona colunas calculadas ao DataFrame (por ex. prazos e valor líquido atual) e retorna o próprio DataFrame. |
| ProcessarMetricas | calcular_metricas() |
dict |
Calcula diversas métricas financeiras (concentração por cedente, índice de inadimplência, etc.) e as retorna em um dicionário. |
| ProcessarMetricas | calcular_estatisticas() |
dict |
Calcula estatísticas diversas (máximos, contagens, etc.) e retorna um dicionário com esses valores. |
| ProcessarMetricas | concentracao_por_cedente_sacado() |
dict |
Retorna um dicionário com duas Series, indicando a concentração de “Valor Atual” por cedente e por sacado. |
| ProcessarMetricas | prazo_medio_ponderado() |
float ou None |
Calcula o prazo médio ponderado (dias até vencimento) com base em “Valor Atual”; pode retornar None se colunas não existirem. |
| ProcessarMetricas | indice_inadimplencia() |
float ou None |
Calcula o índice de inadimplência em relação ao “Valor Atual”; pode retornar None se colunas necessárias não existirem. |
| ProcessarMetricas | taxa_media() |
float ou None |
Retorna a taxa média (ponderada por “Valor Atual”), ou None se não houver dados suficientes. |
| ProcessarMetricas | volume_por_categoria(categoria) |
pd.Series ou None |
Agrupa e soma “Valor Atual” por uma categoria específica. Retorna None se a coluna não existir. |
| ImportadorDados | encontrar_repo_root() |
str |
Retorna o caminho (string) para a raiz do repositório, baseado em busca ascendente de diretórios. |
| ImportadorDados | encontrar_arquivo_feriados() |
str ou None |
Retorna o caminho completo do arquivo de feriados, se encontrado, ou None caso contrário. |
| ImportadorDados | carregar_feriados() |
list (de datas) |
Lê o arquivo de feriados em Excel e retorna uma lista de datas (datetime). |
| ImportadorDados | definir_datas_referencia() |
None |
Define datas de referência (self.ref_date, self.eom_date) internamente; não retorna nada. |
| ImportadorDados | importar_dados(list_files) |
pd.DataFrame |
Lê e processa múltiplos arquivos CSV, aplicando conversões de tipos e unificando em um único DataFrame. |
| ProcessarDados | dist_capag(class_col, col_valor) |
pd.Series |
Retorna a distribuição de valores (somatório) por classificação CAPAG. |
| ProcessarDados | custom_fill2(col1, col2) |
list |
Gera uma lista preenchida com valores de col1 ou, se nulos, aplica regras condicionais com col2. |
| ProcessarDados | vencimento_anual(col_valor, col_vcto) |
tuple(pd.Series, pd.Series) |
Retorna duas Series: uma com o valor anual e outra com o acumulado percentual. |
| ProcessarDados | concentracao_sacado(...) |
dict |
Retorna um dicionário com a soma dos maiores sacados conforme a lista de cortes (cutoffs). |
| ProcessarDados | pagamentos_por_ano() |
pd.Series |
Agrupa e soma “Valor Atual” por ano de vencimento, retornando uma Series. |
| ProcessarDados | fluxo_pagamento(horizonte) |
pd.Series |
Calcula o fluxo de “Valor Atual” por dia, semana ou mês (conforme parâmetro). |
| ProcessarDados | percentual_pdd() |
float |
Retorna o percentual de PDD em relação ao valor total. |
| ProcessarDados | taxa_media() |
float |
Retorna a taxa média (ponderada por “Valor Atual”). |
| ProcessarDados | volume_por_categoria(categoria) |
pd.Series |
Agrupa e retorna o volume (“Valor Atual”) por categoria específica, em formato de Series. |
pandas==2.1.4 numpy==1.26.2
matplotlib==3.8.2 seaborn==0.13.0
selenium==4.15.2 webdriver-manager==4.0.1
fuzzywuzzy==0.18.0 python-Levenshtein==0.23.0 # Opcional, mas recomendado para melhor performance do fuzzywuzzy
Apache 2.0