You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(frontend): financial quantification on the redesign layout #904
Four KPI tiles: inherent ALE, targeted residual ALE, plan cost, 3-year ROSI.
Loss-exceedance curve, inherent and after plan, with a risk-appetite slider and the two exceedance probabilities in the legend; axes are labelled.
The appetite value is saved per tenant.
"Exposition par risque" table with inherent, residual and reduction bar.
"Rentabilité des mitigations" sorted by payback, each row linking to its mitigation.
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.
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).
Activity
docs(decisions): raise D-068, frequency sampling in the loss model (#904
alex-dembele commentedon Oct 9, 2026
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/appetiteinhandler/risk_financial_handler.go, org settings read/write inrepository/onboarding_profile_writes.go, OpenAPI + TS types. Frontend:features/financial/(FinancialDashboard,LossExceedanceCard,MethodologyModal,SimulatorCard,lec.ts,methodology.ts), fr/enfinancial.*.Verified —
go test ./...all ok ·npx tsc -b --noEmitclean · eslint + prettier clean onfeatures/financial·npx vitest run1030/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).
Merge pull request #932 from opendefender/feat/904-financial