Data processing / Demo project
PayMatch
Reconciles orders, payments and refunds from CSV and Excel, explains discrepancies and records reviewer decisions.

The challenge
Two exports can show the same totals even when a refund is linked to the wrong order. Reviewers need the source rows, the reason for a discrepancy and the history of corrections.
The solution
PayMatch validates file structure and rows before reconciling transactions by ID. Fees are accounted for separately. A reviewer can link a disputed entry to an order and recalculate, with the previous result kept in history.
How it works


The outcome
The demo reconciled 1,000 synthetic orders against 1,440 transaction rows. Validation and reconciliation produced 1,040 groups: 520 matches, 320 financial discrepancies and 200 cases for review. The report records 25 golden cases and a full browser scenario. No banking integration was connected.
My contribution
I built file import, reconciliation in minor currency units, a PostgreSQL job queue and versioned reviewer decisions. Tests cover job retries after failure and calculations accurate to the minor unit.
Architecture
Input validation is separate from reconciliation and manual review.
Import
CSV and XLSX are validated row by row. The reviewer confirms the valid rows.
Component connections
- Import: CSV and XLSX are validated row by row. The reviewer confirms the valid rows.
- Reconciliation: A background job calculates the result and saves it in PostgreSQL.
- Review and export: The interface shows explanations and decision history and exports the selected version.
- Import → Reconciliation
- Reconciliation → Review and export
- Review and export → Reconciliation