close: fix some inappropriate rounding, ensure the txn balances (#1164)
This commit is contained in:
		
							parent
							
								
									64546cd54a
								
							
						
					
					
						commit
						69bc8f803b
					
				| @ -50,7 +50,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do | |||||||
|       openingdate = fromMaybe today $ queryEndDate False q |       openingdate = fromMaybe today $ queryEndDate False q | ||||||
|       closingdate = addDays (-1) openingdate |       closingdate = addDays (-1) openingdate | ||||||
|       (acctbals,_) = balanceReportFromMultiBalanceReport ropts_ q j |       (acctbals,_) = balanceReportFromMultiBalanceReport ropts_ q j | ||||||
|       balancingamt = sum $ map (\(_,_,_,b) -> normaliseMixedAmount b) acctbals |       totalbalancingamt = sum $ map (\(_,_,_,b) -> normaliseMixedAmount b) acctbals | ||||||
| 
 | 
 | ||||||
|       -- since balance assertion amounts are required to be exact, the |       -- since balance assertion amounts are required to be exact, the | ||||||
|       -- amounts in opening/closing transactions should be too (#941, #1137) |       -- amounts in opening/closing transactions should be too (#941, #1137) | ||||||
| @ -69,7 +69,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do | |||||||
|                    if interleaved then |                    if interleaved then | ||||||
|                    -- a corresponding posting transferring the above balance to equity |                    -- a corresponding posting transferring the above balance to equity | ||||||
|                    [posting{paccount = closingacct |                    [posting{paccount = closingacct | ||||||
|                            ,pamount  = Mixed [b] |                            ,pamount  = Mixed [setprec b] | ||||||
|                            } |                            } | ||||||
|                    ] |                    ] | ||||||
|                    else [] |                    else [] | ||||||
| @ -87,7 +87,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do | |||||||
|                   -- a final posting transferring all the balances to equity |                   -- a final posting transferring all the balances to equity | ||||||
|                   -- (print will show it as multiple single-commodity postings) |                   -- (print will show it as multiple single-commodity postings) | ||||||
|                   [posting{paccount = closingacct |                   [posting{paccount = closingacct | ||||||
|                           ,pamount  = balancingamt |                           ,pamount  = mapMixedAmount setprec totalbalancingamt | ||||||
|                           } |                           } | ||||||
|                   ] |                   ] | ||||||
| 
 | 
 | ||||||
| @ -102,7 +102,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do | |||||||
|                    if interleaved then |                    if interleaved then | ||||||
|                    -- a corresponding posting transferring the above balance from equity |                    -- a corresponding posting transferring the above balance from equity | ||||||
|                    [posting{paccount = openingacct |                    [posting{paccount = openingacct | ||||||
|                            ,pamount  = Mixed [negate b] |                            ,pamount  = Mixed [setprec $ negate b] | ||||||
|                            } |                            } | ||||||
|                    ] |                    ] | ||||||
|                    else [] |                    else [] | ||||||
| @ -121,7 +121,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do | |||||||
|                   -- a final posting transferring all the balances from equity |                   -- a final posting transferring all the balances from equity | ||||||
|                   -- (print will show it as multiple single-commodity postings) |                   -- (print will show it as multiple single-commodity postings) | ||||||
|                   [posting{paccount = openingacct |                   [posting{paccount = openingacct | ||||||
|                           ,pamount  = negate balancingamt |                           ,pamount  = mapMixedAmount setprec $ negate totalbalancingamt | ||||||
|                           } |                           } | ||||||
|                   ] |                   ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -267,3 +267,36 @@ $ hledger -f- close -p 2016 assets liabilities --interleaved | |||||||
| 
 | 
 | ||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
|  | # 10. A tricky case where a closing posting was rounded and failed to balance (#1164) | ||||||
|  | < | ||||||
|  | commodity $0.00 | ||||||
|  | commodity AAA 0.00000000 | ||||||
|  | 
 | ||||||
|  | 2019-01-01 opening balance | ||||||
|  |     (assets:usd)                                 $49.50 | ||||||
|  | 
 | ||||||
|  | 2019-01-02 buy some AAA | ||||||
|  |     assets:usd                                  -$49.2619200 | ||||||
|  |     assets:aaa                               AAA 510 | ||||||
|  |     assets:usd                                   -$0.1280810 | ||||||
|  |     expenses:banking                              $0.1280810 | ||||||
|  | 
 | ||||||
|  | $ hledger -f- close -p 2019 assets | ||||||
|  | 2019-12-31 closing balances | ||||||
|  |     assets:aaa                              AAA -510.00000000 = AAA 0.00000000 | ||||||
|  |     assets:usd                                        $-49.50 | ||||||
|  |     assets:usd                 $49.390001 @ AAA 10.3528242505 = $0.00 | ||||||
|  |     equity:closing balances                            $49.50 | ||||||
|  |     equity:closing balances    $-49.390001 @ AAA 10.3528242505 | ||||||
|  |     equity:closing balances                  AAA 510.00000000 | ||||||
|  | 
 | ||||||
|  | 2020-01-01 opening balances | ||||||
|  |     assets:aaa                                AAA 510.00000000 = AAA 510.00000000 | ||||||
|  |     assets:usd                                          $49.50 | ||||||
|  |     assets:usd                 $-49.390001 @ AAA 10.3528242505 = $0.109999 | ||||||
|  |     equity:opening balances                            $-49.50 | ||||||
|  |     equity:opening balances     $49.390001 @ AAA 10.3528242505 | ||||||
|  |     equity:opening balances                  AAA -510.00000000 | ||||||
|  | 
 | ||||||
|  | >=0 | ||||||
|  | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user