# Dynamic Pricing Engine: guia completo

> Guia completo do plugin Dynamic Pricing Engine para WooCommerce: instalação, configuração, 4 tipos de regras (hora, stock, segmento, concorrente), segmentos de clientes, recolha de preços da concorrência, testes A/B nativos, registo, salvaguardas em 3 níveis e FAQ.

- Página: <https://www.datafirefly.com/pt/documentation/dfdynamicpricing/>
- Idioma: pt
- Atualizado em: 2026-10-10
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfdynamicpricing/index.md), [en](https://www.datafirefly.com/en/documentation/dfdynamicpricing/index.md), [es](https://www.datafirefly.com/es/documentation/dfdynamicpricing/index.md), [de](https://www.datafirefly.com/de/documentation/dfdynamicpricing/index.md), [it](https://www.datafirefly.com/it/documentation/dfdynamicpricing/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfdynamicpricing/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfdynamicpricing/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

Bem-vindo à documentação completa do **Dynamic Pricing Engine**, o motor de preços dinâmicos para WooCommerce editado pela DataFirefly. Este guia cobre a instalação, a configuração inicial, cada tipo de regra, a segmentação de clientes, a recolha de preços da concorrência, os testes A/B, o registo, as salvaguardas e a desinstalação.

**Requisitos:** WordPress 6.0+, WooCommerce 8.0+, PHP 7.4+. Compatível com HPOS e com os blocos de Checkout.

## Instalação

### Carregamento do plugin

1. No back-office do WordPress, vá a **Plugins → Adicionar → Carregar plugin**.
2. Selecione o ficheiro `dfdynamicpricing.zip` e clique em _Instalar agora_.
3. Terminada a instalação, clique em _Ativar plugin_.

### O que acontece na ativação

O plugin cria 6 tabelas personalizadas (com prefixo `wp_dfdpe_`):

- `wp_dfdpe_rules`: as regras de preço
- `wp_dfdpe_logs`: o registo dos ajustes
- `wp_dfdpe_segments`: os segmentos de clientes (3 criados automaticamente)
- `wp_dfdpe_competitors`: o seguimento da concorrência
- `wp_dfdpe_ab_tests`: os testes A/B
- `wp_dfdpe_ab_events`: os eventos de exposição, adição ao carrinho e conversão

São também agendadas duas tarefas cron: a recolha de preços da concorrência (horária por predefinição) e a limpeza do registo (diária).

### Menu de administração

Aparece um novo menu **Dynamic Pricing** na barra lateral, com 7 submenus: Painel, Regras, Segmentos, Concorrentes, A/B Testing, Registo e Definições. Todas as ações exigem a permissão do WordPress `manage_woocommerce`.

## Configuração inicial (Definições)

Antes de criar a primeira regra, dê uma volta rápida por **Dynamic Pricing → Definições** para ajustar os parâmetros globais.

### Registo

- **Ativar o registo**: assinalado por predefinição. Cada ajuste é guardado com produto, regra, cliente e contexto.
- **Retenção (dias)**: 60 dias por predefinição. A limpeza automática corre diariamente.

O registo está limitado a 1 entrada por sessão, produto e hora, para evitar a saturação. Pode desativá-lo por completo se não o usar.

### Salvaguardas globais

- **Preço mínimo (% do preço inicial)**: por exemplo, 70 = nunca descer abaixo de 70% do preço inicial. 0 = desativado.
- **Preço máximo (% do preço inicial)**: por exemplo, 130 = nunca ultrapassar 130%. 0 = desativado.
- **Nunca vender abaixo do custo de compra**: a ativar se guardar o custo numa meta de produto.
- **Chave meta do custo de compra**: `_cost` por predefinição (compatível com o WooCommerce Cost of Goods).

### Recolha da concorrência

- **Frequência de execução**: horária, duas vezes por dia ou diária. A recolha trata 25 URL por lote.

### Apresentação no front-office

- **Apresentar o preço inicial riscado**: útil para um efeito promocional visível. A desativar em testes A/B confidenciais.

## Criar a sua primeira regra

Vá a **Dynamic Pricing → Regras → Adicionar**. Cada regra tem os mesmos campos base, seja qual for o tipo.

### Campos comuns

- **Nome**: designação interna, útil no registo (por exemplo «Happy hour 18h-20h»).
- **Tipo**: Hora, Stock, Segmento de cliente ou Concorrente.
- **Estado**: Ativa ou Inativa. Uma regra inativa nunca é avaliada.
- **Prioridade**: as regras são executadas por ordem crescente de prioridade. Cada regra trabalha sobre o resultado da anterior.
- **Âmbito**: Global, Categoria, Etiqueta ou Produto específico.
- **Ajuste**: Percentagem, Montante fixo, Valor definido ou Alinhamento com a concorrência (apenas com o tipo Concorrente).
- **Mínimo / Máximo**: salvaguardas opcionais ao nível da regra.
- **Janela de datas**: datas de início e de fim para tornar a regra ativa apenas durante um determinado período.
- **Teste A/B**: ligação opcional a um teste A/B e à sua variante (ver a secção A/B Testing).

**Conselho de priorização:** comece pelas regras mais amplas (globais) com prioridade baixa, e depois afine com regras dirigidas de prioridade mais alta. As salvaguardas globais configuradas nas Definições aplicam-se sempre em último lugar.

## Tipo 1: regra por hora

Ajusta o preço conforme a hora e o dia da semana. Ideal para o efeito happy hour, as promoções de fim de semana ou os preços noturnos.

### Condições disponíveis

- **Dias da semana**: selecione um ou vários dias (segunda a domingo, formato ISO).
- **Hora de início / Hora de fim**: no formato de 24 horas. Os intervalos que atravessam a meia-noite são geridos automaticamente (por exemplo 22h-02h).
- **Fuso horário**: _site_ (por predefinição, usa o fuso do WordPress) ou um fuso específico (por exemplo `Europe/Lisbon`).

### Exemplos concretos

- **Happy hour**: −15%, quinta e sexta-feira, 18h-20h, fuso Europe/Lisbon.
- **Promoção de fim de semana**: −10%, sábado e domingo, 00h-23h59.
- **Preço noturno**: +5%, todos os dias, 22h-06h (atravessa a meia-noite, gerido automaticamente).

## Tipo 2: regra por stock

Ajusta o preço conforme o nível de stock do produto. Útil para escoar rapidamente os produtos em excesso ou valorizar os que se tornam raros.

### Condições disponíveis

- **Operador**: .
- **Limiar**: número inteiro.
- **Modo**: _Absoluto_ (número de unidades) ou _Percentagem do stock inicial_ (exige a meta `_initial_stock` definida no produto).

### Exemplos concretos

- **Escoamento**: stock >= 50 (excesso) → −20%.
- **Raridade**: stock < 5 → +10%.
- **Percentagem do stock inicial**: modo percentagem, stock < 20% do stock inicial → −5%.

Para usar o modo Percentagem, acrescente um campo meta `_initial_stock` aos seus produtos (através do WP All Import, do ACF, ou de um simples `update_post_meta`). Sem essa meta, o modo percentagem é ignorado.

## Tipo 3: regra por segmento de cliente

Aplica um ajuste apenas aos clientes que pertencem a um ou vários segmentos definidos.

### Condições disponíveis

- **Segmentos**: um ou vários segmentos existentes (ver a secção Segmentos).
- **Correspondência**: _Any_ (o cliente pertence a pelo menos um segmento) ou _All_ (pertence a todos).

### Exemplos concretos

- **Fidelidade**: segmento _loyal-customers_, ajuste de −10%.
- **Reconquista**: segmento _dormant_ (a criar), ajuste de −20% durante 7 dias.
- **B2B**: segmento _b2b_ (perfil `wholesale`), ajuste de −25%.

## Tipo 4: regra por preço da concorrência

Alinha o seu preço pelo de um concorrente que tenha configurado na secção Concorrentes. Três estratégias disponíveis.

### Estratégias

- **Match**: o seu preço passa a ser exatamente o preço do concorrente.
- **Undercut**: o seu preço fica abaixo do concorrente, em percentagem ou em montante fixo.
- **Overprice**: o seu preço fica acima do concorrente (posicionamento premium).

### Condições disponíveis

- **Modo**: _Percentagem_ ou _Montante fixo_.
- **Montante**: percentagem (por exemplo 5 para 5%) ou montante na moeda.
- **Idade máxima dos dados (horas)**: acima disso, os dados da recolha são considerados demasiado antigos e a regra passa ao comportamento de recurso.
- **Recurso**: comportamento se os dados da concorrência estiverem indisponíveis (por exemplo, aplicar um ajuste neutro ou saltar a regra).

### Exemplo concreto

Undercut de 3% face ao concorrente A, com idade máxima de 6 horas. Se o concorrente A não for recolhido há 6 horas, a regra é ignorada e o preço mantém-se inalterado.

## Segmentos de clientes

Um segmento é uma combinação de critérios que define um grupo de clientes. Depois de criado, um segmento pode ser visado por uma regra do tipo _Segmento de cliente_.

### Segmentos criados na ativação

- **new-customers**: clientes com 0 ou 1 encomenda.
- **loyal-customers**: clientes com 5 ou mais encomendas.
- **vip**: clientes que gastaram pelo menos 500 €.

### Criar um segmento

A partir de **Dynamic Pricing → Segmentos → Adicionar**, defina:

- **Nome** e **Slug** (gerado automaticamente se ficar vazio).
- **Descrição** (opcional, para a sua equipa).
- **Critérios**: acrescente tantas linhas quantas forem necessárias. Todos os critérios têm de ser satisfeitos (E lógico).
- **Estado**: ativo ou inativo.

### Campos disponíveis para os critérios

- `order_count`: número de encomendas do cliente.
- `total_spent`: total gasto (na moeda do site).
- `is_guest`: 1 se o visitante não tiver sessão iniciada, 0 caso contrário.
- `user_roles`: perfis WordPress do cliente (por exemplo `customer`, `subscriber`, `wholesale`).
- `days_since_last_order`: dias decorridos desde a última encomenda.

### Operadores disponíveis

Dez operadores: `==`, `!=`, `>`, `>=`, `= 60`. Visa os antigos clientes que não encomendam há 2 meses.

## Concorrentes (recolha de preços)

A recolha obtém automaticamente o preço apresentado numa página de produto de um concorrente, com uma frequência configurável. Os preços obtidos são depois usados pelas regras do tipo _Concorrente_.

### Acrescentar um concorrente

A partir de **Dynamic Pricing → Concorrentes → Adicionar**:

1. **Produto WooCommerce (ID)**: o ID do produto local ao qual associar o seguimento.
2. **Nome do concorrente**: designação livre (por exemplo «Amazon», «Worten»).
3. **URL**: a página de produto do concorrente a recolher.
4. **Tipo de seletor**: CSS, XPath, Regex ou JSON-LD.
5. **Seletor**: o seletor que aponta para o preço (ver exemplos mais abaixo).
6. **Moeda**: por predefinição, a moeda WooCommerce do site.
7. **Estado**: seguimento ativo ou em pausa.

### Tipos de seletores

- **CSS**: seletor CSS clássico. Exemplos: `.price .amount`, `#product-price`, `span[itemprop=price]`.
- **XPath**: expressão XPath. Exemplo: `//span[@class="price"]`.
- **Regex**: expressão regular PHP. Exemplo: `/€s*([d,.]+)/`, sendo usado o primeiro grupo capturado.
- **JSON-LD**: deteção automática de Schema.org. Procura `price`, `offers.price` e `offers.lowPrice` nas etiquetas JSON-LD. Deixe o campo Seletor vazio.

### Interpretação dos preços

A recolha trata automaticamente os formatos europeus (`1 299,90`) e americanos (`1,299.90`). Os símbolos de moeda e os espaços são limpos.

### Execução manual

O botão **Recolher agora** ao lado de cada concorrente força uma atualização imediata em AJAX. Útil para testar um novo seletor.

### Estados possíveis

- **pending**: nunca recolhido, à espera do próximo cron.
- **ok**: última execução bem-sucedida.
- **error**: última execução com falha (mensagem guardada no campo _last_error_).

**Respeito pelos termos de utilização dos concorrentes:** a recolha faz um pedido HTTP simples com um tempo limite curto, mas compete-lhe verificar que a recolha é permitida pelos Termos e Condições de Utilização dos sites visados. Algumas jurisdições regulam esta prática.

## A/B Testing

O módulo A/B integrado permite comparar várias estratégias de preço no mesmo produto e medir o respetivo impacto em tempo real (exposições, adições ao carrinho, conversões, RPV).

### Criar um teste

A partir de **Dynamic Pricing → A/B Testing → Novo teste**:

1. **Nome** e **slug**.
2. **Variantes**: lista de designações separadas por vírgulas. Por predefinição `A,B`.
3. **Repartição do tráfego**: peso relativo por variante (normalizado automaticamente). Por exemplo `50/50`, `70/30`, ou `1/1/1` para três variantes distribuídas por igual.
4. **Estado**: Rascunho, Em curso, Em pausa ou Terminado. Só um teste _Em curso_ atribui visitantes.
5. **Janela**: datas opcionais de início e de fim.

### Ligar uma regra a uma variante

No formulário de uma regra, selecione o teste A/B e a variante visada. A regra só se aplica aos visitantes atribuídos a essa variante em concreto.

### Como funciona a atribuição

Na primeira exposição, o plugin atribui o visitante a uma variante conforme os pesos configurados e guarda essa escolha num cookie `dfdpe_ab`. Um cookie de sessão distinto `dfdpe_sid` permite seguir o mesmo visitante ao longo de toda a sessão, com ou sem sessão iniciada.

### Eventos acompanhados

- **exposure**: primeira vez que o visitante vê um preço afetado pelo teste.
- **atc**: adição ao carrinho (hook `woocommerce_add_to_cart`).
- **conversion**: encomenda finalizada (hook `woocommerce_thankyou`). O montante total da encomenda é registado.

### Métricas calculadas (página Resultados)

- **Exposições** e **Sessões únicas**.
- **CR ATC**: taxa de adição ao carrinho (ATC a dividir pelas exposições).
- **CR Conv.**: taxa de conversão (conversões a dividir pelas exposições).
- **Receita**: total das conversões.
- **RPV**: receita por visitante (receita a dividir pelas exposições). É a métrica-chave de decisão: a variante com o RPV mais elevado é destacada automaticamente (distintivo _Vencedora_).

**Boa prática:** deixe um teste a correr pelo menos 2 semanas antes de concluir. Um teste A/B fiável exige vários milhares de exposições para haver significância estatística.

## Registo dos ajustes

Cada ajuste de preço aplicado no front-office pode ser registado. O registo está acessível em **Dynamic Pricing → Registo**.

### Informações guardadas

- Data e hora.
- Produto e variação.
- Regra acionada (ID).
- Cliente (ID) ou sessão anónima.
- Preço inicial, preço final e montante do ajuste.
- Teste A/B e variante (quando aplicável).
- Contexto: `frontend`, `cart`, `checkout`.

### Filtros disponíveis

Pode filtrar por ID de produto, ID de regra ou ID de teste A/B. A paginação apresenta 50 entradas por página.

### Limite de escrita

Para evitar a saturação, o plugin limita o registo a 1 entrada por sessão, produto e hora. Uma sessão que consulte 100 vezes a mesma ficha de produto na mesma hora gera apenas uma linha.

### Limpeza automática

Uma tarefa cron diária (`dfdpe_cron_purge_logs`) elimina as entradas mais antigas do que a retenção configurada (60 dias por predefinição).

## Salvaguardas: como funcionam

Três níveis de proteção sucessivos impedem que o seu preço final atinja um valor perigoso.

### Nível 1: salvaguardas por regra

Cada regra pode definir o seu próprio mínimo e máximo. Aplicam-se imediatamente após o ajuste dessa regra. Útil para limitar os efeitos de uma regra em concreto (por exemplo «a happy hour nunca pode descer abaixo de 30 €, seja qual for o preço inicial»).

### Nível 2: salvaguardas globais

Definidas nas Definições, em percentagem do preço inicial:

- **Preço mínimo**: o preço final não pode descer abaixo desta percentagem.
- **Preço máximo**: o preço final não pode ultrapassar esta percentagem.

Exemplo: mínimo a 70% e máximo a 130%. Um produto de 100 € nunca poderá descer abaixo de 70 € nem ultrapassar 130 €, sejam quais forem as regras aplicadas.

### Nível 3: proteção do custo de compra

Se estiver ativa nas Definições, esta proteção impede o preço final de descer abaixo do valor da meta `_cost` (ou da chave personalizada que configurar). É a garantia final para nunca vender com prejuízo.

Os três níveis são cumulativos e aplicam-se por esta ordem: regra, global, custo. O preço final é sempre o resultado mais «protegido» dos três.

## Compatibilidade com HPOS e cache

### HPOS (High-Performance Order Storage)

O plugin declara a compatibilidade com `custom_order_tables` e `cart_checkout_blocks` logo na inicialização. Não é necessária qualquer ação adicional se tiver o HPOS ativo no WooCommerce.

### Cache dos preços das variações

O WooCommerce coloca em cache os preços mínimo e máximo dos produtos variáveis através de um hash. O plugin injeta uma semente dinâmica (utilizador, sessão e intervalo de 5 minutos) nesse hash através do filtro `woocommerce_get_variation_prices_hash`, o que força o WooCommerce a recalcular os preços no momento certo sem estragar a cache para os restantes visitantes.

## FAQ

### Posso combinar várias regras no mesmo produto?

Sim. As regras são executadas por ordem de prioridade, trabalhando cada uma sobre o resultado da anterior. Pode assim encadear «−10% VIP» e depois «máximo a 130% do custo».

### As regras aplicam-se também ao carrinho e ao checkout?

Sim. Um hook em `woocommerce_before_calculate_totals` recalcula os preços das linhas do carrinho a cada apresentação.

### O plugin é compatível com as caches de servidor (Redis, Varnish)?

Sim, mas se a sua cache for muito agressiva ao nível da página completa, os preços apresentados podem ser os que estão em cache. Para uma apresentação dinâmica fiável, exclua as páginas de produto da cache de página completa, ou use fragmentos ESI.

### Posso desativar o plugin sem perder as minhas regras?

Sim. A desativação não elimina qualquer dado. Só a desinstalação através de _Plugins → Eliminar_ aciona o script `uninstall.php`.

### Como exporto os meus dados?

Todos os dados estão guardados nas 6 tabelas `wp_dfdpe_*`. Pode exportá-los através do phpMyAdmin, do WP-CLI (`wp db export`), ou de qualquer ferramenta de cópia de segurança do WordPress.

## Desinstalação

Para desinstalar por completo:

1. Desative o plugin em **Plugins**.
2. Clique em _Eliminar_.

O script `uninstall.php` elimina então:

- As 6 tabelas `wp_dfdpe_*`.
- As 9 opções do WordPress criadas.
- As tarefas cron agendadas.

A desinstalação é definitiva e irreversível. Faça uma cópia de segurança das suas regras, segmentos e registo antes, se quiser poder voltar atrás.

## Suporte

A sua licença inclui 12 meses de suporte e de atualizações. Para qualquer questão, contacte-nos em [datafirefly.com/contact](https://www.datafirefly.com/pt/contacto/).
