# Fidelidade — Texto integral (fichas detail)

**Dimensão:** preservação verbatim dos campos de texto livre do CSV Mérimée nos shards `merimee-detail-*.json`.
**Data:** 2026-09-01 · **Fontes:** `raw/merimee.csv` (delimitador `|`, 78 colunas) · `www/data/merimee-detail-*.json` + `merimee-detail-index.json` · gerador `tools/build_dataset.py`.
**Convenção:** [C] confirmado no documento-fonte/código; [I] inferido.

## Correspondência de campos

Lendo `tools/build_dataset.py` (função `main()`, bloco «detalhe por département», linhas 338-376) [C]:

| Campo CSV | Chave no shard | Transformação no pipeline |
|---|---|---|
| `Titre_editorial_de_la_notice` | `n` | `.strip()`; se vazio: fallback `Denomination_de_l_edifice` → `Commune_forme_editoriale` → `Reference` (linha 217-220) |
| `Historique` | `hist` | `.strip()` |
| `Description_de_l_edifice` | `desc` | `.strip()` |
| `Observations` | `obs` | `.strip()` |
| `Personnes_liees_a_l_edifice` | `pers` | `.strip()` |
| `Auteur_de_l_edifice` | `auteur` | `.strip()` |
| `Materiaux_du_gros_oeuvre` | `mat_go` | `.strip()` |
| `Materiaux_de_la_couverture` | `mat_couv` | `.strip()` |
| `Technique_du_decor_porte_de_l_edifice` | `tech` | `.strip()` |
| `Date_de_creation_de_la_notice` | `cree` | `.strip()` |
| `Date_de_la_derniere_mise_a_jour` | `maj` | `.strip()` |
| `Liens_externes` | `liens` | `.strip()` |
| `Lien_vers_la_base_Palissy` | `palissy` | split por `;` + strip de cada item → lista |
| `Renvoi_vers_une_notice_de_la_base_Merimee_ou_Palissy` | `renvoi` | split por `;` + strip → lista |
| `Lien_vers_la_base_Archiv_MH` | `archiv` | `.strip()` |

Observações estruturais [C]:
- Cada shard é `{ref: {campos}}` (dict indexado por `Reference`), **não** `{records:[...]}` com nomes por extenso — a descrição do briefing não corresponde ao formato real servido; as chaves são curtas (`hist`, `desc`, …).
- Shards divididos por código de departamento (`dept.split(" ")[0]`); registos com departamentos múltiplos (`Departement_format_numerique` = `01;71`) originam ficheiros legítimos com `;` no nome.
- Deduplicação por `Reference` (primeiro registo ganha, linhas 206-209).
- `uc`/`owt` não existem nos shards de detail (só no dataset mestre `explorer/merimee_data.json`); a matéria-prima de `owt` (`Statut_juridique_de_l_edifice`) está preservada no shard como `statut`.

**Hash de normalização mínima:** `md5(valor.strip())` comparado entre CSV e shard; comprimentos comparados pós-strip (o pipeline aplica `.strip()` a todos os campos).

## 30 fichas profundas

Seleção estratificada: 10 dos 10 menores shards do índice (inclui os dois shards multi-departamento `;`), 10 dos 10 maiores (inclui PA00088801 Tour Eiffel, shard 75), 10 aleatórios (seed 42, população inteira). Comparação carácter-a-carácter após strip (o pipeline aplica `.strip()` a todos os campos, ver Correspondência); «hash igual?» = MD5 do valor stripado; NL = contagem de newlines no valor.

### Registos escolhidos

| ref | strato | shard | count índice |
|---|---|---|---|
| PA00116558 | pequeno | `merimee-detail-01;71.json` | 1 |
| PA00095650 | pequeno | `merimee-detail-12;81.json` | 1 |
| PA97500001 | pequeno | `merimee-detail-975.json` | 16 |
| PA97600001 | pequeno | `merimee-detail-976.json` | 16 |
| PA00101134 | pequeno | `merimee-detail-90.json` | 58 |
| PA00079927 | pequeno | `merimee-detail-93.json` | 79 |
| PA00105893 | pequeno | `merimee-detail-973.json` | 91 |
| PA00079845 | pequeno | `merimee-detail-94.json` | 115 |
| PA00105848 | pequeno | `merimee-detail-971.json` | 120 |
| PA00105935 | pequeno | `merimee-detail-972.json` | 124 |
| PA00088801 | grande | `merimee-detail-75.json` | 1893 |
| PA00083104 | grande | `merimee-detail-33.json` | 1091 |
| PA00090974 | grande | `merimee-detail-56.json` | 996 |
| PA00111005 | grande | `merimee-detail-14.json` | 978 |
| PA00082313 | grande | `merimee-detail-24.json` | 903 |
| PA00084578 | grande | `merimee-detail-67.json` | 885 |
| PA00097500 | grande | `merimee-detail-37.json` | 883 |
| PA00091849 | grande | `merimee-detail-63.json` | 875 |
| PA00112050 | grande | `merimee-detail-21.json` | 860 |
| PA00104589 | grande | `merimee-detail-17.json` | 858 |
| PA00107051 | aleatorio | `merimee-detail-57.json` | ? |
| PA00086004 | aleatorio | `merimee-detail-75.json` | ? |
| PA00080622 | aleatorio | `merimee-detail-05.json` | ? |
| PA00112917 | aleatorio | `merimee-detail-58.json` | ? |
| PA00111239 | aleatorio | `merimee-detail-14.json` | ? |
| PA00111120 | aleatorio | `merimee-detail-14.json` | ? |
| PA00087926 | aleatorio | `merimee-detail-91.json` | ? |
| PA00085304 | aleatorio | `merimee-detail-67.json` | ? |
| PA13000088 | aleatorio | `merimee-detail-13.json` | ? |
| PA00104188 | aleatorio | `merimee-detail-66.json` | ? |

### Comparação por campo (7 campos × 30 registos)

| ref | campo | len CSV | len shard | hash igual? | NL csv→shard | notas |
|---|---|---|---|---|---|---|
| PA00116558 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00116558 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00116558 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00116558 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00116558 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00116558 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00116558 | n | 32 | 32 | SIM | 0->0 | — |
| PA00095650 | hist | 1955 | 1955 | SIM | 0->0 | — |
| PA00095650 | desc | 1362 | 1362 | SIM | 0->0 | — |
| PA00095650 | obs | 180 | 180 | SIM | 0->0 | — |
| PA00095650 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00095650 | auteur | 17 | 17 | SIM | 0->0 | — |
| PA00095650 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00095650 | n | 15 | 15 | SIM | 0->0 | — |
| PA97500001 | hist | 725 | 725 | SIM | 0->0 | — |
| PA97500001 | desc | 0 | 0 | SIM | 0->0 | — |
| PA97500001 | obs | 0 | 0 | SIM | 0->0 | — |
| PA97500001 | pers | 0 | 0 | SIM | 0->0 | — |
| PA97500001 | auteur | 60 | 60 | SIM | 0->0 | — |
| PA97500001 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA97500001 | n | 32 | 32 | SIM | 0->0 | — |
| PA97600001 | hist | 720 | 720 | SIM | 0->0 | — |
| PA97600001 | desc | 0 | 0 | SIM | 0->0 | — |
| PA97600001 | obs | 0 | 0 | SIM | 0->0 | — |
| PA97600001 | pers | 0 | 0 | SIM | 0->0 | — |
| PA97600001 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA97600001 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA97600001 | n | 64 | 64 | SIM | 0->0 | — |
| PA00101134 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00101134 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00101134 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00101134 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00101134 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00101134 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00101134 | n | 64 | 64 | SIM | 0->0 | — |
| PA00079927 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00079927 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00079927 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00079927 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00079927 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00079927 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00079927 | n | 28 | 28 | SIM | 0->0 | — |
| PA00105893 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00105893 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00105893 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00105893 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00105893 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00105893 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00105893 | n | 15 | 15 | SIM | 0->0 | — |
| PA00079845 | hist | 117 | 117 | SIM | 0->0 | — |
| PA00079845 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00079845 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00079845 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00079845 | auteur | 36 | 36 | SIM | 0->0 | — |
| PA00079845 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00079845 | n | 117 | 117 | SIM | 0->0 | — |
| PA00105848 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00105848 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00105848 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00105848 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00105848 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00105848 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00105848 | n | 28 | 28 | SIM | 0->0 | — |
| PA00105935 | hist | 538 | 538 | SIM | 0->0 | — |
| PA00105935 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00105935 | obs | 81 | 81 | SIM | 0->0 | — |
| PA00105935 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00105935 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00105935 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00105935 | n | 17 | 17 | SIM | 0->0 | — |
| PA00088801 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00088801 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00088801 | obs | 33 | 33 | SIM | 0->0 | — |
| PA00088801 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00088801 | auteur | 35 | 35 | SIM | 0->0 | — |
| PA00088801 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00088801 | n | 11 | 11 | SIM | 0->0 | — |
| PA00083104 | hist | 494 | 494 | SIM | 0->0 | — |
| PA00083104 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00083104 | obs | 62 | 62 | SIM | 0->0 | — |
| PA00083104 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00083104 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00083104 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00083104 | n | 19 | 19 | SIM | 0->0 | — |
| PA00090974 | hist | 840 | 840 | SIM | 0->0 | — |
| PA00090974 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00090974 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00090974 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00090974 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00090974 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00090974 | n | 14 | 14 | SIM | 0->0 | — |
| PA00111005 | hist | 541 | 541 | SIM | 0->0 | — |
| PA00111005 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00111005 | obs | 68 | 68 | SIM | 0->0 | — |
| PA00111005 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00111005 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00111005 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00111005 | n | 19 | 19 | SIM | 0->0 | — |
| PA00082313 | hist | 263 | 263 | SIM | 0->0 | — |
| PA00082313 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00082313 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00082313 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00082313 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00082313 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00082313 | n | 19 | 19 | SIM | 0->0 | — |
| PA00084578 | hist | 39 | 39 | SIM | 0->0 | — |
| PA00084578 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00084578 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00084578 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00084578 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00084578 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00084578 | n | 25 | 25 | SIM | 0->0 | — |
| PA00097500 | hist | 556 | 556 | SIM | 0->0 | — |
| PA00097500 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00097500 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00097500 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00097500 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00097500 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00097500 | n | 21 | 21 | SIM | 0->0 | — |
| PA00091849 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00091849 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00091849 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00091849 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00091849 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00091849 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00091849 | n | 17 | 17 | SIM | 0->0 | — |
| PA00112050 | hist | 408 | 408 | SIM | 0->0 | — |
| PA00112050 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00112050 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00112050 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00112050 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00112050 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00112050 | n | 33 | 33 | SIM | 0->0 | — |
| PA00104589 | hist | 500 | 500 | SIM | 0->0 | — |
| PA00104589 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00104589 | obs | 29 | 29 | SIM | 0->0 | — |
| PA00104589 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00104589 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00104589 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00104589 | n | 20 | 20 | SIM | 0->0 | — |
| PA00107051 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00107051 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00107051 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00107051 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00107051 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00107051 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00107051 | n | 26 | 26 | SIM | 0->0 | — |
| PA00086004 | hist | 1118 | 1118 | SIM | 0->0 | — |
| PA00086004 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00086004 | obs | 33 | 33 | SIM | 0->0 | — |
| PA00086004 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00086004 | auteur | 26 | 26 | SIM | 0->0 | — |
| PA00086004 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00086004 | n | 20 | 20 | SIM | 0->0 | — |
| PA00080622 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00080622 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00080622 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00080622 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00080622 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00080622 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00080622 | n | 42 | 42 | SIM | 0->0 | — |
| PA00112917 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00112917 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00112917 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00112917 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00112917 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00112917 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00112917 | n | 6 | 6 | SIM | 0->0 | — |
| PA00111239 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00111239 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00111239 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00111239 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00111239 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00111239 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00111239 | n | 35 | 35 | SIM | 0->0 | — |
| PA00111120 | hist | 0 | 0 | SIM | 0->0 | — |
| PA00111120 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00111120 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00111120 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00111120 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00111120 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00111120 | n | 18 | 18 | SIM | 0->0 | — |
| PA00087926 | hist | 117 | 117 | SIM | 0->0 | — |
| PA00087926 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00087926 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00087926 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00087926 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00087926 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00087926 | n | 15 | 15 | SIM | 0->0 | — |
| PA00085304 | hist | 315 | 315 | SIM | 0->0 | — |
| PA00085304 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00085304 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00085304 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00085304 | auteur | 22 | 22 | SIM | 0->0 | — |
| PA00085304 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00085304 | n | 19 | 19 | SIM | 0->0 | — |
| PA13000088 | hist | 299 | 299 | SIM | 0->0 | — |
| PA13000088 | desc | 0 | 0 | SIM | 0->0 | — |
| PA13000088 | obs | 0 | 0 | SIM | 0->0 | — |
| PA13000088 | pers | 0 | 0 | SIM | 0->0 | — |
| PA13000088 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA13000088 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA13000088 | n | 41 | 41 | SIM | 0->0 | — |
| PA00104188 | hist | 1490 | 1490 | SIM | 0->0 | — |
| PA00104188 | desc | 0 | 0 | SIM | 0->0 | — |
| PA00104188 | obs | 0 | 0 | SIM | 0->0 | — |
| PA00104188 | pers | 0 | 0 | SIM | 0->0 | — |
| PA00104188 | auteur | 0 | 0 | SIM | 0->0 | — |
| PA00104188 | mat_go | 0 | 0 | SIM | 0->0 | — |
| PA00104188 | n | 32 | 32 | SIM | 0->0 | — |

**Total de comparações (7 campos × 30 registos):** 210 · iguais: 210 · diferentes: 0

**Divergências detetadas:** nenhuma — os 7 campos × 30 registos, mais `cree`/`maj`/`liens`/`palissy`, são idênticos carácter-a-carácter após strip (MD5 igual).

Campos complementares nos mesmos 30 registos [C]: `cree` e `maj` têm 10 caracteres em todos (formato data `AAAA-MM-DD`) e são iguais aos do CSV; `liens` (Liens_externes) igual nos 30 (0 ou 73-74 caracteres quando presente); `palissy` (Lien_vers_la_base_Palissy, reconstruído como lista `;`-junta) igual nos 30, incluindo casos longos (até 1.333 caracteres, ex.: PA00080622, PA00091849 com 869). Nota: os comprimentos a 0 em vários registos refletem a fonte (Description só existe em 925/46.760 registos; Historique em 24.818), não perdas.

## Somas de população

Verificação indireta da população inteira (para além da amostra): soma de comprimentos + **checksum comutativo** (soma mód. 2⁶⁴ dos 16 primeiros dígitos hex do MD5 de cada valor stripado, ordem-independente) por campo, calculada em separado sobre o CSV e sobre os 104 shards; qualquer alteração de conteúdo em qualquer registo quebrar-ia a igualdade. Amostra emparelhada adicional: primeiros 2.000 refs do CSV confrontados campo a campo com o homólogo no shard.

**Contagem de registos** [C]: CSV = 46.760 linhas de dados, 46.760 refs únicas, 0 duplicadas · shards = 104 ficheiros `merimee-detail-*.json`, **46.760 registos**, conjuntos de refs idênticos nos dois sentidos (0 só-CSV, 0 só-shard) · índice `merimee-detail-index.json` = 104 entradas, soma das contagens = 46.760, sem órfãos e sem discrepâncias entre o count do índice e os registos reais de cada ficheiro. Os dois shards multi-departamento (`01;71`, `12;81`) existem no disco e no índice com 1 registo cada.

| campo | soma len CSV | soma len shard | dif | n≠vazio CSV | n shard | checksum igual? | newlines CSV→shard |
|---|---|---|---|---|---|---|---|
| hist (Historique) | 15.128.260 | 15.128.260 | 0 | 24.818 | 24.818 | SIM | 0→0 |
| desc (Description) | 742.079 | 742.079 | 0 | 925 | 925 | SIM | 0→0 |
| n (Titre editorial) | 1.060.685 | 1.060.685 | 0 | 46.760 | 46.760 | SIM | 0→0 |
| obs (Observations) | 977.782 | 977.782 | 0 | 12.114 | 12.114 | SIM | 0→0 |
| pers (Personnes liees) | 50.140 | 50.140 | 0 | 1.052 | 1.052 | SIM | 0→0 |
| auteur (Auteur) | 316.761 | 316.761 | 0 | 6.310 | 6.310 | SIM | 0→0 |
| mat_go (Materiaux gros oeuvre) | 6.169 | 6.169 | 0 | 202 | 202 | SIM | 0→0 |
| cree (Date creation) | 466.250 | 466.250 | 0 | 46.625 | 46.625 | SIM | 0→0 |
| maj (Date derniere MAJ) | 467.600 | 467.600 | 0 | 46.760 | 46.760 | SIM | 0→0 |
| liens (Liens externes) | 767.230 | 767.230 | 0 | 9.944 | 9.944 | SIM | 0→0 |
| palissy (Lien base Palissy) | 7.328.796 | 7.328.796 | 0 | 9.995 | 9.995 | SIM | 0→0 |

**Historique + Description:** CSV = 15.870.339 caracteres · shards = 15.870.339 caracteres · diferença = **0** (bata certo à unidade) [C].

**Amostra emparelhada de 2.000 registos** [C]: 2.000/2.000 encontrados nos shards; 2.000 × 11 campos = 22.000 comparações MD5 pós-strip, **22.000 iguais**; contagens de marcadores de encoding iguais em todas.

**Efeito do `.strip()` documentado** [C]: registos com espaços de bordo no CSV removidos pelo pipeline (só bordos; conteúdo interno intacto) — hist: 207, desc: 137, obs: 86, auteur: 2, liens: 1; restantes campos: 0. Total: 433 valores de 46.760 × 11 (~0,09%), comportamento conforme o código (`build_dataset.py`, `.strip()` em todos os campos).

## Encoding

Varredura a **toda a população** (46.760 registos, os 11 campos auditados) e não apenas à amostra de 2.000 — que também foi verificada emparelhada. Marcadores: U+FFFD; `Ã` (U+00C3, assinatura de mojibake UTF-8→CP1252 tipo «Ã©»); `Â` (U+00C2); sequência `â`+`€` (U+00E2+U+20AC, mojibake de aspas tipográficas); escapes literais (barra invertida + `n` / + `u`, sinal de escape duplo); U+2028/2029; caracteres de controlo.

| marcador | CSV (população) | shards (população) |
|---|---|---|
| U+FFFD (�) | 0 | 0 |
| U+00C3 (Ã, mojibake) | 0 | 0 |
| U+00C2 (Â) | 25 | 25 |
| U+00E2+U+20AC (â€) | 0 | 0 |
| escape literal `\n` | 0 | 0 |
| escape literal `\u` | 0 | 0 |
| U+2028/U+2029 | 0 | 0 |
| caracteres de controlo | 0 | 0 |

Leitura [C]:
- Zero U+FFFD e zero sequências de mojibake (`Ã…`, `â€`) em toda a população dos dois lados — não há corrupção de encoding introduzida nem herdada.
- As 25 ocorrências de `Â` são **idênticas nos dois lados** (mesma distribuição por campo, 0 divergências na amostra emparelhada) — conteúdo herdado do scrape da fonte, não alterado pelo pipeline.
- Os campos de texto livre auditados contêm **0 newlines em toda a população** (campos monolinha na fonte) — a perda de newlines não é aplicável e nada foi observado; sem escapes duplos.

## Desvios

Nenhum desvio de fidelidade de texto. Notas menores / de documentação:

1. **[C] Estrutura real dos shards ≠ briefing da auditoria**: os shards são `{ref: {chaves curtas}}` (`hist`, `desc`, `obs`, `pers`, `auteur`, `mat_go`, `n`…), e não `{records:[...]}` com campos por extenso. Os valores estão lá, integralmente; apenas a descrição do formato estava errada.
2. **[C] `.strip()` de bordos**: 433 valores (0,09%) tinham espaços de bordo no CSV que o pipeline remove por design — documentado na Correspondência; nenhum carácter interno perdido.
3. **[C] `uc`/`owt` não existem nos shards de detail**: são códigos derivados (uso alterado / propriedade mapeada) que vivem só no dataset mestre `explorer/merimee_data.json`; a matéria-prima de `owt` (`Statut_juridique_de_l_edifice`) está preservada no shard como `statut`. As datas (`cree`, `maj`), `liens` e `palissy` estão preservados por extenso.
4. **[I] Nota metodológica**: na 1.ª passagem o glob `merimee-detail-*.json` apanhou também `merimee-detail-index.json`, produzindo 104 falsos «registos» com valor `null` (4 caracteres) por campo — artefacto do script de auditoria, corrigido; os números finais excluem o índice.
5. **[C] Sem truncatura**: o limite do resumo (`summarize()`, 240 caracteres) aplica-se apenas ao campo `s` do dataset mestre de pesquisa; os shards preservam o texto integral (Historique da população: 15,1 M caracteres com checksum igual à unidade; fichas individuais com hist de até ~2.000 caracteres verificadas carácter-a-carácter).

## Veredicto

**Conformidade: 100%.** A cópia é verbatim (pós-`.strip()` documentado): 210/210 comparações carácter-a-carácter nas 30 fichas profundas (100%), 22.000/22.000 na amostra emparelhada de 2.000 registos (100%), 11/11 campos com soma de comprimentos e checksum comutativo iguais na população inteira (100%), 46.760/46.760 registos reconciliados com conjuntos de refs idênticos e índice coerente. Zero truncaturas, zero mojibake/U+FFFD, zero perdas de newline, zero escapes duplos; datas de criação/atualização, Liens_externes e Lien_vers_la_base_Palissy preservados. Únicas retificações: a estrutura real dos shards usa chaves curtas (não `{records:[...]}`) e o `.strip()` de bordos afeta 433 valores — ambos comportamento documentado do pipeline, sem perda de conteúdo.

## Fontes

- `C:\Users\Atelier X\Nextcloud\Documents\00_Website\MonumentosFR\raw\merimee.csv` — CSV-fonte (verdade), delimitador `|`, 78 colunas, 46.760 registos (obtido de https://www.data.gouv.fr/api/1/datasets/r/3a52af4a-f9da-4dcc-8110-b07774dfb3bc)
- `C:\Users\Atelier X\Nextcloud\Documents\00_Website\MonumentosFR\www\data\merimee-detail-*.json` — 104 shards detail servidos + `merimee-detail-index.json`
- `C:\Users\Atelier X\Nextcloud\Documents\00_Website\MonumentosFR\tools\build_dataset.py` — pipeline gerador (mapeamento de campos, `.strip()`, dedup, shard por departamento)
- Mérimée, Ministère de la Culture (France) — https://www.data.gouv.fr/api/1/datasets/r/3a52af4a-f9da-4dcc-8110-b07774dfb3bc (Licence Ouverte 2.0)

