dimesum

Home / Blog / Techniek

Techniek

Waarom je gedeelde saldo nooit lijkt te kloppen

· 10 min leestijd · · beoordeeld door Jagadeep Sai

Een gedeeld saldo dat niet wil kloppen komt bijna altijd neer op een van vier dingen: een afgeronde cent, een tweede valuta, een gewijzigde rekening of een lid dat vertrok, en alleen het eerste is rekenwerk.

Je kijkt naar een groepssaldo en het klopt niet. Misschien een paar cent. Misschien een hele rekening. De vraag eronder is stil maar echt: heeft de app het mis, of heb jij het mis?

Hier is het rustige antwoord. Wanneer je rekeningen deelt met andere mensen, heeft een saldo dat niet klopt bijna altijd een van vier oorzaken, en maar een daarvan is rekenwerk. De andere drie zijn een valuta, een wijziging en iemand die vertrok. Benoem welke je hebt, en de oplossing is niet langer een mysterie.

De vier oorzaken

Begin met de vorm van het probleem. Een gedeeld saldo is een doorlopend totaal van wie betaalde en wie verschuldigd is. Het hoort in de hele groep op te tellen tot nul: elke euro die iemand tegoed heeft, is een euro die iemand anders verschuldigd is. Wanneer dat niet zo is, kwam er iets in het totaal dat het totaal niet kon dragen.

Dus waarom kloppen gedeelde rekeningen niet? Meestal om een van vier redenen. Een cent kwam ergens onverwachts terecht toen een rekening niet gelijk deelbaar was. Twee valuta werden opgeteld alsof ze er een waren.

Een oude rekening veranderde nadat mensen er al voor hadden betaald. Of iemand verliet de groep terwijl hij nog geld verschuldigd was. Drie van die vier hebben niets met jouw rekenwerk te maken. Voor het bredere beeld van hoe een groep zijn schulden echt vereffent, lees onze teardown over het vereffenen van een groep.

De tabel benoemt elke oorzaak één keer, hoe die zich toont en wat die oplost. Alles erna is de lange versie.

Vier redenen waarom een gedeeld saldo niet klopt

Vier redenen waarom een gedeeld saldo niet klopt
OorzaakHoe het zich toontWat het oplost
AfrondingHet saldo klopt een cent of twee niet, nooit meerEen deterministische regel die de overtollige cent altijd naar dezelfde plek stuurt
Een valutaHet totaal klopt een heel bedrag niet, of leest als één vreemd getalHoud een apart saldo per valuta bij en tel ze nooit bij elkaar op
Een wijzigingHet saldo sprong nadat een oude rekening veranderdeHerbereken de verdeling van de rekening en boek het verschil naar de historie
Iemand vertrokHet saldo bereikt nooit nul, wat je ook doetBeslis wie het aandeel van de vertrokkene overneemt of kwijtscheldt, en leg het vast

Afronding: de overtollige cent, en waarom die deterministisch moet zijn

Hier is het voorbeeld, en elk cijfer erin mag je zelf narekenen. Lucas, Aiko en Sofia gaan uit. Het diner is €100,00 en ze delen het gelijk. €100,00 gedeeld door drie is €33,3333 en zo eindeloos door, wat geen enkele valuta kan betalen. Dus de verdeling wordt €33,33, €33,33 en €33,34.

Tel ze weer op: €33,33 plus €33,33 plus €33,34 is precies €100,00. De drie aandelen zijn eerlijk. Een ervan is een cent groter.

Die extra cent is het hele probleem in het klein. Iemand moet hem dragen. Dit is afronding bij gedeelde kosten, en het heeft één taak: zet de overtollige cent op een vaste plek in plaats van een willekeurige. Als de app hem elke keer opnieuw toewijst, kan hetzelfde diner vandaag €33,34 voor Aiko opleveren en morgen €33,34 voor Sofia, en wiebelt het saldo zonder zichtbare reden met een cent.

Dus maken we de regel deterministisch. De extra cent gaat elke keer naar de betaler. Lucas betaalde, dus Lucas draagt €33,34 en de andere twee dragen elk €33,33. Lucas heeft €100,00 min zijn eigen €33,34 tegoed, wat €66,66 is.

Aiko is €33,33 verschuldigd. Sofia is €33,33 verschuldigd. €33,33 plus €33,33 is €66,66. De groep telt op tot nul. De afronding gebruikte de twee decimalen van de euro, de kleinste eenheid die daarvoor is vastgelegd in de internationale valutastandaard ISO 4217; de keuze om de cent aan de betaler te geven is de onze, en de enige verdienste ervan is dat die nooit verandert.

Een online rekenmachine om rekeningen te splitten kan deze deling voor één diner maken. Het moeilijkere deel is het op dezelfde manier doen voor de honderdste, wat ook het verschil is dat ons bezighoudt in een restaurantrekening eerlijk splitten. Boekhouders discussiëren al lang over welke regel het eerlijkst is; de gangbare standaard in de informatica, afronden naar even, staat beschreven in de IEEE 754-standaard. We hebben die hier niet nodig, want onze cent is geen half.

Drie aandelen van een geheel laten precies één cent over, en de enige vraag is wie die vasthoudt.

Twee valuta in één groep, en waarom ze niet opgeteld kunnen worden

Nu komt een tweede rekening de groep binnen. Aiko betaalt een taxi, en die kost ¥6.000. De verleiding is, voor een vermoeid totaal, om ¥6.000 bij €100,00 op te tellen en één cijfer te tonen.

Dat cijfer betekent niets. €100,00 en ¥6.000 zijn niet hetzelfde soort ding, en ze optellen is als een afstand bij een gewicht optellen. De yen heeft nul decimalen als kleinste eenheid, de euro heeft er twee, opnieuw volgens ISO 4217. Ze ronden zelfs niet op dezelfde manier af.

Dus houden we een saldo per valuta bij. In euro's veranderde er niets: Aiko is Lucas €33,33 verschuldigd, en Sofia is Lucas €33,33 verschuldigd. In yen wordt de taxi in drieën gedeeld, elk ¥2.000. Aiko betaalde ¥6.000, dus Aiko heeft ¥6.000 min ¥2.000 tegoed, wat ¥4.000 is.

Lucas is ¥2.000 verschuldigd. Sofia is ¥2.000 verschuldigd. ¥2.000 plus ¥2.000 is ¥4.000. Twee saldi, elk optellend tot nul, en geen doet zich voor als de andere. Als je de diepere faalmodi hier wilt, hebben we ze beschreven in geldfouten tussen valuta.

Een wijziging aan een oude rekening, en wat er met de historie moet gebeuren

Maand drie. Iemand merkt dat het diner verkeerd was geboekt: het was €120,00, niet €100,00. Ze wijzigen het. Dit is waar saldi die vereffend leken plots bewegen, en waar veel apps stilletjes de mist ingaan.

De naïeve oplossing is om het oude getal te overschrijven en opnieuw vanaf nul te berekenen. Maar mensen hebben al tegen de oude verdeling betaald. Als de historie stilletjes herschreven wordt, kan niemand zien waarom ze nu meer verschuldigd zijn. Dus de wijziging moet de verdeling herberekenen en het verschil boeken, niet het verleden wissen. €120,00 gedeeld door drie is precies €40,00, deze keer geen overtollige cent.

Elk aandeel wordt €40,00. Lucas betaalde €120,00, dus Lucas heeft €120,00 min €40,00 tegoed, wat €80,00 is. Aiko is €40,00 verschuldigd. Sofia is €40,00 verschuldigd. €40,00 plus €40,00 is €80,00.

Het eurosaldo ging van €66,66 verschuldigd naar €80,00 verschuldigd, en het verschil, €13,34, is precies te herleiden tot de €20,00 waarmee het diner groeide: de twee andere aandelen stegen elk €6,67, en €6,67 plus €6,67 is €13,34. We bewaren de oude boeking en zetten de correctie erbovenop. Waarom een wijziging haar verdeling moet herberekenen, in plaats van te doen alsof het diner altijd €120,00 was, is een eigen verhaal in een wijziging moet haar verdeling herberekenen.

Iemand vertrok, en wat er gebeurt met wat hij verschuldigd was

De vierde oorzaak is een persoon, geen getal. Stel dat Sofia de groep verlaat terwijl ze nog €40,00 in euro's en ¥2.000 in yen verschuldigd is. Nu kan het saldo niet vanzelf nul bereiken, want een van de mensen waarvan het afhangt is weg.

Dit is geen rekenfout; het rekenwerk klopt. De groep heeft een gat ter grootte van Sofia's aandeel.

Er zijn maar een paar eerlijke dingen om te doen, en het zijn allemaal beslissingen, geen berekeningen. De groep kan het bedrag kwijtschelden, en vastleggen dat het is kwijtgescholden. Iemand kan het overnemen, en vastleggen wie. Of Sofia kan vereffenen voordat ze vertrekt.

Wat telt is dat de keuze als een boeking wordt vastgelegd, zodat het saldo nul leest omdat er iets gebeurde, niet omdat een schuld stilletjes werd gewist. Wij beslissen dit nooit voor je; we leggen de keuze vast die je maakt. Dezelfde logica geldt voor een huisgenoot die halverwege een huurcontract vertrekt, wat we behandelen in de huur delen met huisgenoten.

Hoe je zelf een saldo controleert wanneer je rekeningen deelt

Je kunt dit allemaal met de hand controleren, en het is de moeite waard om te weten hoe. Neem één valuta tegelijk, en meng ze nooit. Tel voor die valuta alles op wat elke persoon betaalde. Tel alles op wat elke persoon verschuldigd was, aandeel voor aandeel.

Het saldo van een persoon is wat hij betaalde min wat hij verschuldigd was. Doe dit voor iedereen, en tel dan alle saldi bij elkaar op. De som moet nul zijn. Als dat niet zo is, vertelt het gat je welke oorzaak je hebt.

Een gat van een of twee cent is afronding; kijk waar de overtollige cent terechtkwam en controleer of die elke keer op dezelfde plek terechtkwam. Een gat ter grootte van een hele rekening, of een totaal dat onmogelijk lijkt, is meestal een tweede valuta die erin werd gevouwen. Een saldo dat veranderde sinds je laatst keek, wijst op een wijziging, dus open de historie van de rekening.

Een saldo dat helemaal niet wil sluiten, wijst op iemand die vertrok. Wanneer je rekeningen deelt met vrienden, is het saldo altijd alleen maar rekenwerk, dus een hardnekkig gat is informatie, geen pech. Als je liever de cijfers ziet dan ons op ons woord gelooft, laat ons stuk over statistieken over het splitten van rekeningen zien hoe vaak elk hiervan echt gebeurt.

Wat een append-only grootboek aan alle vier doet

Onder Dimesum ligt een append-only grootboek met dubbel boekhouden, en het is openbaar, dus niets hiervan hoef je op geloof aan te nemen. Dubbel boekhouden betekent dat elk bedrag twee keer wordt vastgelegd, één keer als iets wat verschuldigd is en één keer als iets wat tegoed is, zodat de twee kanten altijd in evenwicht zijn; het principe is ouder dan software en staat helder beschreven in het artikel over dubbel boekhouden. Append-only betekent dat we nooit overschrijven. We voegen alleen toe.

Dat ene ontwerp behandelt alle vier de oorzaken. Afronding is deterministisch omdat de bestemming van de cent in de boekingsregel is vastgelegd, niet op het moment zelf wordt beslist. Valuta blijven gescheiden omdat elke boeking haar eigen valuta draagt en het grootboek weigert ze bij elkaar op te tellen. Een wijziging wordt een nieuwe corrigerende boeking die de verdeling herberekent, zodat de oude waarheid en de nieuwe allebei blijven bestaan; we beschrijven dat mechanisme in een append-only grootboek voor gedeelde kosten.

En iemand die vertrekt wordt een vastgelegde beslissing, een boeking zoals elke andere, in plaats van een ontbrekende regel. We leggen het allemaal vast. We houden of verplaatsen je geld nooit; het grootboek is een register, en het vereffenen gebeurt rechtstreeks tussen jullie, in de minste overboekingen die we kunnen berekenen. Als je tools vergelijkt, houden onze aantekeningen over apps voor het splitten van rekeningen vergeleken en apps voor het delen van huur vergeleken zich bij wat elk wel en niet doet.

Een saldo dat niet klopt is geen oordeel over je vriendschap of je rekenwerk. Het is een van vier kleine feiten over je groep. Open Dimesum en het grootboek zal je vertellen welke.

Veelgestelde vragen

Waarom klopt mijn gedeelde saldo niet?

Bijna altijd om een van vier redenen: een cent die afrondde, een tweede valuta die per ongeluk werd toegevoegd, een oude rekening die werd gewijzigd, of een lid dat vertrok met een schuld. Alleen het eerste is rekenwerk. Kies één valuta, tel de betalingen van elke persoon min hun aandelen op, en de grootte van het gat vertelt je welke oorzaak je hebt.

Wie krijgt de overtollige cent als een rekening niet gelijk deelbaar is?

Wie de regel van de app aanwijst, zolang die elke keer hetzelfde zegt. Een diner van €100,00 in drieën gedeeld is €33,33, €33,33 en €33,34, en die extra cent moet ergens vast terechtkomen. Dimesum stuurt hem naar de betaler, zodat hetzelfde diner nooit twee keer een ander saldo oplevert. De regel telt meer dan de keuze.

Kun je saldi in twee verschillende valuta bij elkaar optellen?

Nee, en geen eerlijke app zou dat doen. €100,00 en ¥6.000 zijn verschillende soorten dingen, met verschillende kleinste eenheden, dus ze optellen geeft een getal dat niets betekent. Dimesum houdt een apart saldo per valuta bij en vouwt de een nooit in de ander. Je vereffent elke valuta op zich, en daarom kan een groep tegelijk in euro's en in yen verschuldigd zijn.

Wat gebeurt er met een saldo als een oude rekening wordt gewijzigd?

De verdeling wordt herberekend en het verschil wordt als een nieuwe correctie geboekt, in plaats van dat het verleden wordt overschreven. Wijzig een diner van €100,00 naar €120,00 en elk gelijk aandeel gaat van €33,33 naar €40,00, dus het verschuldigde bedrag groeit met €13,34. De oude boeking blijft zichtbaar, de correctie zit erbovenop, en iedereen kan precies nagaan waarom het saldo veranderde.

Wat gebeurt er als iemand een groep verlaat met een openstaande schuld?

Het rekenwerk klopt nog steeds; de groep heeft alleen een gat ter grootte van hun onbetaalde aandeel. Het saldo kan geen nul bereiken totdat iemand beslist wat te doen. Het bedrag kan worden kwijtgescholden, overgenomen door een ander lid, of vereffend voordat ze vertrekken, en wat het ook is, het wordt als een boeking vastgelegd. Dimesum legt de beslissing vast die je maakt; het maakt haar nooit voor je.