Dima Karma

I find the place where two sources stop agreeing.

Financial data analyst in Halifax, Nova Scotia. Sixteen years of turning accounting and operational data into numbers people act on, and checking every join before trusting the result.

Three reconciliations from the case studies below.
CheckBeforeAfter
Dashboard gross profit vs statutory statementsBeforeLoss vs profitAfterAgree
Contracts credited to the right supplierBefore863 wrongAfter0 wrong
Payment totals across two statement formatsBeforeUndercountedAfterExact

Work

14K+sales and 33K bank transactions, 2020 to 2026

A CEO dashboard that matches the official statements

14K+sales and 33K bank transactions, 2020 to 2026

EFT GROUP, agricultural infrastructure distributor. Remote, current work. 1C:Enterprise, Python, Polars, CatBoost, LightGBM, Chart.js.

What I built
A dashboard the CEO uses daily: profit and loss, cash flow, products, clients and stress scenarios. It is fed by extractors I wrote against the company's accounting, sales and orders registers, with validation on every load.
What did not agree
The dashboard showed a gross loss for 2025. The statutory financial statements showed a profit.
How I found it
The sales register already stores revenue net of VAT. The extraction subtracted VAT a second time, so every sale looked smaller than it was.
What changed
After fixing the query and rebuilding the data, revenue and gross profit came back in line with the official statements, and the gross profit forecast error fell from over 100% to about 20%.

The dashboard is private. Screenshots on anonymized data are available on request.

863contracts credited to the wrong company, found and fixed

Contracts credited to the right supplier

863contracts credited to the wrong company, found and fixed

AusTender data platform, public study project. Snowflake, dbt Core, SQL, Power BI, GitHub Actions.

What I built
A data model joining 241,000 Australian federal contracts to a 20.4-million-entity business register, with automated tests on every change and a published data dictionary and lineage graph.
What did not agree
Every test passed, yet one business number carried 140 unrelated supplier names, and 863 contracts were credited to a company that never won them.
How I found it
I stopped trusting the obvious identifier and checked it against the national business register as a second source, which separated real suppliers from an agency number used as a placeholder.
What changed
The model was re-keyed, the evidence documented, and a test added so the same mistake cannot return silently.
40Ktransactions extracted from statements and documents

Questions about payments, answered exactly

40Ktransactions extracted from statements and documents

Internal tool over company bank statements. PostgreSQL, Python, Docker.

What I built
A tool that answers questions such as "how much did we pay this supplier in March" over bank statements in two export formats.
What did not agree
A language model asked to add up payments quietly undercounted whenever there were more records than it could read at once.
How I found it
Numeric questions now go to an exact SQL aggregation instead of the model. Counterparties are matched by tax ID first and by fuzzy name matching only as a fallback.
What changed
Totals match hand-checked figures across both statement formats, and every release must pass a fixed set of known questions before it ships.

The tool runs on company data and is private.

4portfolio strategies tested on unseen data

ETF portfolios tested on unseen data

4portfolio strategies tested on unseen data

Mean-variance analysis in Python comparing four strategies out of sample, with return, volatility, maximum drawdown and value at risk.

Tools, by what they are for

Getting the data

SQL in Snowflake and PostgreSQL, 1C:Enterprise queries, Python with Polars and Pandas.

Modelling it

Star schemas, reporting marts, slowly changing dimensions, dbt Core.

Checking it

dbt tests, reconciliation to statutory statements, fixed evaluation sets, data dictionaries and lineage.

Showing it

Power BI with DAX, executive dashboards in HTML and Chart.js.

Forecasting

CatBoost and LightGBM, walk-forward validation, scenario and sensitivity analysis.

Working with people

Requirements from business stakeholders, plain-language reporting to executives, English, Ukrainian and Russian.

Experience

2010 to now

Financial Data Analyst, EFT GROUP. Remote. Executive reporting, reconciliation, forecasting and the analysis behind growth to a market share of up to 50%.

2006 to 2010

Business Analyst and Project Manager, Avanport-Design. Requirements and specifications for more than 40 technical projects.

Education

2025

Advanced Data Science Programme, Vodafone.

2023

Data Analytics Intensive, NPower Canada.

Degree

MSc in Systems Engineering.