# 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/