O mapa do licenciamento urbanístico na Câmara da Nazaré
1 834 deliberações, 29 atas em silêncio.
2017–2026: 2 017 deliberações de licenciamento urbanístico, três quartos delas depois de 2021
Entre a primeira ata indexada (6 de Janeiro de 2017) e a última (10 de Março de 2026), a Câmara Municipal da Nazaré produziu 2 017 deliberações com conteúdo de licenciamento, urbanismo, moradia, edificação ou loteamento — apurado sobre 245 atas e 7 689 deliberações no total. Ou seja: cerca de uma em cada quatro decisões do executivo cabe neste domínio.
A fotografia é desigual. Durante os mandatos 2017–2021 o licenciamento urbanístico concentrou-se em poucas atas, geralmente monotemáticas. A partir de Outubro de 2021 tornou-se rotina de quase todas as sessões.
Query (polis_ai v0.7, quantitative_mode): "quantas deliberações de licenciamento urbanístico em 2023?" SQL gerado:
SELECT COUNT(DISTINCT f.chunk_id) FROM facts f JOIN fact_topicos ft … WHERE tipo_chunk='deliberacao' AND label_deac LIKE '%licenciamento urbanistico%' AND data_reuniao BETWEEN '2023-01-01' AND '2023-12-31'. Resultado: 24. A pipeline devolveu citações para as 5 atas-fonte mais recentes (28/2023, 27/2023, 24/2023, 23/2023 — com páginas exactas).
Volume anual: o ponto de inflexão foi 2022
| Ano | Atas | Atas c/ licenciamento | Deliberações totais | Deliberações de licenc. | % do total |
|---|---|---|---|---|---|
| 2017 | 28 | 7 | 748 | 261 | 34,9% |
| 2018 | 29 | 5 | 584 | 231 | 39,6% |
| 2019 | 27 | 2 | 189 | 56 | 29,6% |
| 2020 | 27 | 5 | 248 | 61 | 24,6% |
| 2021 | 24 | 11 | 644 | 149 | 23,1% |
| 2022 | 27 | 21 | 1 044 | 241 | 23,1% |
| 2023 | 26 | 23 | 1 293 | 328 | 25,4% |
| 2024 | 28 | 24 | 1 371 | 297 | 21,7% |
| 2025 | 24 | 16 | 1 378 | 346 | 25,1% |
| 2026* | 5 | 5 | 190 | 47 | 24,7% |
Dados até 10/03/2026. Fonte: facts.db tabela facts (cruzada com fact_topicos + topicos por padrões %licenc%, %urban%, %moradia%, %edific%, %loteamento%).
Dois factos saltam à vista. Primeiro, a quebra 2019–2020: apenas 2 e 5 atas com deliberações de licenciamento, quando a média dos anos adjacentes ronda as 15 a 20. O total de deliberações em 2019 caiu para 189 (contra 748 em 2017) — é sparsity genuína, não falha de extracção. Factor provável: reuniões mais curtas nos períodos de confinamento e final de mandato. Segundo: a partir de 2022 o licenciamento urbanístico instala-se em 21 das 27 atas anuais, e em 2024 em 24 das 28. Deixa de ser um ponto ocasional e passa a ser matéria recorrente do executivo.
Por mandato: mais licenciamentos, diluídos em mais atas
| Mandato | Atas c/ licenc. | Chunks de licenciamento |
|---|---|---|
| 2017 – Out 2021 | 30 | 703 |
| Out 2021 – Out 2025 | 82 | 1 145 |
| Out 2025 – ... | 9 | 169 |
No mandato 2017–2021, 703 chunks de licenciamento distribuíram-se por apenas 30 atas — média de 23 chunks por ata em que o tema entrou. No mandato seguinte, 1 145 chunks repartiram-se por 82 atas — cerca de 14 chunks por ata. A Câmara não passou a delegar menos: passou a decidir menos por sessão e a regularizar o tema em cada agenda.
Tipologia: edificação manda, moradia unifamiliar é metade disso
Contabilizando por tópicos extraídos das deliberações (tabela topicos cruzada com fact_topicos, filtros literais em label_deac):
| Categoria de obra | Deliberações |
|---|---|
| Edificação (geral) | 354 |
| Legalização | 122 |
| Urbanização | 115 |
| Moradia unifamiliar | 103 |
| Loteamento | 95 |
| Caducidade de licença | 67 |
Legalização ocupa o segundo posto — a taxa a que a Câmara tem de voltar atrás e enquadrar obras já feitas é comparável à taxa a que aprova novas urbanizações. Caducidade, um sinal de obras iniciadas mas não concluídas, é suficientemente frequente para merecer tópico próprio (67 registos).
Alojamento local: picos de 20 licenciamentos por ano
Alojamento local é um tópico paralelo mas relevante para o urbanismo da Nazaré. Entre 2018 e 2025, a Câmara deliberou entre 10 e 20 licenciamentos de alojamento local por ano, com um mínimo pontual de 10 em 2019 e três anos empatados no topo (2018, 2022, 2023 — 20 cada). Total no período: 136.
Geografia: onde se constrói
Das entidades de tipo local associadas a deliberações de licenciamento urbanístico (tabela entidades + fact_entidades), o quadro é o esperado:
| Localidade | Menções em deliberações |
|---|---|
| Famalicão (+ variantes) | 84 |
| Valado dos Frades | 51 |
| Pederneira | 30 |
| Sítio da Nazaré | 27 |
| Serra da Pescaria | 14 |
| Casal Mota | 14 |
| Praia da Nazaré | 13 |
| Raposos | 10 |
| Fanhais (+ Fanhaes) | 14 |
Menções à "Nazaré" isolada foram excluídas — 357 registos, quase todos genéricos.
A Famalicão (da Nazaré) continua a absorver o maior número de referências explícitas em actos de licenciamento, seguida de Valado dos Frades. Pederneira e Sítio, os dois núcleos históricos, aparecem próximos. Praia da Nazaré, pelo contrário, tem pouca presença no registo — não porque não se licencie lá, mas porque os pontos na praia tendem a ser descritos por topónimo de rua ou propriedade, não por bairro.
A Divisão de Planeamento Urbanístico pesa
A entidade mais citada em chunks de deliberação de licenciamento é a Divisão de Planeamento Urbanístico — 810 menções. Segue-se Paulo Reis (387) e Fátima Duarte (334), ambos intervenientes recorrentes. A Divisão é referida não apenas como departamento técnico mas como autor do parecer: os argumentos "informação técnica favorável" (73), "informação técnica da divisão de planeamento urbanístico" (56) e "parecer técnico favorável" (41) estão entre os mais citados. Nove em cada dez deliberações de licenciamento encostam-se a um parecer que vem deste gabinete.
Votação: aparente unanimidade, divergência sistemática do PSD
A estrutura de fact_votes regista declarações de voto fundamentadas (não os totais de deliberação). No corpus inteiro, a distribuição é esta:
| Partido | Favorável | Contra | Abstenção |
|---|---|---|---|
| PSD | 437 | 43 | 43 |
| PCP/CDU | 586 | 12 | 12 |
| PS | 0 | 1 | 4 |
| Chega | 1 | 0 | 0 |
O PSD é o único partido cuja soma de votos contra ou abstenções ultrapassa um quinto do total — 86 em 523 declarações, 16,4%. No PCP/CDU, a mesma proporção é 4%. O PS declara voto muito pouco (só cinco vezes no período), sempre para contra ou abstenção.
Restringindo a declarações de voto associadas a pontos com tópico de licenciamento urbanístico (35 para o PSD, 8 para o PCP/CDU, 11 para o PS), o padrão fica ainda mais marcado no PSD: 7 contra, 6 abstenções e 5 favoráveis justificadas — isto é, em 18 declarações oficiais do PSD sobre licenciamento, 13 foram para registar desconforto. O PCP/CDU, em chunks de licenciamento, declara 3 contra, 1 abstenção e 1 favorável.
Outliers: quando a oposição declara um voto por cada ponto da agenda
Há pontos de agenda com um número de declarações anormalmente elevado:
- Ponto 41/2024 e ponto 58/2024, ambos na ata 02/2024 (22/01/2024): 36 e 35 chunks de declaração de voto.
- Pontos 152/2023 e 141/2023, ata 05/2023 (27/02/2023): 35 chunks cada.
- Uma série contígua (425/2023 a 439/2023), ata 15/2023 (03/07/2023): 33 chunks por ponto.
O padrão é claro: em sessões de "tapete" (blocos de 15+ licenciamentos votados em série), o PSD apresenta uma única declaração de voto que cobre o bloco inteiro, e a extracção de factos agarra-se a cada ponto referenciado. A peça materialmente é uma, mas estatisticamente expande-se. Vale a pena ler uma: Ata 07/2023, 27/03/2023, traz um bloco de 17 pontos consecutivos (216/2023 a 233/2023) todos com a mesma declaração "favorável, mas..." do PSD.
O que a unanimidade esconde
Quando um vereador apresenta uma declaração de voto favorável, a deliberação vai constar como unanimidade — mas os 1 711 chunks de declaração de voto no corpus (1 711 em 20 809, ou 8,2% de todos os factos extraídos) contam outra história. O corpus revela declarações favoráveis usadas para vincar posições: "boa-fé do eleito" (21), "conformidade legal" (38), "cumprimento legal" (39) são argumentos recorrentes em declarações favoráveis do PSD. Serve, na prática, de carimbo diferenciador: "votei a favor, mas quero registado que só por respeito pelo parecer técnico".
O PCP/CDU tem 586 declarações favoráveis e o PSD 437 — conjuntamente são 80% de todas as declarações de voto produzidas no período. É um executivo com maioria de esquerda onde a oposição escolhe fundamentar o voto favorável em vez de votar contra: os 43 votos PSD claramente contra são excepção, não regra.
Sazonalidade
Por mês, as deliberações de licenciamento distribuem-se de forma não-uniforme: Junho (233), Fevereiro (206), Outubro (221) e Novembro (217) puxam para cima; Julho (101), Agosto (104), Maio (128) e Dezembro (135) puxam para baixo. A depressão de Verão é o padrão esperado (menos reuniões, cadência de férias). Mas Junho destacar-se no topo, pouco antes dessa paragem, sugere que há uma lógica de limpeza de agenda antes do Verão.
Metodologia e limites
Pipeline utilizada. alva v0.7 (2026-04-22): count.py --natural (NL → SQL contra facts.db, qwen3-35b-a3b local via llama.cpp em :8080) + polis_ai.py em quantitative_mode (mesma NL → SQL, mas com bloco de citações ancorado às top-5 fontes por data descendente). Para verificação cruzada e consultas estruturais (agregados multi-coluna, GROUP BY aninhados), SQL directo em SQLite read-only.
Tabelas de facts.db efectivamente usadas.
atas— data, n.º, fonte PDF, número de páginas.facts—tipo_chunk ∈ {intervencao, deliberacao, declaracao_voto},speaker_canonical,partido,pagina_inicio/fim,data_reuniao.fact_votes— apenas liga adeclaracao_voto, não adeliberacao: para cada chunk, ponto(s) evote_type.fact_topicos+topicos— rótulos normalizados (label_deaccom deaccent).fact_entidades+entidades— para agregação geográfica (tipolocal).fact_argumentos+argumentos— para a análise dos fundamentos de voto.
Consultas executadas: 22 queries (13 via count.py --natural ou polis_ai.py quantitative_mode, 9 via SQL directo). Total de linhas de resultado inspeccionadas: ~1 200.
O que a sidecar não permitiu responder.
- Outcome da deliberação (deferido, indeferido, adiado).
fact_votessó regista declarações fundamentadas, não o sentido de cada deliberação. O status da decisão não está estruturado em coluna própria: teria de ser extraído do corpo do chunk por pesquisa textual, não SQL. - Número de fogos / área bruta licenciada / unidades habitacionais. Nenhum campo numérico de dimensão da obra foi extraído. Indexado só pelo tipo ("moradia unifamiliar"), não pela escala.
- Requerente (nome). A tabela
entidadesapanha pessoas mencionadas, mas não distingue requerente de interveniente. Não é possível construir ranking de promotores. - Valor da caução / taxas. Fora do schema.
Modos de falha reproduzíveis identificados.
- Falsa coluna em NL → SQL. Pergunta "top 10 localidades mencionadas em deliberações de licenciamento urbanístico" produziu SQL com
LOWER(e.label_deac)— coluna que a tabelaentidadesnão tem (sótopicoseargumentosa têm). Workaround: reformular paraLOWER(e.label)ou usar SQL directo. O schema embutido no prompt é genérico o suficiente para a LLM alucinar colunas por simetria. - Falso zero por filtro literal demasiado estreito. "declarações de voto contra do PSD sobre licenciamento urbanístico" devolveu 0: o LLM gerou
LIKE '%licenciamento urbanistico%'literal. O termo certo no corpus é "licenciamento de obras" (646 chunks) ou "licenciamento" simples (284). O NL → SQL não expande sinónimos. Workaround: ampliar manualmente o filtro de tópico para%licenc% OR %urban%. - Over-count por fan-out em declarações multi-ponto. Pontos 41/2024, 58/2024, etc. aparecem com 35+ chunks porque uma única declaração de voto cobre um bloco de licenciamentos.
COUNT(DISTINCT f.chunk_id)corrige, mas só se o analista escolher a cláusula certa — o LLM não o faz sempre.
Qualidade dos dados. OCR dos PDFs é bom (variantes "Famalicão" / "Famalicao" / "Famalícão" e "Fanhais"/"Fanhaes" coexistem na tabela de entidades; no relatório fizemos soma manual). Partido em facts está preenchido só em declarações de voto e em algumas intervenções (19 152 nulls de 20 809 — esperado, a maioria das deliberações é colectiva).
Reprodutibilidade. Cada número desta peça tem uma query em count.py ou um SELECT contra facts.db. A pipeline quantitativa é idempotente para o mesmo conteúdo de facts.db — o re-embedding de 2026-04-20 não alterou estes agregados porque fact_topicos/fact_votes são população independente do índice vectorial.
Próximos passos analíticos sugeridos. (i) extracção adicional para "sentido da deliberação" (campo novo em facts ou tabela sidecar decisoes); (ii) normalização de topónimos numa coluna local_canonical na tabela entidades; (iii) resolução de entidades para requerentes vs. responsáveis técnicos.
← Todos os artigos