Kobana

Customer → BillingAccount → PortalUser. Multi-conta nativo.

Um cliente pode ter várias contas de faturamento (filial, departamento, projeto). Cada conta com método de pagamento, ciclo fiscal e usuários do portal próprios.

Funcionalidade
Lista de clientes com documento, status e MRR
clientes por organização
N
billing accounts por cliente
CNPJ/CPF
validados automaticamente
LGPD
export e delete nativos

Hierarquia em 3 camadas

Customer
Entidade cadastral. Pessoa física (CPF) ou jurídica (CNPJ). Armazena nome, razão social, documento, endereços (JSON), e-mails (JSON), telefones (JSON).
  • DocumentType: cpf | cnpj
  • PersonKind: natural | juridical
  • Custom data + metadata livres
BillingAccount
Conta de faturamento. Cada cliente pode ter várias (filial Matriz, filial RJ, departamento financeiro). MRR consolidado em mrrAmountCents.
  • 3 status: active, suspended, closed
  • paymentTermsDays (default 10 dias)
  • autoCollection toggle por conta
  • Configuração fiscal própria
PortalUser
Usuário que acessa o portal. Vinculado a um BillingAccount. SSO ou senha. 2FA opcional.
  • Magic link, senha, SSO
  • 5 status (active, pending_verification, pending_invitation, suspended)
  • Failed login attempts trackados
  • Múltiplos usuários por billing account

O que você pode fazer

Cadastro Completo
Pessoa física ou jurídica com endereço completo (CEP, IBGE), múltiplos contatos (e-mails/telefones), tags livres.
  • Validação de dígitos CPF/CNPJ
  • Consulta Receita opcional (MinhaReceita)
  • Tags + customData JSON para integração
Multi-Conta de Faturamento
Um cliente corporativo pode ter contas independentes para filiais ou departamentos. Faturas, métodos de pagamento e portal separados.
  • Faturas individuais por conta
  • Consolidação de relatórios no Customer
  • Permissões diferentes no portal
Importação em Massa (CSV)
ImportService processa CSV com validação pré-import. Worker import executa em background, gerando relatório de erros.
  • Template padrão disponível
  • Validação row-by-row
  • Migração de sistemas legados
Régua de Comunicação
Notificações automáticas por evento (invoice_created, payment_failed, trial_ending). Templates personalizáveis por organização.
  • Email (AWS SES)
  • In-app (Notification)
  • Webhook para integração
Histórico de Pagamentos
Toda movimentação financeira fica em StatementItem (credit/debit). Visão extrato no portal e dashboard.
  • Saldo balanceCents por billing account
  • Saldo negativo permitido com limite (allowedNegativeBalanceCents)
  • Export em CSV/Excel
Suspensão e Reativação
BillingAccount com status suspended bloqueia novas faturas e ações. suspendedAt + razão registrados. Reativação via API ou dashboard.
  • Manual ou automática (dunning)
  • Audit log completo
  • Webhook billing_account.suspended
LGPD: Exportação e Exclusão
DataPurgeService implementa direito ao esquecimento. Worker data-purge executa exclusão programada com confirmação.
  • Export completo em ZIP (dados + faturas + pagamentos)
  • Soft delete em customers (deletedAt)
  • Anonimização opcional preservando histórico contábil
Tags e Segmentação
Tags livres em Person + customMetadata. Filtros avançados na listagem para segmentar (alto valor, vencendo, inadimplente, por região).
  • Tags como array JSON
  • Filtros combinados (AND/OR)
  • Salvamento de visões customizadas

Criar cliente + billing account via API

bash
curl -X POST https://api.billing.kobana.com.br/v1/customers \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ACME Tecnologia Ltda",
    "document_type": "cnpj",
    "document_number": "12.345.678/0001-90",
    "kind": "juridical",
    "emails": [{ "kind": "work", "address": "financeiro@acme.com.br" }],
    "addresses": [{
      "street": "Av. Paulista",
      "number": "1000",
      "city": "São Paulo",
      "state": "SP",
      "zip_code": "01310100"
    }],
    "billing_accounts": [{
      "billing_email": "financeiro@acme.com.br",
      "payment_terms_days": 15,
      "customer_tax_type": "simples_optante",
      "withhold_iss": false
    }]
  }'
response
{
  "id": "cust_xyz789",
  "billing_accounts": [
    { "id": "ba_abc123", "status": "active", "mrr_amount_cents": 0 }
  ]
}

Perguntas frequentes

Sua base de clientes, sem fricção