August 2026 / Upload and checks
Draft run · not closedPrototype v0.2 · real August data, masked
For: store manager (POS, cash) and HQ finance officer (provider exports) · J1 and J4

Did the files come in clean?

The branch uploads its POS export and cash sheet; HQ uploads the provider exports, which are split by branch. Then: whether every file was recognised, and a row-by-row account of what was kept and why anything was set aside.

Decisions this view supportsAccept this run or re-upload a file · Whether the bank statement joins every upload (Q5)

Upload

Step 1 of a run. Nothing is called clean until every file passes its checks.

Branch upload · store manager, HurlinghamThe branch's POS export and cash deposit sheet.
POS SALES DATA.xlsx · 55,683 linesCash deposits · 270 rows
HQ upload · finance officer, all branchesProvider exports. Each sheet is recognised by its columns and split by branch using the branch map.
Payments.xlsx · 9 provider sheetsMeal cards: 363 rows sent to 41 other branchesBank statement · not provided (Q5)

File checks

All passed for this run.

  • Every sheet recognised. 10 provider sheets and the POS export matched a known layout.
  • Period and store checked. All dates fall in 1–31 August (cash deposits run to 1 September).
  • Split by branch. 363 meal-card rows (KES 437,801) belong to 41 other branches and were assigned to them, never matched here.
  • Not a duplicate. No earlier upload has the same file fingerprint.
  • Checksums agree. Cash deposit subtotals in the sheet add up to the deposits kept: KES 2,794,800.

Row ledger: nothing disappears

For each file: rows read, rows kept, and every row set aside with its reason. Kept + set aside must equal rows read, or the source is refused.

SourceRecognised asRows readKeptSet asideWhy rows were set aside or changedLedger
POSPOS sales export55,68325,4470The POS lists each item separately: 55,683 item lines were grouped into 25,447 sales.Balances
GlovoGlovo orders6,5386,5380All rows kept. Glovo's commission is not in this export, so Glovo fees show as zero.Balances
Uber EatsUber Eats orders4,3504,30545A second heading row was removed. The order date has day and month swapped in about half the rows, so it is not used for matching.Balances
Bolt FoodBolt Food orders1,9291,9290All rows kept. The commission column is a rate (10%), so the fee is worked out from it.Balances
Little CabLittle Cab orders24231The title and heading rows were removed.Balances
M-PesaM-Pesa till statement10,5985,7644,8344,830 M-Pesa charge lines were added to their sale as its fee; 30 daily transfers to the bank are kept separately; reversed payments were set aside.Balances
PesapalCard machine (Pesapal)4,5114,5110All rows kept. Card machine payments.Balances
DPOCard machine (DPO)8208200All rows kept. Card machine payments.Balances
Meal cardsMeal cards (Pluxee/Sodexo)1,30491,295The export covers every branch. 363 rows belong to 41 other branches and 1 could not be placed (Branch unknown); none are matched here. The rest of the set-aside rows are blank.Balances
VouchersVouchers770All rows kept.Balances
Cash sheetCash deposits2701739732 daily subtotal rows were set aside and used only to check the total: they add up to KES 2,794,800, the same as the deposits kept (KES 2,794,800).Balances

Kept and set aside, by source

Most rows set aside are fee lines folded into their sale (M-Pesa) or rows assigned to other branches (meal cards).

Glovo6,538Uber4,350Bolt1,929Little Cab24Mpesa10,598Pesapal4,511Dpo820Sodexo1,304Voucher7Cash270
KeptSet aside, with a reason

Built from the pipeline run of 10 Oct 2026 (Payments.xlsx + POS export). Customer details are masked and cashiers are shown as pseudonyms. Items tagged "assumed" rest on assumptions in the spec.

Look