> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Taxes and currency

> How TimeTracker calculates invoice discounts, named tax rates and totals, and how currency and exchange rates work when an invoice mixes currencies.

An invoice is always in one currency. Discounts come off the subtotal, and every tax rate applies to the same post-discount base.

## The order of the calculation

<Steps>
  <Step title="Subtotal">
    Add up every line amount.
  </Step>

  <Step title="Discount">
    Subtract the discount. A percent discount is taken against the **pre-discount subtotal**.
  </Step>

  <Step title="Base for tax">
    `subtotal − discount`. If a discount is larger than the subtotal, the base floors at zero rather than going negative.
  </Step>

  <Step title="Tax">
    Apply each named tax rate to that same base. Taxes never compound.
  </Step>

  <Step title="Total">
    `base + all taxes`.
  </Step>
</Steps>

## Discounts

| Option           | Meaning                                                 |
| ---------------- | ------------------------------------------------------- |
| **None**         | No discount                                             |
| **Percent**      | The amount is a percentage of the pre-discount subtotal |
| **Fixed amount** | The amount is a flat money value                        |

A 10% discount on a $2,160 subtotal is `2160 × 0.10 = $216\`.

## Taxes

Add as many named rates as you need. Each row has a **Tax name** (such as `VAT`) and a **rate** as a percentage (such as `20`). A row only counts once both fields are filled.

### Taxes do not compound

This is the rule that trips people up. Every tax line is calculated on the **same** post-discount base. A second tax is never applied on top of the first.

Subtotal \$1,000, no discount, two taxes:

| Line        | Calculation      | Amount         |
| ----------- | ---------------- | -------------- |
| Base        |                  | \$1,000.00     |
| VAT 20%     | 1,000 × 0.20     | \$200.00       |
| City tax 5% | 1,000 × 0.05     | \$50.00        |
| **Total**   | 1,000 + 200 + 50 | **\$1,250.00** |

If taxes compounded, the total would be `1,000 × 1.20 × 1.05 = $1,260.00`. TimeTracker does not do that.

## A full worked example

Bluebird Coffee's March invoice at Northwind Studio:

| Step                        | Calculation    | Amount         |
| --------------------------- | -------------- | -------------- |
| Sarah Lin, 12 h at \$100    | 12 × 100       | \$1,200.00     |
| Jonas Bergman, 8 h at \$120 | 8 × 120        | \$960.00       |
| **Subtotal**                | 1,200 + 960    | **\$2,160.00** |
| Discount 10%                | 2,160 × 0.10   | − \$216.00     |
| After discount              | 2,160 − 216    | \$1,944.00     |
| VAT 20%                     | 1,944 × 0.20   | \$388.80       |
| **Total**                   | 1,944 + 388.80 | **\$2,332.80** |

Note that the VAT is on $1,944, not on $2,160. Tax always follows the discount.

## Currency

| Level                          | Decides                                              |
| ------------------------------ | ---------------------------------------------------- |
| Workspace **Base currency**    | The default everywhere                               |
| Client **Default currency**    | The currency a new invoice for that client starts in |
| The invoice **Currency** field | What this invoice is denominated in                  |

### The currency locks

The **Currency** field is editable until the invoice has a line. After that it is greyed out. To change it, remove every line, or start a new invoice.

This exists so an invoice can never end up holding lines priced in a currency it no longer uses.

## Exchange rates

If a selected line is priced in a different currency from the invoice, an **Exchange rates** section appears in the builder:

> Some selected lines are billed in a different currency than this invoice (USD). Enter the rate to convert each into USD.

You get one field per source currency, labelled for example **EUR → USD rate**.

### How the rate is applied

The rate is a multiplier: one unit of the source currency equals this many units of the invoice currency.

Ana Ferreira bills at **€80/hour**. The invoice is in **USD**. You enter `1.08`.

| Step           | Calculation | Result           |
| -------------- | ----------- | ---------------- |
| Converted rate | 80 × 1.08   | \$86.40 per hour |
| 4 hours        | 4 × 86.40   | **\$345.60**     |

The line is stored in USD, and the rate `1.08` is frozen onto it.

<Warning>
  There is no automatic rate lookup and no silent 1:1 fallback. If a conversion is needed and no rate is supplied, the save is refused. Money is never summed across currencies.
</Warning>

### The rate is frozen

The exchange rate is snapshotted onto the invoice line when the invoice is created. Using a different rate on a later invoice never re-prices an earlier one. See [/rates/rate-snapshots](/rates/rate-snapshots).

## Rounding

Money is rounded **once**, at the end, using half-up rounding, to the currency's own number of decimal places.

| Currency                           | Decimal places |
| ---------------------------------- | -------------- |
| USD, EUR, GBP, INR and most others | 2              |
| JPY, KRW, VND, CLP                 | 0              |
| BHD, KWD, OMR, TND                 | 3              |

Nothing is rounded partway through, so the subtotal, discount and tax on an invoice always add up to the total exactly.

## Expense markup

A billable expense on an invoice is billed at its amount plus its markup:

`amount × (1 + markup% ÷ 100)`

A $200 travel expense with a 15% markup bills at `200 × 1.15 = $230\`. The markup is set on the expense, not on the invoice. See [/expenses/billable-expenses](/expenses/billable-expenses).

## What TimeTracker does not do

| Not supported                  | What to do instead                            |
| ------------------------------ | --------------------------------------------- |
| Compounding taxes              | Enter the effective combined rate as one line |
| Tax on individual lines        | Taxes apply to the whole invoice              |
| Automatic tax rules by country | Add the rates you need per invoice            |
| Automatic exchange rate lookup | Enter the rate you want to use                |
| Two currencies on one invoice  | Convert, or raise one invoice per currency    |

TimeTracker records the tax you tell it to charge. It is not a tax determination engine – check your own obligations.

## Permissions

| Action                                      | Capability                 | Default roles                          |
| ------------------------------------------- | -------------------------- | -------------------------------------- |
| Set discount, tax, currency, exchange rates | `invoice.manage`           | Owner, Admin, Project Manager, Finance |
| Change the workspace base currency          | `workspace.updateSettings` | Owner, Admin                           |
| Change a client's default currency          | `client.manage`            | Owner, Admin, Project Manager          |

## Common questions

<AccordionGroup>
  <Accordion title="Is tax applied before or after the discount?">
    After. The base for every tax line is `subtotal − discount`.
  </Accordion>

  <Accordion title="Can I put a discount on one line only?">
    No. The discount applies to the whole invoice. For a per-line reduction, adjust the line itself or add a negative-value manual line.
  </Accordion>

  <Accordion title="What if the discount is larger than the subtotal?">
    The base floors at zero. The invoice never goes negative.
  </Accordion>

  <Accordion title="Can I have two tax rates?">
    Yes, as many as you need. They all apply to the same post-discount base.
  </Accordion>

  <Accordion title="Can I change the currency after adding lines?">
    No. Remove every line first, or start a new invoice.
  </Accordion>

  <Accordion title="Does the exchange rate I enter get saved for next time?">
    It is frozen onto this invoice's lines. The next invoice asks again, so you always confirm the rate you are using.
  </Accordion>

  <Accordion title="Why does a JPY invoice have no decimals?">
    Because the yen has no minor unit. Each currency is rounded to its own number of decimal places.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Message                                                                                                     | Meaning                               | Fix                                           |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------- | --------------------------------------------- |
| "Enter a valid exchange rate for EUR → USD before saving."                                                  | A rate field is empty or not positive | Enter a decimal such as `1.08`                |
| "This invoice is in USD but some lines are in EUR, and no exchange rate is on file. Add one, then invoice." | A conversion is needed                | Fill in the **Exchange rates** section        |
| "Some lines are in a different currency from the invoice. Convert them, or invoice them separately."        | A line reached the totals unconverted | Supply the rate, or split the invoice         |
| "That isn't a currency code we recognise. Pick one from the list."                                          | Unsupported currency code             | Use a supported three-letter code             |
| The **Currency** field is greyed out                                                                        | The invoice already has a line        | Remove all lines, or start a new invoice      |
| The tax total is lower than expected                                                                        | Tax follows the discount              | Check the post-discount base                  |
| Two taxes do not stack                                                                                      | Working as designed                   | Use one combined rate if you need compounding |

## Related guides

<CardGroup cols={2}>
  <Card title="Currencies and exchange rates" icon="globe" href="/rates/currencies-and-exchange-rates">
    Currency across the whole product.
  </Card>

  <Card title="Create an invoice" icon="file-plus" href="/invoicing/create-an-invoice">
    Where discount and tax are entered.
  </Card>

  <Card title="Record a payment" icon="hand-holding-dollar" href="/invoicing/record-a-payment">
    Payment currency must match.
  </Card>

  <Card title="Rate snapshots" icon="camera" href="/rates/rate-snapshots">
    Why a frozen rate matters.
  </Card>

  <Card title="Invoice statuses" icon="signal" href="/invoicing/invoice-statuses">
    How the balance is derived.
  </Card>

  <Card title="Invoicing troubleshooting" icon="life-ring" href="/invoicing/troubleshooting">
    Every message in one place.
  </Card>
</CardGroup>
