Tax rates
This document explains what tax rates are, how Zenskar matches a jurisdiction, how tax components and rate changes work, and the limits of the Zenskar tax engine.Map of concepts
Map of concepts
A tax rate belongs to one tax category and one jurisdiction in a business entity. Zenskar matches the most specific jurisdiction to the billing address of the customer and applies only that tax rate. The tax components of the rate change that is in effect add up to the total percentage.
Tax rates: what the Zenskar tax engine applies
A tax rate is the set of percentages that the Zenskar tax engine applies to one tax category in one jurisdiction. Each business entity configures its own tax rates. The percentages of a tax rate can change over time. Each change is a rate change. A tax rate needs a served country. Add Tax Rate is unavailable until the business entity has a served country. The Country list shows only served countries.Jurisdictions
A jurisdiction is the geographic area that a tax rate covers. A jurisdiction is defined by one or more geographic levels. Each level narrows the level above it.
Zenskar rejects a city without a state, and a ZIP-code range without a state and a city. The start code and the end code of a ZIP-code range must have the same length. The start code must be less than or equal to the end code. A single ZIP code is a range whose start code and end code are the same.
How Zenskar matches a jurisdiction
Zenskar matches tax rates against the default billing address of the customer. Zenskar starts at the most specific level in the address and moves up one level at a time, in this order:- ZIP code
- City
- State
- Country
A jurisdiction matches only when its state, city, and ZIP code are the same as in the billing address of the customer.
Zenskar moves only from a more specific level to a less specific one. Zenskar matches only at levels that the address has. For example, a state-level tax rate does not match an address without a state.
Example: tax-rate applicability based on billing address
A business entity serves the United States with the Zenskar tax engine. It has the following tax rates for one tax category. It has no country-level tax rate for the United States.
Tax rate 2 and tax rate 3 repeat the state tax as a tax component. The Zenskar tax engine applies only one tax rate. Each tax rate must therefore include every tax that applies in its jurisdiction.
The following table shows which tax rate applies to customers with different billing addresses:
The fourth and fifth rows show common mistakes. A ZIP+4 code falls back to a less specific tax rate. A state name that differs from the state of the tax rate matches nothing.
When no tax rate matches, the Zenskar tax engine has no tax rate to apply. This can affect contracts for that customer.
The tax rates in this example are fictional. They do not reflect the tax law of any state or city.
Tax components
A tax component is a named percentage within a rate change. A rate change has one or more tax components. Each tax component has a Tax Name, for exampleGST, and a Tax Percentage. The name must be unique within the rate change. The panel notes that the tax name is displayed on invoices.
The Zenskar tax engine adds the tax components of a rate change together. For example, a rate change with CGST at 9% and SGST at 9% applies 18%. Compound rates, in which one tax component applies to an amount that includes another, are not supported.
Rate changes
A rate change is one dated entry of a tax rate. A tax rate is a sequence of rate changes. Each rate change has a start date and its own tax components. A rate change applies until the next rate change starts. When a tax rate is added, several rate changes can be added at once with Schedule Rate Change. Zenskar sets the end date of each rate change to the day before the next one starts. The last rate change has no end date. Rate changes of a tax rate cannot share a start date, and cannot overlap or share a day. Zenskar rejects a rate change that breaks either condition. If saving several rate changes fails partway, the rate changes saved before the failure stay saved. Zenskar reports how many rate changes it saved. The remaining rate changes stay in the panel, ready to fix and save again.A saved rate change cannot be edited, ended, or deleted in the dashboard. After a rate change without an end date is saved, no later rate change can be added for the same tax category and jurisdiction. Known future changes, such as an announced rate increase, belong in the tax rate when it is added.
The tax rates list shows the number of rate changes of each tax rate. The number opens Tax Rate Details, which lists every rate change with its start date, end date, and tax components.
Example: tax-rate changes over time
A business entity serves Australia with the Zenskar tax engine. GST on SaaS subscriptions was 9% in 2025. It is 10% from 1 January 2026. An increase to 11% is announced for 1 July 2027. The tax rate for the tax categorySaaS subscription in Australia has three rate changes:
Zenskar set the end dates of rate changes 1 and 2 when the three rate changes were saved together. On 1 July 2027, rate change 3 becomes Active. Rate change 2 then becomes Expired.
If only rate changes 1 and 2 had been saved, rate change 2 would have no end date. Rate change 3 would then overlap it, and the dashboard could not add it. For this reason, the announced increase belongs in the tax rate when it is added.
The percentages in this example are fictional.
Expired rate changes: why Zenskar keeps them
Zenskar keeps every rate change after it expires. A rate change cannot be deleted in the dashboard. Tax for a billing period uses one rate change: the one in effect on a single date of that period. It is not the rate change in effect today. Zenskar does not split a billing period across two rate changes. Which date applies depends on the billing of the contract. In the example, tax for 2025 uses GST 9% from rate change 1, which is already Expired. Tax for March 2027 uses GST 10%, even when Zenskar calculates it after 1 July 2027. The following cases use the rate changes from the example:
Expired rate changes help in the following cases:
Deleting an expired rate change would leave those periods without the correct rate. This can affect contracts and invoices for those periods.