---
title: Tabela de decisão
description: Avalie regras em ordem e devolva o desfecho da primeira que bater, com todos os valores definidos para ele.
---

# Tabela de decisão  ·  `decision_table`

<NoCard kind="decision_table" categoria="Dados" />

<Secao icon="info">Para que serve</Secao>

A Tabela de decisão funciona como uma planilha de critérios. Você escreve as regras em ordem, cada uma com as condições que precisam ser verdadeiras, e cada regra aponta para um desfecho. O nó lê as regras de cima para baixo, usa a primeira que bater e devolve os valores daquele desfecho, como mensagem, etapa e classificação.

<Secao icon="clock">Quando usar</Secao>

- Classificar o cliente combinando várias respostas (ex.: etapa + situação de trabalho)
- Definir mensagem, etapa e classificação a partir da mesma combinação de dados
- Substituir uma sequência longa de condições encadeadas por uma lista de regras

---

## Tabela ou Condição?

| Use a **Tabela de decisão** quando | Use a **Condição (se/senão)** quando |
|-------------------------------------|--------------------------------------|
| Várias combinações levam a poucos resultados | Você precisa desviar o caminho do fluxo |
| Cada resultado precisa de vários valores (mensagem, etapa, classificação) | Cada caminho tem ações diferentes (enviar mensagem, transferir, aguardar) |

<Cuidado>

A Tabela de decisão **não desvia o fluxo**. Ela tem uma saída só e devolve valores. Se o fluxo precisa seguir caminhos diferentes, coloque um nó **Se/Senão (condição)** depois dela, olhando uma das colunas (por exemplo, `etapa`).

</Cuidado>

---

<Secao icon="list-checks">Passo a passo</Secao>

<Passos>
  <Passo>Arraste o nó **Tabela de decisão** para o canvas e conecte-o ao ponto do fluxo em que os dados já estão disponíveis.</Passo>
  <Passo>Defina as **Colunas**: os valores que o nó vai devolver.</Passo>
  <Passo>Cadastre os **Desfechos**: um por resultado possível, com o valor de cada coluna.</Passo>
  <Passo>Crie as **Regras**: as condições de cada uma e o desfecho que ela aponta. Ordene as regras do jeito que deve valer.</Passo>
  <Passo>Escolha o **Desfecho padrão**, usado quando nenhuma regra bate (opcional).</Passo>
  <Passo>Salve. As saídas ficam disponíveis como <code v-pre>{{tabela_de_decisao.stage}}</code>, <code v-pre>{{tabela_de_decisao.message}}</code> e assim por diante, sempre com o nome do seu nó no lugar de <code v-pre>tabela_de_decisao</code>.</Passo>
</Passos>

---

## As três partes

### 1. Colunas

Cada coluna é um valor que o nó devolve. Defina um **nome** e um **tipo**:

| Tipo | Exemplo de uso |
|------|----------------|
| Texto | Mensagem, etapa, classificação |
| Número | Pontuação, quantidade de dias |
| Sim/não | Indica se o cliente deve ser atendido por uma pessoa |

O nome usa só letras minúsculas, números e `_`, e começa com letra (por exemplo, `etapa` ou `dias_restantes`). Os nomes `matched`, `outcome`, `outcome_label` e `rule` são reservados para as saídas fixas do nó.

### 2. Desfechos

Cada desfecho é cadastrado **uma vez**, com o valor de cada coluna. Os campos aceitam variáveis, como <code v-pre>{{pergunta_situacao.resposta}}</code>, então a mensagem pode mudar conforme o cliente.

### 3. Regras

Cada regra tem:

- **Condições**: as mesmas da Condição (se/senão), com operadores como igual, contém e maior que. Combine-as com **E** (todas precisam ser verdadeiras) ou **OU** (basta uma).
- **Desfecho**: o desfecho que a regra devolve quando bate.

<Cuidado>

A **ordem das regras importa**. Vale a primeira regra que bater; as demais são ignoradas. Para mudar a prioridade, arraste a regra para cima ou para baixo.

</Cuidado>

---

## Desfecho padrão

O desfecho padrão é usado quando **nenhuma regra bate**. Assim o nó sempre devolve algum valor.

Se você não definir um desfecho padrão e nenhuma regra bater, o nó **não altera nada**. Isso é útil para montar uma tabela de "ajuste" que roda depois de outra: ela só mexe nos casos que a primeira deixou pendentes.

---

## Saídas

| Saída | O que traz |
|-------|-----------|
| `matched` | `true` se alguma regra bateu, `false` se caiu no desfecho padrão ou não bateu nada |
| `outcome` | Identificador do desfecho escolhido |
| `outcome_label` | Nome do desfecho, como você cadastrou |
| `rule` | Identificador da regra que bateu |
| Uma saída por coluna | O valor daquela coluna no desfecho escolhido, como `stage` ou `message` |

Para usar uma saída em outro nó, referencie-a pelo nome do nó: <code v-pre>{{tabela_de_decisao.stage}}</code>. Se você renomeou o nó para "Triagem", a referência vira <code v-pre>{{triagem.stage}}</code>.

---

<Secao icon="circle-check">Exemplo: triagem</Secao>

Imagine uma triagem que decide a próxima etapa do atendimento com base em duas respostas: a situação de trabalho e o prazo.

**Colunas:** `etapa` (texto) e `mensagem` (texto).

**Desfechos:**

| Desfecho | etapa | mensagem |
|----------|-------|----------|
| qualificado | agendamento | Ótimo, vou separar um horário para você. |
| desqualificado | encerrado | Infelizmente, neste momento não conseguimos atender esse caso. |
| atendimento humano | fila_humana | Vou transferir você para um de nossos atendentes. |
| continuar conversa | coleta | Preciso de mais algumas informações para continuar. |

**Regras (em ordem):**

1. Tem carteira assinada **E** prazo maior que 30 dias: desfecho **qualificado**
2. Tem carteira assinada: desfecho **atendimento humano**
3. Prazo vencido **OU** não respondeu à pergunta de prazo: desfecho **desqualificado**
4. Situação de trabalho contém "autônomo": desfecho **continuar conversa**
5. Qualquer outro caso: desfecho **continuar conversa** (também pode ser o desfecho padrão)

**Antes da tabela:** use um nó **Calcular datas** para descobrir se o prazo já venceu. Use a saída `is_before` (prazo anterior a hoje) e referencie-a na regra 3, em vez de comparar datas dentro da Tabela.

**Depois da tabela:** um nó **Se/Senão (condição)** olhando <code v-pre>{{triagem.etapa}}</code> decide se o fluxo segue para o agendamento ou para a fila humana.

<Dica>

Teste a ordem das regras. Uma regra genérica no topo engole as específicas: se "tem carteira assinada" estiver na primeira posição, o caso "carteira assinada e prazo vencido" nunca chega às regras de baixo. Coloque as regras mais específicas primeiro e a mais genérica por último.

</Dica>

---

## Saiba mais

- [Se / Senão (condição)](/guia/flow-builder/logica/if-else) — desvie o caminho do fluxo com base nas saídas da tabela
- [Calcular datas](/guia/flow-builder/dados/datas) — calcule prazos antes de usar a tabela
- [Atribuir Variável](/guia/flow-builder/dados/variaveis) — guarde o resultado para usar mais adiante
