contas-municipais
Framework Python para extração e parsing de relatórios financeiros de municípios portugueses.
Suporta os dois sistemas contabilísticos usados pelas autarquias locais:
- POCAL — Plano Oficial de Contabilidade das Autarquias Locais (até 2017)
- SNC-AP — Sistema de Normalização Contabilística para as Administrações Públicas (desde 2018)
Instalação
pip install contas-municipais
Recomenda-se também instalar poppler para melhor extração de texto (pdftotext):
# macOS
brew install poppler
# Ubuntu/Debian
apt-get install poppler-utils
Utilização rápida
from pathlib import Path
from contas_municipais import extract_text, slice_section, parse_budget_table
from contas_municipais.sncap import REVENUE_CATEGORIES, EXPENDITURE_CATEGORIES
text = extract_text(Path("relatorio_gestao_2023.pdf"))
rev_section = slice_section(text, "quadro 1", "1.2 execução da despesa")
exp_section = slice_section(text, "1.2 execução da despesa", "2.")
receita = parse_budget_table(rev_section, REVENUE_CATEGORIES, year=2023)
despesa = parse_budget_table(exp_section, EXPENDITURE_CATEGORIES, year=2023)
for row in receita:
print(row["label_pt"], row["executed_amount"])
Município de referência
O pacote inclui um parser validado para Lousada (NIF 505279460), com cobertura de 2012 a 2024:
from pathlib import Path
from contas_municipais.municipalities.lousada import parse
result = parse(year=2023, files={
"relatorio_gestao": Path("relatorio_gestao_2023.pdf"),
"prestacao_contas": Path("prestacao_contas_2023.pdf"),
})
print(result.revenue)
print(result.expenditure)
Os ficheiros necessários variam por ano. Consulte o docstring de cada módulo y20XX.py para os detalhes.
Estrutura do pacote
contas_municipais/
├── base.py # Utilitários de extração e parsing
├── sncap/
│ ├── __init__.py # Documentação do formato SNC-AP
│ └── categories.py # Mapas de categorias (receita e despesa)
├── pocal/
│ ├── __init__.py # Documentação do formato POCAL
│ └── categories.py # Mapas de categorias (receita e despesa)
└── municipalities/
└── lousada/ # Parser de referência (2012–2024)
API principal
extract_text(pdf_path: Path) -> str
Extrai texto de um PDF com fallback automático entre pdftotext -layout e pdfplumber.
slice_section(text, start, end) -> str
Isola uma secção do texto entre dois marcadores (case-insensitive).
parse_budget_table(section_text, category_map, year, ...) -> list[dict]
Faz o parsing de uma tabela orçamental (receita ou despesa). Devolve uma lista de dicts com os campos year, category, label_pt, is_subcategory, budget_amount, executed_amount, execution_pct, global_pct.
Os índices de coluna são configuráveis via col_budget, col_executed, col_exec_pct, col_global_pct para acomodar diferenças entre formatos.
find_numbers(line: str) -> list[float]
Extrai números em formato português (1.234.567,89) de uma linha de texto.
Adicionar o seu município
Consulte CONTRIBUTING.md para um guia passo a passo.
Licença
MIT © Open Lousada
Metadata
Release files for contas-municipais 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 | Provenance | |
|---|---|---|---|---|
| contas_municipais-0.1.0.tar.gz | 146.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| contas_municipais-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 207.2 kB
Release files / contas_municipais-0.1.0.tar.gz
| Download URL | contas_municipais-0.1.0.tar.gz |
|---|---|
| Size | 146.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1763a844e66b4d5ab4a9169c34cdcb0944c18442c359f2cc936d5b7ae44520a8
|
|
BLAKE2b-256 checksum How to use checksums |
59277de68100bf0f6df322fc9f70b60df1e3758a4f5aed4eac5bf1c6eb9875e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / contas_municipais-0.1.0-py3-none-any.whl
| Download URL | contas_municipais-0.1.0-py3-none-any.whl |
|---|---|
| Size | 60.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e50e3f4a7e1438bb13fcd3235b0b73502dc6256c16f55728c4d2139a866ec72
|
|
BLAKE2b-256 checksum How to use checksums |
076c5df2f2bed30421503b66b711a165e578cb5074c70c2267ee9591d453691c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Security for contas-municipais 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.