Skip to content

Hierarquia de Policies

O Policy Engine resolve cada valor de policy por meio de uma hierarquia de 5 níveis. Esta página explica como a hierarquia funciona, quando cada nível é apropriado e como conflitos são resolvidos.

Os 5 níveis

Global  -->  Entitlement Class  -->  Organização  -->  Produto  -->  Entitlement Individual
NívelOnde é configuradoCaso de uso típico
GlobalConfigurações do plugin no WP AdminPadrões da empresa para todos os entitlements
Entitlement ClassConfigurações por classe (PLG, ENV, SVC, ORD, AFL, EDU)Regras que diferem por tipo de produto/serviço
OrganizaçãoMetadados da organização no WP AdminExceções específicas do cliente
ProdutoBloco policies: no YAML do produtoRegras vinculadas a um produto WooCommerce específico
Entitlement IndividualMetadados do entitlement no WP AdminExceções pontuais para um único registro de entitlement

Como a sobrescrita funciona: o mais específico vence

O engine resolve cada campo de policy independentemente, percorrendo do nível mais específico até o menos específico:

  1. Verificar o entitlement individual — se um valor estiver definido, usá-lo.
  2. Se não definido, verificar o produto — se um valor estiver definido, usá-lo.
  3. Se não definido, verificar a organização — se um valor estiver definido, usá-lo.
  4. Se não definido, verificar a entitlement class — se um valor estiver definido, usá-lo.
  5. Se não definido, verificar a configuração global — se um valor estiver definido, usá-lo.
  6. Se nada estiver definido em nenhum lugar, usar o padrão hardcoded do schema da policy.

Regra fundamental: sem mesclagem

Valores nunca são mesclados entre níveis. O nível vencedor fornece o valor inteiro para aquele campo. Se a configuração global define expiry_warning_days: [30, 7, 1] e uma organização sobrescreve para [60, 30], a organização recebe [60, 30] — não [60, 30, 7, 1]. A sobrescrita substitui; não combina.

Exemplos

Exemplo 1: Sobrescrita de período de carência

Cenário: A Payment Recovery Policy global define suspended_to_cancelled_days: 30. A organização "Acme Corp" precisa de 60 dias porque tem um processo de compras interno lento.

Global:              suspended_to_cancelled_days = 30
Classe PLG:          suspended_to_cancelled_days = 14
Organização Acme:    suspended_to_cancelled_days = 60
Produto:             (não definido — herda da organização)
Entitlement PLG-001: (não definido — herda da organização)

Resultado para PLG-001 (da Acme): 60 dias. A sobrescrita da organização (60) é mais específica que a sobrescrita da classe (14).

Resultado para PLG-002 (da Beta Corp, sem sobrescrita de organização): 14 dias. A Beta Corp não tem sobrescrita, então o valor da classe (14) se aplica.

Resultado para SVC-003 (da Beta Corp): 30 dias. Sem sobrescrita de organização, sem sobrescrita de classe para SVC neste campo, então o valor global (30) se aplica.

Exemplo 2: Expiração de créditos para um acordo enterprise

Cenário: Créditos expiram em 12 meses globalmente. Uma organização enterprise negociou expiração de 24 meses.

Global:              expiration_months = 12
Classe SVC:          expiration_months = 12  (explícito, igual ao global)
Organização X:       expiration_months = 24
Produto SVC-HOST:    (não definido)
Entitlement SVC-001: (não definido)

Resultado para SVC-001 (da Org X): 24 meses. A sobrescrita da organização vence.

Exemplo 3: Cooldown de mudança de tier para um produto específico

Cenário: Globalmente não há cooldown. A classe SVC define 30 dias. Um produto de hospedagem específico precisa de 60 dias. Um contrato enterprise negociou 90 dias em um entitlement particular.

Global:              cooldown_days = 0
Classe SVC:          cooldown_days = 30
Organização Z:       (não definido)
Produto SVC-HOST:    cooldown_days = 60
Entitlement SVC-005: cooldown_days = 90

Resultado para SVC-005: 90 dias. O valor no nível do entitlement é o mais específico.

Resultado para SVC-006 (mesmo produto, entitlement diferente, sem sobrescrita de entitlement): 60 dias. Cai para o nível do produto.

Resultado para SVC-007 (produto SVC diferente, sem sobrescrita de produto ou entitlement): 30 dias. Cai para o nível da classe.

Quando usar cada nível

Global

Use para padrões da empresa que se aplicam a todos os tipos de entitlement. É aqui que você define sua linha de base — as regras que se aplicam a menos que algo mais específico as sobrescreva.

Bom para: Período de carência de renovação, canais de notificação, janela de reembolso, período de retenção de dados.

Entitlement Class

Use quando uma categoria de produtos precisa de regras diferentes. Plugins são self-service e de baixo contato. Serviços são de alto contato com provisionamento manual. Ambientes precisam de desprovisionamento ao cancelar. Essas diferenças são estruturais, não específicas de clientes.

Bom para: Tiers de SLA, modo de provisionamento (automático vs manual), disponibilidade de trial, generosidade no reembolso.

Organização

Use para exceções específicas de clientes. Um cliente enterprise com contrato negociado pode obter períodos de carência mais longos, expiração de créditos estendida ou um tier de SLA superior. Um cliente com histórico de atrasos de pagamento pode receber uma recuperação de pagamento mais rigorosa.

Bom para: Termos negociados, SLA específico do cliente, ajustes na recuperação de pagamento, extensões de expiração de créditos.

Produto

Use quando um produto WooCommerce específico tem regras diferentes de outros na mesma classe. Um plano de hospedagem premium pode ter uma meta de uptime maior que o plano básico, mesmo que ambos sejam da classe ENV.

Bom para: Metas de SLA específicas do produto, períodos de cooldown, duração de trial, termos de reembolso.

Entitlement Individual

Use com moderação, para exceções pontuais. Um entitlement específico que fez parte de um acordo especial, um caso de borda de migração ou a resolução de uma escalação de cliente.

Bom para: Exceções contratuais, acomodações de migração, resoluções de escalação. Deve ser raro.

Visualizando a cascata

Neste diagrama, três entitlements resolvem o mesmo campo (suspended_to_cancelled_days) para três valores diferentes com base em onde as sobrescritas estão definidas.

Erros comuns

Definir tudo no nível do entitlement. Se você está sobrescrevendo o mesmo valor em dezenas de entitlements individuais, provavelmente precisa de uma sobrescrita no nível de classe ou de organização.

Esquecer que sobrescritas substituem, não mesclam. Se você define notification.events no nível da organização, deve incluir TODOS os eventos desejados — não apenas as adições. A lista global é completamente substituída.

Sobrescrever no nível errado. Termos específicos de clientes pertencem ao nível da organização, não ao nível do produto. Sobrescritas no nível do produto afetam TODAS as organizações que compram aquele produto.

Próximos passos