# 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).