equity: improve help, note limitations, ignore --date2
Try to make this less confusing.
This commit is contained in:
		
							parent
							
								
									9bb9d9268b
								
							
						
					
					
						commit
						98dd8c5f83
					
				@ -18,40 +18,45 @@ equitymode = hledgerCommandMode
 | 
				
			|||||||
Print a "closing balances" transaction that brings all accounts (or with
 | 
					Print a "closing balances" transaction that brings all accounts (or with
 | 
				
			||||||
query arguments, just the matched accounts) to a zero balance, followed by an
 | 
					query arguments, just the matched accounts) to a zero balance, followed by an
 | 
				
			||||||
opposite "opening balances" transaction that restores the balances from zero.
 | 
					opposite "opening balances" transaction that restores the balances from zero.
 | 
				
			||||||
Such transactions can be useful, eg, for bringing account balances across
 | 
					 | 
				
			||||||
file boundaries.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS
 | 
					FLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The opening balances transaction is useful to carry over
 | 
					The opening transaction is useful to carry over asset/liability balances 
 | 
				
			||||||
asset/liability balances if you choose to start a new journal file,
 | 
					if you choose to start a new journal file, eg yearly. The closing transaction
 | 
				
			||||||
eg at the beginning of the year.
 | 
					can be a useful complement, allowing you to optionally include old files 
 | 
				
			||||||
 | 
					(for more history) without disturbing the asset/liability balances 
 | 
				
			||||||
 | 
					(since the closing/opening pairs cancel out).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The closing balances transaction is useful to zero out balances in
 | 
					This command may also be useful for closing out expense/income accounts 
 | 
				
			||||||
the old file, which gives you the option of reporting on both files
 | 
					for a period (ie "closing the books" in accounting).
 | 
				
			||||||
at once while still seeing correct balances.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Balances are calculated, and the opening transaction is dated, as of
 | 
					The closing transaction asserts a zero balance for each closed account.
 | 
				
			||||||
the report end date, which you should specify with -e or date: (and
 | 
					 | 
				
			||||||
the closing transaction is dated one day earlier). If a report end
 | 
					 | 
				
			||||||
date is not specified, it defaults to today.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Example:
 | 
					By default, the closing transaction is dated yesterday, with balances 
 | 
				
			||||||
```shell
 | 
					calculated as of end of yesterday, and the opening transaction is dated today.
 | 
				
			||||||
$ hledger equity -f 2015.journal -e 2016/1/1 assets liabilities >>2015.journal
 | 
					To close on some other date, use: `hledger close -e OPENINGDATE ...`
 | 
				
			||||||
# move the opening balances transaction to 2016.journal
 | 
					
 | 
				
			||||||
$ hledger -f 2015.journal bal assets liabilities not:desc:closing # shows correct 2015 balances
 | 
					For example, carrying asset/liability balances into a new file for 2018:
 | 
				
			||||||
$ hledger -f 2016.journal bal assets liabilities                  # shows correct 2016 balances
 | 
					 | 
				
			||||||
$ hledger -f 2015.journal -f 2016.journal bal assets liabilities  # still shows correct 2016 balances
 | 
					 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Open question: how to handle txns spanning a file boundary ? Eg:
 | 
					$ hledger equity -f 2017.journal -e 2018/1/1 ^assets ^liab >>2017.journal
 | 
				
			||||||
```journal
 | 
					# cut & paste the opening transaction from 2017.journal to a new 2018.journal
 | 
				
			||||||
2015/12/30 * food
 | 
					# now:
 | 
				
			||||||
    expenses:food:dining   $10
 | 
					$ hledger bs -f 2018.journal                   # correct balances
 | 
				
			||||||
    assets:bank:checking  -$10  ; date:2016/1/4
 | 
					$ hledger bs -f 2018.journal -f 2017.journal   # still correct
 | 
				
			||||||
 | 
					$ hledger bs -f 2017.journal not:desc:closing  # must exclude closing txn 
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Possible issues/complications/todos:
 | 
				
			||||||
 | 
					- -p or date: should work as well as -e, but can be buggy
 | 
				
			||||||
 | 
					- a begin date should have no effect. Closed balances should be historical.
 | 
				
			||||||
 | 
					- transactions on the opening date should be excluded from closed balances 
 | 
				
			||||||
 | 
					- balance assertions can fail due to filtering by status or realness
 | 
				
			||||||
 | 
					- transactions spanning a file boundary, eg:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					2017/12/31
 | 
				
			||||||
 | 
					    expenses:food          1
 | 
				
			||||||
 | 
					    assets:bank:checking  -1  ; date:2018/1/1
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
This command might or might not have some connection to the concept of
 | 
					 | 
				
			||||||
"closing the books" in accounting.
 | 
					 | 
				
			||||||
  |]
 | 
					  |]
 | 
				
			||||||
  []
 | 
					  []
 | 
				
			||||||
  [generalflagsgroup1]
 | 
					  [generalflagsgroup1]
 | 
				
			||||||
@ -60,8 +65,12 @@ This command might or might not have some connection to the concept of
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
equity CliOpts{reportopts_=ropts} j = do
 | 
					equity CliOpts{reportopts_=ropts} j = do
 | 
				
			||||||
  today <- getCurrentDay
 | 
					  today <- getCurrentDay
 | 
				
			||||||
  let ropts_ = ropts{accountlistmode_=ALFlat}
 | 
					  let 
 | 
				
			||||||
 | 
					      -- TODO: this query is sometimes wrong 
 | 
				
			||||||
 | 
					      ropts_ = ropts{accountlistmode_=ALFlat}
 | 
				
			||||||
      q = queryFromOpts today ropts_
 | 
					      q = queryFromOpts today ropts_
 | 
				
			||||||
 | 
					      openingdate = fromMaybe today $ queryEndDate False q
 | 
				
			||||||
 | 
					      closingdate = addDays (-1) openingdate
 | 
				
			||||||
      (acctbals,_) = balanceReport ropts_ q j
 | 
					      (acctbals,_) = balanceReport ropts_ q j
 | 
				
			||||||
      balancingamt = negate $ sum $ map (\(_,_,_,b) -> normaliseMixedAmountSquashPricesForDisplay b) acctbals
 | 
					      balancingamt = negate $ sum $ map (\(_,_,_,b) -> normaliseMixedAmountSquashPricesForDisplay b) acctbals
 | 
				
			||||||
      ps = [posting{paccount=a
 | 
					      ps = [posting{paccount=a
 | 
				
			||||||
@ -72,7 +81,6 @@ equity CliOpts{reportopts_=ropts} j = do
 | 
				
			|||||||
           ,b <- amounts $ normaliseMixedAmountSquashPricesForDisplay mb
 | 
					           ,b <- amounts $ normaliseMixedAmountSquashPricesForDisplay mb
 | 
				
			||||||
           ]
 | 
					           ]
 | 
				
			||||||
           ++ [posting{paccount="equity:opening balances", pamount=balancingamt}]
 | 
					           ++ [posting{paccount="equity:opening balances", pamount=balancingamt}]
 | 
				
			||||||
      enddate = fromMaybe today $ queryEndDate (date2_ ropts_) q
 | 
					 | 
				
			||||||
      nps = [posting{paccount=a
 | 
					      nps = [posting{paccount=a
 | 
				
			||||||
                    ,pamount=mixed [negate b]
 | 
					                    ,pamount=mixed [negate b]
 | 
				
			||||||
                    ,pbalanceassertion=Just (b{aquantity=0}, nullsourcepos)
 | 
					                    ,pbalanceassertion=Just (b{aquantity=0}, nullsourcepos)
 | 
				
			||||||
@ -81,5 +89,5 @@ equity CliOpts{reportopts_=ropts} j = do
 | 
				
			|||||||
            ,b <- amounts $ normaliseMixedAmountSquashPricesForDisplay mb
 | 
					            ,b <- amounts $ normaliseMixedAmountSquashPricesForDisplay mb
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
           ++ [posting{paccount="equity:closing balances", pamount=negate balancingamt}]
 | 
					           ++ [posting{paccount="equity:closing balances", pamount=negate balancingamt}]
 | 
				
			||||||
  putStr $ showTransaction (nulltransaction{tdate=addDays (-1) enddate, tdescription="closing balances", tpostings=nps})
 | 
					  putStr $ showTransaction (nulltransaction{tdate=closingdate, tdescription="closing balances", tpostings=nps})
 | 
				
			||||||
  putStr $ showTransaction (nulltransaction{tdate=enddate, tdescription="opening balances", tpostings=ps})
 | 
					  putStr $ showTransaction (nulltransaction{tdate=openingdate, tdescription="opening balances", tpostings=ps})
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user