Skip to content

Impostos e Faturas

O tratamento de impostos e a geração de faturas no MIDDAG Account envolvem três sistemas: WooCommerce (cálculo de impostos), Stripe (geração de faturas) e ISSNet (notas fiscais brasileiras). Quais sistemas estão envolvidos depende da entidade de faturamento da transação.

Roteamento de imposto dual-entity

Toda transação é roteada para a MIDDAG BR (entidade brasileira) ou MIDDAG GLOBAL (LLC nos EUA). A entidade determina quais sistemas de imposto e faturamento se aplicam:

CapacidadeMIDDAG BRMIDDAG GLOBAL
MoedaBRLUSD
Conta StripeStripe BRStripe US
FaturaFatura Stripe (BRL)Fatura Stripe (USD)
Nota fiscal (NFSe)Sim -- ISSNet, Brasília/DFNão
Métodos de pagamentoCartão de crédito, Pix, BoletoCartão de crédito
Regras tributáriasImposto municipal (ISS) + federalImposto dos EUA (varia por estado)

A decisão de roteamento segue esta hierarquia:

  1. Atribuição explícita de entidade do produto (se o bloco de canais do produto habilita apenas uma entidade)
  2. Configuração billing_entity da organização
  3. Auto-detecção pelo tax ID (CNPJ = BR; EIN/VAT = GLOBAL)
  4. Fallback para moeda preferida (BRL = BR; USD = GLOBAL)

O admin pode sobrescrever a entidade por transação.

Tratamento de impostos no WooCommerce

O WooCommerce gerencia o cálculo de impostos para pedidos:

  • Alíquotas são configuradas em WooCommerce > Configurações > Imposto
  • Classes de imposto mapeiam para tipos de produto (padrão, reduzido, isento)
  • Cálculo automático de impostos usa o motor nativo do WooCommerce ou um plugin de impostos

O MIDDAG Account não sobrescreve nem duplica as configurações de imposto do WooCommerce. A configuração tributária permanece inteiramente no WooCommerce.

Faturas Stripe

O Stripe gera uma fatura para cada pagamento. O MIDDAG Account sincroniza essas faturas localmente através de webhooks:

Quando faturas são criadas

EventoFatura criada por
Pagamento avulso concluídoStripe (automaticamente com a cobrança)
Renovação de assinatura pagaStripe (automaticamente com a assinatura)
Fatura manual enviadaAdmin cria no Stripe

Sincronização via webhook

O InvoiceStripeService processa webhooks de ambas as contas Stripe (BR e GLOBAL). Eventos principais:

Evento de webhookAção no MIDDAG Account
invoice.createdRegistro local de fatura criado
invoice.finalizedFatura marcada como finalizada (imutável)
invoice.paidFatura marcada como paga, vinculada ao pedido e entitlement
invoice.payment_failedFalha de pagamento registrada, dispara política de recuperação
invoice.voidedFatura anulada localmente
invoice.marked_uncollectibleFatura marcada como incobrável
invoice.overdueFatura marcada como vencida, admin notificado

Um cron job de reconciliação roda a cada 15 minutos para capturar webhooks perdidos e resolver inconsistências de estado entre o Stripe e os registros locais.

Vínculo fatura-entitlement

Faturas são vinculadas a entitlements indiretamente através de pedidos:

Fatura Stripe -> Pedido WooCommerce -> Entitlement

Não há entitlement_id diretamente no registro da fatura. A cadeia é: a fatura referência uma cobrança Stripe, a cobrança mapeia para um pedido WC, e o pedido mapeia para o entitlement.

PDF da fatura

O Stripe gera PDFs de fatura automaticamente. Esses PDFs ficam disponíveis para download pelo cliente através do portal. O MIDDAG Account não gera seus próprios PDFs de fatura — utiliza os do Stripe.

Notas fiscais (NFSe) -- somente operações brasileiras

Para transações processadas pela MIDDAG BR, uma TaxInvoice (NFSe) -- Nota Fiscal de Serviço Eletrônica -- é emitida via sistema municipal de tributos ISSNet em Brasília/DF.

Quando a NFSe é emitida

Uma NFSe é emitida após uma fatura Stripe ser paga para uma transação da entidade BR. O fluxo:

Integração ISSNet

O domínio TaxInvoice integra com o ISSNet através de chamadas à API SOAP:

OperaçãoDescrição
Emitir NFSeSubmeter XML com prestador, tomador, serviço, valores de imposto
Consultar NFSeVerificar status da NFSe submetida (autorizada, rejeitada)
Cancelar NFSeCancelar NFSe previamente autorizada (requer justificativa)

Como o ISSNet não suporta webhooks, um cron job de polling roda a cada 5 minutos para verificar o status de submissões de NFSe pendentes.

Armazenamento do PDF da NFSe

PDFs de NFSe autorizadas são gerados e armazenados no Cloudflare R2. Uma URL em cache fica disponível pela API REST para download no portal. Cada PDF de TaxInvoice referência a fatura Stripe de origem para rastreabilidade.

Prontidão NFSe do produto

Cada YAML de produto pode incluir campos específicos de NFSe:

yaml
nfse:
  city_service_code: "01.07"
  federal_service_code: "1.07"
  description: "Licenciamento de software"

Produtos sem esses códigos não podem ter NFSe emitida automaticamente. O relatório do catálogo (composer catalog:report) sinaliza produtos que precisam de códigos NFSe.

O que o admin vê

  • Lista de faturas -- Todas as faturas Stripe sincronizadas com status, valor, moeda e entidade
  • Lista de TaxInvoice -- Todos os registros de NFSe com status ISSNet (pendente, autorizada, rejeitada, cancelada)
  • Visão por entitlement -- Faturas e notas fiscais vinculadas a um entitlement específico via seu pedido
  • Dashboard de reconciliação -- Exibe status de sincronização entre Stripe e registros locais

Páginas relacionadas