Stellar — Reconciliation Engine
FintechNestJSNext.jsPlaidAlgorithms

Stellar — Reconciliation Engine

Financial Transaction Matching Platform

Introduction

A transaction-matching engine that reconciles bank charges from Plaid against point-of-sale records using a weighted 4-factor confidence algorithm — fuzzy merchant matching, split matching, and one-click auto-reconcile.

Details
Project NameStellar — Reconciliation Engine
Timeframe2026
RoleFull-stack Engineer — Reconciliation Module
ClientClient Project
The Problem

Businesses that sell on ticket marketplaces see bank withdrawals that never quite match their sales records: merchant names are truncated ("TM *" instead of Ticketmaster), one charge can cover several orders, and settlements land days after the sale. Reconciling them by hand means hours in spreadsheets every week.

The Matching Engine

The core is a weighted confidence score computed for every charge/record pair: amount similarity (40%), date proximity (30%), merchant similarity via Levenshtein and trigram fuzzy matching with marketplace alias resolution (20%), and historical pattern analysis over the last hundred reconciliations (10%). Exact-amount matches within seven days get a confidence floor so obvious pairs never rank low.

Scores of 85+ qualify for bulk auto-reconcile; everything is an atomic transaction with full undo and an audit trail. Split matching lets one bank charge settle against up to three sales records when the amounts add up. Bank data streams in through Plaid with cursor-based pagination on a 15-minute sync, with Bill.com as a second expense source — all processed through BullMQ background jobs.

Scope
4-factor weighted confidence scoring algorithm01
Plaid bank sync (OAuth, cursors, dedup) + Bill.com integration02
Split matching & bulk auto-reconcile with idempotency03
Multi-tenant isolation, RBAC permissions, audit logging04
Dashboard, aging reports, CSV/PDF export05
The Stack

NestJS 11 on Fastify with PostgreSQL and Prisma on the backend; Next.js 16 with React 19, TanStack Query, and Zustand on the frontend. Suggestions return in under a second against thousands of unmatched transactions.

I owned the module end to end as my assignment on the team: 110+ reconciliation commits across both repos — the matching engine, Plaid sync, excluded/missing-purchases workflows, bulk unreconcile, and the reports pipeline.

Want to see more?