Brazil Tax Reform Calculator - IBS and CBS avatar

Brazil Tax Reform Calculator - IBS and CBS

Pricing

Pay per event

Go to Apify Store
Brazil Tax Reform Calculator - IBS and CBS

Brazil Tax Reform Calculator - IBS and CBS

Simulate Brazilian IBS/CBS tax reform scenarios with step-by-step calculations, sourced assumptions, explicit estimate warnings and privacy-safe batch diagnostics.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Kman

Kman

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

Brazil Tax Reform Calculator

Simulate Brazilian IBS/CBS tax reform scenarios for 2026–2033. Submit one anonymous calculation or a batch of up to 100. Each calculation produces a dataset row containing the engine result, step-by-step explanation, assumptions, public sources and warnings. Calculations run offline against the bundled parameter snapshot; they do not fetch current legislation.

Not legal/tax advice. This is an educational simulation and does not replace a qualified tax or legal professional. A verificado label describes the status of the parameters used in the bundled snapshot, not a professional opinion on a transaction. ESTIMATIVA marks hypothetical scenario assumptions. Parameters marked nao_verificado are always blocked.

Input

Use the original Portuguese engine field names. Monetary amounts are BRL numbers, with at most two decimal places and a maximum of one billion. Rates are fractions between zero and one, with up to six decimal places. Input is limited to 1 MiB. Unknown fields are rejected at every level. Do not submit personal data, identifiers, names, addresses or free text.

A verified-only calculation, without old-tax comparison:

{
"categoria": "carga",
"ano": 2026,
"base": 10000
}

This returns an IBS/CBS debit and payment amount of BRL 100 before any declared waiver or credits. The result explains the configured 2026 offset against old federal taxes; it does not calculate an old-tax comparison unless enabled.

FieldMeaning
categoria, ano, baseRequired category, year 2026–2033 and net IBS/CBS taxable base after statutory exclusions
creditosEligible tax credits already established, as a complete { "cbs": 100, "ibs": 200 } object; these are tax amounts, not input costs
permitirEstimativasOmitted means false. True permits hypothetical parameters and also enables old-tax comparison unless explicitly disabled
compararAntigosOmitted means false when estimates are disabled. Explicit false keeps old-tax comparison disabled even with estimates enabled
cumpreObrigacoesOmitted means false. True declares compliance for the configured 2026 payment waiver
confirmarEnquadramentoExplicit eligibility declaration required for reduced/exempt categories; enquadramentoConfirmado is the equivalent engine field; aliases must agree
comandocalcular by default. comparar evaluates all eight transition years inside one dataset row; any estimated parameters used still need consent
formatotexto by default, or json / markdown; controls formatted, while structured fields are always retained
aliquotasPlenas, aliquotasAntigasOptional hypothetical full reference rates or old-tax rates; complete numeric objects, requiring estimate consent when used
tacCargo only: anonymous valor, eligible tipo (pf_nao_contribuinte or mei), pago: true, contratacaoDireta: true, optional CBS/IBS percentuais
produto, quantidade, unidade, destinacaoRequired for combustivel; product-specific unit, quantity up to one billion with six decimal places, destination insumo, revenda or consumo_final
adRem, ibsRecolhidoOptional annual CBS/IBS fuel tariffs, up to one million BRL/unit with six decimal places, and payment declaration for the configured CBS deduction

Categories (articles of LC 214/2025). Selecting a category does not validate statutory eligibility; reduced and exempt categories also need confirmarEnquadramento: true.

CategoryScenario
geralGeneral regime: full rate, full credit (art. 47)
cargaCargo freight: general regime, optional TAC presumed credit (art. 169)
reduzido3030% rate reduction: regulated professional services (art. 127)
reduzido6060% rate reduction: listed goods and services (art. 128)
reduzido100Zero rate: listed goods and services; the supplier keeps its credits (art. 143)
urbanoUrban rail or waterway public transport: 100% reduction, no credits for supplier or buyer (art. 285)
urbanoRodoviarioUrban bus or metro public transport: exempt, with credits annulled (arts. 157 and 51)
intermunicipalIntercity or interstate public passenger transport: 40% reduction with credits (art. 286)
aereoRegionalRegional air transport: 40% reduction (art. 287)
fretamentoClosed-group charter: general regime, always marked ESTIMATIVA
combustivelFuels: single-stage per-unit regime (arts. 172–180)

urbano and urbanoRodoviario give the same amounts (no tax, no credits) under different legal grounds: a 100% reduction for rail and waterway, an exemption for bus and metro.

Batch example with an estimated freight/TAC scenario and a verified calculation:

{
"formato": "json",
"calculations": [
{ "categoria": "carga", "ano": 2026, "base": 10000 },
{
"categoria": "carga", "ano": 2033, "base": 10000,
"creditos": { "cbs": 100, "ibs": 200 },
"permitirEstimativas": true, "compararAntigos": false,
"tac": {
"valor": 1050, "tipo": "pf_nao_contribuinte",
"pago": true, "contratacaoDireta": true,
"percentuais": { "cbs": 0.05, "ibs": 0.05 }
}
}
]
}

Batch mode permits only calculations, comando and formato at the top level; sending single-calculation fields together with calculations fails with MODO_MISTO and no charge. In the Console form, Category, Year and Base come prefilled with the first example above, so clear them before running a batch. Entries may override the operation and format. Put all scenario flags inside each entry. There is no truncation: empty lists and lists longer than 100 fail validation.

Fuel example (hypothetical annual tariffs; no extra transition multiplier):

{
"categoria": "combustivel", "ano": 2033, "base": 10000,
"produto": "diesel", "quantidade": 100, "unidade": "litro_20c",
"destinacao": "insumo", "adRem": { "cbs": 1, "ibs": 0.5 },
"permitirEstimativas": true, "compararAntigos": false
}

Output

Each successful row has status: "ok", a one-based index, categoria, ano, selo, result, steps, assumptions, warnings, format and formatted. The original engine result retains per-tax debits, credits, amounts due, balances, potential buyer credits and source metadata. Explanations and legal parameter notes remain in Portuguese. formatted is valid JSON when the selected format is json.

Real output of the first example above ({"categoria":"carga","ano":2026,"base":10000}), trimmed to the main fields; assumptions (7 sourced parameters) and formatted are omitted:

{
"index": 1,
"status": "ok",
"billable": true,
"categoria": "carga",
"ano": 2026,
"selo": "verificado",
"command": "calcular",
"format": "texto",
"result": {
"tributos": {
"cbs": { "debito": 90, "credito": 0, "devido": 90, "aRecolher": 90, "taxa": { "tipo": "ad_valorem", "valor": 0.009 } },
"ibs": { "debito": 10, "credito": 0, "devido": 10, "aRecolher": 10, "taxa": { "tipo": "ad_valorem", "valor": 0.001 } }
},
"total": { "debito": 100, "credito": 0, "devido": 100, "aRecolher": 100, "saldoCredor": 0 }
},
"steps": [{
"ano": 2026,
"explanation": [
"Base informada: R$ 10.000,00, já líquida das exclusões do art. 12 da LC 214/2025.",
"CBS: débito = R$ 10.000,00 × 0,9% (taxa após transição e redução de 0%) = R$ 90,00. LC 214/2025, arts. 12, 346 e 348; veja a premissa de regime para o artigo da redução.",
"CBS: crédito regular R$ 0,00 + presumido R$ 0,00 = R$ 0,00; devido antes de deduções R$ 90,00; saldo credor R$ 0,00. LC 214/2025, arts. 47–56. Créditos vedados ignorados: R$ 0,00.",
"IBS: débito = R$ 10.000,00 × 0,1% (taxa após transição e redução de 0%) = R$ 10,00. LC 214/2025, arts. 12, 343 e 348; veja a premissa de regime para o artigo da redução.",
"IBS: crédito regular R$ 0,00 + presumido R$ 0,00 = R$ 0,00; devido antes de deduções R$ 10,00; saldo credor R$ 0,00. LC 214/2025, arts. 47–56. Créditos vedados ignorados: R$ 0,00.",
"O valor a recolher de IBS/CBS R$ 100,00 é compensável com PIS/Cofins e, se não houver débito suficiente, com outros tributos federais (Decreto 12.955/2026, art. 583, I e II; LC 214/2025, art. 348).",
"Total a recolher de IBS/CBS R$ 100,00. Comparação com tributos antigos desativada; use --comparar para incluí-la. As compensações com esses tributos não foram apuradas."
]
}],
"warnings": [
"Not tax advice or legal advice. This educational simulation does not replace a qualified tax or legal professional.",
"Não é consultoria tributária: simulação educativa com base na lei pública; não substitui contador ou advogado."
]
}

In 2026 the CBS rate is 0.9% (LC 214/2025, art. 346) and the IBS rate is 0.1% (art. 343), so BRL 10,000 gives BRL 90 + BRL 10. The full warnings list also carries the scope and credit-segregation limits. Invalid calculations produce status: "invalid", billable: false and an error code/message without received values. They never trigger a calculation event. An empty or all-invalid run fails without a start event. Mixed batches retain valid results and free diagnostics. Charge limits produce free not_processed diagnostics for the remaining entries. Invalid initial PPE configuration fails before reading INPUT or writing dataset/KV outputs. Automatic charges must already be absent or zero in the platform configuration; the guard cannot reverse a platform start charge already applied. The key-value store contains RUN_SUMMARY with counts, event counts, completion status and the not-tax-advice notice.

Limits and sources

IBS and CBS credits stay separate. The simulator does not infer a net taxable base from a gross invoice, establish eligibility, calculate effective total tax burden or validate supplied credits. Old-tax comparison keeps bases constant and omits old credits and benefits. Annual reference rates, TAC coefficients and fuel tariffs may remain hypothetical in the snapshot; enabling estimates never enables unverified parameters. Fuel inputs represent the single-stage incidence; liquid volumes must already be converted to 20 °C, and GLP uses kilograms. Detailed simplified regimes, selective tax by product, special financial/real-estate regimes, operational split payment and regional exceptions are outside scope.

The bundled parametros.json records verification dates, status, effective dates and document/article references. Public official sources include Constitutional Amendment 132/2023, Complementary Law 214/2025, the federal tax authority, the IBS management committee and the official gazette. Check the bundled dates and current legislation before relying on a scenario.

Pricing and local execution

Final prices and packaging approved on 2026-10-24. The model is pay per event:

EventPrice (USD)Billing unit
inicio-run0.005Once after at least one valid calculation is fully prepared
calculo-concluido0.001Each valid calculation delivered with results, steps, assumptions and warnings

One calculation costs USD 0.006; a batch of 100 costs USD 0.105 when all events are confirmed. A multi-year comparison counts as one calculation. Invalid calculations and diagnostics have no calculation charge. Empty or entirely invalid runs have no start charge. If a spending limit allows the start but prevents delivery, the start may be the only charged event.

The approved prices are embedded in the frozen EVENT_PRICES_USD constant in src/actor/billing.mjs. The bundled .actor/pay_per_event.json records approved_2026-10-24_not_published; this local manifest does not configure platform monetization or authorize publication. In PPE mode, platform event prices must match the numeric constants exactly. Missing events, differing prices, nonzero automatic charges and unexpected paid events fail the initial guard. Automatic apify-actor-start and apify-default-dataset-item events must be absent or have numeric zero prices.

The Actor declares apify and starts at src/actor/main.mjs. It serializes charges and honors ACTOR_MAX_TOTAL_CHARGE_USD, including zero, charging-manager limits and eventChargeLimitReached. The last confirmed unit remains counted when it reaches the limit. Outside PPE, the adapter still calls the SDK event methods; ignored-charge responses with chargedCount: 0 and no limit flag preserve delivery with pricingMode: "unpriced" and chargeUsd: 0. Summary event counts in that mode are not monetary charges.

The configured 256 MB covers the measured local SDK samples: 1 calculation took 0.783 s / 89.8 MiB, 100 took 1.482 s / 108.9 MiB, and empty input exited 1 at 0.660 s / 88.3 MiB. The maximum peak is approximately 109 MiB; 512 MB is only a fallback. Runs are limited to 256–512 MB with a 60-second default timeout. Evidence is recorded in prova/actor-sdk/medicoes.json. Hosted capacity and local Docker execution remain NOT_VERIFIED. Platform build/execution and PPE configuration are pending; publication requires new, separate approval.

For local checks, Node.js 24 is sufficient; the runner uses a file-backed fake Actor, disables network APIs, does not load the SDK and never reads a platform token. No package installation is needed:

node scripts/actor-local.mjs --input exemplos/carga-tac.json --output tmp/actor-demo
node scripts/measure-actor.mjs
node --test

Use a new or empty output directory inside the repository. The runner saves dataset.jsonl, charges.jsonl, key-value-store.json and measurements.json. Its events are simulations without real charges; optional --ppe uses the approved constants as simulated unit prices. The measurement script runs 1-calculation, 100-calculation and empty-input cases three times and saves SDK-free evidence, separate from the SDK measurements above. The original offline CLI remains available through node src/cli.mjs or npm run cli -- .... Price approval is complete; platform validation and publication remain pending.