Published on 25 March 2026
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:
These proofs were generated through a structured AI‑assisted engineering process. The methodology is documented at AI‑Assisted Delivery Mechanism.
This proof is written for professional review (e.g., business owners, chartered accountants), not end users.
It covers:
Cash.vwEquityReconciliationByYear (annual equity bridge)Cash.vwFlowReconciliationByYear (annual reconciliation lines derived from the bridge)Schema/tcNodeDb4/Scripts/PROOF_CashStatementReconciliation.sql (machine-checkable invariants)Let:
t be time periods.t corresponds to App.tbYear.YearNumber and year-end snapshots per App.tbYearPeriod.BS(t) denotes a balance sheet snapshot at the year-end boundary used by Cash.vwBalanceSheet.Capital(t) denotes total equity / capital at BS(t).From Cash.vwEquityReconciliationByYear, per YearNumber we define:
OpeningCapital = Capital(t-1) (first year uses Cash.vwBalanceSheet at the first active period)ClosingCapital = Capital(t)CapitalDelta = ClosingCapital - OpeningCapitalProfit = annual profit per Cash.vwProfitAndLossByYearCorporationTax = annual corporation tax expense used in the equity bridgeProfitAfterTax = Profit - CorporationTaxCapitalInjection = net owner funding movements for the year (see “Capital injection classification” below)OpeningPosition = one-off opening balance correction applied only in the first yearDifference = residual of the reconciliation (should be zero except rounding)Additionally, for corporation tax carry mechanics (loss regime), the view exposes:
TaxCarry = statement-driven corporation tax carry (not used in the equity bridge)OpeningLossesCarriedForward, ClosingLossesCarriedForward, LossesCarriedForwardDelta = statement-driven loss pool expressed as a non-negative balanceAll monetary amounts are ultimately presented rounded to 2dp.
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.
For each year t, the equity bridge identity is:
CapitalDelta(t) = ProfitAfterTax(t) + CapitalInjection(t) + OpeningPosition(t) + Difference(t)
Where:
OpeningPosition(t) is non-zero only for the first year, representing the initial position brought forward into the new ledger.Difference(t) is the residual rounding / classification error term. For a correct implementation and clean rounding, it should be within pennies, and ideally 0.00 in most cases.Difference)In Cash.vwEquityReconciliationByYear:
CapitalDelta is computed as ClosingCapital - OpeningCapital.ProfitAfterTax is computed as Profit - CorporationTax.Difference is computed as:Difference = CapitalDelta
Rearranging:
CapitalDelta = ProfitAfterTax + CapitalInjection + OpeningPosition + Difference
This is an identity, not an approximation: it holds exactly given the definitions in the view, modulo the rounding applied at output.
Difference becomes a rounding-only term.Difference indicates either:
In loss scenarios, corporation 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.
CorporationTax in Cash.vwEquityReconciliationByYear is expense-only for the equity bridge and is constrained to non-negative expense in loss regimes.TaxCarry is statement-derived and may be negative in loss regimes; it is explanatory and used for tax proofing, not for the equity bridge.This separation ensures:
Loss carry-forward is derived from the corporation tax statement running balance and the period’s CorporationTaxRate, expressed as a non-negative loss pool:
ClosingLossesCarriedForward is monotonic (non-decreasing) in consecutive loss years, and decreases when profits consume losses.This supports multi-year rolling loss positions without corrupting P&L expense.
Capital injection cash codes are derived (per business dataset) using a deterministic first-transaction-sign rule:
Cash.tbCode whose categories and linked accounts indicate balance-sheet financing context:
Cash.tbCategory.CashTypeCode = 2Subject.tbAccount.AccountTypeCode = 2Subject.tbAccount.AccountClosed = 0PaidOutValue (i.e., the sign convention indicates creation of a liability/capital counter-entry to funds introduced).This avoids:
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:
Cash.vwEquityReconciliationByYear satisfies the equity movement identity, then Cash.vwFlowReconciliationByYear is consistent by derivation.Line BRIDGE is explicitly:
ProfitAfterTax + CapitalInjection + OpeningPosition
Line DIFF is explicitly:
Difference
Therefore reviewers can see the bridge total and residual directly without recomputation.
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):
Difference = 0.00Difference magnitudes are <= 0.06 per year (rounding noise)Difference = 0.00Difference magnitudes are <= 0.06 per year (rounding noise)This demonstrates:
For each year in Cash.vwEquityReconciliationByYear:
CapitalDelta = ClosingCapital - OpeningCapitalProfitAfterTax = Profit - CorporationTaxBridge = ProfitAfterTax + CapitalInjection + OpeningPositionDifference = CapitalDelta - BridgeAll terms are directly available in the same row, so the proof is self-contained.
For loss carry-forward:
TaxCarry and the loss-c/f columns trace to the corporation tax statement balance windows and rate, and that loss balances behave consistently over time.CapitalInjection or represented as separate bridge lines, otherwise they manifest as a non-zero Difference.The identities described in this paper are encoded as executable assertions in:
When executed against the synthetic dataset scenarios used to validate this paper, PROOF_CashStatementReconciliation.sql is expected to return:
Status = PASS.Status = PASS (13 lines per year in Cash.vwFlowReconciliationByYear).A typical PASS summary shows:
Difference_MaxAbs <= 0.10 (often ~0.06 in VAT-on scenarios due to rounding),CapitalDelta, ProfitAfterTax, and Difference) consistent within tolerance.The script queries Cash.vwEquityReconciliationByYear and verifies, for each YearNumber, the following identities (subject to 2dp presentation and an allowed tolerance):
Capital delta definition
CapitalDelta = ClosingCapital - OpeningCapital
Profit after tax definition
ProfitAfterTax = Profit - CorporationTax
Equity bridge identity
Difference = CapitalDelta - (ProfitAfterTax + CapitalInjection + OpeningPosition)
It also performs shape/sanity checks on the derived line-report view:
Cash.vwFlowReconciliationByYear has exactly 13 lines per year (one row per defined reconciliation line).PASS means:
Difference) is within tolerance (rounding-only), andFAIL indicates a definitional break (a true inconsistency), such as:
CapitalInjection,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.
Cash.vwEquityReconciliationByYearCash.vwFlowReconciliationByYearCash.vwTaxCorpStatementCash.vwTaxLossesCarriedForwardCash.vwProfitAndLossByYearCash.vwBalanceSheetCash.tbPayment, Cash.tbCode, Cash.tbCategorySubject.tbAccountApp.tbYear, App.tbYearPeriodThis 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 the following settings:
@IsCompany = 1
@MisOrdersPerMonth = 2
@MonthsForward = 3
@QuantityRatio = 10
@FloatRatio = 0.25
@PriceRatio = 3.0 (profit scenarios) or 0.5 (loss scenarios)
All major generation modules enabled:
@EnableProjects = 1@EnableInvoices = 1@EnableProjectPayments = 1@EnablePayables = 1@EnableMiscPayments = 1@EnableWages = 1@EnableExpenses = 1@EnableAssets = 1@EnableTax = 1@EnableTransfers = 1@EnableOpeningBalance = 1For full source, see EXEC_DatasetSyntheticMIS.sql.
To prove all four synthetic scenarios (profit/loss; VAT on/off), use the scenario-proof runner:
This script:

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