Pipeline run_luxorASAP¶
Este documento detalha o funcionamento do script run_luxorASAP.py, que atua como o orquestrador, garantindo a propagação de input de dados dos ativos, trades e o recálculo contínuo das posições dos fundos.
Visão Geral¶
O run_luxorASAP.py opera em um loop contínuo ao longo do dia, monitorando alterações em arquivos-chave e processando dados para manter as informações financeiras atualizadas. Ele é responsável por:
- Monitorar e processar a planilha
historico_trades_ativos.xlsx: Propaga as entradas desta planilha para tabelas.parquetno data lake. - Processar trades e recalcular posições: Garante que as posições dos fundos estejam sempre atualizadas com base nos trades registrados.
Fluxo de Operação¶
flowchart TD
subgraph "**Processar historico_trades_ativos.xlsx**"
direction LR
B[Monitora: historico_trades_ativos.xlsx];
B --> F{"Mudou?"};
F -- Sim --> C[Ler abas da planilha];
F -->|"10s"| B;
C --> D[Processar para tabelas parquet];
D --> E[(Salvar em luxorasap/enriched/parquet)];
end
flowchart TD
subgraph "**Processar Trades**"
direction LR
G[Verificar novos trades em enriched/trades.parquet];
G --> L{"Novos trades<br> ou Reset?"};
L -- Sim --> H[Processar Trades];
L -->|"10s"| G;
H --> I[Gerar tabelas de posição];
I --> J[(Salvar em luxorasap/enriched/parquet)];
I --> K["Salvar estado<br>dos módulos em funds_data.pickle"];
end
Detalhes do Processamento¶
1. Monitoramento e Atualização da Planilha-Mestra¶
Através de uma instância do luxorDB_dataloader, o script verifica continuamente se o horário da última modificação da planilha source_bases/historico_trades_ativos.xlsx foi alterado.
- Se houver alteração:
- As abas da planilha são lidas, processadas e salvas como arquivos
.parquetna pastaluxorasap/enriched/parquet. boletasse transforma emtrades.parquet.ativosse transforma emassets.parquet.VCs_pricesse transforma emhist_vc_px_last.parquet.asset_field_mapse transforma emasset_field_map.parquet.field_mapse transforma emfield_map.parquet.
- As abas da planilha são lidas, processadas e salvas como arquivos
2. Processamento de Trades e Posições¶
flowchart TD
subgraph "**Processamento de Trades**"
direction LR
A[trades.parquet] --> B{Processar Trades};
B --> C[last_positions.parquet];
B --> D[hist_positions.parquet];
B --> E[cash_movements.parquet];
B --> F[hist_positions_by_bank.parquet];
B --> G[last_positions_by_bank.parquet];
end
A cada 10 segundos, o script verifica a existência de novos trades na tabela enriched/trades.parquet.
- Primeira execução do dia: O script roda no modo reset, reprocessando todas as transações da tabela
tradese gerando todas as tabelas de posição do zero. - Novos trades ou alterações: Se novos trades forem identificados ou se houver alterações em trades já processados (data, quantidade ou preço da boleta), o processamento é acionado.
- Tabelas de saída: As seguintes tabelas são geradas ou atualizadas na pasta
luxorasap/enriched/parquet:last_positions.parquethist_positions.parquetcash_movements.parquethist_positions_by_bank.parquetlast_positions_by_bank.parquet
3. Detecção de Alterações e Modo Reset¶
O script também faz uma checagem dos trades já processados. Se for detectada qualquer alteração na data, quantidade ou preço de uma boleta existente, a flag de reset é ativada para a próxima execução. Isso garante que todos os trades sejam reprocessados, assegurando a consistência dos dados.
4. Módulos Auxiliares para Processamento de Trades¶
Para o processamento dos trades, o run_luxorASAP.py utiliza os seguintes módulos auxiliares:
fund.py: Fornece a estrutura para definir as contas bancárias (bank_accounts) e os ativos (assets) que cada fundo possui, além de gerenciar os trades que o fundo precisa processar.asset.py: Executa o processamento individual de cada trade, controlando os trades de cada ativo e quais já foram processados.bank_account.py: Possui a estrutura para organizar todos os ativos que estão associados a uma conta bancária específica. É responsável por processar os trades na visão dessa conta bancária (gerando as tabelas*_by_bank) e contém a lógica para processar boletas de transferência de ativos, aquela cujoop_typeé "transf ativos".
5. Persistência das posições¶
Ao final de cada execução, o run_luxorASAP armazena os dados internos desses submódulos (fund.py, asset.py, bank_account.py) em um arquivo .pickle salvo em LuxorASAP/funds_data. Isso permite que o script retome seu estado ao ser religado. No entanto, a flag --reset está sendo usada por padrão. É possível alterar a main do script para permiter essa retomada de estado sem reprocessar tudo.