Case Studies

From Paper Cash-Deposit Forms to Scan-and-Done

We built a Laravel and React application for OTP banka Srbija, one of the country's largest banks, that turns retailers' daily cash-and-cheque deposits into structured, QR-coded reports, cutting processing time at the counter fourfold.

Faster deposit processing
QRScan-and-verify deposits
0Paper deposit forms
AutoCount cross-check

Client Snapshot

ClientOTP banka Srbija (formerly Societe Generale Serbia)
IndustryFinance / banking
LocationBelgrade, Serbia
ScaleOne of Serbia's largest banks
What they doRetail banking, including handling the daily cash and cheque deposits that shops bring in at the end of each day.

The Challenge

Every day, retail shops deliver their takings, cash, coins and cheques, to the bank. Each shop used its own paper form listing the number of notes, coins and cheques and their values. The formats were inconsistent and the entries were handwritten.

For the bank, processing those forms was slow and error-prone. A clerk had to read someone else's handwriting, re-key the figures, count the money, and reconcile the two by hand. Every step was a chance for a mismatch that then had to be chased down. Worse, all of this happened at the busiest time of day, so the slow process created queues at the counter exactly when there was least slack to absorb them.

The bank needed the deposit to arrive in a structured, predictable form, and the counter step to verify itself rather than depend on manual reconciliation.

The Approach

We built a Laravel and React web application that lets retailers enter their deposit in a structured, validated way, rather than on a free-form paper sheet. Each submitted report carries a QR code that holds all of the deposit's data.

At the bank, the process becomes scan-and-done. The clerk scans the QR code and feeds the cash into the counting machine. The counted amount is then cross-checked automatically against the figures the retailer declared, and the deposit is complete. There is no re-keying, no interpreting handwriting, and no mismatched totals to chase, because the declared data and the counted data are reconciled by the system, not by a person under time pressure.

Phases

Phase 1 - Structured Deposit Entry

Built the Laravel and React application that lets retailers record cash, coins and cheques in a validated, consistent structure instead of on paper.

Phase 2 - QR-Coded Reports

Encoded the full deposit into a QR code carried on the report, so all of its data travels with it to the counter.

Phase 3 - Counter Cross-Check

Wired the counter step so the clerk scans the QR code, the counting machine result is captured, and the declared and counted figures are reconciled automatically.

What We Shipped

  • A structured digital cash-and-cheque deposit form
  • A QR-coded deposit report carrying all of its data
  • Clerk scan-and-verify at the counter
  • An automatic cross-check against the counting machine
  • Faster, queue-free deposit handling

Results

Processing a deposit at the counter became four times faster. The structured digital form and the QR cross-check replaced inconsistent paper forms, so the numbers are right the first time and the queue keeps moving, even at the end-of-day peak.

The deeper change is where the work happens. Instead of a clerk reconciling two sources of truth by hand, the system reconciles the declared figures against the counted figures automatically. People stop transcribing and start verifying, which is both faster and far less error-prone.

Tech Stack

  • Laravel - application backend, deposit logic and validation
  • React - retailer-facing entry and the counter-side interface

Lessons Learned

The win here did not come from a clever algorithm. It came from moving the structure upstream.

The slow, error-prone part of the old process was a person at the counter trying to reconcile a free-form paper form with a pile of cash. By making the retailer enter structured, validated data at the source, and carrying it in a QR code, the hard reconciliation step downstream became an automatic check. The lesson we keep relearning is that the cheapest place to enforce data quality is at the point of entry. Fix it there, and most of the downstream pain simply disappears.

Manual, Paper-Heavy Processes Slowing You Down?

If a core process depends on people re-keying and reconciling paper by hand, the fix is usually to structure the data at the source and let the system verify it. That is the kind of fast, structured, verifiable flow we build.

Talk to us about your project →