Skip to content

REF-202-04: Policy Engine

ADR: ADR-202 — Entitlement: Agregador CentralEscopo: 10 policies, hierarquia de override com 5 níveis, campos e defaults de cada policy, exemplos de override


1. Hierarquia de Override

global → entitlement class → organization → product → entitlement individual

O nível mais específico com valor definido prevalece. Níveis sem valor definido herdam do nível superior.

NívelOnde configuradoExemplo
GlobalSettings do plugin (wp-admin)"Créditos expiram em 12 meses"
Entitlement classSettings por classe (PLG, ENV, SVC, etc.)"PLG: sem suspensão antecipada"
OrganizationMeta da organization"Org X: créditos expiram em 24 meses"
ProductYAML do produto (policies block)"SVC-HOST: cooldown de 30 dias"
Entitlement individualMeta do entitlement"SVC-001: cooldown de 90 dias"

2. CreditPolicy

Governa: expiração de créditos, carência, limites, consumo, regras para avulsos.

CampoTipoDefaultDescrição
expiration_monthsint12Meses até expiração de créditos incluídos no plano
grace_before_daysint0Dias de carência antes da expiração
grace_after_daysint30Dias de carência após expiração
block_on_limit_exceededboolfalseBloquear SRs quando saldo excede limite
limit_thresholdint0Créditos negativos permitidos antes de bloqueio
avulso_expiration_monthsint6Expiração de créditos comprados avulso
consumption_orderenumfifoOrdem de consumo: fifo (mais antigos primeiro) ou lifo

3. PaymentRecoveryPolicy

Governa: suspensão por falha de pagamento, período suspended→cancelled.

CampoTipoDefaultDescrição
triggerenumretry_exhaustedQuando suspender: first_failure ou retry_exhausted
anticipate_suspensionboolfalseSuspender antecipadamente para clientes com histórico irregular
suspended_to_cancelled_daysint30Dias em suspended antes de cancelamento automático
auto_reactivate_on_paymentbooltrueReativar automaticamente quando pagamento regularizado

4. TierChangePolicy

Governa: upgrade/downgrade — efeito, cooldown, aprovação.

CampoTipoDefaultDescrição
effectenumimmediateimmediate ou next_cycle
downgrade_requires_approvalenumnonenone, admin, client, both
cooldown_daysint0Dias mínimos entre mudanças de tier
credit_behaviorenumnext_cycleimmediate, next_cycle, ou forfeit

5. CancellationPolicy

Governa: visibilidade pós-expiração, tempo expired→cancelled, retenção de dados.

CampoTipoDefaultDescrição
portal_visibility_daysint90Dias que entitlement expirado permanece visível no portal
expired_to_cancelled_daysint30Dias em expired antes de cancelamento automático
data_retention_daysint365Dias de retenção de dados operacionais pós-cancelamento
data_actionenumexport_and_deleteexport_and_delete, archive, ou retain
offer_data_exportbooltrueOferecer exportação de dados no processo de cancelamento

Nota: Dados fiscais seguem prazo legal (LGPD/fiscal) e NÃO são configuráveis via policy.


6. NotificationPolicy

Governa: canais de notificação, eventos, frequência, opt-out.

CampoTipoDefaultDescrição
channelslist[email]Canais ativos: email, sms, whatsapp, portal
eventslist(ver policy schema)Eventos que disparam notificações
expiry_warning_dayslist[30, 7, 1]Dias antes da expiração para enviar aviso
credit_low_threshold_pctint20Percentual do saldo para alerta de créditos
allow_opt_outbooltruePermitir opt-out de notificações não-críticas

7. ProvisioningPolicy

Governa: auto vs manual provisioning, aprovação, webhook, deprovisionamento.

CampoTipoDefaultDescrição
autobooltruetrue = self-serve (auto-provision). false = requer aprovação
require_approvalenumnonenone, admin, both — quem aprova provisioning manual
webhook_enabledboolfalseNotificar sistema externo após provisioning
retry_on_failurebooltrueTentar novamente em caso de falha
max_retriesint3Tentativas máximas antes de falha definitiva
timeout_minutesint30Timeout para provisioning antes de marcar como falha
notify_admin_on_manualbooltrueNotificar admin quando provisioning manual necessário
deprovision_on_cancelboolfalseDesprovisionamento automático quando entitlement cancelado

8. RenewalPolicy

Governa: renovação automática, grace period, preço de renovação, notificações.

CampoTipoDefaultDescrição
auto_renewbooltrueRenovar automaticamente antes da expiração
grace_days_pre_expiryint7Dias antes da expiração para tentar renovação
renewal_pricingenumsamesame (mesmo preço), current (preço atual do catálogo)
early_renewal_daysint30Janela para renovação antecipada (dias antes da expiração)
renewal_reminder_dayslist[30, 7, 1]Dias antes da expiração para enviar lembrete de renovação
failed_renewal_retriesint3Tentativas de renovação antes de desistir
block_downgrade_at_renewalboolfalseImpedir downgrade durante o período de renovação

9. TrialPolicy

Governa: trial gratuito — duração, limites, conversão, abuso.

CampoTipoDefaultDescrição
enabledboolfalseTrial disponível para este nível
duration_daysint14Duração do trial em dias
auto_convertbooltrueConverter automaticamente em assinatura paga ao fim do trial
require_payment_methodboolfalseExigir método de pagamento para iniciar trial
max_trials_per_orgint1Máximo de trials por organização (previne abuso)
extend_allowedboolfalsePermitir extensão do trial por admin
notification_days_before_endlist[3, 1]Dias antes do fim do trial para notificar

10. RefundPolicy

Governa: reembolso — prazo, percentual, condições, impacto no entitlement.

CampoTipoDefaultDescrição
refund_window_daysint30Dias após compra para solicitar reembolso
auto_refundboolfalseReembolso automático dentro da janela (até auto_refund_max)
auto_refund_maxdecimal100.00Valor máximo para reembolso automático (acima = manual)
partial_allowedbooltruePermitir reembolso parcial (proporcional ao uso)
approval_requiredenumadminnone, admin — quem aprova reembolso
cancel_entitlementbooltrueCancelar entitlement automaticamente após reembolso total
credits_on_refundenumforfeitforfeit (perder), retain (manter), proportional (ajustar)

11. SLAPolicy

Governa: níveis de serviço — tempos de resposta/resolução, disponibilidade, escalação.

CampoTipoDefaultDescrição
response_timestring24hTempo máximo para primeira resposta
resolution_timestring72hTempo máximo para resolução
uptime_targetstring99.5%Meta de disponibilidade (ENVs gerenciados)
support_hoursenumbusiness_hoursbusiness_hours, extended, 24x7
escalation_enabledbooltrueHabilitar escalação automática por SLA breach
escalation_after_pctint80Percentual do tempo SLA para escalar (80% = 80% do prazo)
priority_levelslist[low, normal, high, urgent]Prioridades disponíveis para SRs deste nível

12. Resolução de Conflitos

  1. Buscar valor no nível mais específico (entitlement individual)
  2. Se não definido → subir para product
  3. Se não definido → subir para organization
  4. Se não definido → subir para entitlement class
  5. Se não definido → usar global
  6. Se global não definido → usar default hardcoded (tabelas acima)

Nunca mesclar valores de níveis diferentes para o mesmo campo. O nível mais específico com valor definido é o valor final.


13. Exemplos de Override

Exemplo 1: CreditPolicy

Global:              expiration_months = 12
Classe SVC:          (não definido — herda global = 12)
Organization X:      expiration_months = 24
Produto SVC-HOST:    (não definido — herda org = 24)
Entitlement SVC-001: (não definido — herda org = 24)

Resultado para SVC-001: créditos expiram em 24 meses.

Exemplo 2: PaymentRecoveryPolicy

Global:              trigger = retry_exhausted
Classe PLG:          trigger = retry_exhausted (explícito, mesmo valor)
Organization Y:      trigger = first_failure (cliente com histórico ruim)
Produto PLG-MOODLE:  (não definido — herda org = first_failure)
Entitlement PLG-042: (não definido — herda org = first_failure)

Resultado para PLG-042: suspensão imediata na primeira falha.

Exemplo 3: TierChangePolicy

Global:              cooldown_days = 0
Classe SVC:          cooldown_days = 30
Organization Z:      (não definido — herda classe = 30)
Produto SVC-HOST:    cooldown_days = 60 (produto com commitment)
Entitlement SVC-005: cooldown_days = 90 (contrato enterprise)

Resultado para SVC-005: mínimo 90 dias entre mudanças de tier.