Skip to content

feat(frontend): financial quantification on the redesign layout #904

Closed

Description

@alex-dembele

Problem

The financial page turns the register into money. The design puts the loss-exceedance curve at the centre with the risk appetite as a live threshold.

Design: https://claude.ai/artifact/HLqrbeYqvv4a6RVnBz9Vei (screen "financial"). Parent: #899. The rules in the epic apply.

Acceptance criteria

  1. Four KPI tiles: inherent ALE, targeted residual ALE, plan cost, 3-year ROSI.
  2. Loss-exceedance curve, inherent and after plan, with a risk-appetite slider and the two exceedance probabilities in the legend; axes are labelled.
  3. The appetite value is saved per tenant.
  4. "Exposition par risque" table with inherent, residual and reduction bar.
  5. "Rentabilité des mitigations" sorted by payback, each row linking to its mitigation.
  6. Amounts in the tenant currency.

Definition of done

  • The screen matches the design at 1440×900 in dark and light, checked side by side in a real browser; the comparison and any deliberate difference are written on this issue.
  • Loading skeleton, error with retry, and empty state exist for every block.
  • FR and EN strings, no hard-coded copy.
  • npx tsc -b --noEmit, npx vitest run on the touched features, and npx eslint on the touched files pass.
  • Backend changes, if any, come with TestXxx_Success, TestXxx_NotFound, TestXxx_Unauthorized, filter by tenant_id, and go test ./... passes.
  • PR opened with Closes #<this issue>; parent epic epic(frontend): rebuild every console screen on the October 2026 redesign #899.

Activity

  1. added
    type:featureNew user-facing capability
    status:readyMeets the ready definition
    tier:4-uxUX: polish on top of a working engine
    and removed
    status:readyMeets the ready definition
    on Oct 8, 2026
  2. alex-dembele commented on Oct 9, 2026

    @alex-dembele
    MemberAuthor

    financial page redesign — 2026-10-09

    Done — PR #932 on feat/904-financial, stacked on #928. Backend: pkg/crq/montecarlo.go (PortfolioQuantiles, ScaleLoss), application/risk/financial_summary.go (curve, treatments, 3-year ROSI, appetite), application/risk/set_risk_appetite.go, PUT /analytics/financial/appetite in handler/risk_financial_handler.go, org settings read/write in repository/onboarding_profile_writes.go, OpenAPI + TS types. Frontend: features/financial/ (FinancialDashboard, LossExceedanceCard, MethodologyModal, SimulatorCard, lec.ts, methodology.ts), fr/en financial.*.
    Verified — go test ./... all ok · npx tsc -b --noEmit clean · eslint + prettier clean on features/financial · npx vitest run 1030/1030 · live on Postgres at 1440×900 dark and light, side by side with the design: appetite saved (one PUT), persisted across reload, simulator answers, no console errors.
    Criteria — 1 ✅ · 2 ✅ (axes labelled; curve is an S under FAIR-lite 1.0, see D-068) · 3 ✅ · 4 ✅ · 5 ✅ (per risk plan, rows open the risk's mitigations; per-mitigation money is #929) · 6 ✅
    Next — merge #925 → #926 → #927 → #928 → #932 in order. Owner: D-068. Then #905 activity.
    Blocked on — nothing. Follow-ups: #929 (money on mitigations), #930 (totals include closed risks), #931 / D-068 (frequency sampling).

  3. added a commit that references this issue on Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions