# Fidelidade — Estatuto de protecção (`prc`, `est`/`st`, actos)

> Auditoria de fidelidade MonumentosES, dimensão **ESTATUTO DE PROTECÇÃO** (classe `prc`, estado administrativo `st`/`est`, actos e datas; bens muebles infiltrados; entorns catalães; fontes retidas por licença).
> Data: 2026-09-04. Auditor: agente 3/8 do painel (derivação independente a partir do cru + da vista; re-executou os filtros dos parsers em Python, não modificou nada).
> Convenção: **[C]** = confirmado por re-derivação/leitura directa do ficheiro ou doc; **[I]** = inferido/julgamento semântico do auditor.

## Âmbito

- **Dataset servido**: `www/explorer/bic_data.json` (vista do motor) — `total` = **24.337** registos, 15 fontes (`src`): eus 10.295 · cyl 2.479 · cant 2.400 · cat 2.161 · nav 1.426 · gva 1.185 · arg 1.021 · eiv 728 · gal 723 · clm 631 · mad 443 · ast 331 · ext 250 · ten 199 · rio 65 [C].
- **Intermédios**: `raw/interm/*.json` (15 ficheiros, soma = 24.337) [C]. Pipeline: `tools/ingest_*.py` → `tools/build_dataset.py` (fusão, sem tocar em `prc`/`st`) → `tools/build_site_view.py` (reescreve a vista; `pr` = `pd · disp · pb`; `est` da vista = `st` do intermédio) [C].
- **Objectos**: (1) uniformidade de `prc`; (2) distribuição e semântica de `st` por fonte, incoados vs declarados, actos (`pd`/`pb`/`pu`/`disp`/`pi`); (3) bens muebles/imateriais infiltrados; (4) entorns catalães `-EN`; (5) ausência das fontes retidas por licença (Múrcia, Gran Canaria, La Palma).
- Fora de âmbito: qualidades de coordenadas, datação, texto — ver relatórios 01/02/06/05.

## Método

1. Leitura directa da vista (`filters.protection_codes`, `filters.estats`) e cross-tab `src × est × t1 × pr` em Python (população inteira, 24.337 registos) [C].
2. Re-derivação a partir do **cru** com filtros independentes reimplementados (não importei os parsers): `cant_bic.geojson` (TIPO/CATEGORIA/ESTADO), `ast_bic_areas.geojson` + `ast_bic_puntos.geojson` (te_estadmo), `mad_inmuebles_bic.csv` (cp1252, `;`, situacion/incoacion/declaracion), `arg_bic_puntos.csv` (utf-8, situacion), `rio_arquitectura_defensiva.gml` (ISO-8859-1, regex sobre `053_PHA_ESTADO_DENO`), `gva_bic_inmuebles.csv` (codclasificacion), `ext_bic.xlsx` (openpyxl, CATEGORÍA), `clm_catalogo.csv` (cp1252, FIGURA/CATEGORÍA), `cyl_bic_inmu_0.json` (d_categ_adquiere), `cat_bcin_arquitec.geojson` (REGISTRE_BCIN/ENTORN), `ten_bic_inmuebles.geojson`, `eiv_bics.kml`, `eus_L2_*.json` [C].
3. Verificação dos actos por intermédio (`pd`/`pb`/`pu`/`disp`/`pi` não vazios) [C].
4. Documentação cruzada com `docs/fuentes/*.md`, `docs/fuentes/README.md` e `docs/relatorio-proveniencia.md` [C].

## Achados

### 1. `prc` — uniformidade **[C]**

- Vista: `protection_codes = {'bic': 24.337}` — **100,000%** dos registos com `prc='bic'`; **0 excepções**.
- Re-verificação nos 15 intermédios: 24.337/24.337 registos com `prc='bic'`, **0 valores distintos** [C].
- Conclusão: o dataset é **só BIC**, como projectado; nenhuma fonte trouxe níveis não-BIC (BIL/BRL/inventariados ficaram fora: cant excluiu 448 BIL + 1.280 Inventariados; gva excluiu 5.347 BRL) [C].

### 2. Estado administrativo (`st` → `est` na vista) **[C]**

Distribuição da vista (24.337):

| `est` | n | % | fontes |
|---|---|---|---|
| `Declarado` | 3.681 | 15,1% | cant 2.368 · arg 1.021 · ast 229 · rio 63 |
| `Incluido` | 309 | 1,3% | mad 309 |
| `Anotación Preventiva` | 134 | 0,6% | mad 134 |
| `Incoado` | 36 | 0,1% | cant 32 · ast 3 · rio 1 |
| *(vazio)* | 20.177 | 82,9% | eus 10.295 · cyl 2.479 · cat 2.161 · nav 1.426 · gva 1.185 · eiv 728 · gal 723 · clm 631 · ext 250 · ten 199 · ast 99 · rio 1 |

**Semântica por fonte** (re-derivada do cru + docs):

- **cant** — campo `ESTADO` do GeoJSON (ficheiro completo: Declarado 4.280 / Incoado 56; só BIC: Declarado 2.576 / Incoado 32). PARSER: `st = ESTADO` cru [C]. Doc: `docs/fuentes/cantabria.md` documenta o esquema com `ESTADO` [C].
- **ast** — `te_estadmo` («ESTADO ADMINISTRATIVO», docs/fuentes/asturias.md) só existe na camada L1 *Áreas* (234 feições): Declarado 229 / Incoado 3 / vazios 2 (um `''` e um `' '`, ambos → vazio após strip) [C]. Os 97 bens só com ponto L0 (336 pontos, sem esse campo) ficam sem `st` [C].
- **mad** — `situacion` do CSV oficial: `Incluido` 309 / `Anotación Preventiva` 134, 100% `naturaleza=Inmueble` [C]. Confirmado por dados internos: os 134 «Anotación Preventiva» têm **data de incoação em 134/134 e data de declaração em 0/134**; os 309 «Incluido» têm declaração em 309/309 (194 com incoação + 115 sem) [C]. ⇒ «Anotación Preventiva» = **expediente incoado, ainda sem declaração** (anotação preventiva do artigo 21.2 da Ley 16/1985 — protecção provisória) [I na leitura jurídica, C nos dados]. Doc: `madrid.md` linha 12 documenta «309 Incluido + 134 Anotación Preventiva» [C].
- **arg** — `situacion` = **100% «Declarado»** nas 1.021 linhas (fonte: lista de inscritos como BIC do Governo de Aragão) [C]; doc aragon.md: «`situacion` 100% "Declarado"» [C].
- **rio** — `T386_053_PHA_ESTADO_DENO` do GML: Declarado 63 / Incoado 1 / vazio 1 (65 feições, tags duplicadas 2× por feição no XML) [C]. Doc la-rioja.md diz «65 (63 Declarado, 1 Incoado)» — **soma 64, o 1 registo com estado vazio não está documentado** [C, desvio menor].
- **ten** — o GeoJSON do Cabildo **não tem qualquer campo de estado** (só `bic_nombre/categoria/entorno/municipio/descripcion/boletín*`); os 199 ficam sem `est` por limite de fonte [C]. Incoados de Canarias (GC: 26 incoados [C canarias.md]) não entraram — fonte GC excluída por licença.
- **Restantes 10 fontes** (eus, cyl, cat, nav, gva, eiv, gal, clm, ext, ten) não publicam estado administrativo; os feeds são por construção listas de BIC inscritos/declarados, pelo que `est` vazio ≈ «declarado por omissão» **[I]** (para cyl, feed WFS chama-se `pacu_cyl_bic_inmu_vw`; para cat, `BCIN_ARQUITEC`; docs respetivos confirmam o universo BIC [C]).

**Incoados vs declarados (síntese)**:

- Explicitamente incoados na vista: **36** («Incoado») + **134** («Anotación Preventiva», equivalente funcional em Madrid) = **170 registos (0,70%)** que **não têm declaração formal publicada** mas entram com `prc='bic'` [C nos dados; I no juízo de que não são BIC consumados].
- Onde: mad 134 (todos com incoação datada, nenhum declarado) · cant 32 · ast 3 · rio 1 [C].

**Actos e datas (intermédios, não vazios)** [C]:

| campo | n | % de 24.337 | notas |
|---|---|---|---|
| `pd` (data declaração) | 7.293 | 30,0% | cyl 2.477 · arg 1.021 · clm 631 · gal 723 · cant 1.888(parte) · mad 309 · ext 184 · rio 60 |
| `pb` (boletim) | 6.726 | 27,6% | cant 2.400 · cat 2.161 · cyl/arg/gal/ext/rio/ten |
| `pu` (URL boletim) | 2.917 | 12,0% | cant 2.392 · ast 326 · ten 199 |
| `disp` (disposição) | 949 | 3,9% | gal 723 · ast 226 |
| `pi` (acto incoação) | 474 | 1,9% | mad 328 · ast 146 |

Fontes **sem quaisquer actos**: eus (10.295), nav (1.426), gva (1.185), eiv (728) [C]. Texto de protecção `pr` na vista: 9.948 com texto / 14.389 sem [C].

### 3. Bens muebles/imateriais infiltrados **[C]**

Re-verificação completa: **não existe na vista nenhum `t1` do tipo «Bien Mueble», «Bien Inmaterial», «Colección», «Mueble»** [C]. As exclusões declaradas batem todas com o cru:

| fonte | verificação | resultado |
|---|---|---|
| gva | raw 1.269 linhas = codclasificacion 1 «Bienes inmuebles 1ª» **1.185** + cod 2 «Bienes muebles 1ª» **84**; filtro `cod==1` | 84 muebles excluídos ✔ [C] |
| cant | raw 2.608 BIC, `CATEGORIA='Bien Mueble'` = **208**; kept 2.400; os 208 excluídos eram todos `ESTADO='Declarado'` (2.576−2.368) | 208 excluídos ✔ [C] |
| ext | raw 265 linhas de dados: *Patrimonio Cultural Inmaterial* **13**, *Bien Mueble* 1 + *Bienes Muebles* 1 = **2**, sem categoria 2 (mantidos); 265−13−2 = 250 | ✔ [C] |
| clm | 662 BIC (FIGURA='BIC'): *Bien Inmaterial* **30** + *Colección* **1** excluídos → **631** kept | ✔ [C] (o docstring do parser diz «→ 630» — está errado, ver Desvios) |

**Categorias suspeitas que FICARAM na vista** (t1 cru, classificação):

- `gva` **'Archivo' ×4** e **'Fondo de museo (primera)' ×2** — classificados como *inmuebles* pela PRÓPRIA fonte (codclasificacion=1); ex.: «Archivo Histórico Provincial de Alicante», «Archivo del Reino de Valencia», «Museo de Bellas Artes» (Castelló) [C]. Julgamento: os 4 «Archivo» são edifícios-sede (inmuebles plausíveis) [I]; «Fondo de museo» é **borderline** (o nome sugere colecção = mueble, mas a fonte classifica inmueble; nota: existem mais 8 «Fondo de museo (primera)» entre os 84 muebles, esses bem excluídos) [I]. **Novo achado — não documentado em valenciana.md** [C].
- `cyl` **'ARCHIVOS, MUSEOS Y BIBLIOTECAS' ×13**, **'ESCUDOS' ×6**, **'HITOS FORALES' ×2** — categorias da própria coluna `d_categ_adquiere` do feed WFS «bic_inmu» (inmuebles) [C]; pelos nomes («CASA DEL SOL, MUSEO DE SEGOVIA», «ARCHIVO HISTÓRICO PROVINCIAL», «CASA RECTORAL CON ESCUDO», «PIEDRA FURADA DE CARRASCONTE», «CRUCERO») são edifícios e marcos pétreos fixos, não colecções [I]. Conhecido/documentado como taxonomia crua da fonte [C no feed; os valores não estão enumerados no castilla-y-leon.md].
- `mad` **'Mvionumento' ×1** (`RBIC-1954-000001`, «Restos de la vieja Muralla de Madrid») — gralha da FONTE, já documentada em madrid.md («gralhas na fonte: "Mvionumento" ×1») [C].
- `cant` **'Inmueble' ×8** e **'No Especificado' ×40** — categorias cras da fonte sem classificação tipológica fina [C].
- `t1` vazio: **11.283 (46,4%)** — eus 10.295 (feed sem atributo de categoria — documentado em pais-vasco.md: «Sem atributo de categoria … nem nível» [C]), eiv 728 (KML sem tipo), ast 108, gva 85, rio 65, ext 2 [C]. É **limite de fonte, não infiltração mueble** [C].

### 4. Entorns catalães (`-EN`) **[C]**

- Intermédio `cataluna.json`: **311** registos com `code_local` terminado em `-EN` (ex. `4364-LH-EN`) e flag `en=1`; 1.850 sem flag. Total cat = 2.161 [C].
- Raw `cat_bcin_arquitec.geojson` (2.161 feições): `REGISTRE_BCIN` termina em `-EN` em **311**; campo `ENTORN`: SI 302 / NO 1.859. **Dissonância em 37 registos**: 23 com sufixo `-EN` mas `ENTORN=NO`; 14 com `ENTORN=SI` mas sem sufixo [C]. O parser seguiu o sufixo (documentado em cataluna.md e verificado contra a ficha IPAC 16575) [C].
- **Ponto decisivo**: **nenhum** dos 311 registos `-EN` tem o monumento base no dataset (procura de `code_local` sem sufixo: 0/311) — os `-EN` **não são duplicados** de bens já presentes; são a **única representação** desses 311 BIC no site (a geometria servida é a do ENTORN, o nome é o do bem: «CASA CONSISTORIAL DE MANRESA», «ESGLÉSIA DE SANT PERE DE TALTEÜLL»…) [C].
- **Vista**: a flag `en` **não sobrevive** ao `build_site_view.py` (não está nas chaves do record); só é detectável pelo sufixo `-EN` no campo `p` (311 ocorrências confirmadas na vista) [C].
- **Impacto em contagens nacionais**: excluir os 311 → total **24.337 → 24.026** (−1,28%); cat **2.161 → 1.850** (−14,39%) [C]. Mantê-los não altera o total actual [C].

### 5. Fontes retidas por licença — ausência confirmada **[C]**

- Na vista (15 prefixos `src`) **não existe** nenhum registo de Múrcia, Gran Canaria ou La Palma (nem de Andaluzia, Ceuta/Melilla, Mallorca — lacunas separadas) [C]. O intermédio canárias é só `canarias-tenerife.json` (199, prefixo `ten`) [C].
- Ausência **documentada**:
  - `docs/fuentes/README.md`: tabela dá Múrcia 1.986 «⚠⚠ **sem licença aberta**», GC 143 «⚠ CC BY-NC-SA 3.0», La Palma 25 «⚠ sem licença»; §Decisões item 1 (Múrcia: excluir enquanto não houver autorização — «Recomendação: (b)… e enquanto isso (a) — cobertura parcial honesta»), item 2 (GC: «se dúvida, excluir as 143 features e documentar»), item 6 (La Palma: sem licença declarada → crédito+link); §ordem item 5: «Múrcia — bloqueado até decisão de licença» [C].
  - `docs/fuentes/canarias.md`: dataset 2 GC = **143 declarados** + 26 incoados, licença CC BY-NC-SA 3.0 «⚠ RESTRIÇÃO NÃO-COMERCIAL — decidir antes de ingerir»; dataset 3 La Palma = **25 inmuebles**, «Aviso Legal próprio (sem licença standard)» [C].
  - `docs/relatorio-proveniencia.md`: linhas 14/16 (contagens e decisões de licença) e linha 72 («Múrcia 1.986 suspensa por licença, GC 143 NC, La Palma 25») [C].
- **Tensão notada** [I]: o README item 6 recomenda para sem-licença «reutilização com crédito + link», o que legitimaria ingerir La Palma; a decisão actual foi excluir. Coerente com prudência, mas merece decisão explícita e registo (ver Recomendações).

## Desvios

1. **170 registos sem declaração formal com `prc='bic'`** (mad 134 «Anotación Preventiva» + cant 32 + ast 3 + rio 1 «Incoado») [C nos dados]. Semanticamente são expedientes incoados (com protecção provisória), não BIC declarados [I]. Não é erro de ingestão (fiel às fontes), mas é um ruído de estatuto no rótulo «bic».
2. **ast: 1 dos 3 «Incoado» tem declaração publicada** — `441901017000 AMPLIACIÓN DE LA DECLARACIÓN DEL ACUEDUCTO…` com `te_declara = Decreto 18/2016` e `te_estadmo = Incoado` (é a ampliação que está em tramitação, não o bem original) [C]. Inconsistência herdada da fonte; ficará com rótulo «Incoado» no site.
3. **gva: 6 inmuebles com `t1` de semântica mueble-duvidosa** ('Archivo' ×4, 'Fondo de museo (primera)' ×2) — fiéis à fonte, mas **não documentados** em valenciana.md [C].
4. **cat: flag `en` perdida na vista** — `build_site_view.py` não copia `en`; o único traço é o sufixo `-EN` em `p` [C]. E 37 dissonâncias internas na fonte entre sufixo `-EN` e campo `ENTORN` [C].
5. **Docs desactualizados/errados** [C]:
   - `ingest_castilla-la-mancha.py` docstring: «excluir … → 630» — real: **631** (30 imaterial + 1 colección; código e intermédio estão certos).
   - `ingest_extremadura.py` docstring: «→ 251 kept» vs `EXPECTED kept=250` e real **250**.
   - `docs/fuentes/la-rioja.md`: «65 (63 Declarado, 1 Incoado)» — não soma 65; falta o 1 registo com estado vazio.
   - `docs/relatorio-proveniencia.md` linha 72: «total de 24.338» — real **24.337** (soma dos intermédios e da vista).
6. **Cobertura de `est` muito desigual**: 82,9% da base sem estado administrativo (fontes não publicam) — qualquer filtro de estado no UI só afecta ~17% da base [C].

## Recomendações

1. **Manter `prc='bic'` único** — a base é só BIC por construção e as exclusões (muebles/imateriais/BRL/BIL) estão todas correctas face ao cru [C]. Não inventar níveis (`classe/inscrit` do FR não fazem sentido no esquema ES).
2. **Marcar os 170 incoados**: recomendo um flag dedicado (ex. `incoado=1`) ou `prc='bic-incoado'` para mad 134 + cant 32 + ast 3 + rio 1, com nota «protecção provisória (anotação preventiva/incoação)» [I]. Alternativa mínima: mapear «Anotación Preventiva» → «Incoado» no UI para unificar o vocabulário (mesma realidade administrativa) [I].
3. **Entorns `-EN`: manter como bens com flag** (recomendação forte): excluir os 311 apagaria 311 BIC do site (não há registo-base alternativo) e cortaria 14,4% de Catalunya; manter como está hoje também não é bom porque o utilizador não distingue bem de entorn. Concretamente: (a) copiar `en` para a vista no `build_site_view.py`; (b) no display, sufixo «(entorn)» ou campo próprio; (c) no `build_dataset.py`, contagem nacional publicada em duas variantes (com/sem entorns: 24.337 / 24.026) [I]. Aproveitar a próxima re-ingerência para resolver as 37 dissonâncias `ENTORN` vs sufixo (critério: sufixo é o id institucional; validar 14 casos `ENTORN=SI` sem `-EN`) [I].
4. **Documentar os 6 casos gva** ('Archivo' ×4, 'Fondo de museo (primera)' ×2) e a taxonomia cyl (ARCHIVOS-MUSEOS-BIBLIOTECAS/ESCUDOS/HITOS FORALES) nos `.md` das fontes; decidir se «Fondo de museo (primera)» inmueble fica ou sai (2 registos) [I].
5. **Corrigir docs** (docstrings clm 630→631 e ext 251→250; la-rioja.md 63+1+1; proveniência 24.338→24.337) — são só documentação, o código e os dados estão certos [C].
6. **Licenças**: manter a exclusão de Múrcia (restrição mais grave) e GC; para La Palma (25), decidir explicitamente entre «excluir» (estado actual) e «crédito+link» (recomendação README item 6) — com 25 registos, o risco/benefício favorece testar o crédito e documentar [I]. Registrar a decisão no README (não está lá que a exclusão foi executada) [C].

## Fontes

**Ficheiros do projecto (lidos/re-derivados)** [C]:

- Vista: `www/explorer/bic_data.json`; intermédios: `raw/interm/*.json` (15)
- Cru: `raw/cant_bic.geojson`, `raw/ast_bic_areas.geojson`, `raw/ast_bic_puntos.geojson`, `raw/mad_inmuebles_bic.csv`, `raw/arg_bic_puntos.csv`, `raw/rio_arquitectura_defensiva.gml`, `raw/gva_bic_inmuebles.csv`, `raw/ext_bic.xlsx`, `raw/clm_catalogo.csv`, `raw/cyl_bic_inmu_0.json`, `raw/cat_bcin_arquitec.geojson`, `raw/ten_bic_inmuebles.geojson`, `raw/eiv_bics.kml`, `raw/eus_L2_0.json`
- Código: `tools/ingest_*.py` (15), `tools/build_dataset.py`, `tools/build_site_view.py`
- Docs: `docs/fuentes/README.md`, `docs/fuentes/{cataluna,cantabria,asturias,madrid,aragon,la-rioja,canarias,murcia,valenciana,pais-vasco,baleares,castilla-y-leon}.md`, `docs/relatorio-proveniencia.md`
- Relatório anterior (contexto, cópia FR): `www/audit/03-protecao.md`

**URLs das fontes de dados** (conforme docs/fuentes, não re-testados nesta auditoria):

- Cantabria: https://geoservicios.cantabria.es/inspire/rest/services/Patrimonio_y_Cultura/MapServer/0/query
- Asturias: https://sig.asturias.es/servicios/rest/services/BienesDeInteresCultural/MapServer/{0,1}/query
- Madrid: https://datos.comunidad.madrid/dataset/…/inmuebles_bic.csv
- Aragón: https://opendata.aragon.es/GA_OD_Core/download?resource_id=333&formato=csv
- La Rioja: https://ogc.larioja.org/wfs/request.php?...TYPENAME=arquitectura_defensiva
- GVA: https://dadesobertes.gva.es/dataset/hac-bie-inmuebles (bienes_inmuebles_interes_cultural.csv)
- Cataluña: WFS gencat BCIN_ARQUITEC (ver docs/fuentes/cataluna.md; cross-check IPAC https://monestirs.patrimoni.gencat.cat — ficha 16575)
- Canarias GC: https://opendata.idegrancanaria.es/dataset/consolidado-insular-delimitaciones-bienes-interes-cultural-declarados
- Canarias La Palma: https://www.opendatalapalma.es/datasets/5a37711630d344f28e8d35fc1a35bd21_1.csv
- Tenerife: https://datos.tenerife.es (dataset 83530250-…; bic_inmuebles.csv/geojson)
- Múrcia (excluída): https://portaleslr.carm.es / IDERM WFS (ver docs/fuentes/murcia.md)

## Comandos (re-derivação)

```bash
cd "C:/Users/Atelier X/Nextcloud/Documents/00_Website/MonumentosES"

# 1) prc + est por fonte (vista)
python - <<'EOF'
import json
from collections import Counter, defaultdict
d = json.loads(open('www/explorer/bic_data.json', encoding='utf-8').read())
recs = d['records']
print(d['filters']['protection_codes'])            # {'bic': 24337}
print(d['filters']['estats'])                      # Declarado 3681 ...
tab = defaultdict(Counter)
for r in recs:
    tab[r['i'].split(':',1)[0]][r['est'] or '(vazio)'] += 1
for k in sorted(tab): print(k, dict(tab[k]))
print('t1 vazios:', Counter(r['i'].split(':',1)[0] for r in recs if not r['t1']))
print('-EN na vista:', sum(1 for r in recs if r['p'].endswith('-EN')))
EOF

# 2) prc nos 15 intermédios + actos
python - <<'EOF'
import json, glob, os
from collections import Counter
for p in sorted(glob.glob('raw/interm/*.json')):
    items = json.loads(open(p, encoding='utf-8').read())['items']
    bad = sum(1 for it in items if it.get('prc') != 'bic')
    st  = Counter(it.get('st') or '(vazio)' for it in items if 'st' in it)
    print(os.path.basename(p), len(items), 'prc!=bic:', bad,
          '| pd', sum(1 for i in items if i.get('pd')),
          '| pb', sum(1 for i in items if i.get('pb')),
          '| pu', sum(1 for i in items if i.get('pu')), '|', dict(st))
EOF

# 3) cant: BIC vs muebles vs ESTADO
python - <<'EOF'
import json
from collections import Counter
g = json.loads(open('raw/cant_bic.geojson', encoding='utf-8').read())
bic = [f['properties'] for f in g['features'] if f['properties']['TIPO']=='Bien de Interés Cultural']
print(len(bic), Counter(p['CATEGORIA'] for p in bic)['Bien Mueble'],
      Counter(p['ESTADO'] for p in bic))
EOF

# 4) mad: situacao x incoacion/declaracion
python - <<'EOF'
import csv
from collections import Counter
rows = list(csv.DictReader(open('raw/mad_inmuebles_bic.csv', encoding='cp1252'), delimiter=';'))
print(Counter((r['situacion'], bool(r['incoacion'].strip()), bool(r['declaracion'].strip())) for r in rows))
EOF

# 5) gva / clm / ext / cyl / cat / ast / arg / rio / ten / eus — filtros descritos no §Método (2)
#    (ver Achados 3/4/5; cada bloco é o mesmo padrão Counter sobre o campo indicado)
```
