OCR confidence is a routing rule, not a probability
FloatWatch uses a weighted completeness score and required-field checks to send uncertain receipts to review. It does not pretend to predict accuracy.
FloatWatch calls it a confidence score, but the number is not a prediction that a receipt is 60% or 80% correct. It is a routing rule.
That distinction matters because I have not benchmarked the app against a large receipt set. I have tested it with real receipts on my own phone, but calling the score a calibrated probability would be made up.
What the score measures
The parser adds weight when required fields come back clean:
if (amount != null) score += 0.30;
if (type != null) score += 0.30;
if (dateTime != null) score += 0.20;
Anything below 0.6 is flagged for manual review. There is also a harder rule: a missing amount, type, or date triggers review even if the numeric score would otherwise pass.
The decision uses more than score >= 0.6. The threshold and required-field checks work together. The score summarizes what the parser found; the gate decides whether a person has to look before the transaction is saved.
Why I still call it confidence
The name is useful in the product flow because a low value means the app is not willing to act alone. Internally, though, I think of it as completeness with weights. No model learned those weights, and I did not derive 0.30 from measured error rates.
That honesty keeps the feature in its lane. The parser tries to extract the right values. The gate checks whether enough required information survived extraction. A human handles the cases where it did not.
I like this more than a parser that always returns an answer. A reconciliation tool can survive asking for help. It cannot survive quietly writing a number it had no basis to trust.
What is still unproven
The current weights and threshold are design choices, not validation results. I have real-device use and passing tests, but no large OCR accuracy benchmark. I would need labeled receipts and measured false accepts before claiming the score is calibrated.
For now, the narrower claim is enough: FloatWatch has an explicit point where automation stops. Low or incomplete results go to review, and only confirmed transactions are written.
This is from FloatWatch, a Flutter app that reconciles a GCash outlet's cash and e-float on-device. The full build is in the FloatWatch deep dive.
- ocr
- testing
- product