Pular para o conteúdo principal

Planos e entitlements

Todo recurso ou limite que depende do plano é uma chave do catálogo de entitlements. O catálogo é declarado no código de cada módulo; os valores ficam no banco e são editados aqui, sem deploy. Uma feature nova aparece sozinha nas telas de plano quando é publicada.

Cada chave tem um tipo:

TipoO que éErro para o tenant
FeatureLiga ou desliga um recurso403 plan.feature_unavailable
LimitTeto (ou piso) de um valor que o tenant configura400 plan.limit_exceeded no campo
QuotaContagem de recursos, com o uso calculado pela plataforma422 quota-exceeded, code quota.exceeded
ChoiceUma opção de uma lista fechadaDepende do módulo

O valor efetivo de uma organização segue a ordem: override válido da organização, depois o valor do plano e, por fim, o padrão da definição. Uma mudança vale para as organizações em segundos. Quando um valor é reduzido, os recursos que a organização já tem continuam funcionando; a regra nova vale para o que for criado ou alterado depois.

Chaves atuais​

ChaveTipoFaixa e observaçõesStarterProBusinessEnterprise
quota.projectsQuota31050200
quota.environmentsPerProjectQuotaConta por projeto461020
quota.applicationsQuota525100500
quota.instancesQuota4502001.000
quota.vCpuMillisQuotaMilicores4.00016.00064.000256.000
quota.memoryMiBQuotaMiB8.19232.768131.072524.288
quota.storageGiBQuotaGiB201005002.000
quota.buildMinutesMonthlyQuotaMinutos por mês3001.5006.00020.000
quota.customDomainsQuota11050200
gateway.routeRateLimitDefaultLimitRequisições por minuto603001.2006.000
gateway.routeRateLimitMaxLimitRequisições por minuto1206003.00020.000
waf.customizationFeatureNãoSimSimSim
waf.maxExceptionsQuotaDepende de waf.customization055050
waf.maxBodySizeMbLimit1 a 1024 MB1050100200
waf.eventRetentionDaysLimit7 a 365 dias303090180
apiTokens.maxServiceAccountsQuota0 a 1.000; conta ativas e desativadas21050200
apiTokens.requestsPerMinuteLimit60 a 6.000 por minuto, por token; vale na hora600600600600
apiTokens.mutationsPerMinuteLimit10 a 600 por minuto, por token; vale na hora60606060
exec.enabledFeatureDesligar encerra as sessões abertasSimSimSimSim
exec.maxConcurrentSessionsQuota1 a 500 sessões abertas na organização11030100
exec.recordingRetentionDaysLimit1 a 365 dias; fixado no fechamento da sessão73090365
mcp.enabledFeatureChecado a cada chamada MCP; desligado, as ferramentas da organização devolvem plan.feature_unavailableSimSimSimSim
mcp.callsPerMinuteLimit10 a 10.000 chamadas MCP por minuto, total da organização; vale na hora603001.2003.000

Os valores dos quatro planos padrão são o seed inicial e reproduzem exatamente os limites que existiam antes do catálogo. O seed é aplicado uma única vez por chave e plano: depois que você edita um valor, nenhum deploy o sobrescreve. Planos criados pelo admin não recebem seed e usam o padrão de cada definição até serem editados.

Uma chave com dependência (como waf.maxExceptions, que depende de waf.customization) só aceita valor acima de zero quando a feature de que depende está ligada.

Recursos e limites de um plano​

Em Planos › <plano>, a aba Recursos e limites é gerada a partir do catálogo:

  • As chaves aparecem agrupadas por módulo (core, gateway, WAF e os que vierem), com um controle por tipo: interruptor para Feature, número com unidade e faixa para Limit e Quota, lista para Choice.
  • Cada chave mostra a origem do valor: definido no plano ou herdado do padrão da definição.
  • Restaurar padrão volta uma chave ao padrão da definição.
  • Valores inválidos (fora da faixa, chave desconhecida ou dependência desligada) aparecem como erro no próprio campo.

Prévia de impacto​

Salvar abre antes a prévia de impacto, e nada é gravado sem a confirmação. A prévia mostra quantas organizações estão no plano e, para cada quota reduzida, quantas ficariam acima do novo limite (por exemplo, "afeta 12 organizações; 2 ficarão acima do limite"). As organizações acima do limite continuam com o que já têm e passam a aparecer no cartão Organizações acima de quota da visão geral.

Edição concorrente​

A leitura dos valores devolve a versão no ETag, e a gravação exige If-Match com essa versão. Se outra pessoa salvou antes, a gravação responde 412 com o estado atual, e a tela pede para revisar e salvar de novo. Sem o cabeçalho, a API responde 428.

Cada gravação entra na auditoria como plan.entitlements_updated, com o valor anterior e o novo de cada chave alterada.

Comparar planos​

A aba Comparar planos em Planos mostra a matriz dos planos ativos por chave. Cada célula é editável e usa a mesma prévia de impacto antes de salvar. É o jeito mais rápido de conferir se os planos estão em ordem crescente e de achar valores fora da faixa.

Plano padrão e disponível para escolha​

  • Tornar padrão: existe sempre exatamente um plano padrão ativo. Uma organização criada sem escolher plano nasce nele. O plano padrão não pode ser desativado (409); torne outro plano padrão antes.
  • Disponível para escolha: marca os planos que aparecem como cartões no diálogo Nova organização. O Starter nasce disponível e padrão; os demais planos padrão e os planos criados pelo admin nascem fora da escolha. Enquanto não houver cobrança obrigatória na escolha, deixe disponível só o plano que pode ser usado sem pagamento.

O cartão Planos da visão geral avisa quando o plano padrão está fora da escolha.

Entitlements de uma organização​

Em Organizações › <organização>, a aba Entitlements mostra o valor efetivo de cada chave, a origem (OVERRIDE, PLAN ou DEFAULT) e o uso das quotas.

Overrides​

Um override dá à organização um valor diferente do plano: contrato especial, trial, cortesia ou restrição por abuso.

  • Motivo obrigatório, de 10 a 500 caracteres. Ele só aparece para a equipe da plataforma; o tenant vê o selo "Concedido até DD/MM" no Plano e uso, sem o motivo.
  • Validade opcional. No vencimento, o override expira sozinho e a organização volta ao valor do plano.
  • O valor passa pela mesma validação da definição, com as dependências avaliadas sobre os valores efetivos da organização.
  • Há no máximo um override ativo por chave. Remover um override também volta a organização ao valor do plano.

Overrides sem validade aparecem na visão geral, para não ficarem esquecidos. A auditoria registra organization.entitlement_override_set, organization.entitlement_override_removed e organization.entitlement_override_expired.

Cortesias​

Um pacote de cortesia é um modelo nomeado de overrides, por exemplo "Piloto 30 dias: WAF completo e 5 domínios". Cadastre os pacotes em Cortesias (/admin/courtesy-packages), com nome, descrição, itens (chave e valor, validados contra o catálogo) e duração padrão em dias.

  • Aplicar cortesia (na organização): escolha o pacote, informe o motivo e, se quiser, uma validade diferente da duração do pacote. Cada item vira um override marcado com o pacote. O tenant vê o selo "Cortesia: <pacote> até DD/MM".
  • Conflito: se a organização já tem override numa das chaves do pacote, a aplicação responde 409 com as chaves em conflito. Para substituir esses overrides, confirme a substituição (replace: true).
  • Remover: remove de uma vez todos os overrides daquela aplicação.
  • Expiração: igual à dos overrides.
  • Alterar um pacote depois não muda as aplicações já feitas.

A auditoria registra organization.courtesy_applied, organization.courtesy_removed e organization.courtesy_expired, com o pacote e as chaves. Cortesias concedem recursos, não descontos no preço.

API​

Todas as rotas exigem platform_admin e recusam campos desconhecidos no corpo.

Método e rotaO que faz
GET /api/v1/admin/entitlements/catalogDefinições do catálogo: tipo, faixa, unidade, módulo, dependências e visibilidade
GET /api/v1/admin/plans/{planId}/entitlementsValores do plano com a origem; versão no ETag
PATCH /api/v1/admin/plans/{planId}/entitlementsGrava { "values": { "<chave>": <valor> } }; exige If-Match (412 com o estado atual, 428 sem o cabeçalho)
POST /api/v1/admin/plans/{planId}/entitlements/previewMesmo corpo do PATCH; devolve as organizações afetadas e quantas ficariam acima de cada quota reduzida, sem gravar
GET /api/v1/admin/plans/entitlements-matrixMatriz dos planos ativos por chave
POST /api/v1/admin/plans/{planId}/make-defaultTorna o plano o padrão
GET /api/v1/admin/orgs/{orgId}/entitlementsValores efetivos da organização com origem, validade e motivo
PUT /api/v1/admin/orgs/{orgId}/entitlements/overrides/{key}Cria ou troca o override (value, reason, expiresAt opcional)
DELETE /api/v1/admin/orgs/{orgId}/entitlements/overrides/{key}Remove o override
GET, POST /api/v1/admin/courtesy-packages e GET, PUT /api/v1/admin/courtesy-packages/{packageId}Lista, cria, lê e altera pacotes de cortesia
POST /api/v1/admin/orgs/{orgId}/courtesiesAplica um pacote (packageId, reason, expiresAt opcional, replace opcional)
DELETE /api/v1/admin/orgs/{orgId}/courtesies/{applicationId}Remove a cortesia aplicada
GET /api/v1/admin/overviewCartões da visão geral
PUT /api/v1/admin/orgs/{orgId}/entitlements/overrides/waf.maxExceptions
{
"value": 3,
"reason": "Piloto acordado com o cliente até o fim do mês",
"expiresAt": "2026-11-15T23:59:59Z"
}

A visão do tenant (o que ele vê, os erros e a escolha do plano) está em Planos, recursos e limites.