separador-rreo
Biblioteca e CLI em Python para separar anexos RREO publicados em diários oficiais da FEMURN (Federação dos Municípios do Rio Grande do Norte).
A partir de um PDF do diário com texto selecionável, o pacote:
- Localiza cabeçalhos
PREFEITURA MUNICIPAL DE … - Reconhece títulos de anexos RREO (padrões observados em publicações como Angicos, Bodó e Coronel João Pessoa)
- Recorta cada anexo em PDF individual por município
- Gera a planilha
Controle_Publicacoes.xlsxpara conferência manual - Empacota tudo em um
.zip
Instalação
pip install separador-rreo
Em desenvolvimento (clone local):
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Uso pela linha de comando
separador-rreo diario.pdf --municipios "Bodó" "Coronel João Pessoa" "Angicos"
Opções:
| Opção | Descrição |
|---|---|
pdf |
Caminho do diário FEMURN (obrigatório se houver mais de um PDF na pasta) |
--municipios |
Um ou mais nomes de municípios |
--saida |
Pasta de saída (padrão: RREO_separados) |
--version |
Mostra a versão |
Sem argumentos, o comando pergunta interativamente pelo PDF e pelos municípios:
separador-rreo
Também é possível executar como módulo:
python -m separador_rreo diario.pdf --municipios "Bodó"
Saída gerada
RREO_separados/
├── BODO/
│ ├── RREO_01_BODO.pdf
│ ├── RREO_03_BODO.pdf
│ └── …
├── Controle_Publicacoes.xlsx
RREO_separados.zip
A coluna Situacao da planilha indica:
Encontrado— recorte delimitado pelo código identificadorVerificar limite final— código ausente; vale conferência manualNao localizado— anexo não encontrado para aquele município- variações com
partes reunidas/multiplas publicacoesquando há fusão ou mais de uma publicação
Uso como biblioteca
from separador_rreo import SeparadorRreo, separar
# Atalho completo (analisa + exporta)
resultado = separar(
"diario.pdf",
municipalities=["Bodó", "Angicos"],
destination="saida_rreo",
)
print(resultado.pdf_count, resultado.spreadsheet, resultado.zip_path)
# Ou em duas etapas / com mais controle
app = SeparadorRreo()
analysis, export = app.run(
"diario.pdf",
municipalities=["Bodó"],
destination="saida_rreo",
)
for finding in analysis.for_municipality("Bodó"):
print(finding.annex, finding.page_start, finding.page_end, finding.status)
Extensão (Open/Closed)
Você pode acrescentar heurísticas de reconhecimento sem alterar o analisador:
from separador_rreo import AnexoRecognizer, SeparadorRreo
from separador_rreo.analyzer import RreoAnalyzer
def minha_heuristica(linha: str) -> int | None:
if "MEU PADRAO DE ANEXO 9" in linha.upper():
return 9
return None
recognizer = AnexoRecognizer(heuristics=[minha_heuristica])
app = SeparadorRreo(analyzer=RreoAnalyzer(recognizer=recognizer))
Requisitos
- Python 3.10+
- Dependências:
pymupdf,openpyxl - PDF com texto selecionável (OCR prévio se o diário for só imagem)
Testes
pytest
Para um teste de integração com um diário real:
separador-rreo /caminho/publicado.pdf --municipios "Bodó" --saida /tmp/rreo_out
Publicação (PyPI)
Local (com token em ~/.pypirc)
cp .pypirc.example ~/.pypirc # edite e cole os tokens
chmod 600 ~/.pypirc
./scripts/release.sh test # ensaio no TestPyPI
./scripts/release.sh pypi # publicação oficial
GitHub Actions
- Em Settings → Secrets and variables → Actions, crie:
PYPI_API_TOKEN— token do PyPITEST_PYPI_API_TOKEN— token do TestPyPI
- Publique um Release no GitHub (tag
v0.1.0, etc.) → workflow Publish to PyPI - Ou rode o workflow manualmente (Actions → Publish to PyPI → Run workflow) escolhendo
testpypioupypi
Antes de cada release, atualize version em pyproject.toml.
Autores
- Ana Cláudia Medeiros de Carvalho (autora principal) — anaclaudiaengmat@gmail.com
- Yuri Sales — yuri.sales@protonmail.com
Licença
MIT — veja LICENSE.
Metadata
Release files for separador-rreo 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| separador_rreo-0.1.0.tar.gz | 13.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| separador_rreo-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.4 MB
Release files / separador_rreo-0.1.0.tar.gz
| Download URL | separador_rreo-0.1.0.tar.gz |
|---|---|
| Size | 13.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87428b4c9aef2c0fcfa553d0c5b8d4109a7a92456b7000f5a1868f33ffa3a54b
|
|
BLAKE2b-256 checksum How to use checksums |
9d7c8204b1f53ce8fd07c33661d0c367a1b0330ed7bc5ef501814420daafbce6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / separador_rreo-0.1.0-py3-none-any.whl
| Download URL | separador_rreo-0.1.0-py3-none-any.whl |
|---|---|
| Size | 15.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
baea4c712b28fb492b8e35bf535821d08f7dd31c669b0e6024eee13c5bc83687
|
|
BLAKE2b-256 checksum How to use checksums |
886c41ee6988d1df470279986031083062cceb676dc601673a478d20aa1021f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|