{% 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
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 %}No template comparison for this reconciliation.
{{ page.unavailable_reason }}
{% if page.remedies %}What to map:
Your mapping cannot produce this template at all.
{{ page.selected.blocked_reason }}
Nothing to fix here. {{ page.selected.population_note }}
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.
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.
| Row | Name | {% for col in page.compare.columns %}{{ col.ref }} | {% endfor %}
|---|---|---|
| {{ row.row_ref }} | {{ row.row_name }} | {% for cell in row.cells %}
{{ side(cell.ours) }} / {{ side(cell.theirs) }} {{ cell.delta_display }} |
{% endfor %}
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.
| row | name | col | column | ours | theirs | Δ | 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 }} |
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.
| row | col | column | ours | theirs | what to do |
|---|---|---|---|---|---|
| {{ cell.row_ref }} | {{ cell.col_ref }} | {{ cell.col_name }} | {{ side(cell.ours) }} | {{ side(cell.theirs) }} | {{ cell.note }} |
{{ ex.row_name }} · cell kind {{ ex.kind }}{% if ex.metric %} · metric {{ ex.metric }}{% endif %}{% if ex.predicate_key %} · population {{ ex.predicate_key }}{% endif %}.
{{ 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. #}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 }}
| cause | amount | exposures | share of explained |
|---|---|---|---|
| {{ step.label }} | {{ step.display }} | {{ "{:,}".format(step.keys) }} | {{ "{:.1%}".format(step.share) }} |
| reported Δ | {{ ex.delta_display }} |
{{ ex.attribution }}
{% if ex.our_legs or ex.their_legs %}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.
| side | exposure | EAD | RWEA |
|---|---|---|---|
| {{ leg.side }} | {{ leg.exposure_reference }} | {{ fmt(leg.ead) }} | {{ fmt(leg.rwa) }} |
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.
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.
| ours ↓ | theirs → | {% for ref in m.their_rows %}{{ ref }} | {% endfor %}
|---|---|---|
| {{ m.our_rows[loop.index0] }} | {% for cell in row %} | {% if cell %}{{ cell.display }}{% else %}·{% endif %} | {% endfor %}
| 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 %}