Calculadora RTC/Gov
Expõe a Calculadora RTC (Reforma Tributária sobre o Consumo — IBS, CBS e IS) do governo a clientes externos, por uma aplicação de integração que fala com a…
✅ Disponível em desenvolvimento e UAT. A produção segue pendente da revisão de segurança pré-produção (DFE-2796, em andamento) e do corte da tag
release-proxy-vX.Y.Z.
Expõe a Calculadora RTC (Reforma Tributária sobre o Consumo — IBS, CBS e IS) do governo a clientes externos, por uma aplicação de integração que fala com a calculadora oficial. O cálculo é repassado byte a byte; o serviço adiciona autenticação, controle de produto, cache e limites.
Base URL
| Ambiente | URL |
|---|---|
| Desenvolvimento | https://<API_HOST> |
| UAT (sandbox) | https://<API_HOST> |
| Produção | (a confirmar — depende de DFE-2796 + tag release-proxy-v*) 🔜 |
| Produção (whitelabel) | https://<API_HOST> (a confirmar) 🔜 |
API Reference
Referência interativa completa (Scalar): referência de API.
Autenticação
Token JWT OAuth2 obtido por client_credentials (token de aplicação), no header Authorization: Bearer {token}. Ver Autenticação e Autorização.
Requisitos de acesso, além do token válido:
- Role de realm
RTC_INTEGRATION_APIconcedida ao client. - Produto Calculadora RTC habilitado para o customer.
- O customer é resolvido pelo claim
customer-iddo token — não enviar headerX-Customer-ID. - A
companyIddo corpo deve pertencer ao customer autenticado.
Content-type: application/vnd.materimperium.api.v1+json (envelope padrão — ver APIs Rest).
Endpoints
Prefixo: /api/integration/dfe/rtc/calculadora. O path variable {model} é 55 (NF-e) ou 65 (NFC-e).
POST /{model}/regime-geral
Calcula os tributos RTC (regime geral) de um conjunto de itens.
Referência interativa: referência de API
POST/api/integration/dfe/rtc/calculadora/{model}/regime-geralEntre para ver o host e a referênciaQuery params
| Parâmetro | Obrigatório | Default | Descrição |
|---|---|---|---|
versao | não | latest | Versão da calculadora. Fora da whitelist → 400 INVALID_CALCULATOR_VERSION (a lista aceita vai na mensagem). Hoje só latest está deployada nos três ambientes. |
Corpo (request)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
companyId | UUID | sim | Company que contextualiza a chamada; deve pertencer ao customer. |
dataHoraEmissao | ISO offset date-time | não | Default: agora (fuso America/Sao_Paulo). |
municipio | inteiro (7 dígitos) | sim | Código IBGE do município do fato gerador do IBS. |
uf | string (2 maiúsculas) | sim | UF do emitente. |
itens[] | lista (1..990) | sim | Itens a calcular. |
itens[].numero | inteiro | sim | Número sequencial do item. |
itens[].ncm | string | sim | NCM do produto. |
itens[].cst | string | não | CST do IBS/CBS. |
itens[].baseCalculo | decimal | sim | Base de cálculo do item. |
itens[].quantidade | decimal | não | Quantidade comercial. |
itens[].unidade | string | não | Unidade comercial. |
itens[].cClassTrib | string | não | Código de classificação tributária. |
itens[].tributacaoRegular | objeto | não | { cst, cClassTrib } — tributação que o item teria sob o regime regular. Se enviado, ambos os campos são obrigatórios. |
⚠️ Embora cst e cClassTrib estejam marcados como opcionais no schema, a calculadora do governo hoje rejeita (400 TAX_CALCULATION_ERROR) requisições sem os dois preenchidos. Envie sempre ambos.
Resposta 200 — envelope padrão com data:
| Campo | Descrição |
|---|---|
versaoApp | Versão da aplicação da calculadora. |
versaoDb | Versão da base de alíquotas/regras. |
descricaoVersaoDb | Descrição da base. |
dataVersaoDb | Data da base. |
ambiente | Ambiente da calculadora. |
calculo | Pass-through byte a byte do retorno da Calculadora do governo. O schema pertence ao governo e preserva a representação numérica original (ex.: 1000.00 permanece 1000.00). Hoje contém objetos[] com tribCalc.IBSCBS por item (inclui memoriaCalculo, texto explicando o enquadramento legal) e um total.tribCalc.IBSCBSTot com os agregados — trate como objeto opaco: o schema completo pertence ao governo e pode mudar sem aviso desta API. |
Exemplo (request):
POST /api/integration/dfe/rtc/calculadora/55/regime-geral?versao=latest
Content-Type: application/json
Authorization: Bearer $TOKEN
{
"companyId": "6f1c1a3e-2d5b-4f0a-9c0d-8b4f2a1c9e77",
"dataHoraEmissao": "2026-05-10T08:15:30-03:00",
"municipio": 3550308,
"uf": "SP",
"itens": [
{
"numero": 1,
"ncm": "84713012",
"cst": "000",
"baseCalculo": 1000.00,
"quantidade": 1.0,
"unidade": "UN",
"cClassTrib": "000001"
}
]
}
Exemplo (resposta), com calculo capturado ao vivo:
{
"code": "0",
"message": "",
"success": true,
"data": {
"versaoApp": "1.0.18",
"versaoDb": "v0041",
"descricaoVersaoDb": "Base de alíquotas 2026",
"dataVersaoDb": "2026-01-15",
"ambiente": "PRODUCAO",
"calculo": {
"objetos": [
{
"nObj": 1,
"tribCalc": {
"IBSCBS": {
"CST": "000",
"cClassTrib": "000001",
"gIBSCBS": {
"vBC": "1000.00",
"gIBSUF": { "pIBSUF": "0.10", "vIBSUF": "1.00", "memoriaCalculo": "Operação de consumo com enquadramento legal em LC 214/2025, tributada conforme Tributação integral. A base de cálculo utilizada é de R$ 1000.00000000, com alíquota de 0.100000%." },
"gIBSMun": { "pIBSMun": "0.00", "vIBSMun": "0.00", "memoriaCalculo": "Operação de consumo com enquadramento legal em LC 214/2025, tributada conforme Tributação integral. A base de cálculo utilizada é de R$ 1000.00000000, com alíquota de 0.000000%." },
"vIBS": "1.00",
"gCBS": { "pCBS": "0.90", "vCBS": "9.00", "memoriaCalculo": "Operação de consumo com enquadramento legal em LC 214/2025, tributada conforme Tributação integral. A base de cálculo utilizada é de R$ 1000.00000000, com alíquota de 0.900000%." }
}
}
}
}
],
"total": {
"tribCalc": {
"IBSCBSTot": {
"vBCIBSCBS": "1000.00",
"gIBS": {
"gIBSUF": { "vDif": "0.00", "vDevTrib": "0.00", "vIBSUF": "1.00" },
"gIBSMun": { "vDif": "0.00", "vDevTrib": "0.00", "vIBSMun": "0.00" },
"vIBS": "1.00",
"vCredPres": "0.00",
"vCredPresCondSus": "0.00"
},
"gCBS": { "vDif": "0.00", "vDevTrib": "0.00", "vCBS": "9.00", "vCredPres": "0.00", "vCredPresCondSus": "0.00" },
"gMono": { "vIBSMono": "0.00", "vCBSMono": "0.00", "vIBSMonoReten": "0.00", "vCBSMonoReten": "0.00", "vIBSMonoRet": "0.00", "vCBSMonoRet": "0.00" }
}
}
}
}
}
}
As alíquotas de IBS/CBS no exemplo acima (0,10% / 0,90%) refletem o período de teste de 2026 da Reforma Tributária (LC 214/2025) — não são as alíquotas de referência plena, que sobem gradualmente até 2033.
GET /{model}/versao
Retorna a versão vigente da calculadora (servida de cache). Mesma autenticação, mesmo gate de produto, e conta na cota do cliente.
Referência interativa: referência de API
GET/api/integration/dfe/rtc/calculadora/{model}/versaoEntre para ver o host e a referênciaQuery params: versao (opcional, igual ao endpoint acima).
Resposta 200 — data: versaoApp, versaoDb, descricaoVersaoDb, dataVersaoDb, ambiente.
Semântica de versão, cache e cota
- Seleção de versão:
?versao=é opcional (defaultlatest); permite calcular contra bases antigas. Versão fora da whitelist configurada →400 INVALID_CALCULATOR_VERSION. Hoje a whitelist só temlatestdeployada nos três ambientes. - Cache de resposta: respostas idênticas (mesmo cliente, modelo, versão-alvo e payload) são servidas de cache por até 60s. O cache é interno à aplicação e não é controlável pelo cliente (sem header de status nem bypass). Omitindo
dataHoraEmissao, o "agora" pode refletir até um TTL atrás — quem precisa de determinismo informa a data explicitamente. - Cota / limites: cota por customer (
429 RATE_LIMITED, comRetry-After) — toda requisição conta, inclusiveGET /versaoe respostas servidas do cache. Há também proteção de concorrência do upstream (429 CONCURRENCY_LIMITED).
Idioma das mensagens
Resolução por Accept-Language: pt-BR (default), en-US, es-ES.
Error Codes
Erros seguem o envelope ApiError padrão (ver APIs Rest); o campo code é o identificador estável para o integrador ramificar. Os códigos de autenticação (401, e o 403 de escopo insuficiente) chegam no mesmo envelope, mas são emitidos pela camada de segurança antes do controller — por isso não aparecem nas responses declaradas do spec OpenAPI.
| HTTP | code | Causa |
|---|---|---|
| 400 | TAX_CALCULATION_ERROR | Corpo inválido/ilegível, ou rejeição (4xx) da calculadora (title/detail na mensagem). |
| 400 | INVALID_MODEL_CODE | model fora da lista suportada (55, 65). |
| 400 | INVALID_CALCULATOR_VERSION | versao fora da whitelist. |
| 400 | (validação de campo) | @Valid — ex.: itens vazio ou acima de 990, UF inválida, município fora de 7 dígitos, tributacaoRegular incompleto. |
| 401 | UNAUTHORIZED | Token ausente, inválido ou expirado. |
| 403 | CUSTOMER_NOT_ACTIVE | Customer inativo. |
| 403 | INVALID_CUSTOMER_CONTEXT | Token sem claim customer-id, ou company que não pertence ao customer. |
| 403 | PRODUCT_NOT_ENABLED | Produto Calculadora RTC não habilitado para o customer. |
| 403 | FORBIDDEN | Token válido, mas sem a role RTC_INTEGRATION_API. |
| 413 | PAYLOAD_TOO_LARGE | Corpo acima do teto configurado. |
| 429 | RATE_LIMITED | Cota do customer excedida (acompanha Retry-After). |
| 429 | CONCURRENCY_LIMITED | Limite de concorrência do upstream atingido. |
| 502 | TAX_CALCULATOR_UNAVAILABLE | Falha de transporte ou 5xx da calculadora. |
| 503 | IAM_UNAVAILABLE | IAM indisponível e sem decisão de acesso em cache. |
| 503 | AUTH_UNAVAILABLE | Emissor/JWKS do token inacessível durante a validação (raro). |
| 504 | TAX_CALCULATOR_TIMEOUT | Timeout na calculadora (acompanha Retry-After). |
| 500 | INTERNAL_ERROR | Falha inesperada — ainda retornada dentro do envelope padrão. |
Changelog
[1.0.0] — 2026-09-02
Added
POST /{model}/regime-geral— cálculo de tributos RTC (regime geral).GET /{model}/versao— versão vigente da calculadora.
Disponível em desenvolvimento e UAT; produção prevista após o fechamento de DFE-2796 e o corte da tag release-proxy-v*.
[Unreleased]
Added
- Exemplo real de
calculo(payload pass-through da Calculadora do governo, motor v0043) na seção de endpoints, e nota sobrecst/cClassTribserem exigidos na prática pelo motor do governo apesar de opcionais no schema.
Reconciliado com o serviço em desenvolvimento e UAT. Última revisão: 2026-09-08 (mi-dev-portal-doc — DFE-2852).