{% extends "base.html" %} {% from "_recon_table.html" import render_table, drill_table, drill_table2 %} {% block title %}Reconciliation — RWA Calculator{% endblock %} {% block content %}
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 %}Each row links into the per-key explorer, pre-filtered to that segment.
{% if result.allocation_table.rows %}The same money again, one section per methodology — STD (standardised), FIRB, AIRB (advanced IRB, retail included), and slotting / equity where present — because each asset class is reported per method (SA on COREP C 07.00, IRB on C 08.0x). All sections share one bar scale, so a small method reads as genuinely small.
{% for section in result.allocation_method_sections %}Money totalled by risk class, post-guarantee: a guaranteed exposure's guaranteed slice is counted under the guarantor's class and its retained slice under the borrower's, matching a post-substitution legacy extract. Offsetting deltas show where the two engines allocate an exposure to different classes.
{{ render_table(result.allocation_table) }} {% if result.allocation_method_table.rows %}The same post-guarantee money, split by the methodology each side applied. Summing a class's methods reproduces its combined row above, so a class that ties out in total but is allocated to different approaches by the two engines shows here as offsetting deltas instead of a clean match. The guaranteed slice of an SA-guaranteed exposure is counted under the guarantor's class and its standardised method.
{{ render_table(result.allocation_method_table) }} {% endif %} {% endif %}Where breaks concentrate. Each exposure is a single key, so its break is attributed to its borrower (origination) class — a guaranteed exposure is not split here (that post-guarantee split is in the allocation above).
{{ drill_table(result.class_table, "our_exposure_class", result.explorer_url, "exposure_class", result.hide_qs) }}Our-side view — how our breaks distribute across methodology (STD / FIRB / AIRB /
slotting / equity) within each exposure class. Click a method to drill the explorer to that
class × method.
{% if result.allocation_method_sections %}(Break attribution is at the borrower grain, so this
stays our-side only — the two-sided, post-guarantee money split is the by-method allocation
above.){% else %}(Map [components.approach] to give the legacy side a method too and
split the asset-class allocation above by methodology.){% endif %}
Click a key to open its single-loan forensic and sign it off (accept / reject with a reason), or open the full per-key explorer ({{ "{:,}".format(result.total_rows) }} row(s)). Reviewed breaks drop off this worklist. Download the full per-key detail: CSV · Excel.
{% if result.signoff_progress and result.signoff_progress.total %}Sign-off progress: {{ "{:,}".format(result.signoff_progress.reviewed) }} of {{ "{:,}".format(result.signoff_progress.total) }} break(s) reviewed — {{ "{:,}".format(result.signoff_progress.open) }} still open ({{ "{:,}".format(result.signoff_progress.accepted) }} accepted, {{ "{:,}".format(result.signoff_progress.rejected) }} rejected{% if result.signoff_progress.changed %}, {{ "{:,}".format(result.signoff_progress.changed) }} changed since sign-off & back on the worklist{% endif %}).
{% endif %} {% if result.signoff_decision_count %} {% endif %} {% if result.biggest_breaks.rows %} {{ drill_table(result.biggest_breaks, "_recon_key", result.loan_url_base, "key") }} {% elif result.break_count %}