accounting/notes.md

12 KiB

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)