Wenn eine 1 cent Buchung auf ein normal versteuertes Konto gebucht wurde
tauchten die Buchungen in der folgenden Reihenfolge in der Datenbank auf:
-0.00840
-0.00160
+0.01000
Der Algorithmus, der die Buchungen aufsummiert, ist aus historischen Gründen
recht nachgiebig und bricht das aufsummieren ab, sobald die Summe der
bisherigen Buchungen kleiner ist als ein Cent. In diesem Fall ist das schon
nach der ersten Buchung der Fall, und bei der dritten Buchung wird dann ein
unbalanced ledger Fehler geworfen.
Der Fix prüft auf solche kleinen Werte und wechselt dafür in einen subcent
Modus, in dem auf zehntel Cent geprüft wird.
my $count = $ref->{amount};
my $firstrun = 1;
+ my $subcent = abs($count) < 0.02;
- while (abs($count) > 0.01 || $firstrun) {
+ while (abs($count) > 0.01 || $firstrun || ($subcent && abs($count) > 0.001)) {
my $ref2 = $sth->fetchrow_hashref("NAME_lc");
last unless ($ref2);