Skip to main content

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:

  1. Localiza cabeçalhos PREFEITURA MUNICIPAL DE …
  2. Reconhece títulos de anexos RREO (padrões observados em publicações como Angicos, Bodó e Coronel João Pessoa)
  3. Recorta cada anexo em PDF individual por município
  4. Gera a planilha Controle_Publicacoes.xlsx para conferência manual
  5. 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 identificador
  • Verificar limite final — código ausente; vale conferência manual
  • Nao localizado — anexo não encontrado para aquele município
  • variações com partes reunidas / multiplas publicacoes quando 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

  1. Em Settings → Secrets and variables → Actions, crie:
    • PYPI_API_TOKEN — token do PyPI
    • TEST_PYPI_API_TOKEN — token do TestPyPI
  2. Publique um Release no GitHub (tag v0.1.0, etc.) → workflow Publish to PyPI
  3. Ou rode o workflow manualmente (Actions → Publish to PyPI → Run workflow) escolhendo testpypi ou pypi

Antes de cada release, atualize version em pyproject.toml.

Autores

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)

Source distribution for separador-rreo 0.1.0
File Size Uploaded
separador_rreo-0.1.0.tar.gz 13.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for separador-rreo 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

0.3.0

2 release files

0.2.0

2 release files

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