I work on OnePassApps - this is our own app and our own build, so every figure below came out of the live Invoice Maker panel in one signed-out browser session on 7 November 2026, by typing the values in and reading the preview back.
The discount control is the easiest thing in an invoice tool to skip over, so here is exactly what it does - including the values it quietly ignores.
The control
Under Settings the app offers a document type, paper, currency, a document number, an issue date, a payment-due rule and a discount. The discount row has three options - None, Percent and Amount - with one line printed under it:
Taken off the subtotal before tax.
Pick Percent and a field labelled "Discount percentage" appears with a "%" suffix. Pick Amount and that same field becomes "Discount amount" with "GBP" beside it. Above the line items the panel states the rule it works to:
Prices exclude tax. Tax is worked out from the rate you enter on each line.
And next to the tax settings the app says it does not check your rates and gives no tax or legal advice - you type every rate yourself.
What I typed in
I pressed the app's own "Load example" button, which filled two lines, and I changed the tax rate on the second one from 20% to 5%:
| Line | Qty | Unit price | Tax | Amount |
|---|---|---|---|---|
| Design workshop (half day) | 1 | £450.00 | 20% | £450.00 |
| Prototype hours | 6.5 | £60.00 | 5% | £390.00 |
The subtotal line read £840.00.
A 10% discount
With the discount set to Percent and the field set to 10, the preview read:
Subtotal £840.00
Discount −£84.00
Tax at 5% on £351.00 £17.55
Tax at 20% on £405.00 £81.00
Total due (GBP) £854.55
The interesting part is the two tax bases. £351.00 is 90% of the £390.00 line and £405.00 is 90% of the £450.00 line. The discount is spread across the lines before tax, and each rate is then applied to its own discounted share. That is not the same as taking 10% off the total and taxing what is left at one rate - with two different rates on the invoice, the two answers come out different.
The pane header above the document tracked the new total too, reading "A4 · £854.55".
Bigger, smaller and all of it
- 12.5% - Discount −£105.00, "Tax at 5% on £341.25" £17.06, "Tax at 20% on £393.75" £78.75, total £830.81.
- 100% - Discount −£840.00, both tax rows £0.00, total £0.00.
Two rates, two rows, in rate order
With the discount back on None and the second line's rate at 7.5%, the preview read "Tax at 7.5% on £390.00" £29.25 and "Tax at 20% on £450.00" £90.00, total £959.25. The tax rows come out grouped by rate in ascending rate order, not in the order the lines sit in.
The values it ignores
The field takes text and keeps whatever you type, but several values leave the totals exactly as they were, with no discount row in the preview at all:
- 33.333 and 12.345 - more than two decimal places
- 150 - a percentage above 100
- -10 - a negative percentage
- 0 - no discount row appears, and the totals stay put (a zero discount and a refused one look the same here)
- Amount mode: 84.005 (three decimals) and 900 (more than the £840.00 subtotal)
Amount 84 and Amount 840 both applied, so the amount is allowed to take the whole subtotal but not more than it. Percent 100 and Percent 33.33 both applied, so the percentage is allowed to reach 100 but not pass it. Nothing in the panel told me a value had been refused - the field kept the text and the arithmetic carried on as if the discount were off.
Rounding, line by line
The preview prints its own rule:
Amounts are worked out in GBP's smallest unit and rounded half-up on each line.
A 33.33% discount showed "Discount −£279.97" - a third of a penny under £280 - and the two tax bases came out as £260.01 and £300.02, the second rounded up from 300.015. The tax rows read £13.00 and £60.00 and the total £633.03, which adds up with the discount row: £840.00 − £279.97 + £13.00 + £60.00.
What I did not test
- One build, one browser, one signed-out session, 7 November 2026.
- I did not print or save a PDF and I did not export the draft JSON, so I am not describing either file.
- I did not change the currency from GBP (£).
- Two line items only - three or more lines, a zero quantity and a negative price were not tried.
- The client name and the line descriptions are the app's own example data; no real client data was entered.
What it costs
The plan block on the page reads "Standard is free right now", "$0 / month" and "100,000 credits every 30 days" with no card required and no end date set. That is our own pricing page being read, not a comparison with anyone else.
Try it
I work on OnePassApps - we build these apps, and this one was measured today.
Top comments (0)