- LOG.md: entradas para bugs corrigidos (C2 inspeção, C6 removida), renomeação Al-Thani, OFRAG, visualização e rodada 50/50 - docs/changelog.md: versão v0.7 com correções, adições e resultado validado - docs/about.md: seção v3 com rede espaço-tempo, nomenclatura Al-Thani, restrições C1-C11 e scripts auxiliares; v1 mantido como referência histórica - README.md: estado atual aponta oamrp_v3 como modelo ativo, com comandos Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
10 KiB
Documentação Técnica — Arara OAMRP
O que é
O Arara OAMRP é um projeto para organizar dados, documentos e modelos usados no planejamento e acompanhamento operacional do Esquadrão Arara, em Manaus.
O objetivo é construir uma base rastreável para encaixar missões, aeronaves e manutenções, começando pela leitura e estruturação de documentos operacionais e de manutenção.
Nesta fase inicial, o projeto contém:
- documentos originais em
db/raw/; - scripts e saídas intermediárias em
db/pre_process/; - área reservada para dados finais em
db/processed/; - protótipos de otimização e análise em
software/; - documentação de contexto, autoria, mudanças e rastreabilidade.
Fontes de dados
As fontes atuais são documentos operacionais e de manutenção adicionados manualmente ao repositório.
Fonte inicial processada:
| Arquivo | Conteúdo | Observação |
|---|---|---|
db/raw/relatorio_ciclo_inspecoes_c105_2805_2026-06-15.pdf |
Relatório de ciclo de inspeções do equipamento | Aeronave C-105, matrícula 2805, relatório de 2026-06-15 |
Arquivos originais devem permanecer em db/raw/ sem edição direta.
Como funciona
O fluxo atual é:
- Guardar documentos originais em
db/raw/. - Executar scripts de extração e padronização em
db/pre_process/. - Gerar saídas intermediárias em texto, JSON e CSV.
- Manter campos originais para rastreabilidade.
- Separar campos discretos úteis para cálculo, comparação e planejamento.
- Registrar mudanças relevantes em
LOG.md. - Consolidar dados finais em
db/processed/quando os critérios de qualidade estiverem definidos. - Desenvolver protótipos e modelos em
software/, mantendo dados e código separados.
Pré-processamento atual
O script db/pre_process/relatorio_ciclo_inspecoes_c105_2805_2026-06-15/preprocess_pdf.py lê o relatório de ciclo de inspeções em PDF e gera:
db/pre_process/relatorio_ciclo_inspecoes_c105_2805_2026-06-15/relatorio_ciclo_inspecoes_c105_2805_2026-06-15_texto.txt
db/pre_process/relatorio_ciclo_inspecoes_c105_2805_2026-06-15/relatorio_ciclo_inspecoes_c105_2805_2026-06-15_inspecoes.json
db/pre_process/relatorio_ciclo_inspecoes_c105_2805_2026-06-15/relatorio_ciclo_inspecoes_c105_2805_2026-06-15_inspecoes.csv
Modelo OAMRP v3 (modelo atual)
O arquivo software/oamrp_v3.py é o modelo principal. Implementa o Operational Aircraft Maintenance Routing Problem (Al-Thani, Ben Ahmed, Haouari, 2016, Transportation Research Part C, vol. 72, pp. 29–44) sobre uma rede espaço-tempo com arcos de ferry.
Rede espaço-tempo
A rede tem quatro tipos de nó:
| Tipo | Descrição |
|---|---|
origem |
Nó de partida de cada aeronave (base inicial, t=0) |
missao |
Uma missão específica; aeronave_id=None (qualquer aeronave pode voar) |
inspecao |
Nó de manutenção; exclusivo de uma aeronave (aeronave_id=k) |
sumidouro |
Nó de chegada ao fim do horizonte |
Os arcos são: inicio, missao_missao, missao_insp, insp_missao, missao_fim e ferry (quando bases forem distintas). Ferry usa velocidade 430 km/h e distância haversine.
Nomenclatura (Al-Thani, 2016)
| Símbolo | Significado | Campo no código |
|---|---|---|
| F | Intervalo máximo legal entre manutenções | InspecaoParam.f_max |
| f_k | Horas acumuladas no início | Aeronave.f0 |
| LRT = F − f_k | Tempo legal restante (decresce) | lrt_inicial() |
| H[k,i,nid] | Horas acumuladas em tempo real (cresce, reseta na inspeção) | H[k,seq,nid] |
Restrições implementadas
- C1: cada missão coberta por no máximo uma aeronave.
- C2: conservação de fluxo em nós de missão e inspeção.
- C3: continuidade espacial (base de chegada = base de partida do próximo arco; ferry gerado automaticamente).
- C4: continuidade temporal (partida ≥ chegada + TAT 1,5h).
- C5: missões EVAM (
obrigatoria=True) devem ser cumpridas. - C6:
H[k,i,nid] ≤ f_maxpara cada tipo de inspeção, com reset após nó de inspeção. - C9: downtime de inspeção (aeronave fica indisponível durante o slot de manutenção).
- C11: slot único de inspeção por base — no máximo uma aeronave em manutenção a cada instante.
Objetivos
- L1: maximizar cobertura ponderada
Σ prioridade_m × z_m(missões cobertas). - L2: maximizar horas voadas, dado o L1 fixado.
Execução típica
python software/oamrp_v3.py --sintetico --seed 42 --aleatorio --ofrag db/processed/ofrag.csv
Gera missões sintéticas cross-base, sorteia f0 aleatório e carrega prioridades do OFRAG.
Scripts auxiliares
| Script | Função |
|---|---|
software/gerar_ofrag.py |
Gera db/processed/ofrag.csv com ordens de missão (OFRAG), prioridades 1–5 e tipo |
software/visualizar_resultado.py |
Lê o CSV de resultado e gera db/processed/mapa_rotas.html (mapa Folium interativo) |
Resultado validado (2026-06-16)
Rodada sintética com 50 missões, seed 42, horas iniciais aleatórias e OFRAG: 50/50 missões cumpridas, solver CBC Optimal, todas as 4 EVAMs operacionais.
Modelo OAMRP v1 (protótipo inicial)
O arquivo software/oamrp_v1.py contém o protótipo inicial, substituído pelo v3. Mantido no repositório para referência histórica.
Campos extraídos e estruturados:
| Campo | Conteúdo |
|---|---|
seq |
Sequência da inspeção no relatório |
sigla_mnt |
Sigla da manutenção |
descricao_mnt |
Descrição da manutenção |
referencia |
Referência textual da inspeção |
tipo_vencimento |
Tipo de vencimento |
zera_tso |
Coluna original Zera TSO |
letra |
Letra da inspeção, quando preenchida |
nivel |
Código do nível |
nivel_descricao |
Descrição do nível |
var_media |
Variação média informada no relatório |
duracao |
Duração original, por exemplo 3 D ou 6 H |
duracao_valor |
Valor numérico da duração |
duracao_unidade |
Unidade normalizada: dias ou horas |
controle_original |
Trecho original usado para rastreabilidade |
intervalo_horas_voo |
Intervalo textual em horas de voo |
intervalo_horas_voo_valor |
Valor numérico de horas de voo |
intervalo_meses_continuos |
Intervalo textual em meses contínuos |
intervalo_meses_continuos_valor |
Valor numérico de meses contínuos |
intervalo_pousos |
Intervalo textual em pousos |
intervalo_pousos_valor |
Valor numérico de pousos |
linha_original |
Linha reconstruída a partir do texto extraído |
Convenções operacionais
Níveis de manutenção:
| Código | Descrição |
|---|---|
B |
Base |
P |
Parque |
O |
Orgânico |
Unidades de duração:
| Código | Descrição |
|---|---|
D |
Dias |
H |
Horas |
Limitações conhecidas
- A extração depende da qualidade do PDF e do texto recuperado por
pdfplumber. - O parser foi calibrado para o layout atual do relatório de ciclo de inspeções.
- Mudanças no formato do relatório podem exigir ajuste no script.
- A grafia original é preservada, inclusive erros existentes no documento fonte.
- Ainda não há validação cruzada com outros sistemas ou fontes oficiais.
- O modelo em
software/oamrp_v1.pyainda é protótipo e usa dados de exemplo a substituir por bases reais. - Ainda não há modelo final em
db/processed/para integração completa entre missões, aeronaves e manutenções.
Oportunidades de melhoria
| Prioridade | Melhoria |
|---|---|
| Alta | Definir o modelo final de dados em db/processed/ |
| Alta | Criar uma tabela mestre de aeronaves |
| Alta | Criar uma tabela mestre de missões |
| Alta | Definir regras para cálculo de vencimento por horas, meses e pousos |
| Média | Criar testes automatizados para o parser de PDF |
| Média | Padronizar nomes de colunas entre todos os documentos |
| Média | Criar relatórios de inconsistências e campos ausentes |
| Baixa | Criar interface simples para consulta e atualização |
Solução de problemas
Se o pré-processamento falhar, verifique:
- se o PDF existe em
db/raw/; - se o nome do arquivo no script corresponde ao arquivo real;
- se as bibliotecas Python necessárias estão instaladas;
- se o layout do PDF mudou;
- se o texto extraído em
_texto.txtcontém as linhas esperadas.
Para reexecutar o pré-processamento:
python db/pre_process/relatorio_ciclo_inspecoes_c105_2805_2026-06-15/preprocess_pdf.py
Registro de voo 2025
O arquivo db/raw/Planilha 2025.xlsx foi pre-processado por db/pre_process/registro_voo_2025/preprocess_planilha_2025.py.
O processamento gera duas visoes principais:
db/processed/registro_voo_2025.csv: registro limpo, preservando a granularidade das linhas originais relevantes.db/processed/registro_voo_2025_consolidado.csv: registro consolidado para roteamento, comROTAtratado como marcador de transicao.
Tambem sao gerados CSVs no formato esperado pelo prototipo OAMRP:
db/pre_process/registro_voo_2025/missoes_oamrp_2025.csv
db/pre_process/registro_voo_2025/missoes_oamrp_2025_consolidado.csv
Criterios aplicados:
- colunas entre
REALeCOM2descartadas; - datas de 2025 normalizadas para formato ISO e
dd/mm; - horarios tratados como UTC/Z;
- chegadas iguais ou anteriores a partida deslocadas para o dia seguinte;
- transicoes com
ROTAconsolidadas em origem/destino reais; - linha original 793, aeronave 2806, excluida dos artefatos processados;
SEGMTOpreservado como campo original, sem recalculo automatico.
O relatorio de validacao esta em:
db/pre_process/registro_voo_2025/validacao_registro_voo_2025.md
Modelo OAMRP v2
O arquivo software/oamrp_v2.py e a primeira versao do modelo usando o registro de voo 2025 consolidado.
Entradas principais:
db/processed/registro_voo_2025_consolidado.csv;- janela padrao de
2025-01-01ate2025-02-01exclusivo; - aeronaves reais
2800,2803,2809e2811; - base inicial provisoria
SBMN; - base de manutencao
SBMN; - prioridade uniforme: todas as missoes recebem peso 1.
Saida principal:
db/processed/resultado_oamrp_jan_2025.csv
Resultado da primeira execucao:
- status do solver:
Optimal; - missoes cumpridas: 50/61;
- prioridade obtida: 50/61.
Limitacao atual: o limite de horas foi deixado alto para validar primeiro a continuidade espacial/temporal. A calibracao com dados reais de manutencao ainda deve ser feita em etapa posterior.