{% extends "base.html" %} {% from "_recon_table.html" import fmt, render_table %} {% block title %}Loan forensic — RWA Calculator{% endblock %} {% block content %} {# The breadcrumb leads with where the analyst CAME FROM (a template cell, when they arrived from one) — the report root and the explorer are always-available fallbacks, not the trail back. #}
{% if return_to and return_to != explorer_url %}← Back to the cell you came from · {% endif %}the report · per-key explorer
{% if not detail %} {# The key resolved to no single reconciled row. Never a bare 404: the loan very probably exists and was addressed by ONE of the join key's columns. #}{{ resolution.requested }}
This reconciliation's join key is {{ resolution.key_columns|join(" + ") }}.
{% endif %} {% if resolution.candidates %}{{ detail.recon_key }}
{% if signoff_error %}The loan's RWA build, legacy vs ours at each step. Indented rows are our-side drivers explaining how we reached the value above; a driver tagged legacy not provided has no legacy counterpart in the mapping.
| step | legacy | ours | abs Δ | rel Δ | status | |
|---|---|---|---|---|---|---|
| {{ step.label }} | {{ fmt(step.legacy) }} | {{ fmt(step.ours) }} | {{ fmt(step.abs_delta) }} | {{ fmt(step.rel_delta) }} | {{ step.bucket if step.bucket is not none else "" }} | |
| ↳ {{ d.name }} | {% if d.legacy_available %}{{ fmt(d.legacy) }} | {% else %}legacy not provided | {% endif %}{{ fmt(d.ours) }} |
Open the return-template comparison
{% elif not placement.groups %}Which template row this exposure reported in, ours beside theirs. A row only one side reaches is a placement difference, and says so — it is never left blank. Rows are grouped by the population that backs them: a template row does not have one population, so the same row can appear under more than one group.
{% for group in placement.groups %}Placement — ours: {{ group.our_placement_name }} {%- if group.our_placement %} ({{ group.our_placement }}){% endif %}; theirs: {{ group.their_placement_name }} {%- if group.their_placement %} ({{ group.their_placement }}){% endif %}.
{% endif %}| row | row name | ours | theirs | hierarchy (ours) | hierarchy (theirs) |
|---|---|---|---|---|---|
| {{ row.row_ref }} | {{ row.row_name or "—" }} | {# A side that did not reach the row is DIMMED, never emptied — the word is the finding. ``muted`` is app.css's own class; the ``is-*`` state names used on the compare grid are inline-styled there, not CSS rules, so borrowing them here would style nothing. #}{{ row.our_display }} | {{ row.their_display }} | {{ row.our_parent_state }} | {{ row.their_parent_state }} |
Record whether this exposure's difference is acceptable. Accepting or rejecting takes it off the Open worklist; reopen it to put it back.
{% if decision and signoff_stale %}