{% extends "base.html" %} {% from "_recon_table.html" import fmt %} {% block title %}Return templates — RWA Calculator{% endblock %} {% block container_mod %}container--wide{% endblock %} {# Per-state inline styling. app.css has `is-null` (dimmed) already; the other two states are new to this page and must still LOOK different, because a grid that renders "not emitted", "no population" and "cannot be computed" the same way has thrown the finding away. #} {% set STATE_STYLE = { "is-figure": "", "is-null": "opacity:.55", "is-unavailable": "color:var(--oah-orange-bright);font-style:italic", "is-absent": "opacity:.3" } %} {% macro side(figure) -%} {{ figure.display }} {%- endmacro %} {% block content %}

← Back to the reconciliation report

Return templates · {{ page.framework }}

A return template is just another segment axis on this reconciliation: your extract is projected into our reporting ledger and run through the same generators as our own results, so both sides of a template come out of one engine. Pick a template and a sheet, then click a cell to see why it differs.

{% if page.warnings %}
{% for w in page.warnings %}
{{ w }}
{% endfor %}
{% endif %} {% if not page.available %}

No template comparison for this reconciliation.

{{ page.unavailable_reason }}

{% if page.remedies %}

What to map:

{% endif %}
{% else %}
{% if page.selected and page.selected.state == "unreachable" %}

Your mapping cannot produce this template at all.

{{ page.selected.blocked_reason }}

{% elif page.selected and page.selected.state == "unpopulated" %}

Nothing to fix here. {{ page.selected.population_note }}

{% endif %} {% if page.remedies %}

Your mapping cannot populate everything on this template. Those cells are shown as n/a, never as a legacy zero — a confident zero there would be the largest difference on the sheet, and its explanation would read as measurement: same loans, different number.

{% endif %}

How to read this page. A blank is never a zero, and the three kinds of blank are not each other: emitted with no population (genuinely no money); · not emitted at all (the row or column is missing on that side); n/a cannot be computed from that side's sources. A reported 0 is a measured zero and looks different from all three.

{% if page.compare %}

{{ page.compare.template_label }}{% if page.compare.sheet %} · {{ page.compare.sheet }}{% endif %} · {{ page.compare.cell_count }} cells · {{ page.compare.material_count }} material · {{ page.compare.unmeasurable_count }} not measurable

{% for col in page.compare.columns %}{% endfor %} {% for row in page.compare.rows %} {% for cell in row.cells %} {% endfor %} {% endfor %}
Row Name{{ col.ref }}
{{ row.row_ref }} {{ row.row_name }} {{ side(cell.ours) }} / {{ side(cell.theirs) }}
{{ cell.delta_display }}

Worst cells — largest material differences first

{% if page.compare.worst %}

Material means the difference clears both floors set above ({{ "{:,.0f}".format(page.materiality.absolute) }} absolute and {{ page.materiality.percent }}% of the cell). {{ page.compare.material_count }} cell(s) qualify; the largest {{ page.compare.worst | length }} are shown.

{% for cell in page.compare.worst %} {% endfor %}
rownamecolcolumnourstheirsΔwhere
{{ cell.row_ref }} {{ cell.row_name }} {{ cell.col_ref }} {{ cell.col_name }} {{ side(cell.ours) }} {{ side(cell.theirs) }} {{ cell.delta_display }} {{ cell.status_label }}
{% else %}
No cell on this sheet clears the materiality floors.
{% endif %} {% if page.compare.unmeasurable %}

Not measurable — {{ page.compare.unmeasurable_count }} cell(s)

These cells have no difference at all, because one side cannot compute them. They are listed separately rather than ranked at the bottom of the list above: they have no number to sort on, and dropping them is how an unmapped carrier passes for a tie-out.

{% for cell in page.compare.unmeasurable %} {% endfor %}
rowcolcolumnourstheirswhat to do
{{ cell.row_ref }} {{ cell.col_ref }} {{ cell.col_name }} {{ side(cell.ours) }} {{ side(cell.theirs) }} {{ cell.note }}
{% endif %} {% else %}
Neither side emitted this sheet.
{% endif %} {% if page.explanation %} {% set ex = page.explanation %}

Cell {{ ex.row_ref }} / {{ ex.col_ref }} — {{ ex.col_name }}

{{ ex.row_name }} · cell kind {{ ex.kind }}{% if ex.metric %} · metric {{ ex.metric }}{% endif %}{% if ex.predicate_key %} · population {{ ex.predicate_key }}{% endif %}.

{{ ex.ours.display or ex.ours.title }}
ours
{{ ex.theirs.display or ex.theirs.title }}
theirs
{{ ex.delta_display }}
Δ

{{ ex.parent_note }}

{% if ex.refused %} {# Four refusals, four next actions. A coverage refusal is a MAPPING gap and not a difference at all; the other three are statements about the cell. #}
{% if ex.refusal_kind == "coverage" %}

Not mapped — this is not a difference.

{{ ex.refusal_headline }}

{% if ex.remedy %}

{{ ex.remedy }}

{% endif %}

Left unguarded, this cell would print a legacy 0 and the split below would attribute your whole figure to measurement — "same loans, different number". It is not that: their engine was never asked this question.

{% elif ex.refusal_kind == "non_additive" %}

No four-way split for this column — it is an average, not a total.

{{ ex.refusal_headline }}

{% elif ex.refusal_kind == "not_row_backed" %}

This cell has no exposure population.

{{ ex.refusal_headline }}

{% else %}

Not instrumented.

{{ ex.refusal_headline }}

{% endif %}

{{ ex.refusal }}

{% else %}

Why it differs

{% for step in ex.steps %} {% endfor %}
causeamountexposuresshare of explained
{{ step.label }} {{ step.display }} {{ "{:,}".format(step.keys) }} {{ "{:.1%}".format(step.share) }}
reported Δ{{ ex.delta_display }}
{% if not ex.reconciles %}
The four causes do not add up to the reported difference — {{ ex.residual_display }} is unexplained. Read the split as incomplete: a post-execute pass can overwrite a cell after the population was aggregated.
{% endif %} {% endif %}

{{ ex.attribution }}

{% if ex.our_legs or ex.their_legs %}

Exposures behind this cell

The legs of the one population this cell reads ({{ ex.predicate_key }}) — not the row's, which carries several. Ours {{ "{:,}".format(ex.our_leg_count) }}, theirs {{ "{:,}".format(ex.their_leg_count) }}; the largest are listed. A key opens the single-loan forensic, which is where the per-component driver chain already lives.

{% for leg in ex.our_legs + ex.their_legs %} {% endfor %}
sideexposureEADRWEA
{{ leg.side }} {{ leg.exposure_reference }} {{ fmt(leg.ead) }} {{ fmt(leg.rwa) }}
{% endif %}

Open the per-key explorer for {{ page.sheet }} — the explorer filters on exposure class, not on a template cell, so this is the sheet's population and not only this cell's.

{% endif %} {% if page.matrix %} {% set m = page.matrix %}

Row migration — our row down, their row across

Population {{ m.predicate_key }}{% if m.columns %} (serves columns {{ m.columns | join(", ") }}){% endif %}, priced on {{ m.money_column }}. The diagonal is agreement; every off-diagonal cell is money that landed on a different row. Each leg appears in exactly one cell of this matrix.

Read this as value-driven. {{ m.attribution }}
{% if not m.axis_is_partition %}
Some legs reach no single provable leaf row on this axis — their rows are parents, or are indistinguishable from one another. Their money is kept in the {{ page.undecidable_row_ref }} bucket rather than dropped: an empty leaf filter is not a zero.
{% endif %}
{% for ref in m.their_rows %}{% endfor %} {% for row in m.cells %} {% for cell in row %} {% endfor %} {% endfor %}
ours ↓ theirs →{{ ref }}
{{ m.our_rows[loop.index0] }} {% if cell %}{{ cell.display }}{% else %}·{% endif %}
movement{{ m.money_column }}
same row on both sides{{ fmt(m.totals.agreed) }}
moved row (their value differs){{ fmt(m.totals.moved) }}
in this population on our side only{{ fmt(m.totals.ours_only) }}
in this population on their side only{{ fmt(m.totals.theirs_only) }}
held, no provable leaf row{{ fmt(m.totals.undecidable) }}

These five classes partition the population: each leg is counted once, in one class. They are not a sum over template rows — rows on this axis overlap, so adding them up would double-count every leg reported under both a band and its parent.

{% elif page.compare %}
This sheet has no membership groups, so no migration matrix can be drawn for it. That is "not instrumented", not "nothing moved".
{% endif %} {% endif %} {% endblock %}