Limites
Cinq choses que Badlen ne fait pas. Elles ne sont pas de la même nature, et les trier est tout l’objet de cette page.
Deux sont de structure. Elles découlent de ce qu’un programme auto-hébergé a le droit de faire, pas de la quantité de travail accomplie, et aucun effort sur ce code ne les lève. Les connaître avant d’installer est ce qui compte le plus ici.
Trois sont des manques. Rien dans la conception ne s’y oppose ; ils ne sont simplement pas construits. Aucune version n’a été promise et aucune date n’est annoncée nulle part : un manque nommé ici est un chantier possible, pas un chantier programmé.
Deux limites de structure
Section intitulée « Deux limites de structure »La seconde découle de la première, et c’est pourquoi elles vont ensemble : un programme qui ne peut pas lire une banque est un programme dont quelqu’un doit énoncer les soldes.
Aucune synchronisation bancaire
Section intitulée « Aucune synchronisation bancaire »Rien dans Badlen ne se synchronise avec une banque, parce que rien en lui ne s’y connecte. Il n’y a ni agrégateur, ni robot de collecte d’écran, ni connecteur open banking, donc aucun solde et aucune opération n’arrive jamais tout seul depuis un compte que vous tenez ailleurs.
Ce n’est pas un manque, et ce n’est pas propre à ce produit. Quatre faits portent la réponse :
- la serrure posée sur l’interface d’une banque européenne n’est pas un prix, c’est une identité. C’est une entité enregistrée qui accède à un compte, jamais un logiciel ;
- aucun logiciel libre auto-hébergé ne détient cet enregistrement. Pas un seul ;
- ceux qui synchronisent délèguent la conformité à leur lecteur, et la porte gratuite qui rendait cela praticable en Europe a cessé d’accepter des inscriptions ;
- et la seule chose que ce produit est fait pour ne pas faire est de demander à quelqu’un de remettre l’accès à ses comptes entre les mains d’une société dont il découvre le nom à l’écran : ses identifiants chez certains fournisseurs, et dans tous les cas une copie de ses comptes sur leurs serveurs.
Une exception, une seule : un portefeuille crypto se déclare par sa chaîne et son adresse publique, et le bouton Synchroniser de l’onglet Réglages de ce compte lit la chaîne pour savoir ce que l’adresse détient. Il ne demande aucun de vos identifiants, parce qu’une adresse publique n’en est pas un.
Le droit, les autres logiciels et le choix, avec les sources
Ce que la loi exige
Section intitulée « Ce que la loi exige »Lire les comptes de paiement de quelqu’un pour lui est une activité réglementée dans l’Union européenne. La directive (UE) 2015/2366, dite DSP2, l’appelle un service d’information sur les comptes (article 4, point 16) et celui qui l’exerce un prestataire de services d’information sur les comptes. L’article 67 vous donne le droit de recourir à un tel service. Il ne donne pas à un programme le droit d’en être un.
Le régime est volontairement allégé pour qui ne fait que cela. L’article 33, § 1 écarte l’essentiel de la procédure d’agrément, et l’exigence de capital minimum fait partie de ce qu’il écarte : un pur prestataire d’information sur les comptes n’a aucune exigence de capital. Ce qui demeure : une obligation d’assurance (article 5, § 3, assurance de responsabilité civile professionnelle ou garantie comparable), un dossier de gouvernance, de sécurité et de traitement des incidents, et un enregistrement auprès du superviseur national, qui est en France l’ACPR, au titre de l’article L. 522-11-2 du code monétaire et financier.
Jusqu’ici cela ressemble à de la paperasse et à une prime d’assurance. Ce qui ferme la porte vient ensuite, et c’est technique.
Le règlement délégué (UE) 2018/389, les normes techniques qui accompagnent la DSP2, dit ce qu’une banque vérifie quand on appelle son interface. L’article 34, § 1 impose un certificat eIDAS qualifié : cachet électronique, ou authentification de site internet. L’article 34, § 2 dit ce qui doit se trouver dedans :
le numéro d’immatriculation […] est le numéro d’agrément des prestataires de services de paiement qui émettent des instruments de paiement liés à une carte, des prestataires de services d’information sur les comptes et des prestataires de services d’initiation de paiement […] disponible dans le registre public de l’État membre d’origine conformément à l’article 14 de la directive (UE) 2015/2366
Le certificat porte un numéro d’enregistrement, et ce numéro se lit dans un registre public d’entités enregistrées. Pas de numéro, pas de certificat ; pas de certificat, aucune réponse d’aucune banque de l’Union, quelle que soit la qualité du logiciel qui demande.
Le verrou va plus loin que les appels eux-mêmes. L’article 30, § 3 oblige la banque à mettre gratuitement la documentation technique de son interface à la disposition, sur demande, des prestataires agréés et de ceux qui ont déposé une demande d’agrément auprès de leurs autorités compétentes. Même lire comment l’interface fonctionne est réservé à qui est enregistré, ou en train de le devenir.
Les banques le disent dans leurs propres termes. OP Financial Group, qui publie son interface DSP2, prévient un développeur que passer en production suppose de demander « an AISP/PISP license from a financial authority » et d’obtenir « valid QWAC and QSEAL certificates » ; le bac à sable est ouvert à tous, et c’est un bac à sable (op-developer.fi).
La barrière n’est donc pas un mur d’argent. C’est un mur d’identité. La DSP2 ne dit nulle part qu’un logiciel libre n’aurait pas le droit de lire un compte. Elle organise l’accès autour d’une entité nommée, enregistrée, assurée, et les normes techniques transforment cet enregistrement en un objet cryptographique que la banque vérifie à chaque appel.
Ce que cela implique pour un logiciel qu’on installe chez soi
Section intitulée « Ce que cela implique pour un logiciel qu’on installe chez soi »Un certificat appartient à quelqu’un. Il nomme une entité, cette entité est enregistrée, assurée et supervisée en continu, et elle répond devant son superviseur de chaque accès fait à travers lui.
Badlen est un programme que mille personnes installent sur mille machines. Il n’y a pas d’entité derrière ces mille instances, donc pas de numéro d’enregistrement, donc pas de certificat, donc personne au bout du fil côté banque. Ce qui échoue n’est pas le code : c’est la forme même de la distribution. Livrer un connecteur qui marche à l’installation reviendrait à livrer à chaque lecteur un secret appartenant à une entité enregistrée, soit exactement ce qu’un certificat existe pour empêcher.
Mettre une vraie entité au milieu est possible, et c’est l’autre moitié de la réponse. Cela supposerait un opérateur unique entre chaque lecteur et sa banque, qui détiendrait l’enregistrement, verrait les accès et porterait la responsabilité. C’est un service centralisé avec une façade auto-hébergée, et c’est le contraire de ce pour quoi on installe un logiciel sur sa propre machine.
Ce que font les autres logiciels libres
Section intitulée « Ce que font les autres logiciels libres »La vérification utile n’est pas ce que fait Badlen. C’est ce que font tous les logiciels comparables, et la réponse est unanime : aucun logiciel libre auto-hébergé ne détient d’enregistrement de prestataire d’information sur les comptes. Ils se répartissent en trois cas.
Ils ne se connectent pas du tout. Ghostfolio n’annonce aucune synchronisation bancaire ; ses données entrent par import et export, et ses sources extérieures sont des fournisseurs de cours.
Vous apportez votre propre agrégateur. C’est ce qui fait ressembler un projet à un logiciel qui synchronise alors qu’il n’en est pas un. Firefly III fait passer son importateur par des fournisseurs tiers plutôt que par une banque, et Actual Budget énonce la règle sans détour : « This integration relies on you providing your own API credentials that you will need to get by signing up with the service provider ». Le projet livre la tuyauterie ; c’est le lecteur qui va devenir le client de l’agrégateur. L’enregistrement, le contrat et la responsabilité sont les siens.
Ils parlent un protocole client, là où il en existe un. GnuCash, via AqBanking, prend en charge FinTS/HBCI en Allemagne, EBICS en Autriche, en Suisse, en Allemagne et en France (« usually available for business customers »), et OFX Direct Connect aux États-Unis. Firefly III atteint FinTS de la même façon. Ces protocoles sont antérieurs à la DSP2 et authentifient le lecteur avec ses propres accès bancaires plutôt qu’un prestataire avec un certificat, ce qui est la raison pour laquelle ils fonctionnent encore. L’Allemagne est la vraie exception : depuis le 1er août 2019, l’accès FinTS exige un produit enregistré, cet enregistrement est accordé gratuitement par la Deutsche Kreditwirtschaft et traité en dix à quinze jours ouvrés (fints.org). Il porte sur le logiciel client, pas sur un statut de prestataire. Un pays, un protocole.
Et la voie « apportez votre clé » s’est rétrécie
Section intitulée « Et la voie « apportez votre clé » s’est rétrécie »Firefly III et Actual s’appuyaient tous deux sur GoCardless Bank Account Data, le seul agrégateur européen dont le palier gratuit était accessible à un particulier. Il a cessé d’accepter les nouveaux venus. GoCardless le dit sur sa propre page : « New signups for Bank Account Data are currently disabled » (bankaccountdata.gocardless.com). La documentation de Firefly III écrit « GoCardless is sunsetting this free service and registration is unfortunately closed », et la liste de fournisseurs d’Actual porte GoCardless marqué « not accepting new accounts ».
Ce qui reste demande une entreprise. Enable Banking, l’agrégateur européen vers lequel ces projets pointent désormais, active une application de production « once you have signed a contract with Enable Banking and completed the KYB process for your company », et facture au volume avec un minimum mensuel (enablebanking.com). Un mode restreint existe pour ne lier que ses propres comptes, et il est fait pour un outil personnel ou un prototype, pas pour un produit que des milliers de personnes installent.
La voie n’est donc pas seulement malcommode aujourd’hui. Pour le lecteur auquel Badlen s’adresse, un foyer plutôt qu’une entreprise, elle est fermée.
Pourquoi Badlen a choisi autrement
Section intitulée « Pourquoi Badlen a choisi autrement »Tout ce qui précède laisserait encore une option : livrer les champs, et laisser celui qui peut s’inscrire chez un agrégateur y coller ses identifiants. Firefly III et Actual Budget font exactement cela, et ils ont raison de le faire. Ils vous vendent la maîtrise de votre budget, et un détour par un agrégateur sert cette promesse.
Badlen en vend une autre : que ce que vous enregistrez reste sur la machine où vous l’avez installé. Un écran demandant la clé d’un agrégateur vous demanderait d’autoriser une société dont vous découvrez le nom sur cet écran à joindre votre banque à votre place, à lire chacun de vos comptes et à en transmettre le contenu. Chaque chiffre de ce produit existerait alors deux fois : une fois sur votre serveur, et une fois dans une base sur laquelle vous n’avez aucun droit.
C’est un choix, pas une consolation. Le connecteur n’est pas une fonctionnalité posée sur une étagère en attendant un après-midi libre. C’est la seule chose que ce produit devrait cesser d’être lui-même pour livrer. Si cela change un jour, cela changera dans un texte de loi, et cette page le dira.
Les sources
Section intitulée « Les sources »Chaque affirmation ci-dessus a été lue dans la source nommée à côté d’elle. Les textes primaires :
- Directive (UE) 2015/2366 (DSP2), articles 4 (point 16), 5 § 3, 14, 33 et 67
- Règlement délégué (UE) 2018/389, articles 30 et 34
- Code monétaire et financier, article L. 522-11-2, l’enregistrement auprès de l’ACPR
Les projets et les fournisseurs, chacun dans sa propre documentation : Ghostfolio, Firefly III, Actual Budget, GnuCash, FinTS, GoCardless, Enable Banking, OP Financial Group.
Les soldes se saisissent
Section intitulée « Les soldes se saisissent »La valeur d’un compte courant, d’un livret, d’un contrat d’assurance-vie, d’un bien ou d’un prêt est un chiffre que vous énoncez, à une date, et que vous corrigez plus tard s’il était faux. Badlen garde chaque solde énoncé et en construit l’historique ; il n’en devine jamais un.
Ce qu’il résout seul, c’est le cours d’un titre. Un titre détenu dans un compte est ce que Badlen appelle une ligne : elle se déclare par son ISIN et une quantité, et le cours vient d’une source extérieure sans que vous le saisissiez. Le calcul est donc automatique et la saisie déclarative. Un portefeuille laissé intact pendant six mois rapporte donc des soldes vieux de six mois, honnêtement étiquetés comme tels.
Trois sources répondent, et aucune n’est un compte que vous ouvrez : OpenFIGI transforme un ISIN en ticker de cotation, Yahoo Finance cote cette valeur, et CoinGecko cote les cryptos en euros, Binance complétant l’historique long qu’il possède et que CoinGecko n’a pas. Une clé CoinGecko Demo gratuite et une clé OpenFIGI relèvent les limites de débit et sont toutes deux facultatives ; Configuration les énumère. Un portefeuille crypto déclaré par son adresse publique est lu sur la chaîne elle-même.
Ce que Badlen cote est donc ce que ces trois savent nommer : les ETF, les actions et les fonds qui ont un ISIN et une cotation, et les cryptomonnaies que CoinGecko porte. Ce qu’elles ne cotent pas, c’est tout le reste de ce que vous détenez : un fonds euro, une SCPI, un contrat d’assurance-vie, un bien, un livret, un prêt. Ceux-là ne sont cotés nulle part, donc leur valeur est le chiffre que vous énoncez.
Trois choses qu’il n’a pas encore
Section intitulée « Trois choses qu’il n’a pas encore »Une devise, sans conversion
Section intitulée « Une devise, sans conversion »Chaque total dans Badlen s’exprime en euros, et rien nulle part ne convertit d’argent : il n’y a aucune source de taux de change. Un cours qui arrive dans une autre devise est enregistré avec la devise dans laquelle il est venu et tenu hors de chaque chiffre, parce qu’additionner une clôture en dollars dans un total en euros donne un chiffre faux plutôt qu’un chiffre manquant.
La conséquence est la partie à peser. Une ligne cotée hors euro est une ligne qu’aucun total ne peut valoriser. Elle est comptée parmi les lignes sans cours et la devise est nommée à côté d’elle, sur chaque compte et sur chaque rangée du tableau des lignes. Un compte déclaré dans une autre devise est refusé à la création plutôt qu’ajouté à raison d’une unité pour une.
Ce qui manque est une source de taux et la lecture qui irait avec, pas une refonte. Chaque table qui porte de l’argent porte déjà sa devise à côté, et la suite de tests oblige chaque fichier qui touche un cours à dire ce qu’il fait de cette devise, en interdisant à quiconque de filtrer en douce sur une devise écrite en dur. La porte a été laissée ouverte exprès. La franchir reste un vrai chantier (chaque chiffre converti de l’historique devrait dire sur quel taux il repose), et il n’est pas commencé.
Aucun import de relevé depuis l’interface
Section intitulée « Aucun import de relevé depuis l’interface »Il n’y a ni dépôt de CSV, ni lecteur de relevé bancaire, ni écran d’import dans
l’application web. Les opérations entrent dans Badlen de deux façons : saisies une à une
depuis le registre des opérations, ou écrites par paquets à travers la surface /api/v1,
qui est le chemin qu’emprunte le serveur MCP avec une
clé API portant la portée transactions:write.
La route qui écrit un paquet existe déjà, et Importer des relevés la documente. Ce qui manque est la moitié qui se tient devant : de quoi lire un fichier CSV, OFX ou QIF tel que votre banque vous le remet, et un écran où le déposer. C’est la seule façon de faire entrer des données qui marche pour tout le monde, partout, sans tiers, et c’est pourquoi la plupart des outils de finances libres en font la voie principale.
Aucun serveur de mail
Section intitulée « Aucun serveur de mail »Badlen n’envoie aucun courriel. Le seul endroit qui en aurait besoin, un mot de passe oublié, écrit à la place son lien de réinitialisation dans le journal de l’application, où un administrateur ayant accès au serveur le lit :
docker compose logs app | grep "reset link"C’est une conséquence de l’auto-hébergement et non un choix de conception, et c’est la raison pour laquelle une instance à un seul lecteur a intérêt à garder son mot de passe quelque part où on le retrouve. Un client de messagerie branché à cet endroit unique réglerait la question ; rien d’autre dans le produit n’attend un courriel.
Ce qu’il vous demande chaque mois
Section intitulée « Ce qu’il vous demande chaque mois »La part qui bouge toute seule ne demande rien : une passe nocturne rafraîchit tous les
cours et enregistre le patrimoine net du jour, et le bouton Synchroniser d’un
portefeuille lit la chaîne. La part qui ne bouge pas toute seule, c’est la main : un solde
par compte dont vous énoncez la valeur, saisi quand il change, et les opérations, saisies
une à une depuis le registre ou écrites par paquets à travers /api/v1.
Le temps que cela prend n’est pas un chiffre que ce projet a mesuré, et il suit ce que vous détenez : une instance de trois livrets et d’un ETF, c’est quelques soldes par trimestre ; une instance qui suit chaque opération d’un compte courant, c’est le registre, chaque semaine. Rien n’est dû à une échéance et rien ne casse si vous sautez un mois. L’historique garde le dernier chiffre que vous avez énoncé, étiqueté du jour où vous l’avez énoncé.