Today's risk
+{{ operator_summary.todays_risk.unresolved_exceptions }} unresolved controls across {{ operator_summary.todays_risk.active_ssis }} active SSIs.
+{{ score.score }}
Lifecycle governance, not field validation: owner, SLA, approval, audit, and export readiness are all visible.
@@ -49,6 +59,76 @@Operator command center
+Public-bank SSI evidence shaped these five panels: risk, T+1 blockers, approvals, exception aging, and export readiness.
+Today's risk
+{{ operator_summary.todays_risk.unresolved_exceptions }} unresolved controls across {{ operator_summary.todays_risk.active_ssis }} active SSIs.
+T+1 blockers
+{{ operator_summary.t1_blockers.total }}
+Grouped by market code only; no account fields or SSI IDs exposed.
+Pending approvals
+{{ operator_summary.pending_approvals.total }}
+ {% if operator_summary.pending_approvals.total > 0 %} +Oldest: {{ operator_summary.pending_approvals.oldest_age_days }} day(s). Four-eyes queue stays human approved.
+ {% else %} +No pending approvals. Four-eyes queue stays human approved.
+ {% endif %} +Aging exceptions
+{{ operator_summary.aging_exceptions.buckets.breached }}
+SLA breached from {{ operator_summary.aging_exceptions.total_unresolved }} unresolved items.
+Export readiness
+{{ operator_summary.export_readiness.export_ready }}
+Approved and not blocked by critical exceptions.
+{{ operator_summary.changed_since_yesterday.window_label }}
+Last 24h movement only, aggregated by control object type.
+Guided demo mode
+{{ scenario.summary }}
+Today's risk
+{{ operator_summary.todays_risk.score }}
+T+1 blockers
+{{ operator_summary.t1_blockers.total }}
+Pending approvals
+{{ operator_summary.pending_approvals.total }}
+Aging exceptions
+{{ operator_summary.aging_exceptions.total_unresolved }}
+Export readiness
+{{ operator_summary.export_readiness.export_ready }}
+Step {{ step_number }} of {{ total_steps }}
+{{ current_step.narrative }}
+Synthetic fixture preview
+Lowercase values such as bic_or_swift are category placeholders, not operational data. Account-bearing placeholders stay masked with ****.
{{ group }}
+Step {{ loop.index }}
+{{ step.narrative }}
+ + {% endfor %} +Scenario inspiration comes from {{ scenario.inspired_by|length }} public bank URLs, but only field categories are stored. No demo route writes to the database. View public evidence.
+Exception detail
+{{ exception.description }}
+Root cause
+Failed rule {{ exception.rule_id }}{% if exception.failed_field %} on field {{ exception.failed_field }}{% endif %}. The case remains visible until remediation evidence closes or waives it.
+Impacted
+ {% if ssi %} +Linked SSI record was not found.
+ {% endif %} +Approval path
+Critical unresolved exceptions block export readiness. {% if approval %}Latest approval is {{ approval.status }} at risk level {{ approval.risk_level }}.{% else %}No linked approval request is currently queued.{% endif %}
+Recommended action
+{{ recommended_action }}
+Evidence required
+{{ evidence_required }}
+Field evidence
+Public bank SSI pages informed the field-category model, but this app stores only URLs, titles, and category labels.
+Recent audit trail
+Controls queue
-Rule breaches grouped for ownership, remediation, and SLA visibility.
+Rule breaches grouped for ownership, remediation, SLA visibility, and drill-down evidence.{% if rule_id %} Clear rule filter.{% endif %}
{{ e.description }}
-Public source evidence
++ Each row points to a public, official-domain page. We store only bank, url, title, and field categories; no source text, hashes, or operational tokens are retained. +
+| Bank | +Title | +Field categories | +Source | +
|---|---|---|---|
| {{ s.bank }} | +{{ s.title }} | +
+
+ {% for c in s.field_categories %}
+ {{ c }}
+ {% endfor %}
+
+ |
+ + Open + | +
+ These sources informed the field categories validated by the Control Tower. The synthetic demo scenarios in /demo are inspired by these categories but contain only obviously fictional, masked values.
+