{% 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 others 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. `is-unheld` is the pair table's fifth state -- "this side holds no leg for THIS exposure in this cell" -- which is none of the four above and must not be styled like any of them. #} {% set STATE_STYLE = { "is-figure": "", "is-null": "opacity:.55", "is-unavailable": "color:var(--oah-orange-bright);font-style:italic", "is-absent": "opacity:.3", "is-unheld": "color:var(--oah-slate-400);font-style:italic" } %} {% 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 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; not held, in the exposure table under a cell, that side holds no leg for that one exposure here — the row and the column are both present. A reported 0 is a measured zero and looks different from all four.
| 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 }}
Click a cause to narrow the exposures below to it. exposures is that cause's whole population and of which differ only those whose own figures disagree: measurement holds every exposure both sides report, agreeing ones included, so the two columns are meant to diverge there. {% if ex.pairs.filtered %}Show every cause again.{% endif %}
| cause | amount | exposures | of which differ | share of explained |
|---|---|---|---|---|
| {{ step.label }} | {{ step.display }} | {{ "{:,}".format(step.keys) }} | {{ "{:,}".format(step.drivers) }} | {{ "{:.1%}".format(step.share) }} |
| reported Δ | {{ ex.delta_display }} | |||
{{ ex.attribution }}
{% if ex.conservation %} {% set con = ex.conservation %}The split above explains one cell, and is not a scope check. Whether this sheet holds the same money on both sides is a separate question, and it is the one that rules a moved row in or out: a move contributes to two cells of this sheet with opposite signs, so it cancels here and a leg that is simply not on the other side does not. For column {{ con.col_ref }} ({{ con.col_name }}) the sheet total is {{ con.display }}.
{{ con.note }}
One row per exposure — not per leg, and not two unrelated lists — with both sides on it, ranked by what each contributes. Ranking on size answers a different question: measured on a probe portfolio, two per-side listings ordered on RWEA and capped at 25 each rendered 50 rows of exact agreement while every driver of the difference sat below the cap. Showing {{ ex.pairs.term_label }}; a key opens the single-loan forensic and returns you to this cell.
{% endif %}{{ ex.pairs.note }}
{% if ex.pairs.rows %}| exposure | cause | ours | theirs | Δ |
|---|---|---|---|---|
| {% if row.identified %}{{ row.key_display }}{% else %}{{ row.key_display }}{% endif %} | {{ row.term_label }} | {{ side(row.ours) }} | {{ side(row.theirs) }} | {{ row.delta_display }} |
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. Click a cell to list the exposures behind it, with both rows named — those two names are the band boundary crossed.
| 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) }} |
| we split it, or filed it elsewhere on this template | {{ fmt(m.totals.same_base_ours) }} |
| they filed it whole, or elsewhere on this template | {{ fmt(m.totals.same_base_theirs) }} |
| mixed — our legs, some elsewhere on their template and some nowhere | {{ fmt(m.totals.mixed_base_ours) }} |
| mixed — their legs, some elsewhere on our template and some nowhere | {{ fmt(m.totals.mixed_base_theirs) }} |
| not on their template at all | {{ fmt(m.totals.ours_only) }} |
| not on our template at all | {{ fmt(m.totals.theirs_only) }} |
| held, no provable leaf row | {{ fmt(m.totals.undecidable) }} |
These nine 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.
Ours {{ mv.our_row_name }} ({{ mv.our_row_ref }}) against theirs {{ mv.their_row_name }} ({{ mv.their_row_ref }}), priced on {{ mv.money_column }}{% if mv.basis_label %} — {{ mv.basis_label }}{% endif %}. Those two names are the boundary crossed.
{{ mv.note }}
{% if mv.rows %}| leg | exposure | ours | theirs | on the other side |
|---|---|---|---|---|
| {{ row.key_display }}{% if row.split %} (one leg of several){% endif %} | {% if row.identified %}{{ row.base_key }}{% else %}{{ row.key_display }}{% endif %} | {{ side(row.ours) }} | {{ side(row.theirs) }} | {{ row.same_base_note }} |