Severity: Medium — found during a deep project review (2026-07-06).
Defect
subsidySummary.totalReductions in the budget overview response is computed without applying subsidy maximumAmount caps, while the sibling payback fields in the same response object are capped — the response is internally inconsistent.
Evidence
server/src/services/budgetOverviewService.ts:280 accumulates percentage reductions with no maximumAmount handling; returned verbatim at :484.
minTotalPayback / maxTotalPayback in the same object (:486-487) come from applySubsidyCaps (:461).
Failure scenario
A 10% subsidy with maximumAmount = 1000 on a €50,000 cost basis → response contains totalReductions: 5000 next to maxTotalPayback: 1000.
Suggested fix
Apply the same applySubsidyCaps logic when accumulating totalReductions.
Severity: Medium — found during a deep project review (2026-07-06).
Defect
subsidySummary.totalReductionsin the budget overview response is computed without applying subsidymaximumAmountcaps, while the sibling payback fields in the same response object are capped — the response is internally inconsistent.Evidence
server/src/services/budgetOverviewService.ts:280accumulates percentage reductions with nomaximumAmounthandling; returned verbatim at:484.minTotalPayback/maxTotalPaybackin the same object (:486-487) come fromapplySubsidyCaps(:461).Failure scenario
A 10% subsidy with
maximumAmount = 1000on a €50,000 cost basis → response containstotalReductions: 5000next tomaxTotalPayback: 1000.Suggested fix
Apply the same
applySubsidyCapslogic when accumulatingtotalReductions.