Skip to main content

vra-anac

testes PyPI Python licença: MIT

Quantos voos domésticos chegaram no horário, por voo, rota, companhia ou aeroporto, a partir do arquivo mensal do VRA (Voo Regular Ativo) da ANAC. Lê o CSV como a ANAC publica e aplica a mesma régua do chegounahora.com.br: no horário = chegada até 15 min depois da prevista.

Só a biblioteca padrão do Python, sem rede: você baixa o CSV, ela faz a conta.

O comando vra-anac lê o CSV de agosto/2026 da ANAC e mostra a pontualidade por companhia e por rota

Instalar

pip install vra-anac

Ou uma versão exata, pela tag do GitHub:

pip install "git+https://github.com/peterwkdev-creator/vra-anac@v0.1.0"

Python 3.11 ou mais novo.

Usar

import vra_anac

# o CSV do mês que você baixou da ANAC (aqui, a amostra dos testes)
atualizado, voos = vra_anac.ler_arquivo("tests/fixtures/vra-amostra.csv")
t = vra_anac.tabelas()

for chave, c in vra_anac.agrupar(voos, por="voo").items():
    print(f"{t.rotulo(chave)}: {c.pct('chegada')}% no horário (n = {c.n})")
# G3 1015 SDU→CGH: 100% no horário (n = 1)
# G3 1016 CGH→SDU: 0% no horário (n = 2)
# ...

Pela linha de comando, a tabela do mês (ou --json):

vra-anac VRA_20268.csv --por companhia
VRA da ANAC, 08/2026 (arquivo atualizado em 2026-10-07): 68.355 voos domésticos regulares, 1 fora do mês.
No horário = chegada até 15 min depois da prevista. Só os grupos com 20 voos ou mais.

no horário  cancelado    voos  companhia
       87%         1%  23.080  Azul (AZU)
       84%         2%  20.295  GOL (GLO)
       78%         1%  23.850  LATAM (TAM)
       76%        16%   1.098  Azul Conecta (ACN)
        0%       100%      24  Apuí Táxi Aéreo (CQB)

Dados: ANAC, Voo Regular Ativo (VRA), licença CC-BY. https://www.gov.br/anac/...

--por aceita voo (padrão), rota, companhia, origem e destino; --minimo (padrão 20) deixa de fora o grupo com poucos voos, que oscila por acaso de um mês para o outro.

Onde baixar o CSV

Na página do Voo Regular Ativo (VRA) da ANAC, um arquivo por mês (VRA_AAAAM.csv, o mês sem zero). A ANAC publica com cerca de 4 semanas de atraso.

O que a conta faz

  • Voo doméstico regular: tipo de linha N e código de autorização 0. Extras, fretamentos e voos internacionais ficam de fora.
  • No horário: chegada real até 15 min depois da prevista; adiantado conta como no horário. A partida tem o mesmo critério, ao lado (c.pct("partida")).
  • Faixas: até 30 min, até 60 min, mais de 60 min e cancelado (c.distribuicao("chegada")). O atraso é contado em segundos inteiros: 30 min exatos ficam na faixa de até 30.
  • Cancelado conta no total e nunca como no horário.
  • Porcentagem arredondada com o meio para cima (12,5 → 13).
  • O voo é empresa + número + origem + destino. O número sai sem o Z que o VRA às vezes põe na frente (Z1001 e 1001 são o mesmo voo vendido). Isso é inferência, conferida em alguns voos contra o horário publicado pela companhia, não regra escrita da ANAC.
  • O mês sai das datas das linhas, não do nome do arquivo; o que cai em outro mês aparece contado à parte (vra_anac.periodo).
  • Os horários são os do arquivo, em Brasília.

O que vem junto

As tabelas que levam o código ICAO do VRA ao que aparece no bilhete (GLO → G3, SBSP → CGH Congonhas): companhias do cadastro da ANAC e do diretório da IATA, e aeroportos da lista de aeródromos públicos da ANAC e do OurAirports (domínio público). Cada linha cita a fonte e a data da consulta (t.companhias, t.aeroportos). Código fora da tabela aparece como veio no arquivo.

Como é testado

python -m unittest, do checkout, sem instalar nada. A amostra dos testes tem linhas reais do VRA de julho/2026, com os bytes do arquivo da ANAC (BOM e CRLF), e cada número esperado foi contado à mão. O CI roda do Python 3.11 ao 3.14 e no Windows, e instala o pacote num ambiente limpo antes de cada versão.

Fontes e limites

  • Dados: ANAC, Voo Regular Ativo (VRA), licença CC-BY. Quem publicar resultado feito com esta biblioteca precisa dar o crédito à ANAC; a linha de comando já escreve a atribuição na saída.
  • Esta biblioteca não é da ANAC nem de companhia aérea. O resultado mostra o que aconteceu no mês, não prevê o próximo voo.
  • O VRA não traz o motivo do atraso (o campo de justificativa vem vazio).

Contribuir

Ver o CONTRIBUTING.md. Resultado diferente da sua conta: abra uma issue pelo modelo "Resultado diferente do esperado".

Licença

Código sob a licença MIT. Os dados do VRA são da ANAC, sob CC-BY.

Metadata

Release files for vra-anac 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vra-anac 0.1.0
File Size Uploaded
vra_anac-0.1.0.tar.gz 29.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vra-anac 0.1.0
File Interpreter ABI Platform
vra_anac-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 52.6 kB

Release files / vra_anac-0.1.0.tar.gz

Download URL vra_anac-0.1.0.tar.gz
Size 29.7 kB
Tags Source
SHA-256 checksum
How to use checksums
033ba4ae86f07c2b7aedc412dbb4c6a8bfa9fe43a12fdd75ceff69d79ba57e73
BLAKE2b-256 checksum
How to use checksums
0e6dde988abb876d49ab8eb03a3bc4c4406589d14933436e4c681e071baeb4ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Release files / vra_anac-0.1.0-py3-none-any.whl

Download URL vra_anac-0.1.0-py3-none-any.whl
Size 22.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
018e4321d91ca35b025cbab11005b9956d194b3d6474b2c75b85b4eda06d31c3
BLAKE2b-256 checksum
How to use checksums
93e8bf7a193dbaa43551792df8867061e2664dc40bdead3d8b8c3f30b840dc15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page