Soroush Neyestani

Software Engineer

Application Architect

Enterprise Application Developer

Technical Author & Educator

Financial Audit Reconciliation & Exception Analysis System

Overview

I designed and implemented a high-volume financial reconciliation and audit-support system for tax-office auditors who needed to compare a subject's accounting records against transaction exports from multiple bank accounts.

The original workflow was highly manual. Auditors could receive years of accounting data together with CSV exports from several banks and then had to determine which financial movements corresponded to recorded accounting entries, which did not, and which were close enough to require further human review.

The system I built converted that work into a structured data-processing pipeline.

It was implemented in .NET with Microsoft SQL Server as the central processing and storage layer. The application did not rely on a graphical user interface; its purpose was data ingestion, reconciliation, classification and export.

The core workflow was:

Accounting Records + Bank CSV Exports → SQL Server Ingestion → Multi-Mode Reconciliation → Matched / Unmatched / Tolerance Tables → CSV Export → Excel-Based Auditor Review

The project was requested by auditors specifically to reduce the time required for large-scale manual reconciliation.


Business Problem

Financial audits can become difficult when accounting records and banking activity have to be compared over long periods.

A single case could include:

  • accounting records from the audited person or business;
  • exports from multiple bank accounts;
  • different source structures;
  • different reference conventions;
  • missing or inconsistent identifiers;
  • date differences;
  • incomplete descriptions;
  • and very large transaction histories.

In the historical cases this system was intended to support, the available data could span up to approximately 20 years and reach millions of records.

The problem was therefore not simply "open two spreadsheets and compare them."

The auditors needed a repeatable way to answer questions such as:

  • Which accounting entries have a corresponding bank transaction?
  • Which banking transactions have no clear accounting counterpart?
  • Which records appear similar but are not exact enough to accept automatically?
  • Which matching rule produced a given result?
  • Which exceptions should be investigated manually?
  • How can the final result be delivered in a format compatible with the auditors' existing Excel workflow?

My Role

I designed the processing approach and implemented the data workflow.

My responsibilities included:

  • building the .NET-based ingestion logic;
  • importing accounting and banking data into Microsoft SQL Server;
  • designing the SQL tables used for source data and reconciliation results;
  • defining multiple reconciliation modes rather than relying on one fixed matching rule;
  • separating exact or acceptable matches from unresolved exceptions;
  • creating dedicated tolerance tables for cases requiring human approval;
  • structuring results so that each matching mode could be reviewed independently;
  • exporting final datasets to CSV for Excel-based downstream use;
  • and optimizing the workflow for large historical datasets.

This was a data-centric audit tool, not a user-interface project.


1. Data Ingestion

Multiple Source Types

The auditors could receive different accounting and banking exports depending on the case.

The ingestion layer was designed to take the available structured source data and load it into a common SQL Server environment.

Typical inputs included:

  • accounting exports;
  • transaction records;
  • CSV files from multiple bank accounts;
  • long-running historical datasets;
  • and files containing different reference fields.

The purpose of this stage was normalization and centralization.

Instead of repeatedly comparing isolated files, all relevant records became queryable inside one database.


Why SQL Server Was Central

Microsoft SQL Server was used as more than a passive storage system.

It served as the main reconciliation workspace:

  • raw imported records could be preserved;
  • normalized records could be queried consistently;
  • different reconciliation strategies could be executed separately;
  • intermediate and final results could be stored in dedicated tables;
  • large datasets could be processed without depending on spreadsheet limits;
  • and the audit trail of each matching approach remained structurally separated.

For a workflow involving millions of rows, this was much more reliable than trying to perform the entire comparison directly in Excel.


2. Multi-Mode Reconciliation Engine

The system did not assume that every transaction could be matched by one universal key.

In real accounting and bank data, identifiers can be incomplete, formatted differently or missing entirely.

I therefore implemented multiple reconciliation modes.

A mode could compare records using one field or a combination of several fields, for example:

  • asset/property reference number;
  • bank or account identifier;
  • statement/invoice reference number;
  • transaction date;
  • and composite combinations of multiple attributes.

The important architectural decision was that different matching strategies remained separate.

Each reconciliation mode could write its results into its own SQL table, making it possible to understand which rule had produced which result.


Why Multiple Matching Modes Were Necessary

A strict single-key match creates two problems:

  1. valid relationships can be missed when one reference field is incomplete;
  2. weak relationships can be accepted incorrectly if a single field happens to coincide.

By using multiple combinations, the system could distinguish stronger and weaker forms of correspondence.

Conceptually, the engine could move from highly specific comparisons toward broader candidate matching.

For example:

Mode A
Exact match using several strong identifiers.

Mode B
Match using a different combination of banking and accounting references.

Mode C
Date plus reference-based comparison.

Mode D
Alternative composite criteria when the strongest fields were unavailable.

The exact rule set could vary depending on the available source data.


3. Matched and Unmatched Data

The reconciliation process separated results into distinct categories.

Matched / Symmetric Records

These were records for which the configured reconciliation logic identified a sufficient correspondence between the accounting side and the banking side.

They represented transactions that could be linked through the selected matching criteria.


Unmatched / Asymmetric Records

These were records where no acceptable counterpart could be established under the available reconciliation rules.

These records were important because they represented the audit exceptions requiring further investigation.

Instead of forcing a questionable match, the system preserved these items explicitly for follow-up.

This was one of the most useful outputs of the project:

the software reduced the full dataset to a much smaller set of exceptions that required human attention.


4. Tolerance / Near-Match Review

Not every real-world financial record is perfectly identical across two systems.

For this reason, I created a separate tolerance layer.

Cases that appeared related but did not satisfy a strict automatic rule could be placed into dedicated tolerance tables for auditor review.

Examples could include situations where:

  • most fields corresponded but one field differed;
  • the record was close enough to be a likely match but not strong enough for automatic acceptance;
  • or a broader comparison produced a candidate that required confirmation.

These records were not silently classified as matched.

They were explicitly routed to a human approval step.

This created a human-in-the-loop model:

Automatic Reconciliation → Candidate/Tolerance Cases → Auditor Approval

That approach was important in an audit context because uncertain relationships should remain visible rather than being hidden inside an automated decision.


5. Separate Result Tables

A key implementation decision was to write different result classes and matching modes into separate SQL tables.

This provided several advantages:

  • clearer review of each matching strategy;
  • easier debugging;
  • easier validation of the reconciliation logic;
  • separate handling of exact, unmatched and tolerance cases;
  • traceability of how a record was classified;
  • and simpler export preparation.

The database therefore functioned as both a processing layer and an organized audit-analysis workspace.


6. Output for the Existing Audit Workflow

The auditors' accepted downstream workflow was based on Microsoft Excel.

For that reason, the final deliverable was exported as CSV.

This was a deliberate integration decision.

Rather than forcing the users to adopt a completely new front-end application, the system performed the computationally intensive work in .NET and SQL Server, then returned the relevant outputs in a format they already used operationally.

The resulting workflow was:

Large Raw Dataset → Automated SQL Reconciliation → Reduced Exception Sets → CSV → Excel → Auditor Follow-Up

This is an example of designing software around the actual operational environment rather than around the technology alone.


7. Scale

The project was intended for large historical cases.

A dataset could contain:

  • records spanning roughly two decades;
  • transactions from multiple banks;
  • accounting data accumulated across many years;
  • and millions of rows.

At that scale, manual spreadsheet comparison becomes slow, fragile and difficult to reproduce.

The system moved the heavy comparison logic into SQL Server, where data could be indexed, queried, grouped and processed systematically.

The scale figures in this case study are based on my historical project experience and should be understood as approximate operational magnitude rather than externally audited statistics.


8. Performance-Oriented Design

The primary objective of the project was speeding up audit work.

The design therefore emphasized:

  • centralized data import;
  • set-based database processing;
  • reusable reconciliation rules;
  • separation of result classes;
  • reduced manual comparison;
  • and exception-focused review.

The goal was not to replace the auditor.

The goal was to prevent auditors from spending their time manually searching through millions of records for relationships that software could identify much faster.

Human attention could then be concentrated on:

  • unmatched transactions;
  • ambiguous relationships;
  • tolerance cases;
  • and records requiring professional judgement.

9. Human-in-the-Loop Audit Design

One of the most important aspects of the system was that it did not treat reconciliation as a binary problem.

Financial audit data often contains ambiguity.

The architecture therefore supported three practical states:

1. Matched

The configured rule found an acceptable correspondence.

2. Unmatched

No sufficient counterpart was identified.

3. Requires Review

A candidate relationship existed but needed auditor approval.

This model is more appropriate for audit support than a simplistic automated "match/no-match" engine because it preserves uncertainty explicitly.


10. Why There Was No GUI

The absence of a graphical interface was intentional rather than a technical limitation.

The core value of the project was:

  • data ingestion;
  • high-volume SQL processing;
  • reconciliation logic;
  • exception classification;
  • and export.

The users already had an established review environment in Excel.

Building a large custom front end would have added complexity without necessarily improving the actual audit workflow.

The system therefore concentrated engineering effort on the processing layer.


11. Architecture

High-Level Architecture

Accounting Data
      \
       \
        >  .NET Import Layer
       /          |
Bank CSV Files    |
                  v
        Microsoft SQL Server
                  |
          Normalized Data
                  |
        Reconciliation Engine
          /        |        \
         /         |         \
   Matched     Unmatched    Tolerance
    Tables       Tables       Tables
         \         |         /
          \        |        /
              CSV Export
                  |
                Excel
                  |
          Auditor Investigation

12. Data Processing Principles

The project followed several practical principles.

Preserve the source

Imported data should remain distinguishable from derived reconciliation results.

Do not hide uncertainty

Near matches belong in a tolerance/review workflow, not inside an automatic acceptance rule.

Keep matching modes explainable

Different reconciliation strategies should be separable and reviewable.

Use the database for scale

Large historical datasets should be processed where set-based operations and indexing can be used effectively.

Integrate with the user's existing tools

CSV and Excel remained the final operational interface because that was the accepted working environment.


13. Technical Stack

Application Layer

  • .NET
  • Non-GUI processing workflow

Database

  • Microsoft SQL Server

Data Formats

  • Accounting exports
  • Bank CSV files
  • CSV output

Downstream Analysis

  • Microsoft Excel

Core Capabilities

  • Data ingestion
  • Data normalization
  • Multi-mode reconciliation
  • Composite matching
  • Exception analysis
  • Tolerance handling
  • Human approval workflow
  • Large-scale SQL processing
  • CSV reporting

14. Professional Competencies Demonstrated

This project demonstrates experience in:

  • designing data-intensive business workflows;
  • importing heterogeneous financial data;
  • working with Microsoft SQL Server at large scale;
  • building configurable reconciliation logic;
  • designing composite matching strategies;
  • separating exact and uncertain results;
  • implementing human-in-the-loop review;
  • handling millions of historical records;
  • building operational automation around existing business processes;
  • integrating database processing with Excel-based users;
  • and translating a manual audit problem into a repeatable software system.

15. Business Value

The system was requested by tax-office auditors to make their existing work faster.

Its value came from changing the nature of the task.

Without automation:

auditors had to search manually through large accounting and banking datasets.

With the reconciliation system:

software performed the broad comparison first, and auditors could focus on the reduced set of exceptions and ambiguous cases.

The system therefore acted as an audit acceleration and exception-analysis layer rather than as a replacement for professional judgement.


16. Evidence and Accuracy Boundaries

This portfolio entry is based on my own historical implementation and project records.

The following points are intentionally kept precise:

  • the application was implemented using .NET and Microsoft SQL Server;
  • it did not depend on a graphical user interface;
  • accounting records and bank CSV exports were imported into SQL Server;
  • reconciliation used multiple matching combinations;
  • matched, unmatched and tolerance results were stored separately;
  • tolerance cases were intended for human approval;
  • final outputs were exported to CSV for Excel-based review;
  • datasets could cover long historical periods and reach millions of records;
  • and the work was requested by auditors to accelerate financial audit analysis.

This page does not publish:

  • taxpayer identities;
  • account numbers;
  • banking data;
  • confidential audit records;
  • institution-internal data structures;
  • or proprietary source code.

The institution is therefore described generically as a tax/audit authority context unless a separately publishable source is available.


17. Website Publication Version

Turning Millions of Financial Records into Reviewable Audit Exceptions

Financial audit work becomes difficult when accounting records have to be reconciled against years of transactions from multiple bank accounts.

I built a .NET and Microsoft SQL Server system to automate that process for tax-office auditors.

The tool imported accounting data and bank CSV exports into a centralized SQL Server database. Instead of relying on one rigid matching rule, I implemented multiple reconciliation modes using different combinations of identifiers such as asset/property references, bank/account identifiers, statement references and dates.

Each reconciliation strategy produced its own structured result tables.

The system separated data into three practical classes:

  • Matched records
  • Unmatched records
  • Tolerance / near-match records requiring auditor approval

This distinction was important. In an audit workflow, uncertainty should not be hidden inside an automatic match. Ambiguous relationships were kept visible and routed to human review.

Some historical cases contained up to roughly 20 years of transactions and millions of records. SQL Server handled the large-scale processing, while the final results were exported to CSV because the auditors' accepted downstream workflow was Excel-based.

The project was not designed to replace the auditor. It was designed to remove the repetitive search work so that professional attention could be focused on the transactions that actually required investigation.


18. Compact Portfolio Card

Financial Audit Reconciliation & Exception Analysis System
.NET · Microsoft SQL Server · Data Engineering · Audit Automation

Built a high-volume reconciliation engine for tax-office audit workflows, comparing accounting records against multi-bank CSV exports using multiple composite matching strategies. The system separated matched, unmatched and tolerance cases, processed datasets reaching millions of records, and exported review-ready CSV results for Excel.


19. Concise CV Version

Financial Audit Reconciliation System — Independent Software Project

Designed and implemented a .NET / Microsoft SQL Server reconciliation workflow for large financial-audit datasets. Imported accounting records and multi-bank CSV exports, applied configurable composite matching rules, separated matched/unmatched/tolerance cases and generated CSV outputs for auditor review. Historical datasets could span approximately 20 years and millions of transactions.


20. Interview Explanation

"Auditors were receiving accounting records together with CSV exports from all of a person's bank accounts. Manually comparing those datasets could mean working through years of transactions. I built a .NET ingestion layer and used SQL Server as the reconciliation engine. I created multiple matching modes using different combinations of identifiers and dates, stored the results separately, and introduced a tolerance table for cases that looked related but still required human approval. The final exception sets were exported as CSV because the auditors worked in Excel. The objective was not to automate professional judgement; it was to reduce millions of records to the much smaller subset that actually needed an auditor's attention."


21. Suggested Portfolio Taxonomy

Category

Data, Research & Knowledge Systems

This is the best fit because the core of the project is large-scale data ingestion, reconciliation, SQL processing and exception analysis.

  • Microsoft SQL Server
  • Data Engineering
  • Data Analysis
  • Automation
  • Workflow Automation
  • Reporting
  • .NET

Optional New Tags

Only add these if you want this domain to become reusable across multiple future portfolio items:

  • Financial Reconciliation
  • Audit Automation

If this is the only project of its kind, the existing tags are sufficient and the taxonomy can remain cleaner.


22. Suggested SEO Metadata

SEO Title: Financial Audit Reconciliation & Exception Analysis System
Meta Description: A .NET and Microsoft SQL Server audit-reconciliation system for matching large accounting datasets against multi-bank CSV exports, isolating unmatched and tolerance cases for auditor review.
Suggested Slug: /portfolio/financial-audit-reconciliation-exception-analysis


23. Cover Direction

A square enterprise-data cover with:

  • multiple bank CSV streams entering a central SQL database;
  • a reconciliation engine in the center;
  • three clearly separated outputs: Matched, Unmatched, Tolerance Review;
  • subtle financial ledger and SQL-table visuals;
  • no real bank logos, taxpayer data or government identifiers.

Cover title:
Financial Audit Reconciliation

Secondary line:
SQL Server · Multi-Mode Matching · Exception Analysis