On Mon, Apr 18, 2022 at 11:57 PM Gulshan Singh <[email protected]> wrote: > > Thanks! Even with the issue you mention, when my income exceeds > $200,000, the paycheck that puts it over that amount isn't going to > put it over by a large amount, so I think I could live with that > margin of error or correct it manually later. I can't find anything > related to the `account()` function in the docs, is it not documented > or am I just missing it? > > While this solution would probably be good enough, I've figured out an > improvement which allows me to calculate this exactly. The idea is > that if the account total before the transaction is greater than > -200,000, then we can apply the .9% tax as normal. But if the account > total before the transaction is greater than -200,000 and the total > after is less than -200,000, then we calculate the difference between > the total after and -200,000, and apply the .9% tax just to this > amount, and just for this one transaction. > > ``` > account Assets:Bank > account Income:Hooli > > account Liabilities:Taxes:Medicare > account Liabilities:Taxes:Medicare:Additional > > define total_after(account_name) = account(account_name).total > define total_before(account_name, amount) = account(account_name).total - > amount > define did_cross_threshold(low, high, threshold) = low < threshold and > high > threshold > define should_compute_additional_medicare(account_name, amount) = > did_cross_threshold(total_after(account_name), > total_before(account_name, amount), -200000) > > = expr "account =~ /Income:Hooli/ and > should_compute_additional_medicare('Income:Hooli', O)" > (Liabilities:Taxes:Medicare:Additional) > ((total_after('Income:Hooli') + 200000 USD) * {0.009}) > > = expr "account =~ /Income:Hooli/ and total_before('Income:Hooli', O) > <= -200000 USD" > (Liabilities:Taxes:Medicare:Additional) .009 > > = expr "account =~ /Income:Hooli/" > (Liabilities:Taxes:Medicare) .0145 > > 2022-04-29 * Payroll > Income:Hooli -150,000 USD > Assets:Bank > > 2022-04-15 * Payroll > Income:Hooli -150,000 USD > Assets:Bank > > 2022-04-01 * Payroll > Income:Hooli -150,000 USD > Assets:Bank > ``` > > The result is: > ``` > -8,775 USD Liabilities:Taxes:Medicare > -2,250 USD Additional > -------------------- > -8,775 USD > ``` > Which shows that the additional tax was computed on the $250,000 that > was above $200,000, while the 1.45% tax was computed on the entire > $450,000 amount. > > Thanks for putting me on the right track! > > On Mon, Apr 18, 2022 at 4:36 PM Martin Michlmayr <[email protected]> wrote: > > > > * Gulshan Singh <[email protected]> [2022-04-17 00:06]: > > > I've tried something like this for the Medicare example, but it > > > doesn't work as abs(O) is dealing with the transaction amount, and > > > not the total balance of the account: > > > > There is a syntax to refer to the total of an account: > > account("...").total > > > > However, that's not going to work for your cause. If you go from, > > let's say, $180k income to $240k, there's afaik no way to tell ledger > > to apply something exactly at $200k. > > > > > > account Assets:Bank > > account Income:Hooli > > > > account Liabilities:Taxes:Medicare > > account Liabilities:Taxes:Medicare:Additional > > > > = expr "account =~ /Income:Hooli/ and account('Income:Hooli').total <= > > -200000 USD" > > (Liabilities:Taxes:Medicare:Additional) .009 > > > > = expr "account =~ /Income:Hooli/" > > (Liabilities:Taxes:Medicare) .0145 > > > > 2022-04-15 * Payroll > > Income:Hooli -150,000 USD > > Assets:Bank > > > > 2022-04-01 * Payroll > > Income:Hooli -150,000 USD > > Assets:Bank > > > > 2022-04-01 * Payroll > > Income:Hooli -150,000 USD > > Assets:Bank > >
I am NOT a programmer so perhaps I shouldn't be saying anything - - - but - - - IMHO wouldn't this be a good place to use the logic flow if -- then -- else? (meaning - - - a calculation happens, if value is less than or equal to y then action a happens, if the value is larger than y - - -well then action b happens) (Hopefully not quite a stupid interjection!) Regards -- --- You received this message because you are subscribed to the Google Groups "Ledger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ledger-cli/CAPpdf5-fXs%3DTBrE3dRydMAT8GjYRU188B3g4JpryWKLJtjRi-Q%40mail.gmail.com.
