ajout d'un programme pour extraire automatiquement la table concernant les achats informatiques à partier des extractions gestlab de ngicquiaux
This commit is contained in:
commit
6bfc9bf300
|
@ -0,0 +1,10 @@
|
|||
# journal
|
||||
|
||||
## 2023/01/26
|
||||
|
||||
- graffy a demandé à ddemorel de faire une extraction achats ur1 2019 comme celle qui avait été faite pour 2021
|
||||
- graffy vu qu'il est impossible d'isoler de façon automatique la totalité des achats informatiques (on peut certes identifier les fournisseurs 'informatique' tels que dell ou econocom, mais certains matériels informatiques sont achetés chez des généralistes tels que amazon ou radiospares) à partir de `from-cloud.ipr/2019/commandes-2019-cnrs-t001.xls`, car il manque quelque chose du style code nacres. graffy a donc demandé à ngiquiaux de voir si elle ne pouvait pas obtenir une extraction avec toutes les infos concernant tous les achats. Elle m'a envoyé `from-cloud.ipr/2019/commandes-2019-cnrs-t002.xls` qui ne contient finalement pas du tout les détails des achats (fausse manip ?)
|
||||
|
||||
## 2023/01/27
|
||||
|
||||
- graffy a obtenu de ngicquiaux un nouveau fichier `from-cloud.ipr/2019/commandes-2019-cnrs-t002.xls` qui semble correct cette fois!
|
|
@ -0,0 +1,114 @@
|
|||
Liste des matières;;
|
||||
;;
|
||||
Date;26/01/2023;
|
||||
;;
|
||||
Critères de la recherche;;
|
||||
Filtre;Valeur;
|
||||
Afficher les matières;Matières actives;
|
||||
Niveau;;
|
||||
Code;;
|
||||
Libellé;;
|
||||
;;
|
||||
Liste des résultats;;
|
||||
Niveau;Code;Libellé
|
||||
Principal;1;PETIT MATERIEL
|
||||
Secondaire;1100;Informatique
|
||||
Secondaire;1200;Bureautique
|
||||
Secondaire;1300;Scientifique (optique)
|
||||
Secondaire;1400;Electronique
|
||||
Secondaire;1500;Mécanique
|
||||
Secondaire;1600;Autres
|
||||
Secondaire;1700;Electricité
|
||||
Secondaire;1800;Produit Chimique
|
||||
Secondaire;1900;Scientifique (vide)
|
||||
Principal;2;EQUIPEMENT
|
||||
Secondaire;2100;Informatique
|
||||
Secondaire;2200;Bureautique
|
||||
Secondaire;2300;Scientifique (Optique)
|
||||
Secondaire;2400;Scientifique (vide)
|
||||
Secondaire;2500;Divers
|
||||
Principal;3;BIBLIOTHEQUE
|
||||
Secondaire;3100;Livres
|
||||
Secondaire;3200;Abonnement
|
||||
Secondaire;3300;Publications
|
||||
Principal;4;ADMINISTRATION
|
||||
Secondaire;4100;Fournitures bureau
|
||||
Secondaire;4200;Reprographie
|
||||
Secondaire;4300;Frais de documentation
|
||||
Secondaire;4400;Frais de Transport
|
||||
Secondaire;4500;Frais divers (douane)
|
||||
Secondaire;4600;Frais de Maintenance et Réparation
|
||||
Secondaire;4700;Frais de repas
|
||||
Secondaire;4800;Abonnement téléphonique
|
||||
Secondaire;4900;AUTRES
|
||||
Principal;5;MISSION
|
||||
Secondaire;5100;France
|
||||
Secondaire;5200;CEE
|
||||
Secondaire;5300;Hors CEE
|
||||
Secondaire;5400;Inscription congrès
|
||||
Principal;6;FLUIDES
|
||||
Secondaire;6100;AIR LIQUIDE
|
||||
Secondaire;6200;AIR PRODUCT
|
||||
Secondaire;6300;CARBOGLACE
|
||||
Secondaire;6400;LINDE
|
||||
Secondaire;6500;SPECTRA GASES, GMBH
|
||||
Secondaire;6600;AUTRES
|
||||
Principal;7;DIVERS
|
||||
Secondaire;7100;ANIMALERIE
|
||||
Principal;8;PERSONNEL
|
||||
Secondaire;8100;VACATIONS
|
||||
Principal;9;MAINTENANCE/TRAVAUX
|
||||
Secondaire;9100;Interventions
|
||||
Secondaire;9200;Logiciels
|
||||
Secondaire;9300;Travaux
|
||||
Principal;A;FONCTIONNEMENT COURANT
|
||||
Secondaire;A1--;FOURNITURES ET CONSOMMABLES DE BUREAU
|
||||
Secondaire;A2--;MOBILIER ET MATERIEL DE BUREAU
|
||||
Secondaire;A3--;FLUIDES
|
||||
Secondaire;A4--;AUTRES DEPENSES
|
||||
Secondaire;A5--;FI- FONCTIONNEMENT COURANT HORS FLUIDES
|
||||
Secondaire;A6--;FLUIDES
|
||||
Principal;B;FOURNITURES & EQUIPEMENTS SC, VALORISAT°
|
||||
Secondaire;B01-;ANIMALERIE, EXPERIM° ANIMALE, VEGETALE
|
||||
Secondaire;B02-;CONSOM.LABO, PETITS MATERIELS EQUIP.PAIL
|
||||
Secondaire;B03-;GAZ & PRODUITS CHIMIE BIOCHIMIE BIOLOGIE
|
||||
Secondaire;B04-;GROS EQUIPEMENTS DE LABORATOIRE
|
||||
Secondaire;B05-;GROSSE INSTRUMENTATION SCIENTIFIQUE
|
||||
Secondaire;B06-;OPTIQUE
|
||||
Secondaire;B07-;ELECTRONIQUE / MESURES ELECTRIQUES
|
||||
Secondaire;B08-;PHYSIQUE-MESURES PHYSIQUES-MECANIQUE
|
||||
Secondaire;B09-;"SCIENCES DE LA TERRE & DE L'UNIVERS ARCH"
|
||||
Secondaire;B10-;"CONSOMMABLES ET FOURNITURES D'ATELIER"
|
||||
Secondaire;B11-;DOCUMENTATION ET EDITION
|
||||
Secondaire;B12-;HYGIENE ET SECURITE
|
||||
Secondaire;B13-;VALORISATION
|
||||
Secondaire;B14-;FI-FOURNITURES & EQUIPEMTS SC VALORISAT°
|
||||
Principal;C;MISSIONS, DEPLACEMTS, COLLOQUES COMMUNIC
|
||||
Secondaire;C1--;MISSIONS, DEPLACEMENTS
|
||||
Secondaire;C2--;COLLOQUES
|
||||
Secondaire;C3--;COMMUNICATIONS, RECEPTIONS
|
||||
Secondaire;C4--;ACHATS ET ENTRETIEN DE VEHICULES
|
||||
Secondaire;C5--;FI-MISSIONS, DEPLACEM. COLLOQUES COMMUNI
|
||||
Principal;D;INFORMATIQUE
|
||||
Secondaire;D1--;MAINTENANCE (LOGIGIEL ET MATERIEL)
|
||||
Secondaire;D2--;ABONNEMENT ET CONSOMMABLE
|
||||
Secondaire;D3--;ACHAT (LOGICIEL ET MATERIEL)
|
||||
Secondaire;D4--;PRESTATION (PROJET ET HORS PROJET)
|
||||
Secondaire;D5--;FACTURATION INTERNE
|
||||
Principal;E;IMMOBILIER
|
||||
Secondaire;E1--;ENTRETIEN CHARGES RELEVANT DU LOCATAIRE
|
||||
Secondaire;E2--;LOYERS
|
||||
Secondaire;E3--;CONSTR° MAINTEN. RELEVANT DU PROPRIETAIR
|
||||
Secondaire;E4--;FI - IMMOBILIER
|
||||
Principal;F;ACTION SOCIALE
|
||||
Secondaire;F1--;MEDECINE
|
||||
Secondaire;F2--;RESTAURATION
|
||||
Secondaire;F3--;OEUVRES SOCIALES
|
||||
Secondaire;F4--;FI - ACTION SOCIALE
|
||||
Principal;G;SUBVENTIONS
|
||||
Secondaire;G1--;PARTICIP° FINANC. BUDGETS DES ORGANISMES
|
||||
Secondaire;G2--;DELEGATION DE GESTION
|
||||
Secondaire;G3--;AUTRES SUBVENTIONS
|
||||
Secondaire;G4--;FI - SUBVENTIONS
|
||||
;;
|
||||
99 enregistrements;;
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,10 @@
|
|||
|
||||
# description des fichiers
|
||||
|
||||
- `commandes-2019-cnrs-t001.xls` : Ce fichier contient l'ensemble des achats de 2019, avec le libellé et le fournisseur. ngiquiaux a obtenu ce fichier par un des types d'extraction (todo: trouver son nom) de `gestlab`. Ca ressemble davantage à un rapport qu'une base de données, vu que l'unique feuille de calcul contient en fait une série de tableaux du même type, à raison d'un tableau par `Entité dépensière`. Un seul tableau avec une colonne entité `Entité dépensière` aurait été plus facile à exploiter.
|
||||
- fichier envoyé par ngiquiaux à graffy le `Wed, 18 Jan 2023 14:55:29 +0100`.
|
||||
- `commandes-2019-cnrs-t001.tsv` : `commandes-2019-cnrs-t001.xls` après conversion au format `tsv` avec `libreoffice`
|
||||
- `commandes-2019-cnrs-t002.xls` : Suite à une demande de graffy signalant à ngiquiaux qu'il manquait le code nacres dans `commandes-2019-cnrs-t001.xls`, ngiquiaux a obtenu ce fichier par un des types d'extraction (todo: trouver son nom, mais dedans je me souviens qu'il y avait le mot *détail*) de `gestlab`, après en avoir essayés pluieurs autres.
|
||||
- fichier envoyé par ngiquiaux à graffy le `Thu, 26 Jan 2023 17:39:10 +0100`
|
||||
- `cnrs-matieres-001.csv` : ce fichier est censé décrire les codes des matières utilisés dans `commandes-2019-cnrs-t002.xls`
|
||||
- fichier envoyé par ngiquiaux à graffy le `Thu, 26 Jan 2023 17:39:10 +0100`
|
|
@ -0,0 +1,53 @@
|
|||
|
||||
from pathlib import Path
|
||||
import re
|
||||
import pandas
|
||||
|
||||
|
||||
def cnrsformat1_to_sheet(in_tsv_file_path: Path, out_tsv_file_path: Path):
|
||||
with open(in_tsv_file_path) as inf, open(out_tsv_file_path, 'wt') as outf:
|
||||
table_header_has_been_written = False
|
||||
for line in inf.readlines():
|
||||
ignore_line = False
|
||||
# Entité dépensière : AESJULLIEN AES RENNES METROPOLE MC JULLIEN Crédits reçus : 40,000.00
|
||||
# Disponible : 24,743.14
|
||||
#
|
||||
#
|
||||
# N° commande Souche Libellé commande Date commande Raison sociale fournisseur Montant consommé sur exercice antérieur Montant consommé sur l'exercice Montant réservé Montant facturé Code origine Nature dépense Statut Cde groupée
|
||||
if re.match(r'^Entité dépensière', line):
|
||||
ignore_line = True
|
||||
is_table_header = re.match(r'^N° commande', line) is not None
|
||||
# 19,572.00 19AESMCJ CAMERA ZYLA 5.5 sCMOS 04/11/19 ANDOR TECHNOLOGY LIMITED 0.00 13,681.56 0.00 0.00 635991 IM
|
||||
if is_table_header and not table_header_has_been_written:
|
||||
outf.write('# %s' % line)
|
||||
table_header_has_been_written = True
|
||||
if re.match(r'^[0-9,./]+\t', line):
|
||||
outf.write(line)
|
||||
|
||||
|
||||
def main():
|
||||
cnrsformat1_file_path = Path('./from-cloud.ipr/2019/commandes-2019-cnrs-t001.tsv')
|
||||
sheet_file_path = Path('./tmp/commandes-2019-cnrs.tsv')
|
||||
cnrsformat1_to_sheet(cnrsformat1_file_path, sheet_file_path)
|
||||
|
||||
df = pandas.read_csv(sheet_file_path, sep='\t')
|
||||
|
||||
# delete the colums for which the labve is of the form 'Unnamed: <n>'. They come from the csv export of libre office
|
||||
unnamed_columns = [column_label for column_label in df.keys() if re.match(r'^Unnamed', column_label) is not None]
|
||||
print(unnamed_columns)
|
||||
df = df.drop(columns=unnamed_columns)
|
||||
|
||||
print(df.columns)
|
||||
print(df.keys())
|
||||
print(df)
|
||||
it_df = df[(df['Raison sociale fournisseur'] == 'DELL SAS') | (df['Raison sociale fournisseur'] == 'ECONOCOM PRODUCTS & SOLUTIONS')]
|
||||
# 'AMAZON EU SARL SUCCURSALE FRANCAISE'
|
||||
# 'INMAC'
|
||||
# 'RETIS'
|
||||
# 'APIXIT'
|
||||
print(it_df)
|
||||
|
||||
print(it_df[['Montant facturé', 'Raison sociale fournisseur', 'Libellé commande']])
|
||||
|
||||
|
||||
main()
|
Loading…
Reference in New Issue