imp:close: --migrate -> --clopen; more doc rewrites

This commit is contained in:
Simon Michael 2025-01-09 21:04:12 -10:00
parent 2588e31466
commit 6868ab06a4
3 changed files with 95 additions and 83 deletions

View File

@ -33,18 +33,15 @@ defretainacct = "equity:retained earnings"
closemode = hledgerCommandMode closemode = hledgerCommandMode
$(embedFileRelative "Hledger/Cli/Commands/Close.txt") $(embedFileRelative "Hledger/Cli/Commands/Close.txt")
[flagOpt "" ["migrate"] (\s opts -> Right $ setopt "migrate" s opts) "NEW" ("show closing and opening transactions," [flagOpt "" ["clopen"] (\s opts -> Right $ setopt "clopen" s opts) "TAGVAL" "show closing and opening balances transactions, for AL accounts by default"
<> " for Asset and Liability accounts by default, tagged for easy matching." ,flagOpt "" ["close"] (\s opts -> Right $ setopt "close" s opts) "TAGVAL" "show just a closing balances transaction"
<> " The tag's default value can be overridden by providing NEW." ,flagOpt "" ["open"] (\s opts -> Right $ setopt "open" s opts) "TAGVAL" "show just an opening balances transaction"
) ,flagOpt "" ["assert"] (\s opts -> Right $ setopt "assert" s opts) "TAGVAL" "show a balance assertions transaction"
,flagOpt "" ["close"] (\s opts -> Right $ setopt "close" s opts) "NEW" "(default) show a closing transaction" ,flagOpt "" ["assign"] (\s opts -> Right $ setopt "assign" s opts) "TAGVAL" "show a balance assignments transaction"
,flagOpt "" ["open"] (\s opts -> Right $ setopt "open" s opts) "NEW" "show an opening transaction" ,flagOpt "" ["retain"] (\s opts -> Right $ setopt "retain" s opts) "TAGVAL" "show a retain earnings transaction, for RX accounts by default"
,flagOpt "" ["assign"] (\s opts -> Right $ setopt "assign" s opts) "NEW" "show opening balance assignments" ,flagNone ["explicit","x"] (setboolopt "explicit") "show all amounts explicitly"
,flagOpt "" ["assert"] (\s opts -> Right $ setopt "assert" s opts) "NEW" "show closing balance assertions" ,flagNone ["show-costs"] (setboolopt "show-costs") "show amounts with different costs separately"
,flagOpt "" ["retain"] (\s opts -> Right $ setopt "retain" s opts) "NEW" "show a retain earnings transaction, for Revenue and Expense accounts by default" ,flagNone ["interleaved"] (setboolopt "interleaved") "show source and destination postings together"
,flagNone ["explicit","x"] (setboolopt "explicit") "show all amounts explicitly"
,flagNone ["show-costs"] (setboolopt "show-costs") "show amounts with different costs separately"
,flagNone ["interleaved"] (setboolopt "interleaved") "show source and destination postings together"
,flagReq ["assertion-type"] (\s opts -> Right $ setopt "assertion-type" s opts) "TYPE" "=, ==, =* or ==*" ,flagReq ["assertion-type"] (\s opts -> Right $ setopt "assertion-type" s opts) "TYPE" "=, ==, =* or ==*"
,flagReq ["close-desc"] (\s opts -> Right $ setopt "close-desc" s opts) "DESC" "set closing transaction's description" ,flagReq ["close-desc"] (\s opts -> Right $ setopt "close-desc" s opts) "DESC" "set closing transaction's description"
,flagReq ["close-acct"] (\s opts -> Right $ setopt "close-acct" s opts) "ACCT" "set closing transaction's destination account" ,flagReq ["close-acct"] (\s opts -> Right $ setopt "close-acct" s opts) "ACCT" "set closing transaction's destination account"
@ -57,17 +54,18 @@ closemode = hledgerCommandMode
++ -- keep supporting old flag names for compatibility ++ -- keep supporting old flag names for compatibility
[flagNone ["closing"] (setboolopt "close") "old spelling of --close" [flagNone ["closing"] (setboolopt "close") "old spelling of --close"
,flagNone ["opening"] (setboolopt "open") "old spelling of --open" ,flagNone ["opening"] (setboolopt "open") "old spelling of --open"
,flagNone ["migrate"] (setboolopt "clopen") "old spelling of --clopen"
,flagReq ["close-to"] (\s opts -> Right $ setopt "close-acct" s opts) "ACCT" "old spelling of --close-acct" ,flagReq ["close-to"] (\s opts -> Right $ setopt "close-acct" s opts) "ACCT" "old spelling of --close-acct"
,flagReq ["open-from"] (\s opts -> Right $ setopt "open-acct" s opts) "ACCT" "old spelling of --open-acct" ,flagReq ["open-from"] (\s opts -> Right $ setopt "open-acct" s opts) "ACCT" "old spelling of --open-acct"
] ]
) )
([], Just $ argsFlag "[--migrate|--close|--open|--assign|--assert|--retain] [ACCTQUERY]") ([], Just $ argsFlag "[--close|--open|--clopen|--assign|--assert|--retain] [ACCTQUERY]")
-- | The close command's mode (subcommand). -- | The close command's mode (subcommand).
-- The code depends on these spellings. -- The code depends on these spellings.
data CloseMode = Migrate | Close | Open | Assign | Assert | Retain deriving (Eq,Show,Read) data CloseMode = Clopen | Close | Open | Assign | Assert | Retain deriving (Eq,Show,Read)
-- | Pick the rightmost flag spelled like a CloseMode (--migrate, --close, --open, etc), or default to Close. -- | Pick the rightmost flag spelled like a CloseMode (--clopen, --close, --open, etc), or default to Close.
closeModeFromRawOpts :: RawOpts -> CloseMode closeModeFromRawOpts :: RawOpts -> CloseMode
closeModeFromRawOpts rawopts = lastDef Close $ collectopts (\(name,_) -> readMay (capitalise name)) rawopts closeModeFromRawOpts rawopts = lastDef Close $ collectopts (\(name,_) -> readMay (capitalise name)) rawopts
@ -147,7 +145,7 @@ close CliOpts{rawopts_=rawopts, reportspec_=rspec0} j = do
-- the closing (balance-asserting or balance-zeroing) transaction -- the closing (balance-asserting or balance-zeroing) transaction
mclosetxn mclosetxn
| mode_ `notElem` [Migrate, Close, Assert, Retain] = Nothing | mode_ `notElem` [Clopen, Close, Assert, Retain] = Nothing
| otherwise = Just nulltransaction{ | otherwise = Just nulltransaction{
tdate=closedate, tdescription=closedesc, tcomment=comment, tpostings=closeps tdate=closedate, tdescription=closedesc, tcomment=comment, tpostings=closeps
} }
@ -162,7 +160,7 @@ close CliOpts{rawopts_=rawopts, reportspec_=rspec0} j = do
-- XXX some duplication -- XXX some duplication
| mode_ == Assert = | mode_ == Assert =
[ posting{ [ posting{
paccount = a paccount = a
,pamount = mixedAmount $ precise b{aquantity=0, acost=Nothing} ,pamount = mixedAmount $ precise b{aquantity=0, acost=Nothing}
-- after each commodity's last posting, assert 0 balance (#1035) -- after each commodity's last posting, assert 0 balance (#1035)
-- balance assertion amounts are unpriced (#824) -- balance assertion amounts are unpriced (#824)
@ -210,7 +208,7 @@ close CliOpts{rawopts_=rawopts, reportspec_=rspec0} j = do
-- the opening (balance-assigning or balance-unzeroing) transaction -- the opening (balance-assigning or balance-unzeroing) transaction
mopentxn mopentxn
| mode_ `notElem` [Migrate, Open, Assign] = Nothing | mode_ `notElem` [Clopen, Open, Assign] = Nothing
| otherwise = Just nulltransaction{ | otherwise = Just nulltransaction{
tdate=opendate, tdescription=opendesc, tcomment=comment, tpostings=openps tdate=opendate, tdescription=opendesc, tcomment=comment, tpostings=openps
} }

View File

@ -2,19 +2,19 @@
(equity) (equity)
`close` generates several kinds of "closing" and/or "opening" transactions, useful in certain situations, including `close` prints several kinds of "closing" and/or "opening" transactions, useful in various situations:
migrating balances to a new journal file, retaining earnings into equity, consolidating balances, or viewing lots. migrating balances to a new journal file, retaining earnings into equity, consolidating balances, viewing lot costs..
Like `print`, it prints valid journal entries. Like `print`, it prints valid journal entries.
You can append or copy these to your journal file(s) when you are happy with how they look. You can copy these into your journal file(s) when you are happy with how they look.
```flags ```flags
Flags: Flags:
--migrate[=NEW] show closing and opening transactions, for Asset --close[=NEW] (default) show a closing transaction
--open[=NEW] show an opening transaction
--clopen[=NEW] show closing and opening transactions, for Asset
and Liability accounts by default, tagged for easy and Liability accounts by default, tagged for easy
matching. The tag's default value can be overridden matching. The tag's default value can be overridden
by providing NEW. by providing NEW.
--close[=NEW] (default) show a closing transaction
--open[=NEW] show an opening transaction
--assign[=NEW] show opening balance assignments --assign[=NEW] show opening balance assignments
--assert[=NEW] show closing balance assertions --assert[=NEW] show closing balance assertions
--retain[=NEW] show a retain earnings transaction, for Revenue --retain[=NEW] show a retain earnings transaction, for Revenue
@ -39,45 +39,59 @@ Flags:
(can unbalance transactions) (can unbalance transactions)
``` ```
`close` currently has six modes, selected by a single mode flag: `close` has six modes, selected by choosing one of the mode flags (`--close` is the default).
They all do much the same operation, but with different defaults, useful in different situations.
### close --migrate ### close --clopen
This is the most common mode. This is useful if migrating balances to a new journal file at the start of a new year.
It prints a "closing balances" transaction that zeroes out all Asset and Liability balances (by default), It prints a "closing balances" transaction that zeroes out account balances (Asset and Liability accounts, by default),
and an opposite "opening balances" transaction that restores them again. and an opposite "opening balances" transaction that restores them again.
The balancing account will be `equity:opening/closing balances` (or another specified by `--close-acct` or `--open-acct`). Typically, you would run
```
hledger close --clopen -e NEWYEAR >> $LEDGER_FILE
```
and then move the opening transaction from the old file to the new file
(and probably also update your LEDGER_FILE environment variable).
This is useful when migrating balances to a new journal file at the start of a new year. Why might you do this ? If your reports are fast, you may not need it.
Essentially, you run `hledger close --migrate=NEWYEAR -e NEWYEAR` But at some point you will probably want to partition your data by time,
and then copy the closing transaction to the end of the old file for performance or data integrity or regulatory reasons.
and the opening transaction to the start of the new file. A new file or set of files per year is common.
The opening transaction sets correct starting balances in the new file when it is used alone, Then, having each file/fileset "bookended" with opening and closing balance transactions
and the closing transaction keeps balances correct when you use both old and new files together, will allow you to freely pick and choose which files to read -
by cancelling out the following opening transaction and preventing buildup of duplicated opening balances. just the current year, any past year, any sequence of years, or all of them -
Think of the closing/opening pair as "moving the balances into the next file". while showing correct account balances in each case.
The earliest opening balances transaction sets correct starting balances,
and any later closing/opening pairs will harmlessly cancel each other out.
You can close a different set of accounts by providing a query. The balances will be transferred to and from `equity:opening/closing balances` by default.
Eg if you want to include equity, you can add `assets liabilities equity` or [`type:ALE`](hledger.md#account-types) arguments. You can override this by using `--close-acct` and/or `--open-acct`.
(The balancing account is always excluded.)
Revenues and expenses usually are not migrated to a new file directly; see `--retain` below.
The generated transactions will have a `clopen:` tag, with its value set to You can select a different set of accounts to close/open by providing an account query.
`--migrate`'s `NEW` argument if any, for easier matching or exclusion. Eg to add Equity accounts, provide arguments like `assets liabilities equity` or `type:ALE`.
When `NEW` is not specified, it will be inferred if possible by incrementing When migrating to a new file, you'll usually want to bring along the AL or ALE accounts,
a number (eg a year number) within the default journal's main file name. but not the RX accounts (Revenue, Expense).
The other modes behave similarly.
The generated transactions will have a `clopen:` tag.
If the main journal's file name contains a number (eg a year number),
the tag's value will be that file name with the number incremented.
Or you can choose the tag value yourself, by using `--clopen=TAGVAL`.
### close --close ### close --close
This prints just the closing balances transaction of `--migrate`. This prints just the closing balances transaction of `--clopen`.
It is the default behaviour if you specify no mode flag. It is the default if you don't specify a mode.
Using the customisation options below, you can move balances from any set of accounts to a different account.
More customisation options are described below.
Among other things, you can use `close --close` to generate a transaction
moving the balances from any set of accounts, to a different account.
(If you need to move just a portion of the balance, see [hledger-move](https://hledger.org/scripts.html#hledger-move).)
### close --open ### close --open
This prints just the opening balances transaction of `--migrate`. This prints just the opening balances transaction of `--clopen`.
It is similar to [Ledger's equity command](https://ledger-cli.org/doc/ledger3.html#The-equity-command). (It is similar to [Ledger's equity command](https://ledger-cli.org/doc/ledger3.html#The-equity-command).)
### close --assert ### close --assert
@ -92,21 +106,21 @@ Unlike balance assertions, assignments will post changes to balances as needed t
This is another way to set starting balances when migrating to a new file, This is another way to set starting balances when migrating to a new file,
and it will set them correctly even in the presence of earlier files which do not have a closing balances transaction. and it will set them correctly even in the presence of earlier files which do not have a closing balances transaction.
However, it can hide errors, and disturb the accounting equation, However, it can hide errors, and disturb the accounting equation,
so `--migrate` is usually recommended [for now](https://github.com/simonmichael/hledger/issues/2151). so `--clopen` is usually [recommended](https://github.com/simonmichael/hledger/issues/2151).
### close --retain ### close --retain
This is like `--close`, but with different defaults: This is like `--close`, but it closes Revenue and Expense account balances by default.
it prints a transaction that transfers Revenue and Expense balances to `equity:retained earnings` (and adds a `retain:` tag). They will be transferred to `equity:retained earnings`, or another account specified with `--close-acct`.
Revenues and expenses correspond to changes in equity.
They are categorised separately for reporting purposes,
but traditionally at the end of each accounting period, businesses consolidate them into equity,
This is called "retaining earnings", or "closing the books". This is called "retaining earnings", or "closing the books".
Revenues and expenses are actually part of equity, kept separate temporarily for clarity;
once they have been seen and noted, at the end of each accounting period,
businesses normally consolidate them into equity,
In personal accounting, there's not much benefit from this, and most people don't do it. In personal accounting, there's not much reason to do this, and most people don't.
One reason to do it is to help the `balancesheetequity` report show a zero total, (One reason to do it is to help the `balancesheetequity` report show a zero total,
demonstrating that the accounting equation (A-L=E) is satisfied. demonstrating that the accounting equation (A-L=E) is satisfied.)
### close customisation ### close customisation
@ -196,7 +210,7 @@ $ hledger -f 2022.journal is not:desc:'retain earnings'
Close assets/liabilities on 2022-12-31 and re-open them on 2023-01-01: Close assets/liabilities on 2022-12-31 and re-open them on 2023-01-01:
```cli ```cli
$ hledger close --migrate -f 2022.journal -p 2022 $ hledger close --clopen -f 2022.journal -p 2022
# copy/paste the closing transaction to the end of 2022.journal # copy/paste the closing transaction to the end of 2022.journal
# copy/paste the opening transaction to the start of 2023.journal # copy/paste the opening transaction to the start of 2023.journal
``` ```

View File

@ -20,7 +20,7 @@
# ** 1. By default, closes ALE accounts, on the last day of the report period. # ** 1. By default, closes ALE accounts, on the last day of the report period.
$ hledger close -f- -e 2017 $ hledger close -f- -e 2017
2016-12-31 closing balances ; start: 2016-12-31 closing balances ; clopen:
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
liabilities $-25 = $0 liabilities $-25 = $0
@ -30,7 +30,7 @@ $ hledger close -f- -e 2017
# ** 2. With --close, likewise. # ** 2. With --close, likewise.
$ hledger close -f- -e 2017 --close $ hledger close -f- -e 2017 --close
2016-12-31 closing balances ; start: 2016-12-31 closing balances ; clopen:
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
liabilities $-25 = $0 liabilities $-25 = $0
@ -46,15 +46,15 @@ $ hledger close -f- -e 2017 --retain
>=0 >=0
# ** 4. With --migrate, opens and closes ALE. # ** 4. With --clopen, opens and closes ALE.
$ hledger close -f- -p 2016 --migrate $ hledger close -f- -p 2016 --clopen
2016-12-31 closing balances ; start: 2016-12-31 closing balances ; clopen:
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
liabilities $-25 = $0 liabilities $-25 = $0
equity:opening/closing balances equity:opening/closing balances
2017-01-01 opening balances ; start: 2017-01-01 opening balances ; clopen:
assets:bank $80 = $80 assets:bank $80 = $80
assets:cash $10 = $10 assets:cash $10 = $10
liabilities $25 = $25 liabilities $25 = $25
@ -64,7 +64,7 @@ $ hledger close -f- -p 2016 --migrate
# ** 5. With --open, opens ALE. # ** 5. With --open, opens ALE.
$ hledger close -f- -p 2016 --open $ hledger close -f- -p 2016 --open
2017-01-01 opening balances ; start: 2017-01-01 opening balances ; clopen:
assets:bank $80 = $80 assets:bank $80 = $80
assets:cash $10 = $10 assets:cash $10 = $10
liabilities $25 = $25 liabilities $25 = $25
@ -74,7 +74,7 @@ $ hledger close -f- -p 2016 --open
# ** 6. -x makes all amounts explicit. # ** 6. -x makes all amounts explicit.
$ hledger close -f- -p 2016 -x $ hledger close -f- -p 2016 -x
2016-12-31 closing balances ; start: 2016-12-31 closing balances ; clopen:
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
liabilities $-25 = $0 liabilities $-25 = $0
@ -90,7 +90,7 @@ $ hledger close -f- -p 2016 -x
equity equity
$ hledger -f- close assets -p 2019 -x $ hledger -f- close assets -p 2019 -x
2019-12-31 closing balances ; start: 2019-12-31 closing balances ; clopen:
assets -2A = 0A assets -2A = 0A
equity:opening/closing balances 2A equity:opening/closing balances 2A
@ -100,7 +100,7 @@ $ hledger -f- close assets -p 2019 -x
# Only the last posting in each commodity gets a balance assertion (#1035). # Only the last posting in each commodity gets a balance assertion (#1035).
# Balance assertion amounts do not have a price. # Balance assertion amounts do not have a price.
$ hledger -f- close assets -p 2019 --show-costs -x $ hledger -f- close assets -p 2019 --show-costs -x
2019-12-31 closing balances ; start: 2019-12-31 closing balances ; clopen:
assets -1A @ 1B assets -1A @ 1B
assets -1A @ 1C = 0A assets -1A @ 1C = 0A
equity:opening/closing balances 1A @ 1B equity:opening/closing balances 1A @ 1B
@ -119,7 +119,7 @@ $ hledger -f- close assets -p 2019 --show-costs -x
(assets) 1A @ 2B (assets) 1A @ 2B
$ hledger -f- close assets -p 2019 -x $ hledger -f- close assets -p 2019 -x
2019-12-31 closing balances ; start: 2019-12-31 closing balances ; clopen:
assets -2A = 0A assets -2A = 0A
equity:opening/closing balances 2A equity:opening/closing balances 2A
@ -127,7 +127,7 @@ $ hledger -f- close assets -p 2019 -x
# ** 10. The same with costs preserved. # ** 10. The same with costs preserved.
$ hledger -f- close assets -p 2019 --show-costs -x $ hledger -f- close assets -p 2019 --show-costs -x
2019-12-31 closing balances ; start: 2019-12-31 closing balances ; clopen:
assets -1A @ 1B assets -1A @ 1B
assets -1A @ 2B = 0A assets -1A @ 2B = 0A
equity:opening/closing balances 1A @ 1B equity:opening/closing balances 1A @ 1B
@ -160,7 +160,7 @@ $ hledger -f- close assets -p 2019 --show-costs -x
liabilities:employer liabilities:employer
$ hledger -f- close -p 2016 assets liabilities --show-costs -x $ hledger -f- close -p 2016 assets liabilities --show-costs -x
2016-12-31 closing balances ; start: 2016-12-31 closing balances ; clopen:
assets:bank -5,733.00 EUR = 0.00 EUR assets:bank -5,733.00 EUR = 0.00 EUR
liabilities:employer $-10,000.00 liabilities:employer $-10,000.00
liabilities:employer $5,000.00 @ 0.93 EUR liabilities:employer $5,000.00 @ 0.93 EUR
@ -177,7 +177,7 @@ $ hledger -f- close -p 2016 assets liabilities --show-costs -x
# (And balances with the same cost are not necessarily combined into # (And balances with the same cost are not necessarily combined into
# a single posting. Eg the 5734 EUR above is 5733 EUR and 1 EUR below.) # a single posting. Eg the 5734 EUR above is 5733 EUR and 1 EUR below.)
$ hledger -f- close -p 2016 assets liabilities --interleaved --show-costs -x $ hledger -f- close -p 2016 assets liabilities --interleaved --show-costs -x
2016-12-31 closing balances ; start: 2016-12-31 closing balances ; clopen:
assets:bank -5,733.00 EUR = 0.00 EUR assets:bank -5,733.00 EUR = 0.00 EUR
equity:opening/closing balances 5,733.00 EUR equity:opening/closing balances 5,733.00 EUR
liabilities:employer $-10,000.00 liabilities:employer $-10,000.00
@ -206,7 +206,7 @@ commodity AAA 0.00000000
expenses:banking $0.1280810 expenses:banking $0.1280810
$ hledger -f- close -p 2019 assets --show-costs -x $ hledger -f- close -p 2019 assets --show-costs -x
2019-12-31 closing balances ; start: 2019-12-31 closing balances ; clopen:
assets:aaa AAA -510 = AAA 0 assets:aaa AAA -510 = AAA 0
assets:usd $-49.50 assets:usd $-49.50
assets:usd $49.3900010 @ AAA 10.3528243 = $0.0000000 assets:usd $49.3900010 @ AAA 10.3528243 = $0.0000000
@ -218,7 +218,7 @@ $ hledger -f- close -p 2019 assets --show-costs -x
# ** 14. The same, without costs and with --interleaved. # ** 14. The same, without costs and with --interleaved.
$ hledger -f- close -p 2019 assets --interleaved -x $ hledger -f- close -p 2019 assets --interleaved -x
2019-12-31 closing balances ; start: 2019-12-31 closing balances ; clopen:
assets:aaa AAA -510 = AAA 0 assets:aaa AAA -510 = AAA 0
equity:opening/closing balances AAA 510 equity:opening/closing balances AAA 510
assets:usd $-0.1099990 = $0.0000000 assets:usd $-0.1099990 = $0.0000000
@ -245,12 +245,12 @@ commodity $1,000.00
2000-01-01 2000-01-01
(assets:a) $1,000 @@ $1,000 (assets:a) $1,000 @@ $1,000
$ hledger -f- close --migrate --show-costs -e 2001 $ hledger -f- close --clopen --show-costs -e 2001
2000-12-31 closing balances ; start: 2000-12-31 closing balances ; clopen:
assets:a $-1,000. @@ $1,000. = $0 assets:a $-1,000. @@ $1,000. = $0
equity:opening/closing balances equity:opening/closing balances
2001-01-01 opening balances ; start: 2001-01-01 opening balances ; clopen:
assets:a $1,000. @@ $1,000. = $1,000. assets:a $1,000. @@ $1,000. = $1,000.
equity:opening/closing balances equity:opening/closing balances
@ -264,12 +264,12 @@ $ hledger -f- close --assert --show-costs -e 2001
>= >=
# ** 19. close supports --round, like print. # ** 19. close supports --round, like print.
$ hledger -f- close --migrate -e 2001 --round=hard -c '$1.0' $ hledger -f- close --clopen -e 2001 --round=hard -c '$1.0'
2000-12-31 closing balances ; start: 2000-12-31 closing balances ; clopen:
assets:a $-1000.0 = $0.0 assets:a $-1000.0 = $0.0
equity:opening/closing balances equity:opening/closing balances
2001-01-01 opening balances ; start: 2001-01-01 opening balances ; clopen:
assets:a $1000.0 = $1000.0 assets:a $1000.0 = $1000.0
equity:opening/closing balances equity:opening/closing balances