Date: 2026-04-02 Status: Approved with Notes Approach: Hybrid (Balance-Anchored with Transaction Detail) Brainstorm: Gemini (technical + product perspectives, 4 phases, 7 Gemini calls)
Date: 2026-04-02 Status: Design Complete — v3 (composable variables, math-free rules) Customer Catalyst: Dan @ MortgageAutomator — 60-day Liquidity Coverage Ratio Brainstorm Session: product + technical perspectives with Gemini
Date: 2026-03-29 Status: Approved (with notes incorporated) Branch: TBD
Sweep accounts (Craft, Mercury, Wealthfront, etc.) automatically move funds above FDIC limits ($250K) to partner banks. Plaid reports:
current_balance= amount physically at primary bank (e.g., $250K)
Two related issues in the cash flow forecast:
-
Investment accounts corrupt cash flow: T-bill/bond accounts have incomplete Plaid transaction data (only deposits/withdrawals, no buy/sell). This causes false $74M inflow/outflow and massive adjustments.
-
Internal transfers inflate inflow/outflow: All internal transfers (
internal_transfer: true) are currently hidden from cash flow. But when investment accounts are excluded, transfers between operating and investment accounts cause unexplained balance changes. More broadly, customers don't want internal transfers inflating their inflow/outflow totals — these are fund movements, not real business cash flows.
- PR #1410 — Reconstructed Balance for Cash Flow (CI fixing)
- BalanceAnchor model, bi-directional reconstruction, CashForecastService integration
- 10 commits, 434 specs pass
- PR #1411 — Investment Transaction Sign Fix
- buy/sell amount signs corrected in
InvestmentsTransactionsSyncService - Rake task:
bundle exec rake data:fix_investment_transaction_signs(153 txns to fix in prod)
- buy/sell amount signs corrected in
This system enhances internal transfer detection by moving from a single, binary check to a multi-signal confidence model. It gathers evidence from various sources (accounting integrations like Campfire/QBO/Xero, mirror transaction matching, keywords, account masks, entity names, provider labels), assigns a confidence score to each, and calculates a final weighted score. This solves three key problems: (1) wasted high-confidence signals from integrations (Campfire journal_type=Transfer currently discarded), (2) race conditions where one side of a transfer enriches before the other arrives, and (3) ambiguity in round-number repeated transfers. Built ON TOP of existing infrastructure, not replacing it.