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ível | Onde é configurado | Caso de uso típico |
|---|---|---|
| Global | Configurações do plugin no WP Admin | Padrões da empresa para todos os entitlements |
| Entitlement Class | Configurações por classe (PLG, ENV, SVC, ORD, AFL, EDU) | Regras que diferem por tipo de produto/serviço |
| Organização | Metadados da organização no WP Admin | Exceções específicas do cliente |
| Produto | Bloco policies: no YAML do produto | Regras vinculadas a um produto WooCommerce específico |
| Entitlement Individual | Metadados do entitlement no WP Admin | Exceçõ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:
- Verificar o entitlement individual — se um valor estiver definido, usá-lo.
- Se não definido, verificar o produto — se um valor estiver definido, usá-lo.
- Se não definido, verificar a organização — se um valor estiver definido, usá-lo.
- Se não definido, verificar a entitlement class — se um valor estiver definido, usá-lo.
- Se não definido, verificar a configuração global — se um valor estiver definido, usá-lo.
- 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 = 90Resultado 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
- Policies Disponíveis — o que cada policy controla e seus campos
- Configurando Policies — onde definir valores em cada nível
- Receitas de Policies — exemplos práticos passo a passo