There is a special algorithm on how we handle tax rounding algorithm in our system.
Example:
Line | Qty | Unit Price | Tax | Tax (Before Round) | Tax (After Round) |
1 | 1 | 13.11 | 6% | 0.7866 | 0.79 |
2 | 1 | 13.11 | 6% | 0.7866 | 0.79 |
3 | 1 | 13.11 | 6% | 0.7866 | 0.79 |
4 | 1 | 0.00 | 6% | 0.0000 | 0.00 |
Total | 39.33 | 2.37 |
If you calculate the tax line by line and perform rounding to 2 decimals, the total tax of the above transaction will be 2.37. However, if you use 39.33 x 6% = 2.3598, after rounding will be 2.36 which has a 1 cent difference compared to 2.37.
In order to solve such issues, the easiest way is to apply this 1 cent to the last row of the transaction, then it will become below example:
Line | Qty | Unit Price | Tax | Tax (Before Round) | Tax (After Round) |
1 | 1 | 13.11 | 6% | 0.7866 | 0.79 |
2 | 1 | 13.11 | 6% | 0.7866 | 0.79 |
3 | 1 | 13.11 | 6% | 0.7866 | 0.79 |
4 | 1 | 0.00 | 6% | 0.0000 | -0.01 |
Total | 39.33 | 2.36 |
However, this will cause some confusions as the last line has no Unit Price but why is there tax amount? Therefore, we had derived this into a rounding algorithm called Adaptive Rounding Algorithm. This algorithm works from top to bottom.
Line | Qty | Unit Price | Tax | Tax (Before Round) | Previous Before Round Total | Previous After Round Total | Tax (After Round) |
1 | 1 | 13.11 | 6% | 0.7866 | 0.7866 | 0.79 | 0.79 |
2 | 1 | 13.11 | 6% | 0.7866 | 1.5732 | 1.57 | 0.78 |
3 | 1 | 13.11 | 6% | 0.7866 | 2.3598 | 2.36 | 0.79 |
4 | 1 | 0.00 | 6% | 0.0000 | 2.3598 | 2.36 | 0.00 |
Total | 39.33 | 2.36 |
This algorithm applies the formula:
Round (Sum of Tax Before Round from Line 1 to Line N) - Sum (Tax from Line 1 to Line N-1)
The tax of Line 1 is
= Round (0.7866)
= 0.79
The tax of Line 2 is
= Round (0.7866 + 0.7866) - (Line 1 Tax)
= Round (1.5732) - 0.79
= 1.57 - 0.79
= 0.78
The tax of Line 3 is
= Round (0.7866 + 0.7866 + 0.7866) - (Line 1 Tax + Line 2 Tax)
= Round (2.3598) - (0.79 + 0.78)
= 2.36 - 1.57
= 0.79
The tax of Line 4 is
= Round (0.7866 + 0.7866 + 0.7866 + 0.0000) - (Line 1 Tax + Line 2 Tax + Line 3 Tax)
= Round (2.3598) - (0.79 + 0.78 + 0.79)
= 2.36 - 2.36
= 0.00
By using this method, Line 4 will not have any tax amount because the Unit Price is 0.00. However, it may make the intermediate lines has tax values such as Line 2 having 1 cent different with other lines that have similar Unit Price.
But because in the end, people mostly check their tax amount of the transactions as a whole instead of individual item, so we have applied this algorithm in our calculation. In other words, as long as the total tax is correct, then you will not have to worry much about the individual tax amount at each line.