Setting Up Brazil Tax — End to End
Brazil is the most complex tax system REDA supports — several taxes on one line, some embedded in the price (por dentro), rates that depend on your regime and on who the buyer is. This article shows how to configure the data so all of that is handled for you. Set it up once and every invoice gets the right stack of taxes, posted the Brazilian way. We’ll configure a small catalogue, then post a sale to prove it.
Access you'll need. Setting up the tax rulebook requires the Accounting Admin v2 or Accounting Controller v2 permission set. The Accounts Payable v2, Accounts Receivable v2, and Read Only v2 sets can view the setup but not change it.
The configuration chain
| # | What | Why it exists | Source |
|---|---|---|---|
| 1 | Jurisdiction | BR + states (ICMS is state-level) | Seed |
| 2 | Tax Type | ICMS, IPI, PIS, COFINS, ISS, CBS, IBS, DIFAL, FCP — each flagged recoverable or not | Seed |
| 3 | Tax Profile | Goods vs services treatment buckets | Seed |
| 4 | Party Tax Profile | Your regime + whether the buyer is a contributor or consumer | Seed + you assign |
| 5 | Fiscal Operation | Intra-state vs inter-state (CFOP) — derived | Seed |
| 6 | Tax Rule | Assembles the stack per profile / state / regime / buyer | Seed |
| 7 | Product Fiscal Profile | Puts your product in a bucket | You |
| 8 | GL Mapping | Payable, input-credit, and contra-revenue deduction accounts | Seed |
| 9 | Registration + regime + defaults | Your nexus and your regime | You |
Our example catalogue
| Product / service | Treatment bucket | Taxes it attracts |
|---|---|---|
| Goods for resale (e.g. electronics) | BR-STD-GOODS | ICMS, PIS, COFINS, CBS, IBS |
| Manufactured goods | BR-IPI-GOODS | IPI (+ the above where configured) |
| Professional service | BR-SERVICES | ISS, PIS, COFINS |
Step 1 — Jurisdictions
The seed creates BR plus the 26 states + Distrito Federal. ICMS is a
state tax with state-specific rates, and the seller’s and buyer’s states
decide intra- vs inter-state — so the state jurisdictions matter (e.g. BR-SP
São Paulo, BR-RJ Rio de Janeiro).
Step 2 — Tax Types (the stack)
Brazil’s taxes ship as separate Tax Types, and two behaviours do a lot of work. Recoverable is a flag on the Tax Type itself; embedded (por dentro) is set per rule (Tax Included in Price on each Tax Rule), so the seeded rules for a tax carry it consistently. Here is how each tax behaves:
| Tax | Embedded (por dentro)? | Recoverable? |
|---|---|---|
| ICMS | Yes | Yes (Lucro Real) |
| PIS / COFINS | Yes | Yes (non-cumulative) |
| IPI | No (on top) | Yes (industrial) |
| ISS (services) | No | No |
| DIFAL / FCP | No | No |
| CBS / IBS (reform, pilot 2026) | No (on top) | Yes |
The embedded behaviour is the crucial one: an embedded tax is inside the price, so REDA posts it as a reduction of revenue, not an addition to what the customer owes (more in the payoff).
Step 3 — Tax Profiles
| Tax Profile | For |
|---|---|
BR-STD-GOODS | Standard goods (ICMS, CBS, IBS) |
BR-IPI-GOODS | Manufactured goods (IPI) |
BR-REDUCED-GOODS | Reduced-rate goods |
BR-SERVICES | Services (ISS) |
Step 4 — Party Tax Profiles (regime + contributor)
In Brazil the party profile carries two things that change the tax: your regime and whether a party is a state-tax contributor. This is where two of the four “what makes Brazil different” behaviours live.
| Party Profile | Regime | Contributor? | Use for |
|---|---|---|---|
BR-LR-CONTRIB | Lucro Real | Yes | Your entity (full-credit regime) |
BR-LP-CONTRIB | Lucro Presumido | Yes | Cumulative-regime entity |
BR-SN-CONTRIB | Simples Nacional | Yes | Simplified-regime entity |
BR-CONSUMER | — | No | End-consumer (B2C) buyer |
BR-EXEMPT | — | No | Tax-exempt entity |
- Regime → PIS/COFINS rate. Lucro Real = non-cumulative (1.65% / 7.6%, recoverable); Lucro Presumido = cumulative (0.65% / 3.0%, not recoverable). Set on your entity’s profile.
- Contributor → DIFAL/FCP. Those fire only on interstate sales to a non-contributor (a consumer). Set on the buyer’s profile.
Step 5 — Fiscal Operations (intra/inter, CFOP)
As in India, the engine derives intra-state vs inter-state from the two states and selects the
matching CFOP operation (Brazil’s fiscal-operation code, e.g. BR-5101 intrastate, BR-6101 interstate).
This drives the ICMS rate (internal vs interstate) and gates DIFAL/FCP. You don’t set it
on the invoice.
Step 6 — Tax Rules (how the stack assembles)
The seeded rules wire the stack together. You rarely edit them; it’s worth knowing how each tax is gated:
| Tax | Gated by |
|---|---|
| ICMS | Goods profile + destination state + intra/inter (sets the rate) |
| PIS / COFINS | Seller regime (and goods/services profile) |
| IPI | Manufactured-goods profile |
| ISS | Services profile |
| DIFAL / FCP | Interstate and buyer = Non-Contributor |
| CBS / IBS | Goods/services profile (reform pilot rates) |
Step 7 — Classify your catalogue
Give each product a fiscal profile (with its NCM code — Brazil’s harmonized product tariff code) linking it to a treatment bucket:
| Product | Assign Tax Profile |
|---|---|
| Goods for resale | BR-STD-GOODS |
| Manufactured goods | BR-IPI-GOODS |
| Professional service | BR-SERVICES |
Step 8 — GL mappings (incl. the deduction accounts)
Brazil needs a third kind of mapping that other countries don’t. As well as the Sales (payable) and Purchase (input-credit) mappings, each embedded sales tax needs a Sales Deduction mapping pointing at a contra-revenue account:
| Tax | Sales (payable) | Purchase (ITC) | Sales Deduction (contra-revenue) |
|---|---|---|---|
| ICMS | 2331-ICMS-BR | 1523-ICMS-ITC-BR | 4911-ICMS-SALES-BR |
| PIS | 2335-PIS-BR | 1521-PIS-ITC-BR | 4912-PIS-SALES-BR |
| COFINS | 2336-COFINS-BR | 1522-COFINS-ITC-BR | 4913-COFINS-SALES-BR |
| IPI | 2334-IPI-BR | 1524-IPI-ITC-BR | — (not embedded) |
Step 9 — Register, set your regime & defaults
BR (and the state) with your CNPJ / state registration.BR-LR-CONTRIB (Lucro Real), BR-LP-CONTRIB (Presumido), or BR-SN-CONTRIB (Simples) — this sets your PIS/COFINS rates.BR-CONSUMER. This is what turns DIFAL/FCP on or off.The payoff — the stack, posted the Brazilian way
Sell R$10,000 of resale goods, intrastate in São Paulo, to a business (contributor). The configured data assembles the stack: ICMS 18% (embedded), PIS 1.65% + COFINS 7.6% (embedded, Lucro Real), CBS 0.9% + IBS 0.1% (on top). DIFAL/FCP don’t fire (intrastate, and the buyer is a contributor). The journal:
| Account | Debit | Credit |
|---|---|---|
| Accounts Receivable | R$10,100.00 | |
| ICMS on Sales (deduction) | R$1,800.00 | |
| PIS on Sales (deduction) | R$165.00 | |
| COFINS on Sales (deduction) | R$760.00 | |
| Gross Revenue | R$10,000.00 | |
| ICMS Payable | R$1,800.00 | |
| PIS Payable | R$165.00 | |
| COFINS Payable | R$760.00 | |
| CBS Payable | R$90.00 | |
| IBS Payable | R$10.00 |
Debits R$12,825 = Credits R$12,825. The customer pays R$10,100 (price + the on-top CBS/IBS); net revenue is R$7,275 (R$10,000 gross − R$2,725 embedded ICMS/PIS/COFINS). The embedded taxes reduced revenue; they did not inflate the receivable.
Change the buyer — DIFAL & FCP appear
Sell the same goods interstate (SP → RJ) to an end consumer
(BR-CONSUMER). Two things change, both from data: ICMS uses the interstate rate
(12%), and because the buyer is a non-contributor on an interstate sale, DIFAL
(the rate differential, e.g. 8%) and FCP (e.g. 2%) now fire and add to the
receivable. Sell to a business in RJ instead and DIFAL/FCP stay off — the buyer
settles ICMS on its own resale. You changed one field (the customer’s profile); the engine
did the rest.
Purchases — recovering embedded credits
When you buy, the recoverable embedded taxes (ICMS, PIS, COFINS for Lucro Real) are lifted out of the cost into input-credit assets (a recuperar), leaving the expense net — the mirror of the sales-side deduction. Non-recoverable embedded taxes stay in the cost. Again, driven by the Tax Type’s recoverable flag, not a choice at entry.
If the tax looks wrong, check the chain
- PIS/COFINS missing? The entity’s Party Tax Profile must carry the right regime (Lucro Real/Presumido) — that’s what those rules match on.
- DIFAL/FCP firing for a business buyer? Tag that customer as a Contributor, not
BR-CONSUMER. - Posting error about a missing mapping? An embedded sales tax needs its Sales Deduction GL mapping (Step 8).
- Wrong ICMS rate? Check both states are set — intra vs inter changes the rate.
Where to go next
- UK VAT — the simplest walkthrough to compare against.
- India (GST + TDS) — another multi-component country setup.
- Tax Calculation Components — how Brazil’s layered bases are built.
- Tax Seeding Wizard — load Brazil’s rulebook in one click.
- Understanding Withholding Tax — Brazil’s IRRF withholding side.
Frequently asked questions
By Brazilian convention ICMS (and PIS/COFINS) are por dentro — the tax is part of the price the customer pays, not an add-on. REDA reflects this by posting the embedded amount as a deduction from gross revenue (reducing it to net) rather than increasing Accounts Receivable.
Only when a sale is interstate AND the buyer is a non-contributor (an end consumer). Sell within one state, or sell to a registered business, and they don’t fire. It’s controlled by the rule’s Buyer Contributor Scope against the buyer’s party profile.
It sets your PIS/COFINS rates: Lucro Real is non-cumulative (1.65% / 7.6%, recoverable as credits); Lucro Presumido and Simples are cumulative (0.65% / 3.0%, not recoverable). Choose the right party profile on your entity and the correct rules match.
No action yet beyond knowing it’s coming. The 2026 pilot rates are seeded; when the full rates are law REDA ships an updated pack and you re-seed. Your current setup keeps serving the transition years and historical documents.
Was this article helpful?