{% extends "base.html" %} {% from "_recon_table.html" import render_table, drill_table %} {% block title %}Reconciliation — RWA Calculator{% endblock %} {% block content %}

Parallel-run reconciliation

Run this calculator and reconcile its output against your legacy calculator, component by component (EAD, RWA, risk weight, PD, LGD, CCF, exposure class, …). Each row is bucketed as match / within-tolerance / break / missing, with our reason and input drivers attached so a break can be triaged to a data fix or an engine fix.

{% if error %}
Reconciliation failed: {{ error }}
{% endif %}

Declare the join key(s) and which legacy column maps to each canonical component. legacy_file resolves relative to the data path above; numeric components accept scale and unit = "percent", categoricals a value_map of synonyms.

{% if has_saved_run %}Reset to defaults{% endif %}
{% if result %} {% if result.warnings %}
{% for w in result.warnings %}
{{ w }}
{% endfor %}
{% endif %} {% if not result.success %}
No comparable components — check the mapping (legacy file path, join keys and column names).
{% else %}

1 · Headline — does it tie out?

{% for s in result.headline %}
{{ "{:,.0f}".format(s.our_total) }}
{{ s.component }} — ours
legacy {{ "{:,.0f}".format(s.legacy_total) }}{% if s.delta_pct is not none %} · Δ {{ "%+.2f"|format(s.delta_pct) }}%{% endif %}
{% endfor %}

Tie-out — legacy vs ours per component

{{ result.chart_tie_out | safe }}

Where the money differs — Σ|Δ| by component

{{ result.chart_abs_delta | safe }}

By component

{{ render_table(result.component_table) }}

2 · Segment — where do breaks concentrate?

Each row links into the per-key explorer, pre-filtered to that segment.

{% if result.allocation_table.rows %}

Asset-class allocation — legacy vs ours (RWA)

{{ result.chart_allocation | safe }}

Asset-class allocation — EAD & RWA by risk class

Each side's exposures are totalled by risk class (a split exposure's portions each counted in their own class). Offsetting deltas show where the two engines allocate an exposure to different classes.

{{ render_table(result.allocation_table) }} {% endif %}

By bucket

{{ drill_table(result.bucket_table, "row_bucket", result.explorer_url, "bucket") }}

By exposure class

{{ drill_table(result.class_table, "our_exposure_class", result.explorer_url, "exposure_class") }}

By approach

{{ drill_table(result.approach_table, "our_approach", result.explorer_url, "approach") }}

3 · Worklist — top {{ result.biggest_n }} of {{ "{:,}".format(result.break_count) }} break(s), largest first

Click a key to open its single-loan forensic, or open the full per-key explorer ({{ "{:,}".format(result.total_rows) }} row(s)). Download the full per-key detail: CSV · Excel.

{{ drill_table(result.biggest_breaks, "_recon_key", result.loan_url_base, "key") }}

Explore all {{ "{:,}".format(result.total_rows) }} rows →

{% endif %} {% endif %} {% endblock %}