78 lines
3.8 KiB
Markdown
78 lines
3.8 KiB
Markdown
# Totem2XML
|
|
|
|
Script Python permettant de convertir une liste de fichiers de budget au format Totem XML, en fichiers CSV conformes au schéma national du SCDL pour les données budgétaires.
|
|
|
|
Utilisation:
|
|
|
|
Récupération des plan de comptes:
|
|
```
|
|
> python get_pdc.py
|
|
```
|
|
|
|
Conversion de fichoier XML Totem en CSV
|
|
```
|
|
> python run.py file1.xml [file2.xml file2.xml ... filen.xml]
|
|
> # ou
|
|
> python run.py directory
|
|
```
|
|
|
|
Les fichiers générés sont localisés au même endroit que chaque fichier XML et aura le même nom.
|
|
Ainsi, `./mon/fichier1.xml` sera converti en `./mon/fichier1.csv`.
|
|
|
|
## A noter
|
|
|
|
Ce script s'appuie sur les plans de compte diffusés sur http://odm-budgetaire.org/composants/normes/.
|
|
|
|
Il n'utilise pas de XSL pour convertir les fichiers, mais converti le XML en dictionaire Python pour traiter les informations.
|
|
|
|
Il s'inspire fortement de l'outil "DataClic" proposé par OpenDataFrance: https://dataclic.fr/budget. Les calculs de valeurs sont basés sur le script https://gitlab.com/datafin/totem/-/blob/master/totem2csv/xsl/totem2xmlcsv.xsl. Il se limite cependant à la conversion des lignes de budget et ne réalise pas l'anonymisation du fichier Totem XML.
|
|
|
|
Un problème à cependant été identifié sur l'outils DataClic pour l'identification des labels de nature et fonction à partir des codes correspondant.
|
|
Il smeble que certaines lignes du budget dépendent de la nomenclature de l'année précédente. Ainsi, en utilisant le plan de compte d'une seule année, certains labels ne peuvent pas être renseignée.
|
|
Pour contourner ce problème le script de converrsion utilise un fichier de référence pour chaque type de plan de compte, constitué par la capitalisation pluri annuelle des nomenclature (période 2015/2023). Ces fichies sont disponibles dans le dossier "pdc" et peuvent être générés/mis à jour via le script get_pdc.py.
|
|
La génération de ces nomenclatures spécifiques s'appuient sur les hypothèses suivante:
|
|
- Un code correspond toujours au même libellé dans un type de plan de compte (ex.: M14, M71, M57, etc.). Il peut être supprimé d'une nomenclature mais n'est pas réutilisé pour un autre libellé.
|
|
- Il n'y a pas de doublon de codes et libellés entre les sous-types de plans de compte (ex.: entre M57, M57_A, M57_D et M57_P)
|
|
|
|
## Modules utilisés
|
|
|
|
Ce script fonctionne avec Python 3. Il a été testé avec Python 3.9.
|
|
|
|
Les principaux modules utilisés sont:
|
|
|
|
* https://github.com/martinblech/xmltodict
|
|
* https://github.com/jmespath/jmespath.py
|
|
|
|
# Installation
|
|
|
|
Récupérer le dépôt Git.
|
|
```
|
|
$ git clone https://gitea.datagrandest.net/guillaume_ryckelynck/totem2csv.git
|
|
```
|
|
|
|
Créer un environnement virtuel et installer les modules (ici sous Windows).
|
|
```
|
|
$ cd totem2csv
|
|
$ python -m venv venv
|
|
$ .\venv\Scripts\activate # 'source ./venv/bin/activate' sur linux
|
|
$ python -m pip install -r requirements.txt
|
|
```
|
|
|
|
Le script "get_pdc.py" permet de mettre à jour la liste des chapitres et comptes de chaque plan de compte en les téléchargeant et les enregistrant au format JSON dans le dossier "pdc".
|
|
```
|
|
> python get_pdc.py
|
|
```
|
|
|
|
Le script "run.py" permet de convertir un ou plusieurs fichier XML Totem en CSV.
|
|
```
|
|
$ python run.py monfichier.xml
|
|
```
|
|
|
|
## Ressoures
|
|
|
|
* Schéma SCDL des données budgétaires: https://schema.data.gouv.fr/scdl/budget/
|
|
* Outil national de conversion des fichiers Totem en CSV "DataClic": https://dataclic.fr/budget
|
|
* Outil national de validation des données budgétaires au format CSV "Validata": https://validata.fr/table-schema?schema_name=schema-datagouvfr.scdl%2Fbudget&schema_ref=
|
|
* Code source de l'application nationale "DataClic" pour le budget: https://gitlab.com/datafin/totem
|
|
* Code source de l'application nationale "Validata": https://git.opendatafrance.net/validata
|
|
* Liste des plans de compte au format XML: http://odm-budgetaire.org/composants/normes/ |