-
Notifications
You must be signed in to change notification settings - Fork 0
Documentation
Un Base Adresse Locale est un fichier structuré contenant toutes les adresses d'un territoire.
Ce territoire peut être communal ou supra-communal (EPCI, département, région), tant que l'acteur de référence (la commune) est au centre du dispositif de mise à jour.
La création et la mise à jour d'une Base Adresse Locale est le mode d'alimentation privilégié de la Base Adresse Nationale.
Ces opérations peuvent être réalisées via (le cas échéant) :
- un logiciel dont s'est équipé la commune ;
- un logiciel mis à disposition par un chef de file territorial (EPCI, département, région) ;
- le logiciel mis à disposition par l'État (mes-adresses.data.gouv.fr) ;
- un outil dédié du système d'information du territoire concerné (cas des métropoles ou communautés urbaines).
Techniquement, l'alimentation de la Base Adresse Nationale avec une Base Adresse Locale se fait selon deux modes :
- par référencement ou dépôt d'un fichier BAL sur data.gouv.fr (lien vers procédure) ;
- par soumission d'une BAL de périmètre communale via une API dédiée.
Le présent document explicite les modalités de fonctionnement de cette deuxième approche.
L'approche "pull" historique, qui correspond au référencement ou au dépot d'un fichier sur data.gouv.fr, fonctionne, et est très simple à mettre en oeuvre. Elle a néanmoins plusieurs inconvénients :
- elle encourage une organisation pyramidale qui dé-responsabilise les communes ;
- pour être efficace, elle implique une disponibilité et des performances minimales pour le serveur qui héberge le fichier (objectif malheureusement rarement atteint), sauf dans le cas d'un dépôt sur data.gouv.fr ;
- elle n'offre aucune garantie de prise en compte immédiate des données, puisque les traitements d'incorporation sont exécutés a posteriori, sous réserve de validité du fichier et de l'absence d'erreurs bloquantes.
L'approche "push" vient donc répondre à ces problématiques, mais ne se destine qu'à des éditeurs/intégrateurs de solutions.
Elle permet notamment :
- de renforcer la rôle des communes, en imposant un dépôt à la maille communale ;
- de permettre un fonctionnement déconnecté, sans nécessité de disposer d'un serveur du côté du soumissionnaire (les problématiques de performances sont déportées sur adresse.data.gouv.fr) ;
- de garantir la prise en compte immédiate ou non des adresses soumises, et de disposer d'un rapport d'erreur
- d'atteindre des performances élevées pour les projets sur de grands territoires composés de nombreuses communes puisqu'il n'est plus nécessaire de traiter le fichier territorial en entier, mais juste la commune concernée.
Cette nouvelle architecture permet aussi une meilleure traçabilité des dépôts, des changements, et une historisation.
Si le dépôt est organisé, la commune reste bien gestionnaire de ses adresses.
Par ailleurs, il sera toujours possible de fonctionner en mode "pull".
Une Base Adresse Locale Communale (BALC) est un fichier contenant toutes les adresses d'une unique commune, structuré au format Base Adresse Locale (BAL) (1.2 ou 1.3).
Un client de l'API est un dispositif logiciel ayant vocation à déposer une nouvelle version de Base Adresse Locale Communale (BALC).
Un périmètre d'intervention est une liste de communes sur lequel un client de l'API est habilité à intervenir. Il pourra éventuellement être exprimé sous forme de liste d'EPCI ou de départements.
Chaque client de l'API peut demander une habilitation à déposer des BALC sur un périmètre donné.
Il devra pour cela produire un justificatif indiquant qu'il a été missionné par les communes ou leur représentant pour intervenir sur ce territoire.
Il devra notamment justifier d'un commanditaire responsable et de la mise en place d'un système d'authentification permettant à la commune d'exercer sa compétence sans usurpation.
Une charte de bonne conduite est à l'étude, et son non-respect pourra mener à une suspension temporaire de l'habilitation. Des garanties en terme de sécurité pourront être exigées à l'avenir.
Une solution logicielle techniquement raccordée à cette API, qui respecte les chartes et référentiels en vigueur pourra bénéficier d'une labellisation et l'utiliser comme argument de vente.
La solution pourra par ailleurs être référencée sur le site adresse.data.gouv.fr dans une rubrique dédiée.
La mise à jour des adresses d'une commune est réalisée par le dépôt d'une nouvelle BALC qui écrase l'ancienne. Dans l'API, cette opération est appelée revision
.
Chaque commune dispose de 0 ou plusieurs revisions
qui ont été publiées par différents clients habilités sur son territoire.
La création d'une revision
suit le processus suivant :
- Étape 1 : création de la
revision
avec contexte d'authentification - Étape 2 : téléversement du fichier au format BAL 1.2 ou 1.3
- Étape 3 : validation
- Étape 4 : soumission finale de la
revision
et prise en compte effective de la BALC
4 requêtes HTTP successives sont nécessaires pour réaliser le processus en entier.
Lorsqu'une revision
est effectivement prise en compte, toutes les revisions
en attente de la même commune reviennent à l'étape 3.
Une revision
en attente depuis plus de 24h est supprimée et purgée.
Les opérations de dépôt proposées cette API sont protégées et nécessitent une authentification et une traçabilité maximale.
Puisque l'authentification de l'utilisateur est déléguée au client de l'API, il est de la responsabilité du client de l'API de fournir un contexte lors de la publication d'une BALC.
Chaque client de l'API dispose d'un jeton permanent, qui pourra être renouvelé à la demande. Il doit être conservé de façon sécurisée.
Lors de la création d'une revision
, le contexte utilisateur doit être renseigné. Il est composé de 3 champs optionnels (nom de la personne nomComplet
qui effectue le dépôt, nom de l'organisation organisation
, champs libre clé/valeur extras
).
Il est demandé de renseigner les champs nomComplet
et organisation
au maximum des possibilités du client de l'API, en fonction de sa stratégie d'authentification.
Le champ extras
peut être utilisé pour stocker des identifiants internes au client, ou des données additionnelles actuellement non supportées par l'API mais jugées utiles par l'éditeur. Attention ces champs sont publics.
Requête :
POST /communes/27115/revisions
# Header
Authorization: Token xxxxxxxxxxxxxxxxx
Content-Type: application/json
# Body
{
"context": {
"nomComplet": "John Doe", // Optionnel
"organisation": "Mairie de Breux-sur-Avre", // Optionnel
"extras": {
"internal_id": "9990"
} // Optionnel
}
}
Réponse :
201 Created
# Header
Content-Type: application/json
# Body
{
"_id": "507f191e810c19729de860ea"
"codeCommune": "27115",
"context": {
"nomComplet": "John Doe"
"organisation": "Mairie de Breux-sur-Avre",
"extras": {
"internal_id": "9990"
}
},
"validation": {},
"client": {
"name": "Éditeur d’adresses",
"email": "[email protected]"
},
"status": "pending",
"ready": false,
"createdAt": "2020-01-01T00:00:00Z",
"updatedAt": "2020-01-01T00:00:00Z",
"publishedAt": null
}
Requête :
PUT /revisions/507f191e810c19729de860ea/files/bal
# Header
Authorization: Token xxxxxxxxxxxxxxxxx
Content-Type: text/csv
Content-Length: 2133 # Optionnel mais recommandé
Content-MD5: 1234567890abcdedf1234567890abcdedf # Optionnel mais recommandé
# Body
@@@ fichier BALC @@@ # Taille max : 50mb
Réponse :
200 Success
# Header
Content-Type: application/json
# Body
{
"_id": "507f199710c19729de860ea", # Identifiant du fichier
"revisionId": "507f191e810c19729de860ea", # Identifiant de révision
"type": "bal",
"size": 2133,
"hash": "51ca0bce566423b6c5a321e911438c57195adf747d066e0dd4b212d43c0f4c6e", # SHA-256
"createdAt": "2020-01-01T00:00:00Z"
}
Une fois le fichier soumis, il faut indiquer à l'API que tout est prêt. Cela déclenche alors la validation des données.
La validation d'une BALC via l'API diffère légèrement de ce qui est proposé sur adresse.data.gouv.fr pour les BAL. En effet un seul code commune est autorisé, celui pour lequel la revision
a été créée.
De façon générale, les erreurs qui avaient pour conséquence le rejet de la ligne pour le validateur BAL font désormais échouer la validation.
Quelques règles renforcées qui provoquent le rejet du fichier :
- une incohérence entre le numéro dans la clé d'interopérabilité et la colonne numéro ;
- une date invalide ;
- des coordonnées latitude/longitude invalides ;
- un type de position invalide ;
- un numéro ou un suffixe invalide ;
- un libellé de voie invalide ;
- une clé d'interopérabilité structurellement invalide (elle peut néanmoins être absente, ou son champ voie rempli à nul 0000-xxxx)
Requête :
POST /revisions/507f191e810c19729de860ea/compute
# Header
Authorization: Token xxxxxxxxxxxxxxxxx
Réponse :
200 Success
# Header
Content-Type: application/json
# Body
{
"_id": "507f191e810c19729de860ea"
"codeCommune": "27115",
"context": {
"nomComplet": "John Doe"
"organisation": "Mairie de Breux-sur-Avre",
"extras": {
"internal_id": "9990"
}
},
"validation": {
"valid": true,
"errors": []
},
"client": {
"name": "Éditeur d’adresses",
"email": "[email protected]"
},
"status": "pending",
"ready": true,
"createdAt": "2020-01-01T00:00:00Z",
"updatedAt": "2020-01-01T00:00:00Z",
"publishedAt": null
}
Si les données soumises ne sont pas valides, la valeur ready
reste à false
et validation.valid
est false
.
Lorsque qu'une revision
est publiable (ready: true
), elle peut être publiée.
Requête :
POST /revisions/507f191e810c19729de860ea/publish
# Header
Authorization: Token xxxxxxxxxxxxxxxxx
Réponse :
200 Success
# Header
Content-Type: application/json
# Body
{
"_id": "507f191e810c19729de860ea"
"codeCommune": "27115",
"context": {
"nomComplet": "John Doe"
"organisation": "Mairie de Breux-sur-Avre",
"extras": {
"internal_id": "9990"
}
},
"validation": {
"valid": true,
"errors": []
},
"client": {
"name": "Éditeur d’adresses",
"email": "[email protected]"
},
"status": "published",
"current": true, # Indique si la BALC est celle actuellement en production
"createdAt": "2020-01-01T00:00:00Z",
"updatedAt": "2020-01-01T00:00:00Z",
"publishedAt": "2020-01-01T01:00:00Z"
}
GET /communes/27115/revisions
GET /revisions/507f191e810c19729de860ea
GET /communes/27115/current-revision
GET /communes/27115/current-revision/files/bal/download
Pour vérifier l'intégrité du fichier soumis, au moins un en-tête de contrôle doit être fourni.
Nom de l'en-tête | Exemple de valeur | Description |
---|---|---|
Content-Length |
3126 |
Longueur en octet du fichier soumis |
Content-MD5 |
1234567890abcdedf1234567890abcdedf |
Signature MD5 du fichier soumis |
X-Rows-Count |
510 |
Nombre de lignes de données du fichier CSV soumis |
NB : Si le fichier est fourni compressé (en-tête Content-Encoding
présent) les éventuels en-têtes Content-Length
et Content-MD5
devront correspondre au fichier compressé et non au fichier brut. Dans ce cas il est recommandé de fournir aussi l'en-tête X-Rows-Count
.
-
L'Agglomération de la Région de Compiègne met à disposition une [documentation complète sur le paramétrage de l'API BAL pour FME] (https://github.com/sigagglocompiegne/rva/blob/master/api/doc_api_balc_fme.md)
-
Le département du calvados a également publié un tutoriel pour déposer une BAL via l’API BAN avec FME