mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 05:09:38 +02:00
Start and end balance anchors for historical account balances (#2455)
* Add kind field to valuation * Fix schema conflict * Add kind to valuation * Scaffold opening balance manager * Opening balance manager implementation * Update account import to use opening balance manager + tests * Update account to use opening balance manager * Fix test assertions, usage of current balance manager * Lint fixes * Add Opening Balance manager, add tests to forward calculator * Add credit card to "all cash" designation * Simplify valuation model * Add current balance manager with tests * Add current balance logic to reverse calculator and plaid sync * Tweaks to initial calc logic * Ledger testing helper, tweak assertions for reverse calculator * Update test assertions * Extract balance transformer, simplify calculators * Algo simplifications * Final tweaks to calculators * Cleanup * Fix error, propagate sync errors up to parent * Update migration script, valuation naming
This commit is contained in:
parent
9110ab27d2
commit
c1d98fe73b
35 changed files with 1903 additions and 355 deletions
|
@ -15,17 +15,50 @@ module EntriesTestHelper
|
|||
Entry.create! entry_defaults.merge(entry_attributes)
|
||||
end
|
||||
|
||||
def create_opening_anchor_valuation(account:, balance:, date:)
|
||||
create_valuation(
|
||||
account: account,
|
||||
kind: "opening_anchor",
|
||||
amount: balance,
|
||||
date: date
|
||||
)
|
||||
end
|
||||
|
||||
def create_reconciliation_valuation(account:, balance:, date:)
|
||||
create_valuation(
|
||||
account: account,
|
||||
kind: "reconciliation",
|
||||
amount: balance,
|
||||
date: date
|
||||
)
|
||||
end
|
||||
|
||||
def create_current_anchor_valuation(account:, balance:, date: Date.current)
|
||||
create_valuation(
|
||||
account: account,
|
||||
kind: "current_anchor",
|
||||
amount: balance,
|
||||
date: date
|
||||
)
|
||||
end
|
||||
|
||||
def create_valuation(attributes = {})
|
||||
entry_attributes = attributes.except(:kind)
|
||||
valuation_attributes = attributes.slice(:kind)
|
||||
|
||||
account = attributes[:account] || accounts(:depository)
|
||||
amount = attributes[:amount] || 5000
|
||||
|
||||
entry_defaults = {
|
||||
account: accounts(:depository),
|
||||
account: account,
|
||||
name: "Valuation",
|
||||
date: 1.day.ago.to_date,
|
||||
currency: "USD",
|
||||
amount: 5000,
|
||||
entryable: Valuation.new
|
||||
amount: amount,
|
||||
entryable: Valuation.new({ kind: "reconciliation" }.merge(valuation_attributes))
|
||||
}
|
||||
|
||||
Entry.create! entry_defaults.merge(attributes)
|
||||
Entry.create! entry_defaults.merge(entry_attributes)
|
||||
end
|
||||
|
||||
def create_trade(security, account:, qty:, date:, price: nil, currency: "USD")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue