diff --git a/examples/demote-accts.aliases b/examples/demote-accts.aliases new file mode 100644 index 000000000..b6e298649 --- /dev/null +++ b/examples/demote-accts.aliases @@ -0,0 +1,11 @@ +alias JS:assets = Assets:JS +alias JS:liabilities = Liabilities:JS +alias JS:equity = Equity:JS +alias JS:revenues = Revenues:JS +alias JS:expenses = Expenses:JS + +alias sm:assets = Assets:sm +alias sm:liabilities = Liabilities:sm +alias sm:equity = Equity:sm +alias sm:revenues = Revenues:sm +alias sm:expenses = Expenses:sm diff --git a/examples/demote-accts.conf b/examples/demote-accts.conf new file mode 100644 index 000000000..58359d2b9 --- /dev/null +++ b/examples/demote-accts.conf @@ -0,0 +1,13 @@ +# demote top level accounts to level 2 + +--alias JS:assets=Assets:JS +--alias JS:liabilities=Liabilities:JS +--alias JS:equity=Equity:JS +--alias JS:revenues=Revenues:JS +--alias JS:expenses=Expenses:JS + +--alias sm:assets=Assets:sm +--alias sm:liabilities=Liabilities:sm +--alias sm:equity=Equity:sm +--alias sm:revenues=Revenues:sm +--alias sm:expenses=Expenses:sm diff --git a/examples/i18n/arabic.journal b/examples/i18n/arabic.journal new file mode 100644 index 000000000..858051491 --- /dev/null +++ b/examples/i18n/arabic.journal @@ -0,0 +1,5 @@ +2020-01-01 جاري + حساب جاري $1250 ; (current account) + جاري + + diff --git a/examples/i18n/french.conf b/examples/i18n/french.conf new file mode 100644 index 000000000..344257ad0 --- /dev/null +++ b/examples/i18n/french.conf @@ -0,0 +1,5 @@ +--alias actifs=assets +--alias passifs=liabilities +--alias 'capitaux propres=equity' +--alias revenus=income +--alias dépenses=expenses diff --git a/examples/lots/Makefile b/examples/lots/Makefile new file mode 100644 index 000000000..368a5fa5a --- /dev/null +++ b/examples/lots/Makefile @@ -0,0 +1,34 @@ + +subaccounts.beancount: subaccounts.hledger + sed -E 's/_[^0-9]*([0-9]+)[.,]([0-9]+)/-\1-\2/' $< | hledger print --alias revenues=income -f- -O beancount | bean-format - >$@ + +lotter.lotter: lotter.hledger + lotter -f $< >$@ + +hledger-bal-%: + @printf "$$ " + hledger -f $*.hledger bal -YE aaa + +ledger-bal-%: + @printf "$$ " + ledger -f $*.hledger bal --flat -E aaa + +lotter-bal: lotter.lotter + @printf "$$ " + hledger -f lotter.lotter bal -YE --invert Lot cur:AAA + +ledger-lots: + @printf "$$ " + ledger -f ledger.ledger bal --lots --flat -E --no-total aaa + +beancount-bal-%: + @printf "$$ " + bean-query subaccounts.beancount "SELECT account, units(sum(position)), cost(sum(position)) WHERE account ~ 'Aaa' GROUP BY 1 ORDER BY account;" + +beancount-lots-%: + @printf "$$ " + bean-query $*.beancount "SELECT account, units(sum(position)) as units, cost_number as cost, cost_date as acquisition_date WHERE account ~ 'Aaa' GROUP BY account, cost_date, currency, cost_currency, cost_number, account_sortkey(account) ORDER BY account_sortkey(account), currency, cost_date" + @printf "$$ " + bean-query $*.beancount "SELECT account, units(sum(position)) as units, cost_number as cost, first(getprice(currency, cost_currency)) as price, cost(sum(position)) as book_value, value(sum(position)) as market_value, safediv((abs(sum(number(value(position)))) - abs(sum(number(cost(position))))), sum(number(cost(position)))) * 100 as unrealized_profit_pct, cost_date as acquisition_date WHERE account ~ 'Aaa' GROUP BY account, cost_date, currency, cost_currency, cost_number, account_sortkey(account) ORDER BY account_sortkey(account), currency, cost_date" + +bals: hledger-bal-subaccounts ledger-bal-subaccounts beancount-bal-subaccounts beancount-bal-beancount diff --git a/examples/lots/README.md b/examples/lots/README.md new file mode 100644 index 000000000..11c9ecdf1 --- /dev/null +++ b/examples/lots/README.md @@ -0,0 +1,3 @@ +Data and scripts for https://joyful.com/Lot+tracking+in+PTA + +Keep synced. diff --git a/examples/lots/beancount.beancount b/examples/lots/beancount.beancount new file mode 100644 index 000000000..802713dc4 --- /dev/null +++ b/examples/lots/beancount.beancount @@ -0,0 +1,43 @@ +option "operating_currency" "USD" + +2025-01-01 open Assets:Broker:Aaa AAA "FIFO" +2025-01-01 open Assets:Broker:Usd +2025-01-01 open Income:Gains +2025-01-01 open Income:Gifts + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa 10 AAA {1.10 USD} + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa 10 AAA {1.20 USD} + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa 10 AAA {1.20 USD} + +2025-02-01 * + Income:Gifts + Assets:Broker:Aaa 10 AAA {0.40 USD, 2021-01-01} + +2025-02-02 * + Income:Gifts + Assets:Broker:Aaa 10 AAA {0.50 USD, 2022-01-01} + +2025-03-01 * + Assets:Broker:Aaa -5 AAA {} + Assets:Broker:Usd 6.55 USD + Income:Gains + +2025-03-02 * + Assets:Broker:Aaa -24 AAA {} + Assets:Broker:Usd 31.68 USD + Income:Gains + +2025-03-03 * + Assets:Broker:Aaa -1 AAA {1.10 USD} + Assets:Broker:Aaa -9 AAA {1.20 USD} + Assets:Broker:Usd 13.30 USD + Income:Gains + diff --git a/examples/lots/beancount1.beancount b/examples/lots/beancount1.beancount new file mode 100644 index 000000000..bdb76baca --- /dev/null +++ b/examples/lots/beancount1.beancount @@ -0,0 +1,45 @@ +option "operating_currency" "USD" + +2025-01-01 open Assets:Broker:Aaa +2025-01-01 open Assets:Broker:Usd +2025-01-01 open Income:Gains +2025-01-01 open Income:Gifts + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa 10 AAA {1.10 USD} + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa 10 AAA {1.20 USD} + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa 10 AAA {1.20 USD} + +2025-02-01 * + Income:Gifts + Assets:Broker:Aaa 10 AAA {0.40 USD, 2021-01-01} + +2025-02-02 * + Income:Gifts + Assets:Broker:Aaa 10 AAA {0.50 USD, 2022-01-01} + +2025-03-01 * + Assets:Broker:Aaa -5 AAA {0.40 USD} + Assets:Broker:Usd 6.55 USD + Income:Gains + +2025-03-02 * + Assets:Broker:Aaa -5 AAA {0.40 USD} + Assets:Broker:Aaa -10 AAA {0.50 USD} + Assets:Broker:Aaa -9 AAA {1.10 USD} + Assets:Broker:Usd 31.68 USD + Income:Gains + +2025-03-03 * + Assets:Broker:Aaa -1 AAA {1.10 USD} + Assets:Broker:Aaa -9 AAA {1.20 USD} + Assets:Broker:Usd 13.30 USD + Income:Gains + diff --git a/examples/lots/hledger-lots.hledger b/examples/lots/hledger-lots.hledger new file mode 100644 index 000000000..ee254ef03 --- /dev/null +++ b/examples/lots/hledger-lots.hledger @@ -0,0 +1,49 @@ +#+hledger-lots avg_cost:false, check:true +#+hledger-lots no_desc: + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA @ 1.10 USD + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA @ 1.20 USD + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA @ 1.20 USD + +2025-02-01 + revenues:gifts + assets:broker:aaa 10 AAA @ 0.40 USD + +2025-02-02 + revenues:gifts + assets:broker:aaa 10 AAA @ 0.50 USD + +2025-03-01 Sold AAA ; cost_method:fifo + ; commodity:AAA, qtty:5.00, price:1.31 + ; avg_cost:1.1000, xirr:1.85% annual percent rate 30/360US + assets:broker:usd 6.55 USD + assets:broker:aaa -5.0 AAA @ 1.1 USD ; buy_date:2025-01-01, base_cur:USD + revenues:gains -1.05 USD + + +2025-03-02 Sold AAA ; cost_method:fifo + ; commodity:AAA, qtty:24.00, price:1.32 + ; avg_cost:1.1792, xirr:0.95% annual percent rate 30/360US + assets:broker:usd 31.68 USD + assets:broker:aaa -5 AAA @ 1.1 USD ; buy_date:2025-01-01, base_cur:USD + assets:broker:aaa -10 AAA @ 1.2 USD ; buy_date:2025-01-01, base_cur:USD + assets:broker:aaa -9.0 AAA @ 1.2 USD ; buy_date:2025-01-01, base_cur:USD + revenues:gains -3.38 USD + + +2025-03-03 Sold AAA ; cost_method:fifo + ; commodity:AAA, qtty:10.00, price:1.33 + ; avg_cost:0.4800, xirr:6500.49% annual percent rate 30/360US + assets:broker:usd 13.30 USD + assets:broker:aaa -1 AAA @ 1.2 USD ; buy_date:2025-01-01, base_cur:USD + assets:broker:aaa -9.0 AAA @ 0.4 USD ; buy_date:2025-02-01, base_cur:USD + revenues:gains -8.50 USD + diff --git a/examples/lots/ledger.ledger b/examples/lots/ledger.ledger new file mode 100644 index 000000000..bc59a48aa --- /dev/null +++ b/examples/lots/ledger.ledger @@ -0,0 +1,41 @@ +# convert to ledger lot notation + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA {$1.10} (1) + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA {$1.20} (2) + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA {$1.20} (3) + +2025-02-01 + revenues:gifts + assets:broker:aaa 10 AAA {$0.40} [2021-01-01] + +2025-02-02 + revenues:gifts + assets:broker:aaa 10 AAA {$0.50} [2022-01-01] + +2025-03-01 + assets:broker:aaa -5 AAA {$0.40} [2021-01-01] + assets:broker:usd $6.55 + revenues:gains + +2025-03-02 + assets:broker:aaa -5 AAA {$0.40} [2021-01-01] + assets:broker:aaa -10 AAA {$0.50} [2022-01-01] + assets:broker:aaa -9 AAA {$1.10} (1) + assets:broker:usd $31.68 + revenues:gains + +2025-03-03 + assets:broker:aaa -1 AAA {$1.10} (1) + assets:broker:aaa -9 AAA {$1.20} (2) + assets:broker:usd $13.30 + revenues:gains + +comment diff --git a/examples/lots/lotter.hledger b/examples/lots/lotter.hledger new file mode 100644 index 000000000..4cf617500 --- /dev/null +++ b/examples/lots/lotter.hledger @@ -0,0 +1,38 @@ +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA @ 1.10 USD + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA @ 1.20 USD + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA @ 1.20 USD + +2025-02-01 + revenues:gifts + assets:broker:aaa 10 AAA @ 0.40 USD + +2025-02-02 + revenues:gifts + assets:broker:aaa 10 AAA @ 0.50 USD + +2025-03-01 + assets:broker:aaa -5 AAA @ 0.40 USD + assets:broker:usd 6.55 USD + revenues:gains + +2025-03-02 + assets:broker:aaa -5 AAA @ 0.40 USD + assets:broker:aaa -10 AAA @ 0.50 USD + assets:broker:aaa -9 AAA @ 1.10 USD + assets:broker:usd 31.68 USD + revenues:gains + +2025-03-03 + assets:broker:aaa -1 AAA @ 1.10 USD + assets:broker:aaa -9 AAA @ 1.20 USD + assets:broker:usd 13.30 USD + revenues:gains + diff --git a/examples/lots/lotter.lotter b/examples/lots/lotter.lotter new file mode 100644 index 000000000..4576a2224 --- /dev/null +++ b/examples/lots/lotter.lotter @@ -0,0 +1,63 @@ +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA ; @ 1.10 USD + [Lot::2025/01/01:10AAA@1.1USD] -10 AAA ; :BUY: (inventory) + [Lot::2025/01/01:10AAA@1.1USD] 11 USD ; :BUY: (basis) + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA ; @ 1.20 USD + [Lot::2025/01/01:10AAA@1.2USD] -10 AAA ; :BUY: (inventory) + [Lot::2025/01/01:10AAA@1.2USD] 12 USD ; :BUY: (basis) + +2025-01-01 + assets:broker:usd + assets:broker:aaa 10 AAA ; @ 1.20 USD + [Lot::2025/01/01:10AAA@1.2USD] -10 AAA ; :BUY: (inventory) + [Lot::2025/01/01:10AAA@1.2USD] 12 USD ; :BUY: (basis) + +2025-02-01 + revenues:gifts + assets:broker:aaa 10 AAA ; @ 0.40 USD + [Lot::2025/02/01:10AAA@0.4USD] -10 AAA ; :BUY: (inventory) + [Lot::2025/02/01:10AAA@0.4USD] 4 USD ; :BUY: (basis) + +2025-02-02 + revenues:gifts + assets:broker:aaa 10 AAA ; @ 0.50 USD + [Lot::2025/02/02:10AAA@0.5USD] -10 AAA ; :BUY: (inventory) + [Lot::2025/02/02:10AAA@0.5USD] 5 USD ; :BUY: (basis) + +2025-03-01 + assets:broker:aaa -5 AAA ; @ 0.40 USD + assets:broker:usd 6.55 USD + revenues:gains + [Lot::2025/01/01:10AAA@1.1USD] 5 AAA ; :SELL: (inventory consumed) + [Lot::2025/01/01:10AAA@1.1USD] -5.5 USD ; :SELL: (basis consumed) + [Lot:Income:short term gain] 3.5 USD ; :GAIN:SHORTTERM: (loss) + +2025-03-02 + assets:broker:aaa -5 AAA ; @ 0.40 USD + assets:broker:aaa -10 AAA ; @ 0.50 USD + assets:broker:aaa -9 AAA ; @ 1.10 USD + assets:broker:usd 31.68 USD + revenues:gains + [Lot::2025/01/01:10AAA@1.1USD] 5 AAA ; :SELL: (inventory consumed) + [Lot::2025/01/01:10AAA@1.1USD] -5.5 USD ; :SELL: (basis consumed) + [Lot::2025/01/01:10AAA@1.2USD] 10 AAA ; :SELL: (inventory consumed) + [Lot::2025/01/01:10AAA@1.2USD] -12 USD ; :SELL: (basis consumed) + [Lot::2025/01/01:10AAA@1.2USD] 9 AAA ; :SELL: (inventory consumed) + [Lot::2025/01/01:10AAA@1.2USD] -10.8 USD ; :SELL: (basis consumed) + [Lot:Income:short term gain] 11.4 USD ; :GAIN:SHORTTERM: (loss) + +2025-03-03 + assets:broker:aaa -1 AAA ; @ 1.10 USD + assets:broker:aaa -9 AAA ; @ 1.20 USD + assets:broker:usd 13.30 USD + revenues:gains + [Lot::2025/01/01:10AAA@1.2USD] 1 AAA ; :SELL: (inventory consumed) + [Lot::2025/01/01:10AAA@1.2USD] -1.2 USD ; :SELL: (basis consumed) + [Lot::2025/02/01:10AAA@0.4USD] 9 AAA ; :SELL: (inventory consumed) + [Lot::2025/02/01:10AAA@0.4USD] -3.6 USD ; :SELL: (basis consumed) + [Lot:Income:short term gain] -7.1 USD ; :GAIN:SHORTTERM: (gain) + diff --git a/examples/lots/subaccounts.beancount b/examples/lots/subaccounts.beancount new file mode 100644 index 000000000..fd462aabf --- /dev/null +++ b/examples/lots/subaccounts.beancount @@ -0,0 +1,49 @@ +option "operating_currency" "USD" + +2025-01-01 open Assets:Broker:Aaa:2021-01-01-0-40 +2025-01-01 open Assets:Broker:Aaa:2022-01-01-0-50 +2025-01-01 open Assets:Broker:Aaa:2025-01-01-1-1-10 +2025-01-01 open Assets:Broker:Aaa:2025-01-01-2-1-20 +2025-01-01 open Assets:Broker:Aaa:2025-01-01-3-1-20 +2025-01-01 open Assets:Broker:Usd +2025-01-01 open Income:Gains +2025-01-01 open Income:Gifts + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa:2025-01-01-1-1-10 10 AAA @ 1.10 USD + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa:2025-01-01-2-1-20 10 AAA @ 1.20 USD + +2025-01-01 * + Assets:Broker:Usd + Assets:Broker:Aaa:2025-01-01-3-1-20 10 AAA @ 1.20 USD + +2025-02-01 * + Income:Gifts + Assets:Broker:Aaa:2021-01-01-0-40 10 AAA @ 0.40 USD + +2025-02-02 * + Income:Gifts + Assets:Broker:Aaa:2022-01-01-0-50 10 AAA @ 0.50 USD + +2025-03-01 * + Assets:Broker:Aaa:2021-01-01-0-40 -5 AAA @ 0.40 USD + Assets:Broker:Usd 6.55 USD + Income:Gains + +2025-03-02 * + Assets:Broker:Aaa:2021-01-01-0-40 -5 AAA @ 0.40 USD + Assets:Broker:Aaa:2022-01-01-0-50 -10 AAA @ 0.50 USD + Assets:Broker:Aaa:2025-01-01-1-1-10 -9 AAA @ 1.10 USD + Assets:Broker:Usd 31.68 USD + Income:Gains + +2025-03-03 * + Assets:Broker:Aaa:2025-01-01-1-1-10 -1 AAA @ 1.10 USD + Assets:Broker:Aaa:2025-01-01-2-1-20 -9 AAA @ 1.20 USD + Assets:Broker:Usd 13.30 USD + Income:Gains + diff --git a/examples/lots/subaccounts.hledger b/examples/lots/subaccounts.hledger new file mode 100644 index 000000000..b70a2dc93 --- /dev/null +++ b/examples/lots/subaccounts.hledger @@ -0,0 +1,38 @@ +2025-01-01 + assets:broker:usd + assets:broker:aaa:2025-01-01-1_$1.10 10 AAA @ $1.10 + +2025-01-01 + assets:broker:usd + assets:broker:aaa:2025-01-01-2_$1.20 10 AAA @ $1.20 + +2025-01-01 + assets:broker:usd + assets:broker:aaa:2025-01-01-3_$1.20 10 AAA @ $1.20 + +2025-02-01 + revenues:gifts + assets:broker:aaa:2021-01-01_$0.40 10 AAA @ $0.40 + +2025-02-02 + revenues:gifts + assets:broker:aaa:2022-01-01_$0.50 10 AAA @ $0.50 + +2025-03-01 + assets:broker:aaa:2021-01-01_$0.40 -5 AAA @ $0.40 + assets:broker:usd $6.55 + revenues:gains + +2025-03-02 + assets:broker:aaa:2021-01-01_$0.40 -5 AAA @ $0.40 + assets:broker:aaa:2022-01-01_$0.50 -10 AAA @ $0.50 + assets:broker:aaa:2025-01-01-1_$1.10 -9 AAA @ $1.10 + assets:broker:usd $31.68 + revenues:gains + +2025-03-03 + assets:broker:aaa:2025-01-01-1_$1.10 -1 AAA @ $1.10 + assets:broker:aaa:2025-01-01-2_$1.20 -9 AAA @ $1.20 + assets:broker:usd $13.30 + revenues:gains + diff --git a/examples/sample2.journal b/examples/sample2.journal new file mode 100644 index 000000000..7401c1663 --- /dev/null +++ b/examples/sample2.journal @@ -0,0 +1,25 @@ +2025-01-01 starting balances + assets:cash 100 USD = 100 USD + assets:bank:checking 1000 USD = 1000 USD + assets:broker:usd 1000 USD = 1000 USD + assets:broker:aaa 1 AAA @ 1.20 USD = 1 AAA @ 1.20 USD + liabilities:credit card -400 USD = -400 USD + equity:start + +2025-01-01 pay rent + assets:bank:checking + expenses:rent 800 USD + +2025-01-02 salary + revenues:salary + assets:bank:checking 1000 USD + +2025-01-03 pay off credit card + assets:bank:checking + liabilities:credit card 400 USD = 0 USD + +2025-01-04 shopping + assets:bank:checking + expenses:food 200 USD + expenses:supplies 50 USD +