summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Debit available cash on manual stock and bond buys with ledger events (3d-34)Somhairle H. Marisol12 days8-67/+264
|
* Document clean Release publish command for fund-lab deployment (3d-33)Somhairle H. Marisol12 days1-3/+3
|
* Backfill cash ledger from historical transactions and add reconciliation QA ↵Somhairle H. Marisol12 days4-0/+184
| | | | (3d-32)
* leader fix continuation: FS3511 release publish regression (3d-31 continuation)Somhairle H. Marisol12 days3-151/+200
|
* Add cash ledger event-source breakdown and reconciliation API/UI (3d-31 B4c)Somhairle H. Marisol12 days9-2/+997
|
* Supervisor log: 3d-31 B4a/B4b leader acceptance approvedSomhairle H. Marisol13 days1-0/+7
|
* Add stock assets to rebalance with stock buy/sell legs (3d-31 B4b)Somhairle H. Marisol13 days3-84/+402
|
* Supervisor log: 3d-31 hang aborted, B4a FK fix in new sessionSomhairle H. Marisol13 days1-0/+8
|
* Fix stock sip plan instrument FK (3d-31 B4a)Somhairle H. Marisol13 days4-97/+544
|
* Supervisor log: 3d-31 dispatchedSomhairle H. Marisol13 days1-0/+6
|
* Supervisor log: 3d-30 leader acceptance approvedSomhairle H. Marisol13 days1-0/+30
|
* Add stock cashflow ledger with buy/sell events and idempotent dividend ↵Somhairle H. Marisol13 days4-0/+629
| | | | recording (3d-30 B3)
* Add stock probe market/adjust/suspension fields and StockRules (3d-30 B1-B2)Somhairle H. Marisol13 days12-17/+297
|
* Add bond sell/redemption ledger, bond cashflow events and maturity calendar ↵Somhairle H. Marisol13 days5-5/+1156
| | | | (3d-30 A)
* Supervisor log: 3d-29 leader acceptance approved after leader fix 8cbb327Somhairle H. Marisol13 days1-0/+29
|
* Leader fix: BoundaryTests RawBondQuote literals missing new bond-profile ↵Somhairle H. Marisol13 days1-1/+18
| | | | fields; 3d-29 (b05e728) does not build from a clean checkout without this
* Add bond full milestone: profile probe, coupon/accrual rules, ledger and ↵Somhairle H. Marisol13 days13-72/+1398
| | | | point-in-time valuation (3d-29)
* Supervisor log: 3d-29 bond milestone in flightSomhairle H. Marisol13 days1-0/+6
|
* Supervisor log: 3d-29 bond milestone dispatchedSomhairle H. Marisol13 days1-0/+6
|
* Supervisor log: leader acceptance of 3d-28 (approved)Somhairle H. Marisol13 days1-0/+8
|
* Add fund-lab production systemd --user units and gateway config (3d-28)Somhairle H. Marisol13 days5-0/+203
|
* Record 3d-27 public deployment blocker: cloudflared restart needs root, ↵Somhairle H. Marisol13 days1-0/+9
| | | | origin port conflict
* Supervisor log: dispatch 3d-27 public deployment slice (team)Somhairle H. Marisol13 days1-0/+827
|
* Add stock sell vertical slice with cash recovery and snapshot pricing (3d-26)Somhairle H. Marisol13 days8-2/+1033
|
* Add daily market refresh endpoint, snapshot-first valuation and UI refresh ↵Somhairle H. Marisol13 days6-18/+697
| | | | (3d-25)
* Add SIP plan pause/resume and rebalance plan archive lifecycle (3d-24)Somhairle H. Marisol13 days9-6/+894
|
* Integrate bond and stock positions into fund valuation (3d-23)Somhairle H. Marisol13 days8-1/+633
|
* Add bond buy to holdings minimal vertical slice (3d-22)Somhairle H. Marisol13 days9-1/+1172
|
* Add stock buy to holdings minimal vertical slice (3d-21)Somhairle H. Marisol13 days9-1/+1199
|
* Add multi-source bond quote probe fields and daily fallback (3d-20)Somhairle H. Marisol13 days9-37/+279
|
* Add real AKShare stock daily history probe slice (3d-19)Somhairle H. Marisol13 days19-11/+751
|
* Add stocks probe panel with live stock quote flow (3d-18)Somhairle H. Marisol13 days6-0/+280
|
* Add real AKShare stock quote probe slice (3d-17)Somhairle H. Marisol13 days12-8/+444
|
* Add bonds probe panel with live bond quote flow (3d-16)Somhairle H. Marisol13 days6-0/+284
|
* Fix bond quote probe to use live convertible-bond spot data (3d-15)Somhairle H. Marisol13 days2-9/+61
|
* Add real AKShare bond quote probe slice (3d-14)Somhairle H. Marisol13 days11-6/+410
|
* Add real NAV series multi-day returns (3d-13)Somhairle H. Marisol13 days12-12/+714
|
* Add real AKShare NAV-date probe slice (3d-12)Somhairle H. Marisol13 days13-16/+675
|
* Add rebalancing execution slice (3d-11)Somhairle H. Marisol13 days12-141/+1343
|
* Add scheduled investment plans (3d-10)Somhairle H. Marisol13 days13-2/+1798
|
* Add returns and charts slice (3d-9b)Somhairle H. Marisol13 days9-7/+981
|
* Add dividend history visibility (3d-9a)Somhairle H. Marisol13 days8-1/+348
| | | | Expose a deterministic source key on booked dividend records and surface a read-only dividend history panel with empty state, backed by API tests and browser QA assertions.
* Add dividend slice (3d-8)Somhairle H. Marisol13 days9-4/+1036
| | | | Book cash dividends to available cash exactly once and reinvest dividends through the shared subscription pipeline, with deterministic scheme idempotency and cross-position isolation.
* Add rebalance first slice (3d-7)Somhairle H. Marisol13 days6-1/+790
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | First vertical slice for portfolio rebalancing. Domain gains RebalancePolicy: target-allocation validation (non-empty, per-code shares positive two-decimal, sum exactly 100); diff computation over the union of target and held codes (held without target = full exit) producing BUY amount diffs and SELL unit diffs priced at the current valuation NAV, clamped to available units, with no orders when a weight already balances; and the deterministic idempotency key set (rebalance:{plan}:{date}:{code} plus confirm/redeem counterparts). Rebalance plans persist as rebalance_plans + rebalance_targets with rebalance_idempotencies under the shared replay/conflict contract. ExecuteRebalancePlan snapshots cash plus holdings valued at each position's latest valuation NAV, then walks the diffs SELL-first through the same Create/Confirm pipeline used by manual orders, redemptions and SIP (nothing bypasses confirmation; a held code without a valuation is skipped with an explicit marker; insufficient cash/units fail the period visibly instead of silently trimming). API exposes POST/GET /funds/{id}/rebalance/plans and POST .../plans/{id}/execute. The frontend adds an 08/REBALANCE panel with target editing (two codes, sum must equal 100), a plan list with a manual execute button and post-run outcome rows; executing refreshes orders/positions so the new orders are immediately visible. Domain tests cover split validation, diff orders, exit/clamp logic, key determinism; API tests cover create/execute end-to-end; Web tests cover decoding and stale-execution protection.
* Leader fix: annotate rebalance target rows for F# record ambiguity in ↵Somhairle H. Marisol13 days1-30/+99
| | | | parseRebalancePlanCommand (3d-7)
* Add rebalance execution through shared order pipeline (3d-7)Somhairle H. Marisol13 days5-3/+816
|
* Drive SIP plans through the shared order pipeline (3d-6)Somhairle H. Marisol13 days8-6/+859
| | | | | | | | | | | | | | | | | | | | | | | Advance executes due periods as real subscription orders: each due trade date claims a sip_executions row (PRIMARY KEY plan_id+trade_date makes same-plan same-day runs atomic), places the order through CreateSubscriptionOrder with a deterministic idempotency key (sip:{plan}:{date}) and the period's trade date, then confirms through the shared ConfirmSubscriptionOrder pipeline with key sip-confirm:{plan}:{date} — identical freeze/fee/units math as manual orders, nothing bypasses confirmation. Outcomes: succeeded, pending_nav (cash stays frozen; later drives retry the confirmation once the NAV lands), insufficient_cash (no order placed, period fails visibly, reruns keep the marker), failed. Plans roll their next_trade_date past the processed window and repeats of the same endDate replay recorded executions instead of re-debiting. Domain adds SipPolicy.advancePlan (due-date enumeration; weekends-only trading-calendar approximation, noted in code). POST /funds/{id}/sip/advance {endDate?, limit?} drives execution on demand (no daemon). Plan responses/rows now carry last execution status/date; front-end shows 已执行/待净值/现金不足 per plan. Optional tradeDateOverride/anchorOverride keep manual flows untouched.
* Add SIP plan first slice (3d-5)Somhairle H. Marisol13 days9-0/+1071
| | | | | | | | | | | | | | | | | | | | | Introduce scheduled-investment plans as a schedule-only slice with no cash, position or NAV side effects. Domain gains SipPolicy: amount validation (positive, two-decimal, overflow-checked), frequency parsing/round-trip (weekly/biweekly/monthly), nextTradeDate generating the next due trade date off the plan anchor with month-end clamping and weekend roll-forward, plus the isDue/executionNetAmount contract the future executor will implement (execution itself stays unimplemented and is marked as such; nothing debits cash in this slice). Persistence stores plans in sip_plans with anchor/next trade dates and sip_plan_idempotencies under the shared replay/conflict contract; the API exposes POST/GET /funds/{id}/sip/plans behind the bearer token. The frontend adds a 07/SIP panel (code, amount, frequency select, plan list with next debit date) and Web tests cover decoding, validation, in-flight guards and stale completions. Choice note: first debit is scheduled strictly after the anchor date (creating a plan today never debits today).
* Add additional capital deposit flow (3d-4)Somhairle H. Marisol13 days10-1/+781
| | | | | | | | | | | | | | | | | | Deposits credit a fund's available cash directly: Domain gains CapitalPolicy (positive, two-decimal, overflow-checked amounts plus a settle function that never touches units, NAV or realized P&L). Persistence records deposits in fund_capital_deposits with a fund_capital_idempotencies table, crediting cash and the deposit row atomically under the same replay/conflict semantics as orders. The API exposes POST /funds/{id}/capital/deposit and GET /funds/{id}/capital/deposits behind the bearer token and idempotency keys. The frontend adds an '追加资金' entry on the fund cash card with in-place balance refresh, and repeats of the same amount reuse the idempotency key so double submits credit cash exactly once. Browser QA extends the J-series (J12-J18): invalid-amount rejection without POST, single credited deposit with a 32-hex key, instant balance refresh, unchanged units/cost proving no realized-income impact, and same-key replay crediting only once.
* Add redemption order minimal closed loop (3d-3)Somhairle H. Marisol13 days10-8/+1970
| | | | | | | | | | | | | | | | | | | | | Redeem confirmed holdings end to end with exact decimal semantics: submission freezes position units (reserved_units) after an available-units check without touching cash, confirmation settles at the trade-date NAV with evidence and deferral rules identical to subscriptions, credits the fund with proceeds net of the stated fee, and writes off position cost pro rata (full redemption removes the position row). Cash conservation holds at every step: frozen shares and receivable cash never appear as available cash before settlement. Domain gains RedemptionPolicy (request validation plus proceeds/fee/ cost-release computation) with unit tests. Persistence adds redemption_orders, idempotency tables, reserved_units on positions and Create/Confirm repository members; the API exposes POST/GET /funds/{id}/redemptions and POST .../confirm. The frontend adds a 06/REDEEM panel (submit, confirm, pending reasons, confirmed proceeds/cost display), frozen-share display on the holdings panel, and refresh wiring. Browser QA gains a K-series covering freeze, settlement, cash accounting, replay and over-redemption rejection.