Cash Statement Proofs (DEBK Invariants)

Published on 25 March 2026

Abstract

Trade Control is a production system, not a traditional journal-ledger-first DEBK system.

Rather than persisting financial statements as primary artifacts, Trade Control derives statutory-style accounting views dynamically from a genesis transaction model, using Supply vs Demand and Cash Polarity as the organizing principles. Double-entry concepts are present where required (notably for capital assets and balance-sheet snapshots), but the system’s primary architecture is a flow model: a business is treated as a Node whose inputs and outputs are determined by cash polarity and whose realized state is constrained by external cash (e.g., bank) reality.

This architecture provides several properties that are directly relevant to assurance:

Despite not being implemented as a conventional DEBK ledger, Trade Control produces reporting outputs that satisfy DEBK-style invariants. This document provides machine-checkable proofs (identities) demonstrating that the published Cash Statement reconciliation is mathematically consistent and that residuals are rounding-only.

The proofs in this paper are reproducible by executing the following script against the synthetic dataset:

For a technical description of how the synthetic dataset is constructed, see:

Sole Trader Accounts

For readers modelling sole trader accounts, a companion document is available. It explains how the Cash Statement Proof applies unchanged when Corporation Tax is replaced by Business Tax (personal tax on profit):

See the Sole Trader Addendum →

Scope and audience

This proof is written for professional review (e.g., business owners, chartered accountants), not end users.

It covers:

What this proof does (and does not) claim

This paper proves internal mathematical consistency of the published annual reconciliation views:

It does not claim that annual profit can be reconstructed from balance sheet deltas alone without classification, because equity movements (owner funding, drawings/dividends, loan movements, opening seed positions, and other financing flows) must be identified or represented as explicit bridge terms.

Definitions and notation

Let:

From Cash.vwEquityReconciliationByYear, per YearNumber we define:

Additionally, for business tax carry mechanics (loss regime), the view exposes:

All monetary amounts are ultimately presented rounded to 2dp.

DEBK invariant #1: Balance sheet identity

The core DEBK balance sheet identity is:

Assets − Liabilities − Equity = 0

In the system, Cash.vwBalanceSheet provides a snapshot of balances derived from the underlying ledger postings. Provided all postings are balanced, the balance sheet identity must hold at each snapshot date by construction of the double-entry system.

This document does not re-prove that base postings are double-entry balanced; instead it proves that the cash statement reconciliation is consistent with the balance sheet snapshot implied by those postings.

DEBK invariant #2: Equity movement identity (annual bridge)

For each year t, the equity bridge identity is:

CapitalDelta(t) = ProfitAfterTax(t) + CapitalMovement(t) + OpeningPosition(t) + OpeningAccountPosition(t) + Variance(t)

Where:

Proof (by construction of Variance)

In Cash.vwEquityReconciliationByYear:

CapitalMovement = CapitalDelta - (ProfitAfterTax + OpeningPosition + OpeningAccountPosition)

Variance = CapitalDelta - (ProfitAfterTax + CapitalMovement + OpeningPosition + OpeningAccountPosition)

Rearranging:

CapitalDelta = ProfitAfterTax + CapitalMovement + OpeningPosition + OpeningAccountPosition + Variance

This is an identity, not an approximation: it holds exactly given the definitions in the view, modulo the rounding applied at output.

Interpretation

Business tax treatment: expense vs carry (loss regimes)

Issue addressed

In loss scenarios, tax computations at the statement level may produce negative “tax due” and negative running balances. Interpreting negative values as a current-year tax expense would incorrectly increase equity and break the bridge.

System rule

This separation ensures:

Losses carried forward measure

Loss carry-forward is derived from the tax statement running balance and the period’s BusinessTaxRate, expressed as a non-negative loss pool:

This supports multi-year rolling loss positions without corrupting tax expense.

Capital movement definition (unified bridge term)

Trade Control supports both companies and sole traders using the same reconciliation identity.

In practice, a single deterministic classification of “capital injection” cash codes is not always stable across datasets, especially where polarity and timing produce bidirectional usage (e.g., drawings vs capital introduced, loan injections vs repayments).

Accordingly, the annual bridge reports CapitalMovement as the net capital movement required to reconcile the annual capital delta after profit/tax and explicit opening adjustments have been accounted for:

CapitalMovement = CapitalDelta - (ProfitAfterTax + OpeningPosition + OpeningAccountPosition)

This definition makes the bridge stable across:

Cash.vwFlowReconciliationByYear (presentation proof)

Cash.vwFlowReconciliationByYear is a line-oriented projection of Cash.vwEquityReconciliationByYear. It does not introduce new arithmetic; all reported Amount values are projections or sums of the base view’s columns. Therefore:

Line BRIDGE is explicitly:

ProfitAfterTax + CapitalMovement + OpeningPosition + OpeningAccountPosition

Line VAR is explicitly:

Variance

Therefore reviewers can see the bridge total and residual directly without recomputation.

Empirical verification (synthetic scenario matrix)

A synthetic test script runs four scenarios (VAT on/off; profit/loss) and populates a temp table from Cash.vwEquityReconciliationByYear.

Observed results (March 2026 run):

This demonstrates:

  1. Loss years do not introduce spurious tax expense into the equity bridge.
  2. VAT registration affects penny-level rounding only and does not break DEBK identities.
  3. The reconciliation is stable across profit and loss regimes.

What a reviewer can independently validate

For each year in Cash.vwEquityReconciliationByYear:

  1. Compute (to 2dp):

    • CapitalDelta = ClosingCapital - OpeningCapital
  2. Compute:

    • ProfitAfterTax = Profit - BusinessTax
  3. Compute bridge:

    • Bridge = ProfitAfterTax + CapitalMovement + OpeningPosition + OpeningAccountPosition
  4. Confirm:

    • Variance = CapitalDelta - Bridge

All terms are directly available in the same row, so the proof is self-contained.

For loss carry-forward:

Limitations and boundary conditions

The identities described in this paper are encoded as executable assertions in:

Expected output (reference run)

When executed against the synthetic dataset scenarios used to validate this paper, PROOF_CashStatementReconciliation.sql is expected to return:

A typical PASS summary shows:

What the script proves

The script queries Cash.vwEquityReconciliationByYear and verifies, for each YearNumber, the following identities (subject to 2dp presentation and an allowed tolerance):

It also performs shape/sanity checks on the derived line-report view:

PASS / FAIL interpretation

Tolerance

The script uses a configurable tolerance (default 0.10) to accommodate penny-level rounding effects that arise when:

Reviewers may set the tolerance to 0.01 if the dataset and rounding model are expected to be strictly penny-perfect.

Relevant objects

Appendix A: Reference execution script (synthetic scenarios)

This paper’s reference run uses the scenario runner script:

The script executes four scenarios (profit/loss; VAT on/off) by running App.proc_DatasetSyntheticMIS with configurable settings, including:

For full source, see EXEC_DatasetSyntheticMIS.sql.

Appendix B: Proof output (reference run)

To prove all four synthetic scenarios (profit/loss; VAT on/off), use:

This script:

Reference output

Synthetic Scenario Resultset

Licence

Creative Commons

Licenced by Trade Control Ltd under a Creative Commons Attribution-NoDerivatives 4.0 International License