summaryrefslogtreecommitdiff
path: root/src/FundLab.Domain/Domain.fs
diff options
context:
space:
mode:
Diffstat (limited to 'src/FundLab.Domain/Domain.fs')
-rw-r--r--src/FundLab.Domain/Domain.fs60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/FundLab.Domain/Domain.fs b/src/FundLab.Domain/Domain.fs
new file mode 100644
index 0000000..9c42d5a
--- /dev/null
+++ b/src/FundLab.Domain/Domain.fs
@@ -0,0 +1,60 @@
+namespace FundLab.Domain
+
+open System
+
+type FundStatus =
+ | Empty
+ | Active
+ | ZeroUnits
+
+type UnitNavStatus =
+ | HasValue of decimal
+ | ZeroUnits
+
+type Fund =
+ {
+ Id: Guid
+ Name: string
+ Currency: string
+ InitialCash: decimal
+ InitialUnitNav: decimal
+ NetAssets: decimal
+ OutstandingUnits: decimal
+ Status: FundStatus
+ }
+
+module Fund =
+ let create (name: string) (initialCash: decimal) (initialUnitNav: decimal) : Fund =
+ {
+ Id = Guid.NewGuid()
+ Name = name
+ Currency = "CNY"
+ InitialCash = initialCash
+ InitialUnitNav = initialUnitNav
+ NetAssets = initialCash
+ OutstandingUnits = 0m
+ Status = FundStatus.Empty
+ }
+
+ let unitNavStatus (fund: Fund) : UnitNavStatus =
+ if fund.OutstandingUnits = 0m then
+ UnitNavStatus.ZeroUnits
+ else
+ UnitNavStatus.HasValue (fund.NetAssets / fund.OutstandingUnits)
+
+type OrderStatus =
+ | Submitted
+ | CashFrozen
+ | UnitsFrozen
+ | PendingNav
+ | Confirmed
+ | Settled
+ | Cancelled
+ | Failed
+
+module OrderStatus =
+ let isConfirmed status =
+ match status with
+ | OrderStatus.Confirmed
+ | OrderStatus.Settled -> true
+ | _ -> false