close: use exact, minimal amounts; ensure assertions pass (#941)
This commit is contained in:
		
							parent
							
								
									9e4b302af7
								
							
						
					
					
						commit
						7b47fb608e
					
				| @ -34,8 +34,11 @@ This command may also be useful for closing out expense/income accounts | ||||
| for a period (ie "closing the books" in accounting). | ||||
| 
 | ||||
| Both transactions include balance assertions for the closed/reopened accounts. | ||||
| 
 | ||||
| You probably shouldn't use status or realness queries (eg -C or -R) with this  | ||||
| command, or the balance assertions will require that query to pass. | ||||
| Likewise, if you generate them with --auto, the assertions will depend on | ||||
| any auto postings and --auto will be required to make them pass. | ||||
| 
 | ||||
| By default, the closing transaction is dated yesterday, with balances  | ||||
| calculated as of end of yesterday, and the opening transaction is dated today. | ||||
| @ -83,17 +86,22 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do | ||||
|       closingdate = addDays (-1) openingdate | ||||
|       (acctbals,_) = balanceReportFromMultiBalanceReport ropts_ q j | ||||
|       balancingamt = negate $ sum $ map (\(_,_,_,b) -> normaliseMixedAmountSquashPricesForDisplay b) acctbals | ||||
| 
 | ||||
|       -- since balance assertion amounts are required to be exact, the | ||||
|       -- amounts in opening/closing transactions should be too (#941) | ||||
|       -- setprec = setFullPrecision | ||||
|       setprec = setMinimalPrecision | ||||
|       ps = [posting{paccount=a | ||||
|                    ,pamount=mixed [b] | ||||
|                    ,pbalanceassertion=Just assertion{ baamount=b } | ||||
|                    ,pamount=mixed [setprec b] | ||||
|                    ,pbalanceassertion=Just assertion{ baamount=setprec b } | ||||
|                    } | ||||
|            |(a,_,_,mb) <- acctbals | ||||
|            ,b <- amounts $ normaliseMixedAmountSquashPricesForDisplay mb | ||||
|            ] | ||||
|            ++ [posting{paccount="equity:opening balances", pamount=balancingamt}] | ||||
|       nps = [posting{paccount=a | ||||
|                     ,pamount=mixed [negate b] | ||||
|                     ,pbalanceassertion=Just assertion{ baamount=b{aquantity=0} } | ||||
|                     ,pamount=mixed [setprec $ negate b] | ||||
|                     ,pbalanceassertion=Just assertion{ baamount= setprec b{aquantity=0} } | ||||
|                     } | ||||
|             |(a,_,_,mb) <- acctbals | ||||
|             ,b <- amounts $ normaliseMixedAmountSquashPricesForDisplay mb | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| # Simple case | ||||
| # 1. Simple case | ||||
| hledger close -f- -p 2016 assets liabilities | ||||
| <<< | ||||
| 2016/1/1 open | ||||
| @ -33,7 +33,7 @@ hledger close -f- -p 2016 assets liabilities | ||||
| 
 | ||||
| >>>=0 | ||||
| 
 | ||||
| # Test aggregation of postings with prices | ||||
| # 2. Test aggregation of postings with prices | ||||
| hledger close -f- -p 2016 assets liabilities | ||||
| <<< | ||||
| Y2016 | ||||
| @ -58,18 +58,18 @@ Y2016 | ||||
| 	liabilities:employer | ||||
| >>> | ||||
| 2016/12/31 closing balances | ||||
|     assets:bank                -5,733.00 EUR = 0.00 EUR | ||||
|     liabilities:employer           -1.00 EUR = 0.00 EUR | ||||
|     assets:bank                  -5,733 EUR = 0 EUR | ||||
|     liabilities:employer             -1 EUR = 0 EUR | ||||
|     equity:closing balances | ||||
| 
 | ||||
| 2017/01/01 opening balances | ||||
|     assets:bank                 5,733.00 EUR = 5,733.00 EUR | ||||
|     liabilities:employer            1.00 EUR = 1.00 EUR | ||||
|     assets:bank                    5,733 EUR = 5,733 EUR | ||||
|     liabilities:employer               1 EUR = 1 EUR | ||||
|     equity:opening balances | ||||
| 
 | ||||
| >>>=0 | ||||
| 
 | ||||
| # A begin date should be ignored | ||||
| # 3. A begin date should be ignored | ||||
| hledger close -f- -b2017/6/1 -e2018 | ||||
| <<< | ||||
| 2017/1/1 | ||||
| @ -85,7 +85,7 @@ hledger close -f- -b2017/6/1 -e2018 | ||||
| 
 | ||||
| >>>=0 | ||||
| 
 | ||||
| # Print just the opening transaction | ||||
| # 4. Print just the opening transaction | ||||
| hledger close -f- -p 2016 assets liabilities --opening | ||||
| <<< | ||||
| 2016/1/1 open | ||||
| @ -113,7 +113,7 @@ hledger close -f- -p 2016 assets liabilities --opening | ||||
| 
 | ||||
| >>>=0 | ||||
| 
 | ||||
| # Print just the closing transaction | ||||
| # 5. Print just the closing transaction | ||||
| hledger close -f- -p 2016 assets liabilities --closing | ||||
| <<< | ||||
| 2016/1/1 open | ||||
| @ -141,7 +141,7 @@ hledger close -f- -p 2016 assets liabilities --closing | ||||
| 
 | ||||
| >>>=0 | ||||
| 
 | ||||
| # Supplying --opening --closing is the same as just "close" | ||||
| # 6. Supplying --opening --closing is the same as just "close" | ||||
| hledger close -f- -p 2016 assets liabilities --opening --closing | ||||
| <<< | ||||
| 2016/1/1 open | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user