namespace FundLab.Domain open System module CapitalPolicy = let cashMaximum = 999999999999999999.99m let validateDeposit (amount: decimal) : Result = if amount <= 0m then Error "deposit amount must be positive" elif Decimal.Round(amount, 2) <> amount then Error "deposit amount exceeds cash precision" elif amount > cashMaximum then Error "deposit amount exceeds database precision" else Ok () let settle (availableCash: decimal) (amount: decimal) : Result = match validateDeposit amount with | Error message -> Error message | Ok() -> let updated = availableCash + amount if updated > cashMaximum then Error "available cash exceeds database precision" else Ok updated