Skip to content

New module: Analytics.fs (loan comparison, sensitivity analysis, currency support)#69

Draft
Copilot wants to merge 4 commits into
mainfrom
copilot/add-analytics-module
Draft

New module: Analytics.fs (loan comparison, sensitivity analysis, currency support)#69
Copilot wants to merge 4 commits into
mainfrom
copilot/add-analytics-module

Conversation

Copy link
Copy Markdown

Copilot AI commented Apr 28, 2026

Adds a new Analytics module providing higher-level decision-support functions built on top of the existing scheduling/calculation infrastructure, plus ISO 4217 currency support as a cross-cutting concern.

Currency support (Calculation.fs)

New Currency struct type and Currency module with correct ISO 4217 minor-unit rounding:

// 2 d.p.: GBP, USD, EUR  |  0 d.p.: JPY  |  3 d.p.: KWD, BHD, JOD, OMR, TND
Currency.fromMajorUnit Currency.KWD 1.234m  // → 1234L<Cent>
Currency.toMajorUnit   Currency.JPY 1234L<Cent>  // → 1234m  (no division)

Loan comparison (Analytics.LoanComparison)

LoanComparison.compare accepts (string * BasicParameters) array and returns a ComparisonResult with offers ranked four ways:

let result = LoanComparison.compare [|
    "Lender A", paramsAt 10m
    "Lender B", paramsAt 15m
|]
result.RankedByTotalCostOfCredit[0].Name  // "Lender A"
result.RankedByApr[0].Metrics.Apr         // Percent 10.xxxx

Ranked lists: RankedByTotalCostOfCredit, RankedByLevelPayment, RankedByApr, RankedByTotalAmountPayable. Ties broken by APR.

TotalCostOfCredit is defined as ScheduledPaymentTotal − Principal (fees + interest).

Sensitivity analysis (Analytics.SensitivityAnalysis)

SensitivityAnalysis.analyse takes a base BasicParameters and a Percent array of rate adjustments, returning a SensitivityScenario array — one row per adjustment — suitable for rendering as a table or chart:

SensitivityAnalysis.analyse baseParams [| Percent 0m; Percent 1m; Percent 2m; Percent 3m |]
// RateAdjustment | EffectiveRate      | TotalCostOfCredit | LevelPayment | Apr
// Percent 0m     | Annual (Percent 10m) | ...              | ...          | ...
// Percent 1m     | Annual (Percent 11m) | ...              | ...          | ...

Works with Annual and Daily rates; a Zero base rate with a non-zero adjustment produces an Annual rate.

Copilot AI and others added 3 commits April 28, 2026 23:21
Agent-Logs-Url: https://github.com/simontreanor/FSharp.Finance.Personal/sessions/d2cbcaf8-9b1d-4106-afaa-00c98a3e0671

Co-authored-by: simontreanor <4550815+simontreanor@users.noreply.github.com>
Copilot AI changed the title [WIP] Add new module: Analytics.fs for loan comparison and sensitivity analysis New module: Analytics.fs (loan comparison, sensitivity analysis, currency support) Apr 28, 2026
Copilot AI requested a review from simontreanor April 28, 2026 23:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

New module: Analytics.fs (loan comparison, sensitivity analysis, currency support)

2 participants