Exception memo · Atelier Ledger s.r.o. · Bratislava · 23 Sep 2026


The payables book paid €78,246 it did not owe.

Four checks on a synthetic invoice population. No model. A join, a date window, a lag, and a rate that changed on 1 January 2025.

Money that should not have left the account€78,246

123456
Figure 1. Euros in the exception set by quarter, from Q1 2025. Duplicates, the hosting overcharge, and the VAT gap. Split purchases are a control break, not cash already lost, so they are not in the total or the bars.

01 · Twelve invoices were paid twice

€60,426 left the account a second time. The match is strict: same supplier, same invoice number, same gross. The second copy arrived three days later and was entered by import.batch, not by the clerk who booked the original. That is an interface failure, not twelve independent mistakes.

SupplierNumberFirstSecondGross
Nitra Energy s.r.o.NE-402026-03-022026-03-05€6,642
Ipel Security s.r.o.IS-712026-02-092026-02-12€6,568
Ipel Security s.r.o.IS-552025-08-192025-08-22€6,297
Topla Studio s.r.o.TS-142025-10-212025-10-24€5,904
Hron Print s.r.o.HP-2202025-04-022025-04-05€5,781
Hron Print s.r.o.HP-2612025-09-162025-09-19€5,461
North Paper s.r.o.NP-10442025-03-042025-03-07€5,116
North Paper s.r.o.NP-11022025-06-112025-06-14€4,723
Vah Courier s.r.o.VC-292026-01-132026-01-16€3,788
Karpat Clean s.r.o.KC-1032025-11-032025-11-06€3,542
Vah Courier s.r.o.VC-172025-07-082025-07-11€3,505
Karpat Clean s.r.o.KC-882025-05-202025-05-23€3,099

Query: sql/01_duplicates.sql. The self-join keeps the later row as the duplicate by ordering on id.

02 · Eight purchases walked around a €5,000 signature

Lumen Facilities has a single-signature limit of €5,000 net. These eight pairs use different invoice numbers, each under the line, three or four days apart. Together they clear it by €2,950. This memo does not call that fraud. It calls it a control that can be stepped over. A reviewer who only sorts by amount, one invoice at a time, will not see it. The same-number duplicates from finding 01 are excluded here on purpose.

Query: sql/02_split_purchases.sql. The window is six days. Both legs have to be material, above 40% of the limit, so two tiny invoices cannot fake a pair.

03 · The hosting contract stayed at €42. The invoices did not.

Danube Hosting bills 90 seats a month. The contract price is €42. From the fourth month the unit price steps up, to €74 at the end. The lag against the prior month is in the query. The sum of the gap is €13,500.

MonthBilledContractOvercharge
2025-07€42€42€0
2025-08€42€42€0
2025-09€42€42€0
2025-10€45€42€270
2025-11€48€42€540
2025-12€51€42€810
2026-01€54€42€1,080
2026-02€58€42€1,440
2026-03€62€42€1,800
2026-04€66€42€2,160
2026-05€70€42€2,520
2026-06€74€42€2,880

Query: sql/03_price_drift.sql. LAG(unit_eur) is the month-to-month change. The contract column does not move.

04 · Eighteen invoices still use the old 20% VAT

From 1 January 2025 the standard Slovak VAT rate is 23%. The vendor master on these suppliers is 23%. Eighteen service invoices were booked at 20%, the previous standard rate. The tax gap is €4,320. The cash already paid is not the whole point. The return is wrong, and a later correction is more expensive than the booking.

Query: sql/04_vat_rate.sql. Gap = net × (master rate − booked rate). Rates are stored in basis points so 23% is 2300 and the arithmetic stays in integers.

What was not counted

Late-payment interest, foreign currency, and credit notes. A duplicate that was credited back would fall out of the join only if the credit carried the same invoice number and the same gross with the opposite sign. This book has no such credits. Adding them without a test would make the €78,246 look cleaner than the ledger is.

The companies are fictional. The rate change is not: standard Slovak VAT moved from 20% to 23% on 1 January 2025.