Le format R1 se rétablit à l'entrée, pas au point de comparaison¶
NumeroDeCarreTest#departement_a_un_chiffre_retrouve_son_zero, ReponsesVigieChiroTest#numero_carre_stoc_rembourre_le_zero_de_gauche, CarroyageNationalTest#centroide_se_cherche_sur_six_chiffres, FournisseurEmpriseCarreOfficielTest#carre_de_departement_a_un_chiffre_est_caleContexte¶
La règle métier R1 veut six chiffres, département en tête, zéro de gauche compris. Le catalogue des sites la respecte. Les deux sources qui rendent un numéro l'amputent.
| Source | Ce qu'elle rend pour la maille des Alpes-de-Haute-Provence |
|---|---|
GET /grille_stoc/cercle |
40110 |
carrenat.csv.gz, référentiel embarqué |
40110 |
GET /sites?q= |
Vigiechiro - Point Fixe-040110 |
Mesuré le 2026-08-26 : GET /sites?q=040110 trouve son site, q=40110 ne trouve rien. Le référentiel
embarqué porte 13 342 numéros à cinq chiffres sur 137 481.
L'amputation ne se voit pas. Un numéro à cinq chiffres est plausible, et chaque lecteur qui le compare sans le savoir obtient un faux négatif silencieux. Deux l'ont fait pendant des mois :
ControleCarreStoccomparait"40110"à"040110"et rendaitDivergeà tort dans neuf départements (#4592) ;- l'emprise cartographique cherchait
"040110"dans une table dont les clés font cinq chiffres, ne trouvait rien, et retombait sur son repli. Un carré de département 01 à 09 sans point géolocalisé n'était donc pas tracé du tout, comme un carré hors référentiel.
Décision¶
Le format se rétablit là où le numéro entre dans l'application, une fois par entrée.
NumeroDeCarre.surSixChiffres porte la règle ; ReponsesVigieChiro l'applique à la lecture de la
grille, et CarroyageNational bâtit sa table dessus.
Aucun lecteur en aval n'a donc à connaître l'amputation.
Pourquoi pas au point de comparaison¶
C'était le remède évident quand on ne voyait qu'un symptôme : réparer ControleCarreStoc, qui
criait. Il aurait laissé le défaut entier pour le lecteur suivant, et il y en avait déjà un - l'emprise
cartographique, qui ne criait pas, elle : elle se rabattait en silence sur une approximation.
Un correctif au point de comparaison répare le lecteur qui se plaint, jamais celui qui se tait.
Une conséquence à ne pas défaire¶
Une classe qui rendrait du rembourré tout en cherchant du brut ne pourrait pas se redonner ce qu'elle
vient de rendre. C'est arrivé pendant le chantier, entre candidats() et centroide(), et c'est la
passe 0 de la clôture qui l'a vu. La table se bâtit donc sur la forme de R1, pas sur celle du fichier.
Comment on saurait qu'elle est rompue¶
NumeroDeCarreTest#departement_a_un_chiffre_retrouve_son_zero tient la règle elle-même.
Les trois autres tiennent chacune des deux entrées, et la conséquence visible :
ReponsesVigieChiroTest#numero_carre_stoc_rembourre_le_zero_de_gauchetient la réponse de la plateforme. C'est le garde de la cause de #4592 :ControleCarreStoccompare parequals, et il ne peut concorder que si ce qui lui arrive est déjà au format. Le contrôle ne peut pas tenir ce garde lui-même - son test bouchonne le client, donc en aval du rembourrage.CarroyageNationalTest#centroide_se_cherche_sur_six_chiffrestient le référentiel embarqué, et qu'il parle une seule langue de bout en bout.FournisseurEmpriseCarreOfficielTest#carre_de_departement_a_un_chiffre_est_caletient ce que l'observateur voit : la carte trace ces mailles.
Les quatre rougissent si quelqu'un rend un numéro « tel quel ».