Skip to content

Qualité et fraîcheur des données ​

Les données juridiques de référence vieillissent sans bruit : un nouveau taux d'intérêt est publié, un tribunal déménage, une loi fusionne deux cantons. Cette page explique comment le package reste à jour, et jusqu'où vous pouvez faire confiance à chaque jeu de données.

D'où vient chaque jeu de données ​

Jeu de donnéesSourceConstructionChange quandVérification tous les
Ressorts, arrondissementsCode judiciaire, annexe art. 4–5À la mainUne loi redessine la carte judiciaire (rare ; la dernière en 2014)24 mois
CantonsCode judiciaire, annexe art. 1 (nl + fr)Générés : pnpm build:cantonsUne loi modifie l'annexe ; des communes fusionnent12 mois
Limites des cantonsIGN (geo.be)Chaque semaine : snapshots + pnpm build:dataL'IGN publie une nouvelle versionSemaine
CommunesDonnées ouvertes de StatbelGénérées : pnpm build:cantonsDes communes fusionnent (2019, 2025)12 mois
Régions, provincesListe des codes REFNIS de StatbelHebdomadaire : instantanés + pnpm build:dataStatbel modifie son registre (dernière fois en 1995)Hebdomadaire
Cours et tribunauxtribunaux-rechtbanken.beChaque semaine : snapshots + pnpm build:dataUn tribunal déménage ou change de contacts ou d'horairesSemaine
Prisonsjustitie.belgium.beChaque semaine : snapshots + pnpm build:dataUne prison ouvre, ferme ou change de contactsSemaine
Maisons de justicevlaanderen.be, maisonsdejustice.beChaque semaine : snapshots + pnpm build:dataUne maison déménage ou change de contactsSemaine
Codes postauxTable de conversion de StatbelChaque semaine : snapshots + pnpm build:dataStatbel publie une nouvelle table (fusions, nouveaux codes)Semaine
Taux d'intérêtSPF Finances, Moniteur belgeÀ la mainChaque année (légal) et chaque semestre (commercial)6 mois

Les jeux de données générés ne sont jamais modifiés à la main. pnpm build:cantons analyse le texte officiel et refuse d'écrire quoi que ce soit tant que les versions néerlandaise et française ne concordent pas et que chaque commune n'est pas couverte ; pnpm build:data refuse quand une page ne peut pas être rattachée, qu'un canton n'a pas de tribunal ou qu'un canton n'a pas de limite dans le fichier de l'IGN.

Comment les données sont construites ​

site officiel ──fetch──> snapshots (branche sources) ──parse──> data/*.json ──> pull request
  1. Récupération. Chaque lundi, le workflow sources récupère chaque page des sources (scripts/sources), avec courtoisie : une requête par seconde et par site, avec un user agent qui nomme le projet. Il conserve chaque page sur la branche sources, avec un index de ce qui a été récupéré, quand, et un hachage de son contenu. Une page n'est enregistrée à nouveau que lorsque son contenu change, de sorte que l'historique de la branche montre ce qui a changé quel jour. Une page en échec (une erreur serveur, une 404) garde son dernier snapshot valide et arrête l'exécution, ce qui ouvre une issue : les données ne sont jamais reconstruites à partir d'une image incomplète. Une page vers laquelle la source ne renvoie plus est retirée des snapshots ; son enregistrement reste dans les données, clôturé par un validTo (la veille de la vérification qui ne l'a plus trouvée), de sorte que son identifiant continue de fonctionner et qu'une recherche pour un jour antérieur le trouve encore. Une page qui apparaît reçoit un enregistrement avec un validFrom.
  2. Analyse. pnpm build:data lit les snapshots (scripts/parse) et écrit les cours et tribunaux, les prisons, les maisons de justice et les limites des cantons. Il signale ce qu'il ne peut pas lire, et échoue quand une page ne peut pas être rattachée.
  3. Tests. Le workflow vérifie les types et exécute les tests sur les nouvelles données.
  4. Relecture. Quand les données ont changé, il ouvre ou met à jour une seule pull request avec le diff et la liste des valeurs illisibles. Une personne la vérifie par rapport aux sources et la fusionne.

Pour l'exécuter vous-même : pnpm fetch:sources (écrit dans .sources/), puis pnpm build:data.

Les cantons et les communes sont reconstruits à la main avec pnpm build:cantons : le site du Moniteur belge refuse les serveurs de GitHub (#52).

Contrôles automatiques ​

À chaque changement (CI) ​

  • Validation des schémas : chaque fichier de données respecte son JSON Schema.
  • Intégrité : les identifiants sont uniques et bien formés ; chaque référence (arrondissement, canton, commune, tribunal, limite) pointe vers un enregistrement existant ; chaque canton a une limite, en GeoJSON valide situé en Belgique, qui recouvre la superficie du pays sans chevauchement ; chaque commune est dans exactement un canton ou scindée entre plusieurs ; chaque canton reste dans les provinces de son arrondissement ; chaque canton a exactement une justice de paix ; chaque division a le type et le ressort de son tribunal ; chaque catégorie de juridiction compte le nombre de tribunaux que la loi fixe ; chaque canton relève d'un tribunal de chaque type (un par langue à Bruxelles), et les cantons d'un tribunal se situent dans son arrondissement et dans son ressort.
  • Parsers : testés de bout en bout sur des copies élaguées de pages réelles (test/fixtures/sources), et chaque lecteur (numéros de téléphone, IBAN, adresses, heures d'ouverture) sur les formes rencontrées dans les sources et sur ce qu'il doit refuser.
  • Taux d'intérêt : les périodes sont triées, ne se chevauchent jamais et ne laissent aucun trou ; le taux légal court par année civile et le taux commercial par semestre ; le taux lié à la date du contrat de 2013–2015 n'apparaît que dans cette fenêtre.
  • Données de contact : chaque IBAN passe sa somme de contrôle ISO 13616, les numéros de téléphone sont des numéros belges au format E.164, les adresses e-mail sont en minuscules, et les heures d'ouverture respectent la syntaxe opening_hours.
  • Code : TypeScript strict (y compris l'accès par index non vérifié et les propriétés optionnelles exactes), ESLint avec des règles sensibles aux types, Prettier, et une couverture de test de 100 % de src/.
  • Packaging : le package construit se charge avec import et avec require(), depuis chaque point d'entrée, sous Node 22.12, 22, 24 et 26 ; publint et arethetypeswrong vérifient les exports et les déclarations de types.

Chaque semaine (planifié) ​

Le workflow freshness s'exécute chaque lundi et ouvre une issue étiquetée data-freshness quand il trouve quelque chose :

  • Taux manquants : pas de taux légal ou commercial pour aujourd'hui, ou pas de taux commercial pour les deux prochaines semaines (le SPF Finances le publie avant le début du semestre).
  • Vérifications en retard : la date lastReviewed d'un jeu de données dans datapackage.json est plus ancienne que son reviewEveryMonths.
  • Sources mortes : une URL de source officielle dans datapackage.json ne répond plus.

Lancez-les vous-même avec pnpm test:freshness (ajoutez FRESHNESS_ONLINE=1 pour vérifier les URL).

Comment lire une valeur ​

  • Absent n'est pas zéro. getInterestRate renvoie null pour un jour sans taux connu, plutôt que de deviner ; un champ que la source ne donne pas (l'adresse d'un tribunal, des heures d'ouverture lisibles par machine) est absent plutôt que rempli. Traitez les deux cas.
  • Trop tôt est une erreur. Une recherche pour un jour antérieur à la couverture d'un jeu de données lève une RangeError : les données ne peuvent pas répondre, et la réponse d'aujourd'hui aurait l'air d'être la bonne.
  • Les données de contact sont les moins stables. Les numéros de téléphone, les adresses e-mail et les heures d'ouverture changent sans préavis. Chaque enregistrement indique de quelles pages il a été lu et quand (sources) ; consultez la page du tribunal (website) quand cela compte.
  • Le texte légal l'emporte. Pour les communes scindées, le territory du canton est le texte même de la loi, mot pour mot. Quand un résumé, ou la limite de l'IGN, et le texte divergent, c'est le texte qui a raison.

Signaler une erreur ​

Ouvrez une correction de données avec l'identifiant de l'enregistrement et un lien vers la source officielle. Les corrections sont publiées en versions patch.

Code sous licence MIT, données sous CC BY 4.0. Données de référence, pas un avis juridique : vérifiez les sources officielles.