diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-20 22:59:00 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-20 22:59:00 +0800 |
| commit | c60905e9e7f992a7f8c79c3812e92a44b2d606f5 (patch) | |
| tree | a895bc6f0ebe669407ffe4d1a11439e03a6fe0d4 /src/FundLab.Domain/Domain.fs | |
| download | fund-lab-c60905e9e7f992a7f8c79c3812e92a44b2d606f5.tar.gz | |
feat(core): 建立 fund-lab 可运行基线
[变更性质]
- 本提交冻结当前可构建、可测试的应用基线,不包含 PostgreSQL 持久化。
[新增功能]
- 建立 F# Domain、API、Worker、Web 及测试项目。
- 增加 Bearer 认证、健康检查、账本领域模型和中文空状态页面。
[实现方案]
- 使用环境变量模板注入认证配置,并排除数据、凭证和构建产物。
- 保留 19 个 Domain 测试和 5 个 API 测试作为后续变更基准。
[影响范围]
- 为后续 3a PostgreSQL FOF 创建/读取切片提供可回滚基线。
- 当前仍不接入真实基金数据、真实交易或数据库。
Diffstat (limited to 'src/FundLab.Domain/Domain.fs')
| -rw-r--r-- | src/FundLab.Domain/Domain.fs | 60 |
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 |
