<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Enodev.fr / Christophe's log (Posts about QIF)</title><link>https://www.enodev.fr/</link><description></description><atom:link href="https://www.enodev.fr/categories/qif.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Tue, 16 Jan 2024 22:07:07 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Fin du QIF à la Société Générale</title><link>https://www.enodev.fr/posts/fin-du-qif-a-la-societe-generale.html</link><dc:creator>Christophe Vu-Brugier</dc:creator><description>&lt;div class="alert alert-info" role="alert"&gt;
  &lt;strong&gt;Mise à jour :&lt;/strong&gt;
    le QIF est de retour à la Société Générale depuis
    février 2020. Mais cet article reste pertinent si vous préférez
    manipuler le relevé de vos opérations au format CSV.
&lt;/div&gt;

&lt;p&gt;J'utilise &lt;a href="https://gnucash.org/"&gt;GnuCash&lt;/a&gt; depuis une dizaine d'années
pour tenir mes comptes. J'ai l'habitude d'importer le relevé des
opérations au format
&lt;a href="http://www.respmech.com/mym2qifw/qif_new.htm"&gt;QIF&lt;/a&gt; dans GnuCash. Or
depuis la refonte du site Internet destiné aux particuliers, la
Société Générale ne propose plus l'export du relevé des opération au
format QIF. À la place, la banque au carré rouge et noir propose un
fichier CSV contenant les opérations réalisées au cours des six
derniers mois.&lt;/p&gt;
&lt;p&gt;Contactée, la Société Générale m'a informé &lt;em&gt;« ne pas
pouvoir changer le format proposé par le site »&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Je constate qu'à l'image des &lt;acronym title="Google, Apple, Facebook,
Amazon et Microsoft"&gt;GAFAM&lt;/acronym&gt;, la Société Générale cherche à
capter les données de ses clients pour les exploiter et néglige leur
partage avec ces mêmes clients qui en sont pourtant les
propriétaires. Ainsi, le site Internet de la Société Générale propose
d'importer des comptes &lt;em&gt;externes&lt;/em&gt;, c'est-à-dire tenus dans &lt;em&gt;d'autres&lt;/em&gt;
établissements bancaires. Mais quiconque veut rapatrier &lt;em&gt;ses données&lt;/em&gt;
doit se contenter d'un fichier CSV réduit à la portion congrue.&lt;/p&gt;
&lt;p&gt;Nous allons étudier les problèmes liés au fichier CSV fourni par la
Société Générale et développer ensemble &lt;del&gt;l'esprit d'équipe&lt;/del&gt; une
solution pour faciliter son import dans GnuCash.&lt;/p&gt;
&lt;h2&gt;Du CSV à la française&lt;/h2&gt;
&lt;p&gt;Après avoir téléchargé le fichier CSV, observons ses propriétés :&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;file&lt;span class="w"&gt; &lt;/span&gt;Export_17052019_16112019.csv
Export_17052019_16112019.csv:&lt;span class="w"&gt; &lt;/span&gt;ISO-8859&lt;span class="w"&gt; &lt;/span&gt;text,&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;CRLF&lt;span class="w"&gt; &lt;/span&gt;line&lt;span class="w"&gt; &lt;/span&gt;terminators
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le fichier est encodé en &lt;a href="https://fr.wikipedia.org/wiki/ISO/CEI_8859"&gt;ISO
8859&lt;/a&gt; et les retours à la
ligne sont matérialisés par deux octets
&lt;a href="https://fr.wikipedia.org/wiki/Carriage_Return_Line_Feed"&gt;CR+LF&lt;/a&gt; comme
il est d'usage sous Windows.&lt;/p&gt;
&lt;p&gt;Que contiennent donc &lt;em&gt;nos&lt;/em&gt; données ?&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$ head Export_17052019_16112019.csv
="0201900016400270";17/05/2019;16/11/2019;
date_comptabilisation;libellé_complet_operation;montant_operation;devise;
15/11/2019;CARTE X7527 15/11 METRO    ;-14,90;EUR;
13/11/2019;VIR RECU    8527975563S DE: Boulot SAS MOTIF: BOULOT OCTOBRE 2019 33 REF: BOULOT OCTOBRE 2019 33;2188,28;EUR;
11/11/2019;PRELEVEMENT EUROPEEN 7997325297 DE: DODO GESTION ID: FR65ZZZ233162 MOTIF: 081 LOYER DODO;-614,50;EUR;
10/11/2019;CARTE X7527 10/11 RESTO    ;-11,00;EUR;
09/11/2019;CARTE X7527 09/11 BRICO    ;-14,50;EUR;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nous avons affaire à la variante française du
&lt;a href="https://fr.wikipedia.org/wiki/Comma-separated_values"&gt;CSV&lt;/a&gt;
qui utilise le &lt;em&gt;point-virgule&lt;/em&gt; pour délimiter les colonnes et la
&lt;em&gt;virgule&lt;/em&gt; pour partager la partie entière et la partie décimale d'un
nombre.&lt;/p&gt;
&lt;p&gt;La première ligne débute par le numéro de compte. La notation
&lt;code&gt;="0123"&lt;/code&gt; est une astuce pour indiquer à Microsoft Excel de
&lt;a href="https://stackoverflow.com/questions/34595812/is-a-csv-with-equal-sign-valid"&gt;préserver le zéro&lt;/a&gt;
au début d'un nombre. Suivent les dates de début et de fin des
données exportées. Les dates sont exprimées au format français
&lt;em&gt;JJ/MM/AAAA&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;La deuxième ligne contient les intitulés de colonnes qui sont donc la
&lt;em&gt;date de comptabilisation&lt;/em&gt;, le &lt;em&gt;libellé de l'opération&lt;/em&gt;, son &lt;em&gt;montant&lt;/em&gt;
et la &lt;em&gt;devise&lt;/em&gt;. Nous remarquons que la ligne se termine par un
séparateur &lt;em&gt;point-virgule&lt;/em&gt; inutile.&lt;/p&gt;
&lt;h2&gt;Nettoyer le fichier CSV avec Pandas&lt;/h2&gt;
&lt;p&gt;Après avoir observé les données, nous ouvrons notre boîte à outils
d'apprenti
&lt;a href="https://fr.wikipedia.org/wiki/Science_des_donn%C3%A9es"&gt;Data Scientist&lt;/a&gt;.
Nous choisissons Python et Pandas.
&lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt; est un langage de programmation
qu'on ne présente plus : il est même enseigné au Lycée.
&lt;a href="https://pandas.pydata.org/"&gt;Pandas&lt;/a&gt; est une bibliothèque Python
destinée à la fouille de données.
Python et Pandas, voilà une excellente compagnie pour le paresseux que
je suis.&lt;/p&gt;
&lt;h3&gt;Charger&lt;/h3&gt;
&lt;p&gt;La bibliothèque Pandas fournit la fonction
&lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html"&gt;&lt;code&gt;read_csv()&lt;/code&gt;&lt;/a&gt;
avec de nombreux paramètres permettant de nettoyer le fichier CSV.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Export_17052019_16112019.csv'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;';'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;decimal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="n"&gt;parse_dates&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dayfirst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="n"&gt;usecols&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;index_col&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'date'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'description'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'amount'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'currency'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                 &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'ISO-8859-1'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Parmi les paramètres :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sep&lt;/code&gt; et &lt;code&gt;decimal&lt;/code&gt; adaptent le comportement de &lt;code&gt;read_csv()&lt;/code&gt; pour la
  variante française du CSV.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;header&lt;/code&gt; indique que la ligne des entêtes est la deuxième ligne (la
  première ligne ayant pour indice zéro).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dayfirst&lt;/code&gt; sélectionne le format de date européen où le jour
  apparaît avant le mois (les États-Unis fêtent Noël le 12/25).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;index_col&lt;/code&gt; précise que la première colonne – la date –
  sert d'index.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La fonction &lt;code&gt;read_csv()&lt;/code&gt; retourne un objet de type
&lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html"&gt;&lt;code&gt;DataFrame&lt;/code&gt;&lt;/a&gt;.
Voici son contenu affiché par Python :&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&amp;gt;&amp;gt;&amp;gt; df
                                                  description   amount currency
date
2019-11-15                        CARTE X7527 15/11 METRO       -14.90      EUR
2019-11-13  VIR RECU    8527975563S DE: Boulot SAS MOTIF: ...  2188.28      EUR
2019-11-11  PRELEVEMENT EUROPEEN 7997325297 DE: DODO GESTI...  -614.50      EUR
2019-11-10                        CARTE X7527 10/11 RESTO       -11.00      EUR
2019-11-09                        CARTE X7527 09/11 BRICO       -14.50      EUR
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Filtrer&lt;/h3&gt;
&lt;p&gt;La version précédente du site Internet de la Société Générale
proposait d'exporter les transactions au format QIF &lt;em&gt;depuis le dernier
téléchargement&lt;/em&gt;. La nouvelle mouture propose un export au format CSV
des transactions des six derniers mois.&lt;/p&gt;
&lt;p&gt;Par conséquent, nous sommes désormais contraint de relever dans
GnuCash la date de la dernière transaction déjà importée afin de
filtrer les données CSV à importer et limiter les doublons.&lt;/p&gt;
&lt;p&gt;La première colonne – la date – ayant été choisie comme
index, l'opération se fait simplement avec un &lt;em&gt;slice&lt;/em&gt; :&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&amp;gt;&amp;gt;&amp;gt; df = df['2019-11-15':'2019-11-13']
&amp;gt;&amp;gt;&amp;gt; df
                                                  description   amount currency
date
2019-11-15                        CARTE X7527 15/11 METRO       -14.90      EUR
2019-11-13  VIR RECU    8527975563S DE: Boulot SAS MOTIF: ...  2188.28      EUR
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Distinguer les dépôts et les retraits&lt;/h3&gt;
&lt;p&gt;Le CSV exporté depuis le site Internet de la Société Générale comprend
une seule colonne &lt;em&gt;montant&lt;/em&gt;. Or GnuCash exige de distinguer &lt;em&gt;dépôt&lt;/em&gt; et
&lt;em&gt;retrait&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Nous devons donc ajouter deux colonnes au tableau et les remplir à
partir du montant.&lt;/p&gt;
&lt;p&gt;Pour une transaction donnée :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si le montant est &lt;em&gt;positif&lt;/em&gt;, il s'agit d'un dépôt. Nous copions la
  valeur du montant dans la colonne dépôt et nous écrivons zéro dans
  la colonne débit.&lt;/li&gt;
&lt;li&gt;Si le montant est &lt;em&gt;négatif&lt;/em&gt;, il s'agit d'un retrait. Nous copions la
  valeur absolue du montant dans la colonne retrait et nous écrivons
  zéro dans la colonne dépôt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec Pandas, les colonnes &lt;em&gt;dépôt&lt;/em&gt; et &lt;em&gt;retrait&lt;/em&gt; peuvent être calculées
à partir du &lt;em&gt;montant&lt;/em&gt; de la manière suivante :&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'deposit'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'amount'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'withdraw'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'amount'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En Python, le mot clé &lt;em&gt;lambda&lt;/em&gt; définit une fonction &lt;em&gt;anonyme&lt;/em&gt;. Dans la
première instruction, la colonne dépôt est remplie en appliquant au
montant la fonction qui pour &lt;em&gt;x&lt;/em&gt; retourne &lt;em&gt;x&lt;/em&gt; s'il est positif et 0
dans le cas contraire.&lt;/p&gt;
&lt;p&gt;Voici à quoi ressemble notre tableau suite à l'ajout des colonnes
dépôt et retrait :&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;                                                  description   amount currency  deposit  withdraw
date
2019-11-15                        CARTE X7527 15/11 METRO       -14.90      EUR     0.00      14.9
2019-11-13  VIR RECU    8527975563S DE: Boulot SAS MOTIF: ...  2188.28      EUR  2188.28       0.0
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Exporter à destination de Gnucash&lt;/h3&gt;
&lt;p&gt;La méthode
&lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html#pandas.DataFrame.to_csv"&gt;&lt;code&gt;to_csv()&lt;/code&gt;&lt;/a&gt;
permet de sauvegarder un &lt;code&gt;DataFrame&lt;/code&gt; dans un
fichier au format CSV.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'gnucash.csv'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;';'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;decimal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'description'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'deposit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'withdraw'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Seules sont exportées les colonnes utiles à GnuCash : date (implicite
car il s'agit de l'index), description, dépôt, et retrait.&lt;/p&gt;
&lt;p&gt;Notre fichier CSV &lt;em&gt;« nettoyé »&lt;/em&gt; est prêt à être
importé dans GnuCash.&lt;/p&gt;
&lt;h2&gt;Importer le fichier CSV final dans GnuCash&lt;/h2&gt;
&lt;p&gt;Dans l'interface graphique de GnuCash, nous cliquons sur : &lt;em&gt;fichier&lt;/em&gt;
→ &lt;em&gt;importer&lt;/em&gt; → &lt;em&gt;importer des transactions depuis un CSV&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Après avoir sélectionné notre fichier CSV, GnuCash nous présente la
fenêtre d'aperçu de l'import.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Aperçu de l'import dans GnuCash" class="rounded" src="https://www.enodev.fr/images/gnucash-import-preview.png"&gt;&lt;/p&gt;
&lt;p&gt;Nous appliquons les réglages suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le point-virgule est défini comme séparateur de colonnes.&lt;/li&gt;
&lt;li&gt;La première ligne qui correspond à l'entête est ignorée.&lt;/li&gt;
&lt;li&gt;Le type des données de chaque colonne est précisé.&lt;/li&gt;
&lt;li&gt;Un compte cible est renseigné pour l'ensemble des transactions (champ &lt;em&gt;account&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le wiki de GnuCash décrit plus en détail comment
&lt;a href="https://wiki.gnucash.org/wiki/CSV_Import/Export#Importing_Transactions"&gt;importer des transactions au format CSV&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Pour aller plus loin&lt;/h2&gt;
&lt;p&gt;Le script &lt;a href="https://www.enodev.fr/csv-socgen/csv-socgen.py"&gt;csv-socgen.py&lt;/a&gt; reprend
l'ensemble du code présenté ici. Il ne s'agit que d'un premier jet.&lt;/p&gt;
&lt;p&gt;Le script mérite d'être amélioré pour remplir automatiquement le
compte destinataire et modifier la description si elle correspond à un
motif donné. Ainsi, le compte destinataire de la transaction ayant
pour description &lt;em&gt;METRO&lt;/em&gt; serait automatiquement renseigné en
&lt;em&gt;Dépenses:Transports publics:Métro&lt;/em&gt;. Remarquons que la banque affiche
une catégorie pour chaque transaction sur son site Internet mais que
cette information ne figure pas dans le fichier CSV. À nous de ruser.&lt;/p&gt;
&lt;p&gt;Un ancien slogan de la Société Générale clamait &lt;em&gt;« On est
là pour vous aider »&lt;/em&gt;. Cette ambition a disparu en 2019
avec un slogan devenu &lt;em&gt;« C'est vous
l'avenir »&lt;/em&gt;. Alors, ne comptez que sur vous-même pour tenir
vos comptes !&lt;/p&gt;</description><category>Banque</category><category>CSV</category><category>GnuCash</category><category>Pandas</category><category>Python</category><category>QIF</category><guid>https://www.enodev.fr/posts/fin-du-qif-a-la-societe-generale.html</guid><pubDate>Fri, 22 Nov 2019 18:00:00 GMT</pubDate></item></channel></rss>