Skip to main content

Esquema

CampoTipoDescrição
planIdUUIDv7Identificador único
externalRefstringID do produto no Stripe (único)
namestringNome do plano, máx 255
descriptiontextDescrição do plano
featuresarrayObjetos PlanFeature
highlightbooleanPlano destacado (padrão false)
statusenumACTIVE, INACTIVE
createdByUUIDv7Criador
createdAtdatetimeCriação
updatedByUUIDv7Último atualizador
updatedAtdatetimeÚltima atualização
deletedByUUIDv7?Quem deletou
deletedAtdatetime?Soft delete

PlanFeature

CampoTipoDescrição
descriptionstringDescrição da feature
typeenumINCLUDE, NOT_INCLUDE, DEFAULT
Cada PlanFeature descreve uma capacidade visível ao cliente na página de pricing. O tipo INCLUDE indica que está inclusa, NOT_INCLUDE que não está disponível naquele plano, e DEFAULT que é padrão em todos os planos.

Relacionamentos

Esquema PlanInterval

CampoTipoDescrição
planIntervalIdUUIDv7Identificador único
planIdUUIDv7FK para Plan
externalRefstringID do price no Stripe (único)
intervalenumMONTHLY, QUARTERLY, SEMIANNUALLY, YEARLY
amountintegerPreço em centavos
currencyenumUSD, BRL, EUR
statusenumACTIVE, INACTIVE

Regras de Negócio

  • A combinação plano + intervalo deve ser única
  • Criado com status ACTIVE, todos os intervalos ACTIVE
  • Sincronizado com Stripe (product + prices)
  • Intervalos podem ser desativados/reativados/deletados independentemente
Ao criar um plano, todos os intervalos são automaticamente sincronizados como prices no Stripe. Cada intervalo gera um price independente, permitindo ativar/desativar periodicidades sem afetar as demais.
Não é possível alterar o amount de um PlanInterval após criação — é necessário desativar o intervalo existente e criar um novo. Isso garante consistência com os prices do Stripe.

Exemplo

{
  "planId": "019525fd-7e40-7c5a-b2d8-4e6f8a0c2e4a",
  "externalRef": "prod_R8kLmN2pQ4wX",
  "name": "Profissional",
  "description": "Plano para equipes em crescimento",
  "status": "ACTIVE",
  "highlight": true,
  "features": [
    { "description": "Até 50 usuários", "type": "INCLUDE" },
    { "description": "10 agentes de IA", "type": "INCLUDE" },
    { "description": "Suporte prioritário", "type": "INCLUDE" },
    { "description": "SSO / SAML", "type": "NOT_INCLUDE" }
  ],
  "intervals": [
    {
      "planIntervalId": "019525fd-8a10-7d3b-a1c9-5f7e9b0d3f5b",
      "externalRef": "price_1PqR2sT4uV6wX8yZ",
      "interval": "MONTHLY",
      "amount": 29900,
      "currency": "BRL",
      "status": "ACTIVE"
    },
    {
      "planIntervalId": "019525fd-9b20-7e4c-b2d0-6a8f0c1e4a6c",
      "externalRef": "price_2QrS3tU5vW7xY9zA",
      "interval": "YEARLY",
      "amount": 299900,
      "currency": "BRL",
      "status": "ACTIVE"
    }
  ],
  "createdBy": "019525fc-1234-7a1b-8c2d-3e4f5a6b7c8d",
  "createdAt": "2026-01-10T08:00:00Z",
  "updatedBy": "019525fc-1234-7a1b-8c2d-3e4f5a6b7c8d",
  "updatedAt": "2026-01-10T08:00:00Z"
}