accounting/notes.md

526 lines
12 KiB
Markdown

## Transactions
```
; Simplest Transaction
2000-01-01 *
Account1 200 USD
Account2 -200 USD
; With Payee
2023-01-01 * Payee
Account1 200 USD
Account2 -200 USD
; With Payee and Narration
2023-01-01 * Payee | Narration
Account1 200 USD
Account2 -200 USD
; With Narration only
2023-01-01 * | Narration
Account1 200 USD
Account2 -200 USD
; Incomplete Transaction
2000-01-01 !
Account1 200 USD
Account2 -200 USD
; Partial incomplete transaction
2000-01-01 *
Account1 200 USD
! Account2 -200 USD
```
# Conversion/inventories
```
; TODO: how to define currency conversion does not have cost basis
; Currency conversion per unit
2000-01-01 *
Account1 10 USD @ 1.2 EUR
Account2 -12 EUR
; Currency conversion total cost
2000-01-01 *
Account1 10 USD @@ 12 EUR
Account2 -12 EUR
; Inventory with cost basis per unit
2000-01-01 *
Account1 10 AAPL @ 100 USD
Account2 -1000 USD
; Inventory with total cost basis
2000-01-01 *
Account1 10 AAPL @@ 1000 USD
Account2 -1000 USD
; Inventory with explicit unit cost basis + other properties
2000-01-01 *
Account1 10 AAPL {100 USD, 2000-01-02, "lot 1"} @ 100 USD
Account2 -1000 USD
; Inventory with explicit total cost basis?
2000-01-01 *
; TODO better syntax?
Account1 10 AAPL {{1000 USD, 2000-01-02, "lot 1"}} @@ 1000 USD
Account2 -1000 USD
; Inventory specifying cost basis and current price
2000-01-01 *
; Current market value conversion == $1100
Account1 10 AAPL {100 USD} @ 110 USD
Account2 -1000 USD
; Sell with price known
2000-01-01 *
; Assuming lot existed of 10 AAPL @ 100 USD
; Current price needs to match up with non-Income accounts
; (-10 * $200 + $2000) == 0
Account1 -10 AAPL @ 200 USD
Account2 2000 USD
Income:Gains -1000 USD
; Sell with gains known
2000-01-01 *
; Assuming lot existed of 10 AAPL @ 100 USD
; Compute current price of -10 * x + 2000 USD == 0 -> x = 200 USD?
Account1 -10 AAPL
Account2 2000 USD
Income:Gains -1000 USD
; Sell with specific lot price
2000-01-01 *
Account1 -10 AAPL {100 USD}
...
; Sell with auto lot strategy
2000-01-01 *
Account1 -10 AAPL {}
...
; Transaction metadata
2000-01-01 *
key1: "value"
key2: 100
key3: 2000-01-01
key4: Account1:abc
key5: 100 USD
...
; Posting metadata
2000-01-01 *
Account1 200 USD
key1: "value"
...
; Postings with different dates
2000-01-01 *
Account1 200 USD
Account2 -200 USD [2000-01-02]
; ability to specify time? (ISO 8601-ish)
; potentially support time as metadata?
; arithmetic in amounts: `( ) * / - +`
; should currency/commodity be required?
; payee per line?
; what if inventory doesn't match up perfectly with rounding?
; e.g. 4 @ $1.001 = $4.004 and other account has $4.00
; ability to specify using average cost basis
; for account? for commodity per account?
; when selling check
; fixed lot prices? {=100 USD}
; note - storing unit value is always more accurate, no need to store total cost?
; auto import transactions
; be able to approve transactions
; calculate net worth relative to inflation
; some way to change value of a dollar?
; explicit handling of stock splits to prevent historical price discontinuity?
; ISO 8601 dates
YY ~ Century
YYY ~
YYYY ~ Year
YYYY-MM ~ Month
YYYY-MM-DD ~ Day
YYYY-Www ~ Week
YYYY-Www-D ~ Day of week
YYYY-DDD ~ Ordinal day?
; how to represent intervals for projections?
xxxx ~ Every year
xxxx-MM-DD ~ Every year on MM-DD
xxxx-xx-xx ~ Every day
YYYY-xx-xx ~ Every day in YYYY
xxxx-Wxx ~ Every week
xxxx-Wxx-1 ~ Every monday
xxxx-xx ~ Every month
??? ~ Every quarter
??? ~ Every half
R/P1Y ~ Every year?
R/YYYY/P1Y ~ Every year starting with YYYY
R/YYYY-MM-DD/P1Y ~ Every year on MM-DD starting with YYYY
; TODO: continue this
R/YYYY-MM-DD/P1Y
R/YYYY-MM-DD/P1D
R/YYYY-MM-DD/P1D/YYYY-MM-DD
$.04
; Ability to specify the weekday prior?
; Buying a house that cost $500,000 with 20% down payment and 5% interest rate for 30 year
2000-01-01 * Bank | Take out loan
Assets -$100,000
Equity:House 1 house @@ $500,000
Liabilities:Mortgage -$400,000
; Amortization schedule:
; = P * ((1+r)^n)/((1+r)^n - 1)
; P = principal loan amounts
; r = monthly interest rate
; n = number of payments over loan lifetime
; P = $400,000
; r = 5%/12 = 0.0041666...
; n = 12*30 = 360
;
; Monthly payment = $2147.29
2000-01-01 * Bank | Mortgage
Assets -$2147.29
Expenses:Interest:Mortgage (Liabilities:Mortgage * 0.05/12)
Liabilities:Mortgage $2147.29 - (Liabilities:Mortgage * 0.05/12)
2000-01-01 * Bank | Mortgage
Assets -$2147.29
Expenses:Interest:Mortgage $1666.67
Liabilities:Mortgage $480.62
; Automated monthly forecast for mortgage payment
~ R360/2000-01-01/P1M * Bank
Assets -$2147.29
Expenses:Interest:Mortgage (Liabilities:Mortgage * 0.05/12)
Liabilities:Mortgage
; Automated interest from Fidelity - 5% per year
~ R/2000-01-01/P1M * Bank
Assets:Bank (Assets:Bank-$ * (1.05^(1/12)-1))
Income:Interest
; Automated prices???
; TODO
~ 2000-01-01/P1Y price AAPL *= 1.05
```
```
forecast Bank | Mortgage
- start: 2000-01-01
- repeat: 1 Month
- stop: 2001-01-01
Assets -$2147.29
Expenses:Interest:Mortgage (Liabilities:Mortgage * 0.05/12)
Liabilities:Mortgage $2147.29 - (Liabilities:Mortgage * 0.05/12)
```
* Assets
* Cash
* BofA
* Checking
* Savings
* Coinbase
* ESPP
* ETrade
* Brokerage
* RothIRA
* Fidelity
* 401k
* Match
* Roth
* Trad
* Brokerage
* Cash Management
* House
* Liabilities
* Credit
* BofA
* Chase
* Mortgage
* Expenses
* Taxes
* Federal
* Return
* Medicare
* SocialSecurity
* State
* California
* SDI
* Georgia
* Return
* Income
* Equity
* Opening Balance
* (CurrencyConversion)
* (Trading)
* (Transfer)
```
2000-01-01 *
Account1 10 AAPL @ 100 USD
Account2 -1000 USD
2001-01-01 price AAPL 150 USD
2002-01-01 *
Account1 -10 AAPL @ 200 USD
Account2 2000 USD
Income:Gains -1000 USD
```
* First:
* Account1 ~ 10 AAPL
* Account2 ~ -1000 USD
* Second:
* Account1 ~ 0
* Account2 ~ 1000 USD
* Income:Gains ~ -1000 USD
alternate:
* First:
* Account1 ~ 10 AAPL @ 100 USD
* Account2 ~ -1000 USD
* Second:
* Account1 ~ 0
* Account2 ~ 1000 USD
* Income:Gains ~ -1000 USD
with market value:
* First:
* Account1 ~ 1000 USD
* Account2 ~ -1000 USD
* (price):
* Account1 ~ 1500 USD
* Account2 ~ -1000 USD
* Equity:Unrealized Capital ~ -500 USD
* Second:
* Account1 ~ 0
* Account2 ~ 1000 USD
* Income:Gains ~ -1000 USD
* Equity:Unrealized Capital ~ 0
```
2000-01-01 *
Account1 10 AAPL @ 100 USD
Account2 -1000 USD
Equity:Trading -10 AAPL
Equity:Trading 1000 USD
2001-01-01 price AAPL 150 USD
2002-01-01 *
Account1 -10 AAPL @ 200 USD
Account2 2000 USD
Income:Gains -1000 USD
Equity:Trading 10 AAPL
Equity:Trading -1000 USD
```
market equivalent:
```
2000-01-01 *
Account1 1000 USD
Account2 -1000 USD
Equity:Trading 0
2001-01-01 *
Account1 500 USD
Equity:Trading -500 USD
2001-01-01 *
Account1 -2000 USD
Account2 2000 USD
Income:Gains -1000 USD
Equity:Trading 1000 USD
```
* First:
* Account1 ~ 10 AAPL
* Account2 ~ -1000 USD
* Equity:Trading ~ 1000 USD - 10 AAPL
* Second:
* Account1 ~ 0
* Account2 ~ 1000 USD
* Income:Gains ~ -1000 USD
* Equity:Trading ~ -1000
```
2000-01-01 *
Account1: 12 EUR @@ 10 USD
Account2: -10 USD
Equity:CurrencyConversion -12 EUR
Equity:CurrencyConversion 10 USD
2002-01-01 *
Account1: -10 EUR @@ 10 USD
Account2: 10 USD
Equity:CurrencyConversion -10 USD
Equity:CurrencyConversion 10 EUR
```
* First
* Account1 ~ 12 EUR
* Account2 ~ -10 USD
* Equity:CurrencyConversion ~ 10 USD - 12 EUR
* Second
* Account1 ~ 2 EUR
* Account2 ~ 0
* Equity:CurrencyConversion ~ -2 EUR
```
commodity USD
currency: "US Dollar"
code: "USD"
number: 840
decimals: 2
conversion-account: Equity:CurrencyConversion
aliases: ["$", "US$"]
```
```
; Inventory specifying cost basis and current price
2000-01-01 *
; Current market value conversion == $1100
Assets1 10 AAPL {100 USD} @ 110 USD
Assets2 -1000 USD
2000-02-01 *
Assets1 -10 AAPL {100 USD} @ 120 USD
Assets2 1200 USD
Income:CapitalGains -200
```
Equivalent:
```
2000-01-01 *
Assets1 10 AAPL {100 USD} @ 110 USD
Assets2 -1000 USD
Equity:Trading -10 AAPL
Equity:Trading 1000 USD
2000-02-01 *
Assets1 -10 AAPL {100 USD} @ 120 USD
Assets2 1200 USD
Income:CapitalGains -200 USD
Equity:Trading 10 AAPL
Equity:Trading -1000 USD
```
Written transaction:
```
2000-01-01 *
Account1: 12 EUR @@ 10 USD
Account2: -10 USD
(account1 = 12 EUR, account2 = -10 USD)
2002-01-01 *
Account1: -10 EUR @@ 10 USD
Account2: 10 USD
(account1 = 2 EUR, account2 = 0 USD)
```
Leave it in equity:
```
2000-01-01 *
Account1: 12 EUR @ 1.2 USD
Account2: -10 USD
Equity:CurrencyConversion -12 EUR
Equity:CurrencyConversion 10 USD
(account1 = 12 EUR, account2 = -10 USD, equity = 10 USD - 12 EUR)
2002-01-01 *
Account1: -10 EUR @ 1 USD
Account2: 10 USD
Equity:CurrencyConversion -10 USD
Equity:CurrencyConversion 10 EUR
(account1 = 2 EUR, account2 = 0 USD, equity = 2 EUR)
```
```
2000-01-01 *
Account1: 12 EUR @ 1.2 USD
Account2: -10 USD
Equity:CurrencyConversion -12 EUR
Equity:CurrencyConversion 10 USD
(account1 = 12 EUR, account2 = -10 USD, equity = 10 USD - 12 EUR)
2002-01-01 *
Account1: -10 EUR {1.2 USD} @ 1 USD
Account2: 10 USD
Income:CurrencyConversion -1.67 USD
Equity:CurrencyConversion -8.33 USD
Equity:CurrencyConversion 10 EUR
(account1 = 2 EUR, account2 = 0 USD, income = -1.67 USD, equity = 1.67 USD - 2 EUR)
```
Triple currency:
Written transaction:
```
2000-01-01 *
Account2: 12 EUR @ 1.2 USD
Account1: -10 USD
(account1 = -10 USD, account2 = 12 EUR, account2 = -10 USD)
2002-01-01 *
Account3: 11 GBP
Account2: -10 EUR @ 1.1 GBP
(account1 = -10 USD, account2 = 2 EUR account3 = 11 GBP)
2002-01-01 *
Account1: 10 USD
Account3: -10 GBP @ 1 USD
(account1 = 0 USD, account2 = 2 EUR account3 = 1 GBP)
```
```
2000-01-01 *
Account2: 12 EUR @ 1.2 USD
Account1: -10 USD
Equity:CurrencyConversion -12 EUR {1.2 USD}
Equity:CurrencyConversion 10 USD
(account1 = -10 USD, account2 = 12 EUR, account2 = -10 USD, equity = 10 USD - 12 EUR)
2002-01-01 *
Account3: 11 GBP
Account2: -10 EUR @ 1.1 GBP
Income:CurrencyConversion 10 EUR {now} - 10 EUR {1.2 USD}
Income:CurrencyConversion -10 EUR {1.2 USD}
Equity:CurrencyConversion -11 GBP
Equity:CurrencyConversion 10 EUR {1.2 USD}
(account1 = -10 USD, account2 = 2 EUR account3 = 11 GBP, equity = 10 USD - 2 EUR - 11 GBP, income = 10 EUR {now} - 10 EUR {1.2 USD})
2002-01-01 *
Account1: 10 USD
Account3: -10 GBP @ 1 USD
...
(account1 = 0 USD, account2 = 2 EUR account3 = 1 GBP)
```