Add OARMP routing engine, dashboard and documentation

- Complete routing engine: ingest, optimizer (CG+B&B), maintenance
  monitor, metrics, pipeline, quality checks
- Streamlit dashboard with Input/Output tab structure, editable data
  editors, interactive Folium map with satellite layer and maintenance
  base highlights, FH stacked bar chart with TTM availability
- CSV data files: AERONAVES, CHECKS, AIRPORTS, ESCALA DE VOO
- README, CONTEXTO and CHANGELOG added
- Remove legacy pre_process scripts and raw binary files (PDFs/xlsx)
- Update .gitignore to exclude outputs/, data/, raw/*.pdf, raw/*.xlsx

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Eduardo Carlos
2026-06-17 11:52:34 -03:00
parent 32ad7c9f23
commit 3607965c88
43 changed files with 3419 additions and 1936 deletions

103
CHANGELOG.md Normal file
View File

@@ -0,0 +1,103 @@
# Changelog
Todas as alterações relevantes do projeto são registradas neste arquivo.
Formato baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/).
---
## [Não lançado]
### Adicionado
- `README.md` com documentação do projeto, estrutura de pastas, instruções de instalação e conceitos-chave
- `CONTEXTO.md` com contexto operacional, motivação e decisões de projeto
- `CHANGELOG.md` (este arquivo)
---
## [0.5.0] — 2026-06-17
### Adicionado
- **Mapa interativo de rotas** (aba `🗺 Mapa`): rotas por aeronave exibidas com `folium` + `streamlit-folium`; controle de camadas para alternar entre **CartoDB positron** e **satélite Esri World Imagery**
- **Destaque de bases de manutenção no mapa**: marcador laranja (raio duplo) com tooltip `🔧 Base de manutenção` nos aeroportos com `IS_MAINTENANCE_BASE = 1`
- `folium>=0.14.0` e `streamlit-folium>=0.22.0` adicionados ao `requirements.txt`
### Corrigido
- **TTM disponível zerava após check**: a lógica anterior usava apenas o primeiro evento de manutenção por aeronave e subtraía todo `fh_apos` do TTM do segundo ciclo. Agora todos os eventos são acumulados (`all_maint`) e `fh_after_last = total_fh Σ(accum_fh_at_check)` calcula corretamente as FH voadas após a **última** manutenção
- Linha "Média" na tabela Frota não tinha mais cor de fundo (removido `background-color:#e8f4f8`); mantém apenas negrito
---
## [0.4.0] — 2026-06-16
### Adicionado
- **Aba `🗺 Mapa`** no Output: representação geográfica das rotas por aeronave usando `plotly.graph_objects.Scattergeo` (substituído na v0.5.0)
- Biblioteca `airportsdata` para lookup de coordenadas por código ICAO, sem necessidade de API key
- `airportsdata>=20240101` adicionado ao `requirements.txt`
- Coordenadas de DEP/ARR lidas diretamente da `Escala com Atribuição` (campo compartilhado `raw_sched_atrib`)
### Alterado
- Gráfico de FH por aeronave e métricas de horas disponíveis transferidos da aba `Escala com Atribuição` para a aba `Manutenção e Aeronaves` (renomeada)
- Cor da coluna "FH de TTM perdidas por aeronave / ciclo" alterada para vermelho
---
## [0.3.0] — 2026-06-15
### Adicionado
- **Gráfico de FH por aeronave** na aba `Manutenção e Aeronaves` com quatro segmentos empilhados:
- FH Iniciais (cinza `#94a3b8`)
- FH Planejadas antes da manutenção (azul `#3b82f6`)
- FH Planejadas após a manutenção (âmbar `#f59e0b`)
- FH Disponíveis até a próxima manutenção (verde `#22c55e`, opacidade 0.55)
- Marcador diamante vermelho indicando o evento de check
- **Métricas de horas disponíveis** por aeronave (metric cards) abaixo do gráfico
- Campo para **adicionar N linhas de uma vez** na Escala de Voo (Input), com botão "Limpar tudo"
- Exclusão de linhas habilitada na tabela de Escala de Voo (`num_rows="dynamic"`)
### Alterado
- Abas `Resumo` e `Gantt` unificadas em `📊 Resumo`
- Altura do gráfico de FH dobrada (800 px)
### Corrigido
- Variável `_c4` renomeada para `_` (sem uso)
- `tat` acessado via `st.session_state.get("tat", 60)` para evitar erro quando o botão de execução é pressionado antes de o sub-tab Aeronaves ser visitado
---
## [0.2.0] — 2026-06-14
### Adicionado
- **Aba `🔧 Manutenção`**: tabela com eventos de manutenção (aeronave, OFRAG anterior, threshold, FH acumuladas, perda de TTM, início/fim calendário) e gráficos de FH perdidas e FH verificadas
- **Aba `✈ Frota`**: tabela de utilização com coluna `Média` e gráficos de utilização TTM e FH por aeronave
- Campo **Tempo do Solver (s)** e botão **Executar Otimização** movidos para a aba Input (acima das sub-abas)
- Mensagem de conclusão com **tempo decorrido** da otimização (`⏱ Otimização concluída em Xm Ys.`)
- Cor de fundo das células da Escala com Atribuição alterada para transparente
### Removido
- Aba `Parâmetros` do sidebar (TAT mínimo movido para sub-aba Aeronaves; ano de planejamento removido — inferido de `pd.Timestamp.now().year`)
### Alterado
- Campo **TAT mínimo** movido para a sub-aba `Aeronaves` do Input
- Largura do campo Tempo do Solver reduzida com `st.columns([1, 1, 4])`
---
## [0.1.0] — 2026-06-13
### Adicionado
- **Reescrita completa do dashboard** (`app/dashboard.py`) com estrutura em duas abas principais: `📥 Input` e `📤 Output`
- Sub-abas de Input: `Escala de Voo`, `Aeronaves`, `Checks`, `Bases de Manutenção` com `st.data_editor` editável
- Suporte a **DataFrames em memória** no pipeline: `load_from_dfs()` em `ingest.py` aceita dados do editor sem gravar em disco
- Parâmetro `raw_dfs` em `RoutingPipeline.run()` para passar dados in-memory
- Parsing de datas no formato `DD/MM/AAAA` em `_parse_br_date()` (além do legado `DD/mon`)
- Backup do dashboard original em `app/dashboard_backup.py`
### Alterado
- `src/routing_engine/pipeline.py`: `run()` recebe `raw_dfs` opcional; chama `load_from_dfs` se fornecido
- `src/routing_engine/ingest.py`: adicionada função `load_from_dfs()` com normalização de sinônimos de colunas
---
## [0.0.x] — antes de 2026-06-13
Commits iniciais do repositório: estrutura de pastas, configuração de CI, scripts de inspeção de arquivos, engine de otimização (config, ingest, network_generator, optimizer, maintenance_monitor, metrics, pipeline, quality).