Voici un petit cas concret pour illustrer la présentation.
Des amis partent ensemble pour quelques jours de vacances. Tout est préparé à l’avance : voitures de location pour rejoindre le doux climat du sud ; location d’une maison sur place où tout le monde sera réparti dans les chambres à coup de pierre-feuille-ciseau, et grosse matinée de courses sur place le premier jour pour assurer le ravitaillement en tout ce qui passe sur le barbecue et tout ce qui suffit à voir les couleurs de l’arc-en-ciel sur le résultat d’un alcootest.
Au cours de ces quelques jours de vacances, de nombreuses dépenses vont être réparties entre tous les convives : l’un va payer le péage et l’essence lors du trajet, l’autre va acheter à manger ou à boire à la supérette du coin, encore un autre fera un tour matinal à la boulangerie pour le petit-déjeuner.
Jusque là, ça parait facile, pour équilibrer les comptes il suffira de tout additionner et de diviser le tout par le nombre de convives pour savoir combien chacun doit payer, et rembourser ceux qui ont avancé de l’argent. Mais c’est sans compter sur ceux qui vont faire des paiements en petit groupe, pour s’assurer une contre-soirée No Woman No Cry ou dépanner le Régis qui aura oublié sa carte bleue à la crêperie, et mettre un beau bazar dans la comptabilité.
Et même si on arrive toujours à dénoncer un volontaire qui se sent l’âme d’un apothicaire pour s’y coller, faire les comptes à la fin des vacances est tout juste moins ambitieux que de vouloir résoudre la quadrature du cercle. C’est là que Le Compte Est Bon intervient.
Le « volontaire » en question n’a qu’à se connecter au site, entrer la liste des convives et saisir toutes les transactions qui ont eu lieu pendant le séjour pour générer un fichier de remboursement qui indiquera qui doit combien à qui, de façon à équilibrer les comptes en un minimum de remboursements. Ce fichier sera stocké sur le site pendant 60 jours et l’adresse pourra être envoyée à tous les convives pour régler les comptes.
L’interface de base de Le Compte Est Bon est organisée en trois parties qui correspond aux 3 étapes qu’il suffit de suivre pour calculer les remboursements nécessaires à l’équilibrage des comptes entre amis.
Saisissez les noms de tous les convives qui ont participé au séjour, y compris ceux qui n'ont rien payé.
Vous pouvez utiliser des caractères accentués et des tirets «-». En revanche, n’utilisez pas d’espace (ils seront automatiquement remplacés par un underscore «_») et évitez également les caractères exotiques qui pourraient causer des bugs (une partie d’entre eux seront automatiquement filtrés).
Pour supprimer un participant, cliquez simplement sur celui-ci dans la liste.
Saisissez la liste des transactions qui concernent le séjour.
Pour cela sélectionnez les noms des personnes impliquées : une seule personne pour la personne qui paye, une ou plusieurs personnes pour les personnes qui bénéficient du paiement. Entrez la somme payée, la devise utilisée pour le paiement et une description de la transaction.
Si la transaction à créer bénéficie à tous les convives (par exemple : quelqu’un qui paye la note du restaurant où tout le monde prend le même menu), vous pouvez cocher la case 'Tous' dans la liste des bénéficiaires.
Pour supprimer une transaction, cliquez simplement sur celle-ci la liste.
Avant de cliquer sur Suivant pour passer aux remboursement, choisissez la devise dans laquelle vous souhaitez que les participants se remboursent. Toutes les transactions seront converties dans cette même devise au taux de change du jour.
Lorsque vous passez à l'étape de calcul des remboursements, la liste optimale des paiements à effectuer est affichée dans la devise choisie. Les taux de change indicatifs utilisés pour le calcul sont précisés à la suite de cette liste.
Il se peut que le calcul des remboursements ne puisse pas tomber exactement à zéro et que les remboursements aient été arrondis au centime. Dans ce cas la marge d'erreur est précisée.
Si vous avez fait une erreur (par exemple vous avez supprimé un convive mais son nom apparaît toujours dans la liste des transactions) elle vous sera signalée à l'étape de calcul. Vous pouvez revenir aux étapes précédentes pour la corriger avant de relancer le calcul.
Pour travailler sur le problème de remboursements entre amis, on peut modéliser les données par un graphe. Un graphe est un objet mathématique qui permet de représenter une relation binaire, orientée ou non, entredes éléments d'un ensemble. Un graphe est composé de sommets (les éléments d'un ensemble) et d'arêtes (lesrelations entre les éléments).
On modélise donc notre cas pratique par un graphe dont les sommets sont les convives participant au séjour, et les arêtes sont les transactions effectuées au cours de ce séjour. La relation représentée par les arêtes est donc orientée (le paiement part d'une personne - l'émetteur - et arrive à une autre - le bénéficiaire) et valuée (on associe un pondération à l'arête, qui est le montant de la transaction).
Le graphe représente donc un transfert de flux entre les sommets éléments qui crée un déséquilibre entre eux et qu'on se propose de corriger. Une solution systématique pour rééquilibrer la situation est de créer pour chaque transaction, une transaction inverse d'un montant équivalent, mais ce n'est pas du tout optimal.
L'algorithme a donc pour objectif de commencer par simplifier ce graphe déséquilibré pour minimiser le nombre d'arêtes, et ensuite d'inverser toutes les transactions pour obtenir la solution optimale de remboursements pour équilibrer les comptes. Pour cela, il va supprimer les cycles : Si A paye à B, B paye à C, C paye à A, on obtient un cycle entre les 3 éléments, qu'il est possible de simplifier en prenant le minimum des montants des transactions :
De même, il va s'attaquer aux paiements en cascade. Si par exemple A paye à B et B paye à C, il peut être intéressant de faire payer directement une somme de B à C, qui sera de nouveau le minimum des 2 transactions.
De proche en proche, l'algorithme de simplification va supprimer tous les cycles et toutes les relations transitives du graphe pour obtenir un graphe en arbre ou en plusieurs arbres (le graphe final peut en effet ne pas être connexe). Dans ce graphe simplifié, les éléments se partagent exclusivements entre ceux qui donnent de l'argent et ceux qui reçoivent de l'argent. A partir de là, il n'est plus possible d'optimiser encore le graphe.
La dernière étape consiste alors à rééquilibrer ce graphe simplifié pour en déduire les remboursements.
L'interface de LeCompteEstBon met en oeuvre des technologies web récentes et nécessite pour un fonctionnement optimal un navigateur récent. LeCompteEstBon a été qualifié totalement sur Mozilla Firefox et devrait bien fonctionner également sur Chrome et Safari.
Les informations fournies par ce site sont fournies à titre informatif uniquement et sans aucun engagement d'exactitude. Il vous est conseillé de vérifier les résultats des calculs fournis avant de procéder aux remboursements. LeCompteEstBon ne saurait être tenu responsable de toute erreur de remboursement consécutive à l'utilisation de ce service.
Dans le cadre du suivi statistiques de fréquentation du site et de l'accès authentifié à la modification des fichiers de remboursements, LeCompteEstBon peut être amené à stocker, pour une durée limitée dans le temps, des informations à caractère personnel vous concernant.
Conformément à l'art. 39 de la loi "Informatique et Libertés" du 6 janvier 1978 modifiée, vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données qui vous concernent. Pour exercer ce droit, adressez-vous par email à webmaster@lecompteestbon.com en indiquant dans l'objet de votre message "Accès aux données personnelles", en détaillant l'objet de votre demande et en fournissant les éléments suffisants permettant de vous identifier parmi les données personnelles récoltées.
Les illustrations et le style de ce site sont Copyright (c) 2007 Christophe EYQUEM.
Les fonctions Javascript de l'interface tirent partie de la librairie jQuery Mobile, publiée sous les termes de la MIT license et de la GPL license.