v2.0

Manipulação de Variáveis

Como criar, usar e alterar cada tipo de variável do browserMate: as globais (Matrix), as locais (Variáveis do Fluxo), as criadas automaticamente pelas etapas e as de sistema.

Os quatro tipos de variáveis

Toda automação move informação de um ponto a outro: um parâmetro que entra, um dado lido da tela, um resultado calculado, uma resposta de API. No browserMate essa informação viaja em variáveis, e elas se dividem em quatro tipos, conforme o propósito de cada uma:

TipoPara que serveQuem criaComo se escreve
Global
Matrix
Receber informação de fora do fluxo: os parâmetros do agente Você, no cadastro do agente {matrix.nome}
Local
Variáveis do Fluxo
Guardar, montar e calcular valores de vida curta dentro do fluxo Você, numa etapa de Regra Customizada {nome}
Automática Levar adiante o que uma etapa, conector, serviço ou script devolveu O browserMate, a partir do retorno (ou do que o script devolve). Você só escolhe o nome {nome}, {connector.nome}, {nome.OCR}
De sistema Informar o que está acontecendo na execução: quem, onde, quando, qual erro O runtime, em toda execução {processID}, {lastStep}, {elapsedSeconds}

Cada tipo é explicado abaixo com a mesma divisão: para que serve, como se cria, como se usa, como se altera e o ciclo de vida.

Variáveis valem só durante a execução Cada execução começa do zero: o que uma execução gravou numa variável não passa para a seguinte. A Matrix parece uma exceção, mas não é: o que fica guardado é o valor padrão no cadastro do agente, que é carregado de novo a cada execução.
Global ou local? A Matrix é a porta de entrada do agente: recebe informação de fora, do agendamento, do webhook, da API ou de quem executa manualmente. A variável local nasce dentro do fluxo, para guardar e repassar valores de vida curta, e por isso não aparece no cadastro do agente nem no diálogo de execução.

Como escrever uma variável

Qualquer variável é usada escrevendo o nome entre chaves, no formato {variavel}. Ela funciona:

Uma chave, ou duas? As duas sintaxes existem, e não são a mesma coisa

{variavel}, com uma chave de cada lado, lê o valor de uma variável que já existe: o motor procura variavel entre as que a Matrix, uma etapa anterior ou o sistema já criaram, e substitui pelo valor atual dela. Não cria nada, só recupera. É a forma usada em tudo que está nesta página: condições, scripts, mensagens, timers, e também no mapeamento que a etapa faz de um conector (aba Mapear da etapa).

{{variavel}}, com duas chaves, não lê uma variável, ela declara uma. Escrever {{nome}} num campo do conector (Base URL, Host, Database, nome de Header, valor de Auth, inputs da ação) cria um campo chamado nome no mapeamento da etapa que usa esse conector. O valor de verdade não vem do conector: vem do que você preenche nesse campo da etapa, texto fixo ou uma variável do processo (aí sim, com uma chave: {outra_variavel}). Sem preenchimento na etapa, o motor procura uma variável do processo com o mesmo nome nome e, por último, o Cofre, se o nome começar com vault.. Veja Conectores → Variáveis nos conectores.

Escrever uma chave onde o campo espera duas (ou o contrário) não dá erro: o campo trata o texto como literal, sem substituir nada, e o valor sai errado ou vazio sem aviso. Se um campo de conector não está resolvendo a variável, confira primeiro se ele não está esperando {{duas chaves}}.

Você não precisa decorar os nomes. Os campos que aceitam variável têm um botão { } que abre a lista de tudo o que existe naquele ponto do fluxo, agrupado por origem: Sistema, Matrix, Conectores e uma seção para cada etapa que produz variáveis, inclusive as que um script grava. Escolher um item insere {nome} na posição do cursor.

Globais (Matrix)

Para que serve

As variáveis globais, chamadas de Matrix, são os parâmetros do agente: a informação que precisa estar pronta antes de a primeira etapa rodar, como o mês a processar, o CNPJ da filial ou o e-mail de quem deve ser avisado. Elas pertencem ao processo inteiro, e por isso qualquer etapa as enxerga.

Use uma variável global quando o valor vem de fora do fluxo ou quando quem dispara a execução precisa poder trocá-lo. É o que permite um único agente atender várias empresas, filiais ou meses, sem duplicar o fluxo.

Como se cria

As variáveis globais ficam numa tela própria, aberta pelo atalho Matrix, no topo da tela do agente:

Atalho da Matrix no topo da tela
O atalho que abre as variáveis globais do fluxo.

Cada linha é uma variável, com o nome, o tipo do dado e o valor que vale quando ninguém informa outro. Use + Adicionar variável para criar uma nova e Salvar para gravar:

Tela de variáveis globais do fluxo com várias linhas cadastradas
Variáveis Globais do Fluxo - Matrix: uma linha por variável, com nome, tipo e valor padrão.
CampoDescrição
Variável O nome, sem espaços e sem acentos. Ex.: mes_referencia. É como você a chama no fluxo: {matrix.mes_referencia}.
Valor Padrão O que vale quando a execução não informa nada.
Tipo Texto: qualquer palavra ou frase
Número: inteiro ou decimal, com vírgula decimal (2,5)
Moeda: valor em dinheiro, com duas casas (1.234,90)
Verdadeiro/Falso: sim ou não
Lista: vários valores separados por vírgula, ou uma lista JSON
Objeto: um objeto JSON, como {"nome": "Ana", "idade": 30}
Secreto: dado sensível enviado por quem dispara a execução, sem valor padrão e sem aparecer em log. Veja O tipo Secreto

Como o tipo é aplicado

O tipo escolhido vale em todo o fluxo, para as variáveis da Matrix e para as Variáveis do Fluxo criadas com Tipo. Quem recebe o valor converte pelo tipo que declarou, venha o valor de onde vier: digitado na tela, raspado de uma página, enviado por API, webhook ou por outro agente.

O que cada tipo aceita quando o valor chega:

TipoAceitaNão aceita
Moeda1.234,90, 1234,90, R$ 1.234,90, € 1.234,90, US$ 1,234.90, 1.500 e 1,500 (mil e quinhentos), $1,234 (mil duzentos e trinta e quatro), 1234.90, número. Aceita sinal de menos.abc, 1,2,3
Número1.234,90, 1234,5, 1234.5, 1.500 e 1,500 (um e meio), númeroabc
Verdadeiro/Falsotrue/false, sim/não, 1/0, com ou sem maiúsculastalvez
Listaa, b, c ou uma lista JSON (["a", "b"]). Na lista JSON, os itens podem ser registros ([{"numero": "P1"}, {"numero": "P2"}]), e cada item fica com o texto inteiro, vírgulas incluídas (["Av. Paulista, 1020", "Rua Augusta, 500"] são dois itens). No texto separado por vírgula, cada vírgula separa um item.Sempre aceita
ObjetoUm objeto ou uma lista em JSON: {"nome": "Ana"}Texto que não é JSON, número solto
TextoQualquer valor. Lista e objeto viram texto em JSON.Sempre aceita

Como o valor é usado:

OndeMoeda 1234,90Objeto
Fórmula, condição de rota, Executar somente se, script de códigoNúmero 1234.9: {matrix.valor} * 2 funciona diretoO objeto: {matrix.cliente}.nome
Preenchimento de campo na tela, corpo de mensagem, e-mail, texto montado no modo Variável ou texto, variável do tipo Texto1.234,90Texto em JSON
Parâmetro de um agente chamado1.234,90, lido pelo tipo do parâmetro (numa Moeda ou num Número do agente chamado, volta a ser 1234.9)O objeto
Chamar API Rest (URL, header, corpo em texto) e conectores1234.90Texto em JSON
Corpo JSON da Chamar API Rest, com a variável sozinha no valor, e token fora de aspas num JSON de conectorNúmero 1234.9O objeto

Número, Verdadeiro/Falso e Lista seguem o mesmo caminho: são número, verdadeiro/falso e lista em fórmula, condição e script. Numa fórmula que junta texto ("Total: " + {matrix.valor}) a Moeda entra como número. Para o texto formatado, use o modo Variável ou texto (Total: {matrix.valor}).

O tipo Secreto

Use o tipo Secreto na variável que carrega uma credencial ou um dado pessoal: a API Key do sistema de destino, um token, um CPF. Dentro do fluxo ela funciona como qualquer outra, com {matrix.nome} devolvendo o valor real, mas o valor é tratado como segredo do começo ao fim da execução:

O valor de um parâmetro Secreto só pode ser informado por caminhos que não deixam o segredo guardado nem exposto numa URL:

Forma de disparoAceita valor Secreto?
APISim. O valor vai no campo matrix do corpo da chamada, a cada execução.
WebhookSim. Mapeie o campo do payload que traz o segredo para a variável Secreto.
AgendamentoNão. O registro do agendamento fica guardado, então o campo aparece bloqueado e o servidor recusa o valor.
Execução manualNão. O campo aparece bloqueado, porque esse caminho leva os valores pela URL.
▶ Debug de uma captura de webhookNão. O valor Secreto não é enviado, e a tela avisa.
Só o tipo Secreto protege Um token enviado numa variável do tipo Texto aparece nos logs e fica guardado nas capturas do webhook. Se você muda uma variável que já tinha valor em agendamentos para Secreto, esses agendamentos mantêm o valor gravado: abra cada um e salve de novo, o campo passa a aparecer bloqueado e o valor antigo é apagado do registro.
Credencial que você já conhece antes de executar? Para um agendamento, ou para qualquer valor que não muda a cada disparo, guarde a credencial no Cofre e use {vault.CHAVE} nos campos da etapa. O tipo Secreto é para o que chega de fora em cada execução. Os detalhes de como o segredo é protegido estão em Dados Sensíveis.

Como se usa

Em qualquer campo de texto de uma etapa, escreva {matrix.nome_da_variavel} e ela é trocada pelo valor no momento da execução. Numa URL, por exemplo:

https://sistema.com/relatorio?mes={matrix.mes_referencia}

O prefixo matrix. é obrigatório e é ele que separa a variável global de uma variável local ou automática de mesmo nome.

Como se altera

O valor de uma variável global pode ser trocado em vários pontos, cada um com um alcance. Do mais duradouro para o mais pontual:

OndeO que mudaAlcance
No cadastroNome, tipo e valor padrãoTodas as execuções seguintes
No agendamentoO valor de cada disparo automático daquele agendamentoTodas as execuções do agendamento
Na APIO valor de uma execução, ou o valor fixo de um agendamento criado por APIA execução (ou o agendamento) da chamada
No webhookO valor vem do payload recebidoA execução daquela chamada
Na execução manualO valor revisado no diálogo de execuçãoSó aquela execução
Dentro do fluxoO valor a partir de uma etapaDo ponto da alteração até o fim da execução

Em todos os casos vale a mesma regra: variável enviada substitui o padrão, variável não enviada mantém o padrão, e o cadastro do agente nunca é alterado por uma execução. A exceção é a variável do tipo Secreto, que só recebe valor pela API e pelo webhook (veja O tipo Secreto).

No cadastro

Abra a tela Matrix, altere o nome, o tipo ou o valor padrão e clique em Salvar. É a única alteração que muda o que as próximas execuções recebem quando ninguém informa valor. O cadastro completo está em Criação de Agentes.

No agendamento

Cada agendamento pode ter os seus próprios valores de Matrix, aplicados a cada disparo automático. Assim, o mesmo agente pode rodar todo dia para uma filial e toda semana para outra, cada agendamento com o seu contexto.

  1. Em Meus Insights → Control Room, abra a aba Agendamentos e clique em + Novo Agendamento (ou edite um existente).
  2. Selecione o processo. Se ele tiver variáveis de Matrix, elas aparecem para preenchimento opcional.
  3. Deixe em branco para manter o valor padrão do processo, ou informe o valor específico daquele agendamento.
  4. Salve. Os valores informados substituem o padrão só nos disparos daquele agendamento.

Veja o passo a passo completo em Agendamento.

Na API

A API externa altera variáveis globais de duas formas: ao disparar uma execução e ao criar um agendamento. Nas duas, os valores vão no campo matrix do corpo da requisição, um objeto no formato { "variavel": valor }.

Disparar uma execução com valores próprios
POST /v1/processes/1042/start

{
  "matrix": {
    "cnpj_fornecedor": "12.345.678/0001-99",
    "valor_limite": 1500.5,
    "filiais": ["SP", "RJ", "MG"]
  }
}

A tabela completa de formatos, os cabeçalhos exigidos e as respostas estão em Rotas de API.

No webhook

No webhook, quem chama é um sistema externo (CRM, ERP, formulário) que envia um JSON. O mapeamento da origem liga cada campo desse JSON a uma variável da Matrix: o valor que chega passa a ser o valor da variável naquela execução.

Na execução manual

Ao executar o agente na mão, aparece um diálogo com as variáveis da Matrix para você revisar e alterar antes de confirmar. Os valores digitados valem só para aquela execução.

Dentro do fluxo

Uma etapa também pode mudar o valor de uma variável global no meio da execução, sem código: na seção Variáveis do Fluxo de uma etapa de Regra Customizada, use Atribuir a existente e escolha a variável matrix.nome (veja Locais, como se altera). Por script, a alteração é feita pelo segundo parâmetro de bm.done().

A alteração vale do ponto em que acontece até o fim daquela execução. O cadastro da Matrix não muda.

Ciclo de vida

Um processo, muitos contextos Como o valor pode ser trocado no agendamento, na API, no webhook e na execução manual, o fluxo é um só e cada disparo injeta o contexto daquela vez.

Locais (Variáveis do Fluxo)

Para que serve

As variáveis locais servem para o que só faz sentido dentro do fluxo: um valor intermediário, uma mensagem montada com pedaços de outras variáveis, o resultado de um cálculo, um contador, um sinalizador. Colocar isso na Matrix polui o cadastro do agente com coisas que ninguém precisa informar de fora. Para isso existe a seção Variáveis do Fluxo, na etapa de Regra Customizada, e ela dispensa código.

Use uma variável local quando o valor é criado ou transformado no meio do fluxo e não precisa ser informado por quem dispara a execução.

Seção Variáveis do Fluxo na aba Propriedades da etapa de Regra Customizada, criando a variável total_pedido, tipo Texto, no modo Variável ou texto
Variáveis do Fluxo, na aba Propriedades de uma etapa de Regra Customizada: Criar variável, nome total_pedido, Tipo Texto, Valor no modo Variável ou texto com Total de Pedidos: {total_pedido}. Uma variável sozinha mantém o tipo original; misturada com texto, vira texto.

Como se cria

  1. Abra uma etapa de Regra Customizada (ou crie uma nova) e, na aba Propriedades, vá até a seção Variáveis do Fluxo, o primeiro bloco do painel.
  2. Clique em + Adicionar ou atribuir variável. Cada clique acrescenta uma linha à seção, já com Criar variável marcado.
  3. Preencha o Nome da variável (obrigatório) e, se quiser, o Tipo.
  4. Escolha como o valor é montado (Fixo, Variável ou texto ou Fórmula) e preencha o campo Valor.
  5. Clique em Salvar. A variável passa a existir no fluxo inteiro.

Uma etapa pode ter várias linhas, e o botão ✕ de cada uma a remove.

Numa mesma etapa você pode misturar linhas de Criar variável e de Atribuir a existente, quantas quiser de cada. Elas rodam de cima para baixo, então cada linha só enxerga o que já existe quando ela roda: nos seletores de variável, além das variáveis da Matrix e das outras etapas, aparecem apenas as criadas em linhas acima dela. Por isso uma atribuição a uma variável criada na própria etapa fica sempre abaixo da linha que a cria. Já dentro de uma linha só um dos dois modos é aceito. Para trocar de um para o outro numa linha já preenchida, limpe antes o que é só do modo atual: o nome e o tipo em Criar, ou a variável escolhida em Atribuir. Enquanto houver algo preenchido, o outro modo fica esmaecido e, ao clicar nele, um aviso diz o que limpar. O campo Valor vale para os dois modos, então não bloqueia a troca e continua como estava.

Os três modos de valor

O campo Valor segue o mesmo padrão do mapeamento de conector: texto digitado, uma variável escolhida na lista, ou os dois juntos. A diferença é que aqui você diz explicitamente qual das três formas está usando:

ModoO que fazExemploResultado
Fixo Grava o texto exatamente como digitado. Nada é substituído nem calculado. Pendente Pendente
Variável ou texto Troca cada {variavel} pelo valor dela. Uma variável sozinha no campo mantém o tipo original (número, lista, objeto). Misturada com texto, o resultado é sempre texto. Olá {nome_cliente}, pedido {numero_pedido} Olá Ana, pedido 4512
Fórmula Calcula uma expressão JavaScript. Aceita contas, comparações, texto, listas, datas e condicionais. Veja o Guia de fórmulas. Number({preco}) * Number({qtd}) 30

O campo Valor começa com uma linha e cresce com o conteúdo. Shift+Enter quebra a linha (Enter sozinho não quebra). O botão ⤢, no canto do campo, abre o valor em tela cheia, com as {variáveis} destacadas e, fora do modo Fixo, a lista das variáveis do fluxo com busca: um clique insere a variável no cursor. Na Fórmula há também a barra de operadores (+ − × ÷, comparações, e, ou, ? :), que insere o operador do JavaScript (o × entra como *). Concluir ou Esc volta ao formulário com o que foi editado já no campo.

Alguns exemplos de fórmula:

Fórmulas
"Instância recuperada: " + {instanceID}          → texto com uma variável de sistema
Number({valor_total}) > 1000                      → verdadeiro ou falso
{status} == 'approved' ? 'liberar' : 'revisar'    → escolhe entre dois textos
Number({tentativas}) + 1                          → soma um a um contador
Linha Atribuir a existente, variável matrix.mensagem_padrao, Valor no modo Fórmula com Number({preco}) * Number({qtd})
Atribuir a existente, gravando na variável matrix.mensagem_padrao, Valor no modo Fórmula: Number({preco}) * Number({qtd}). Só o que está entre {} é substituído; o resto (Number(), *) é JavaScript de verdade, calculado na hora.
Dois cuidados essenciais
  • O que vem de uma página ou de uma API é texto. {a} + {b} com "10" e "5" dá 105, não 15. Envolva em Number() para somar. Uma variável com Tipo Número ou Moeda já é número.
  • O modo Variável ou texto não calcula: {a} * {b} vira o texto 5 * 3. Para calcular, use Fórmula.
Há dezenas de exemplos prontos e outros cuidados no Guia de fórmulas, logo depois dos tipos.

Tipos

O campo Tipo é opcional e converte o valor depois de montado, com as mesmas regras da Matrix (Como o tipo é aplicado). Deixando em Sem conversão, o valor fica como veio: texto no modo Fixo, o tipo original numa variável sozinha, o resultado da conta numa fórmula. Um valor que não cabe no tipo faz a etapa falhar, e ela entra na Gestão de Erros. No modo Fixo, a tela avisa ao Salvar.

A opção Dado sensível, no cabeçalho de cada linha, esconde o valor dos logs, do estado guardado pelo debug e do arquivo de teste de projetos de script. A variável continua valendo normalmente nas etapas seguintes. Veja Dados Sensíveis.

TipoO que acontece com o valor
TextoVira texto. Listas e objetos são gravados como texto no formato JSON.
NúmeroVira número, com decimais quando houver. Aceita vírgula decimal: 2,5.
MoedaVira número com duas casas: 1.234,90 e R$ 1.234,90 viram 1234.9, e a conta seguinte funciona. Onde uma pessoa lê (preenchimento de campo, mensagem, e-mail, texto montado no modo Variável ou texto) aparece como 1.234,90.
Verdadeiro/FalsoVira verdadeiro com true, sim ou 1, e falso com false, não ou 0. Vazio é falso.
ListaTexto separado por vírgula ou lista JSON vira lista: SP, RJ, MG vira três itens. A variável passa a aparecer nos seletores de Iterações de Listas.
ObjetoTexto em JSON vira objeto: {"id": 7}. Na fórmula, os campos se leem com ponto: {cliente}.id.

Com o tipo Objeto ou Lista no modo Fixo, o campo Valor confere o JSON enquanto você escreve, numa faixa abaixo do campo e também no editor em tela cheia (⤢).

O que você escreveuO que a faixa mostra
{"nome": "Ana", "itens": [1, 2]}JSON válido: objeto com 2 atributos (nome, itens).
{"nome": "Ana",}JSON inválido na linha 1, coluna 16.
[1, 2,JSON incompleto: falta fechar algo depois da linha 1, coluna 7.
a, b, c (tipo Lista)Lista separada por vírgula: 3 itens. Para itens com atributos, use JSON: [{"nome": "Ana"}].

Em texto de várias linhas, a linha e a coluna apontam para o ponto exato. Nos modos Variável ou texto e Fórmula e em outros tipos não há conferência. A faixa é um aviso: o valor que não cabe no tipo também é avisado ao Salvar.

Guia de fórmulas

A Fórmula é uma expressão JavaScript: uma linha que devolve um valor. Você escreve o JavaScript normalmente e usa {variavel} no lugar onde o valor de uma variável deve entrar. Todos os exemplos abaixo foram executados no motor do browserMate, e o resultado mostrado é o que ele devolve.

Como a fórmula lê o que você escreve

Valores usados nos exemplos

Cada exemplo usa estas variáveis, com estes valores:

VariávelValorVariávelValor
{preco}10{qtd}3
{desconto}0.15{idade_texto}"42"
{peso_texto}"72.5"{valor_br}"1.234,56"
{valor_moeda}"R$ 1.234,56"{nome}" ana silva "
{cpf}"123.456.789-09"{email}"Ana@Empresa.com.br"
{status}"approved"{lista}["SP","RJ","MG"]
{itens_texto}"SP, RJ, MG"{numeros}[4,8,15]
{pedido}{"id":7,"cliente":"Ana","itens":["A","B"]}{json_texto}"{\"id\":7,\"cliente\":\"Ana\"}"
{data_inicio}"2026-09-01"{data_fim}"2026-09-10"
{cpf_num}"12345678909"{valor_num}1234.5
{acentuado}"São José"{resposta}"Sim"
{pedidos}[{"numero":"P1","total":10},{"numero":"P2","total":20}]

Contas

Para que serveFórmulaResultado
Somar dois númerosNumber({preco}) + Number({qtd})13
MultiplicarNumber({preco}) * Number({qtd})30
SubtrairNumber({preco}) - Number({qtd})7
DividirNumber({preco}) / Number({qtd})3.3333333333333335
Resto da divisãoNumber({preco}) % Number({qtd})1
PotênciaNumber({qtd}) ** 29
Porcentagem de um valorNumber({preco}) * Number({desconto})1.5
Aplicar um descontoNumber({preco}) * (1 - Number({desconto}))8.5
Maior entre dois valoresMath.max(Number({preco}), Number({qtd}))10
Valor absolutoMath.abs(Number({qtd}) - Number({preco}))7
Somar uma lista de números{numeros}.reduce((soma, n) => soma + Number(n), 0)27

Converter e arredondar

Para que serveFórmulaResultado
Texto para número inteiroparseInt({idade_texto}, 10)42
Texto para número com decimaisparseFloat({peso_texto})72.5
Número com decimal para inteiro (corta)Math.trunc(Number({peso_texto}))72
Arredondar para o inteiro mais próximoMath.round(Number({peso_texto}))73
Arredondar para baixoMath.floor(Number({peso_texto}))72
Arredondar para cimaMath.ceil(Number({peso_texto}))73
Duas casas decimais, como textoNumber({preco}).toFixed(2)"10.00"
Duas casas decimais, com vírgulaNumber({preco}).toFixed(2).replace(".", ",")"10,00"
Duas casas decimais, como númeroNumber(Number({peso_texto}).toFixed(1))72.5
Número em formato brasileiro para númeroparseFloat({valor_br}.replaceAll(".", "").replace(",", "."))1234.56
Moeda "R$ 1.234,56" para númeroparseFloat({valor_moeda}.replace("R$", "").replaceAll(".", "").replace(",", "."))1234.56
Moeda brasileira (R$)Number({valor_num}).toLocaleString("pt-BR", { style: "currency", currency: "BRL" })"R$ 1.234,50"
Separador de milhar e duas casasNumber({valor_num}).toLocaleString("pt-BR", { minimumFractionDigits: 2 })"1.234,50"
Percentual(Number({desconto}) * 100).toFixed(0) + "%""15%"
Número para textoString({preco})"10"
Número com zeros à esquerdaString({qtd}).padStart(5, "0")"00003"
Verificar se é um númeroisNaN(Number({nome}))true

As conversões de texto em formato brasileiro valem para o que chega como texto, como o valor lido de uma página. Uma variável do tipo Moeda ou Número já entra na fórmula como número: {valor} * 2 funciona direto.

Texto

Para que serveFórmulaResultado
Juntar textos{cpf} + " - " + {status}"123.456.789-09 - approved"
Juntar texto e número"Total: " + Number({preco}) * Number({qtd})"Total: 30"
Tirar espaços das pontas{nome}.trim()"ana silva"
Tudo em maiúsculas{nome}.trim().toUpperCase()"ANA SILVA"
Tudo em minúsculas{email}.toLowerCase()"ana@empresa.com.br"
Só os números de um CPF{cpf}.replace(/\D/g, "")"12345678909"
Formatar um CPF (só dígitos){cpf_num}.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, "$1.$2.$3-$4")"123.456.789-09"
CPF tem 11 dígitos?{cpf}.replace(/\D/g, "").length == 11true
Tirar acentos{acentuado}.normalize("NFD").replace(/[\u0300-\u036f]/g, "")"Sao Jose"
Quantas palavras{nome}.trim().split(" ").length2
Trocar um trecho{email}.replace("@Empresa", "@outra")"Ana@outra.com.br"
Primeiros caracteres{cpf}.substring(0, 3)"123"
Últimos caracteres{cpf}.slice(-2)"09"
Tamanho do texto{nome}.trim().length9
Contém um trecho?
diferencia maiúsculas de minúsculas
{email}.includes("empresa")false
Contém, sem diferenciar maiúsculas{email}.toLowerCase().includes("empresa")true
Começa com...{status}.startsWith("app")true
Domínio de um e-mail{email}.split("@")[1]"Empresa.com.br"
Primeiro nome{nome}.trim().split(" ")[0]"ana"
Primeira letra maiúscula{nome}.trim().charAt(0).toUpperCase() + {nome}.trim().slice(1)"Ana silva"

Decisões (verdadeiro/falso e valor padrão)

Para que serveFórmulaResultado
Comparar para obter verdadeiro ou falsoNumber({preco}) * Number({qtd}) > 20true
Duas condições juntas (E)Number({preco}) > 5 && Number({qtd}) < 3false
Uma condição ou outra (OU)Number({preco}) > 50 || Number({qtd}) == 3true
Transformar "Sim" ou "Não" em verdadeiro/falso{resposta}.toLowerCase() == "sim"true
Escolher entre dois textos{status} == "approved" ? "liberar" : "revisar""liberar"
Escolher por faixaNumber({preco}) < 5 ? "baixo" : Number({preco}) < 20 ? "médio" : "alto""médio"
Valor padrão quando está vazio
vale para variável que não existe ou está vazia
{observacao} || "sem observação""sem observação"
Plural ou singular{qtd} + (Number({qtd}) == 1 ? " item" : " itens")"3 itens"

Listas

Para que serveFórmulaResultado
Quantos itens tem{lista}.length3
Primeiro item{lista}[0]"SP"
Primeiro item (forma curta){lista}[]"SP"
Último item{lista}.at(-1)"MG"
Juntar em um texto{lista}.join(" / ")"SP / RJ / MG"
A lista tem um valor?{lista}.includes("RJ")true
Criar lista a partir de texto{itens_texto}.split(",").map(x => x.trim())["SP","RJ","MG"]
Só alguns itens{lista}.slice(0, 2)["SP","RJ"]
Filtrar itens{lista}.filter(x => x != "RJ")["SP","MG"]
Transformar todos os itens{lista}.map(x => x.toLowerCase())["sp","rj","mg"]
Ordenar{lista}.slice().sort()["MG","RJ","SP"]
Maior número da listaMath.max(...{numeros})15
Média de uma lista de números{numeros}.reduce((s, n) => s + Number(n), 0) / {numeros}.length9
A lista está vazia?{lista}.length == 0false
Montar uma lista com valores soltosArray.of({preco}, {qtd})[10,3]
Campo de um registro da lista{pedidos}[0].numero"P1"
Um campo de todos os registros{pedidos}.map(p => p.numero)["P1","P2"]
Somar um campo de todos os registros{pedidos}.reduce((s, p) => s + p.total, 0)30
Só os registros que atendem{pedidos}.filter(p => p.total > 15)[{"numero":"P2","total":20}]

Objetos e JSON

Para que serveFórmulaResultado
Campo de um objeto{pedido}.cliente"Ana"
Item de dentro de um objeto{pedido}.itens[0]"A"
Ler um JSON que veio como textoJSON.parse({json_texto}).cliente"Ana"
Objeto para textoJSON.stringify({pedido})"{\"id\":7,\"cliente\":\"Ana\",\"itens\":[\"A\",\"B\"]}"
É uma lista?Array.isArray({lista})true
Quantos campos tem o objetoObject.keys({pedido}).length3
Campo que pode não existir{pedido}.telefone || "não informado""não informado"

Datas

Para que serveFórmulaResultado
Data de hoje (AAAA-MM-DD, no fuso do computador)new Date().toLocaleDateString("sv-SE")"2026-09-19"
Data de hoje em UTC (pode ser o dia seguinte à noite no Brasil)new Date().toISOString().slice(0, 10)"2026-09-19"
Data e hora de agoranew Date().toLocaleString("pt-BR")"19/09/2026, 16:30:00"
Ano atualnew Date().getFullYear()2026
Data de hoje em formato brasileironew Date().toLocaleDateString("pt-BR")"19/09/2026"
Dia da semana (0 = domingo)new Date().getDay()6
Dias entre duas datasMath.round((new Date({data_fim}) - new Date({data_inicio})) / 86400000)9
Data daqui a 7 diasnew Date(Date.now() + 7 * 86400000).toLocaleDateString("sv-SE")"2026-09-26"
Data de outra data em formato brasileiro{data_fim}.split("-").reverse().join("/")"10/09/2026"
Cuidados que valem a pena conhecer
  • || ou ??? {v} || "N/A" troca por "N/A" também quando o valor é 0 ou vazio. {v} ?? "N/A" só troca quando a variável não existe ou é nula.
  • Método em variável que não existe falha. {x}.trim() derruba a etapa se {x} não existir. Proteja com ({x} || "").trim().
  • Texto que não é número vira NaN numa conta, e a etapa falha dizendo que a fórmula não deu um número. Com o tipo Número ou Moeda, um valor que não é número também faz a etapa falhar, com o nome da variável. Números decimais também carregam a imprecisão do JavaScript (0.1 + 0.2 dá 0.30000000000000004): arredonde com toFixed() ou Math.round().
  • Datas usam o fuso e o idioma do computador onde o Runtime roda. toISOString() devolve a data em UTC, e no Brasil, à noite, já é o dia seguinte: para a data de hoje use toLocaleDateString("sv-SE").
  • Moeda do Brasil tem um espaço especial entre R$ e o valor (um espaço que não quebra a linha). Para comparar com um texto digitado, normalize com .replace(/\s/g, " ").
  • Uma fórmula inválida derruba a etapa e entra na Gestão de Erros e Exceções, com a mensagem do erro. Para descobrir o que está errado, monte a fórmula aos poucos e confira o valor na aba Variáveis do debug.

Como se usa

Assim que a etapa é salva, a variável local passa a existir para o fluxo inteiro, exatamente como o retorno de uma API ou de um conector. Você a escreve como {nome} e ela aparece:

Nos seletores, as variáveis de uma etapa vêm agrupadas sob o nome dela, com o ícone de Regra Customizada.

Como se altera

Gravar um novo valor numa variável que já existe

Para gravar um novo valor numa variável que já existe, em vez de criar outra, use o modo Atribuir a existente na linha. O campo Variável que recebe o valor lista tudo o que pode ser alterado: as globais da Matrix, as automáticas criadas por outras etapas e as locais. Das criadas nesta mesma etapa, entram só as de linhas acima da linha que você está editando.

O valor é montado exatamente como na criação (Fixo, Variável ou texto ou Fórmula). Como a fórmula pode usar a própria variável, é assim que se faz um contador:

Contador de tentativas em duas etapas
Etapa "Iniciar":   Criar variável  tentativas   Tipo: Número   Fixo: 0
Etapa "Contar":    Atribuir a existente  tentativas   Fórmula: Number({tentativas}) + 1
Rota da etapa "Verificar":   Number({tentativas}) < 3   → volta para "Tentar de novo"

As variáveis de sistema não podem ser alteradas: elas não aparecem na lista de Atribuir a existente.

O valor é convertido para o tipo da variável que recebe. Quando o alvo tem tipo (uma variável da Matrix, ou uma local criada com Tipo), o valor atribuído passa pelas mesmas regras da tabela de Tipos. Assim, gravar true (Fixo) numa variável Verdadeiro/Falso deixa a variável verdadeira, e gravar 5 (Fixo) numa variável Número grava o número 5, e não o texto "5". Variáveis sem tipo, como as automáticas de mapeamento e de API, ficam com o valor exatamente como ele veio.

Renomear, remover e duplicar

Ciclo de vida

Regras e limites

RegraMotivo
O nome é obrigatório, não pode ter chaves e vai até 80 caracteresAs chaves são o que delimita a variável quando ela é usada em um texto
Não pode começar com matrix., connector. ou vault.Esses prefixos identificam as variáveis globais, as de conector e o Cofre de Senhas
Não pode ter o nome de uma variável de sistemaElas pertencem ao runtime e não podem ser alteradas
Não pode repetir o nome de outra variável do fluxo, nem de uma etapaDuas variáveis com o mesmo nome dividiriam o mesmo valor e a última a rodar venceria em silêncio. Para gravar numa variável que já existe, use Atribuir a existente
Até 50 variáveis por etapa, com até 4000 caracteres em cada valorLimite de segurança do cadastro da etapa
Fórmula não pode ficar vaziaUma fórmula sem conteúdo não tem o que calcular
Em Atribuir a existente, a variável escolhida precisa existirGravar numa variável que não existe (por exemplo, porque a linha que a criava foi removida) jogaria o valor num nome que nenhum campo do fluxo conhece
Uma linha só usa variáveis criadas em linhas acima dela, inclusive como alvo de atribuiçãoAs linhas rodam de cima para baixo: uma variável ainda não criada não tem valor quando a linha a lê, e a criação que vem depois sobrescreve o que uma atribuição gravou antes

Quem não cumpre uma dessas regras é avisado ao clicar em Salvar, com o número da linha e o motivo.

Quando algo dá errado

Senhas e o Cofre As variáveis do fluxo não aceitam {vault.CHAVE}. Todo valor de variável fica no contexto da execução e aparece no debug, e o Cofre de Senhas existe justamente para que um segredo nunca vire variável. Use a referência do Cofre direto no campo que a aceita.
Exige um Runtime atualizado A seção Variáveis do Fluxo é lida pelo Runtime em que o agente executa. Um Runtime instalado antes desta funcionalidade ignora a seção, e as variáveis simplesmente não são criadas. Atualize o Runtime (veja Ambientes Runtime).

Exemplos

Montar uma mensagem sem código
Criar variável   mensagem   Tipo: Texto
Modo: Variável ou texto
Valor: Olá {nome_cliente}, recebemos o pedido {numero_pedido} no valor de {valor_total}.
Decidir com um sinalizador
Criar variável   aprovado   Tipo: Verdadeiro/Falso
Modo: Fórmula
Valor: Number({valor_total}) <= Number({matrix.limite_aprovacao})

Rota:  {aprovado} == true   → Aprovar Pedido
       true                 → Encaminhar para Revisão
Preparar uma lista para o loop
Criar variável   filiais   Tipo: Lista
Modo: Fixo
Valor: SP, RJ, MG

Depois, em Iterações de Listas, escolha "filiais": a etapa consome um item a cada passagem.

Automáticas (criadas pelas etapas)

Para que serve

As variáveis automáticas levam adiante o que uma etapa, um conector, um serviço ou um script devolveu: o preço lido de uma página, o número da nota que uma API respondeu, o e-mail que um conector encontrou, o total que um script calculou. Elas são as que você não cria: nascem sozinhas quando a etapa roda. O que você define é só o nome, na configuração da etapa (ou, num script, na chave que ele devolve).

Quando a etapa roda, o browserMate guarda o dado nessa variável, e ela fica disponível nas etapas seguintes, como qualquer outra.

Como se cria

Cada origem tem o seu lugar para dar o nome:

OrigemOnde você dá o nomeComo usar
Captura da telaO nome da linha de mapeamento, na etapa Obter Informação{nome}
Resposta de uma APIA coluna Variável de Resultados, na etapa Chamar API Rest{nome}
Retorno de um conectorO Nome da linha de saída, no mapeamento do retorno{connector.nome}
Script (Node.js e Python)A chave do que o script devolve, em bm.done(). No Script de Sessão, em globalData.set(){nome}
Arquivo, OCR e evidênciaAcompanham o nome do mapeamento{nome.FILE}, {nome.OCR}, {nome.evidence}

Captura da tela

Numa etapa Obter Informação, cada linha de mapeamento lê um elemento da página. O nome que você dá à linha é o nome da variável: uma linha chamada preco grava o valor lido em {preco}, disponível em qualquer etapa seguinte.

Mapeamento de Seletores de uma etapa Obter Informação
O painel de mapeamento numa etapa de captura, com o Seletor e o atributo a ler.

Quando o seletor casa com vários elementos, a variável guarda uma lista, e cada item é acessado por posição, dentro de uma fórmula: {preco}[0], {preco}[1]. Com Varrer como Lista e a Tabulação Automática da Lista, cada coluna de uma tabela vira uma variável lista própria:

Painel Coleção de uma etapa Obter Informação
Varrer como Lista: cada label em Tabulação Automática da Lista vira uma variável lista, preenchida automaticamente coluna a coluna.

O detalhe está em Mapeamento de Dados e em Coleção: Tabulação Automática.

Resposta de uma API

Na etapa Chamar API Rest, a seção Resultados liga um caminho do JSON de resposta a uma variável. Cada linha tem o Path (onde está o dado na resposta) e a Variável (o nome que ele terá no fluxo):

data.invoice.number  → numero_nf      usado como {numero_nf}
data.invoice.total   → valor_total     usado como {valor_total}

O [*] no caminho percorre uma lista e faz a variável ser uma lista. O passo a passo, com o teste da chamada, está em Mapeamento em Chamar API Rest.

Retorno de um conector

Toda ação de conector devolve uma resposta. Você escolhe quais partes dela viram variável no mapeamento do retorno do conector: o teste da ação mostra a resposta como uma árvore, e um clique num valor cria a variável de saída.

Resposta do teste com valores clicáveis para virar variável
A resposta do teste no painel do conector. Os campos em verde, com [*] todos, já foram escolhidos e viram variáveis.

Nas etapas, essas variáveis usam sempre o prefixo connector., seguido do Nome da linha de saída, não do rótulo do conector: {connector.nome_da_variavel}. Veja Mapeamento do Retorno.

Script (Node.js e Python)

Numa etapa Regra Customizada, o script inline devolve valores ao fluxo pelo segundo parâmetro de bm.done(). Cada chave é o nome de uma variável, escrito entre chaves:

Python
bm.done('processado', {
    '{numero_nf}':   'NF-001',
    '{valor_total}': '1500.00'
})
Node.js
bm.done('processado', {
  '{numero_nf}':   'NF-001',
  '{valor_total}': '1500.00'
});

Depois que você salva a etapa, o browserMate lê o texto do script e passa a listar numero_nf e valor_total nas etapas seguintes: no botão { } dos campos, no autocomplete dos outros scripts e no Copilot. Não há nada a declarar: o nome que está no código é o nome que aparece na lista.

Tipo. A variável gravada por script não tem tipo declarado: ela guarda o valor como o script o entregou. Uma lista (list no Python, array no Node.js) fica lista, um dicionário ou objeto fica objeto, um texto fica texto e um número fica número. Nos seletores ela aparece sem o selo [ ], porque o tipo só existe na execução, e mesmo assim pode ser a lista de Iterações de Listas e de Disparar por cada item de uma lista. Para fixar o tipo, crie a variável com o mesmo nome em Variáveis do Fluxo, na mesma etapa do script, com o Tipo desejado: o que o script gravar nela passa a ser lido nesse tipo (um valor que não cabe nele faz a etapa falhar), e com o Tipo Lista ela ganha o selo nos seletores.

No Script de Sessão, a escrita é globalData.set('{nome}', valor). O nome também precisa vir entre chaves: globalData.set('nome', valor) grava uma chave que nenhuma referência {nome} do fluxo enxerga.

O que entra na lista e o que não entra:

SituaçãoAparece na lista?
Chave escrita como texto no bm.done(), em qualquer ponto do script (dentro de função, if, try)Sim
Dicionário montado antes (dados['{total}'] = 10) e entregue no bm.done()Sim
Nome com espaço ou acento, como '{Número da Nota}'Sim, exatamente como está escrito. Espaços fazem parte do nome
Script com erro de sintaxeSim. A lista continua enquanto você corrige
Nome montado pelo código ('{' + nome + '}'), **outro_dicionario ou dicionário preenchido dentro de um laçoNão. A variável é gravada na execução, mas o nome só existe quando o script roda
Script de Projeto ZIPNão. O código do projeto não fica no cadastro da etapa
Nome com prefixo matrix., connector. ou vault.Não. Esses prefixos pertencem a outros tipos de variável
Variável que não aparece na lista continua valendo Ela é gravada normalmente na execução e pode ser usada nas etapas seguintes: basta escrever o nome com chaves no campo, como {nome}. Para ela aparecer no botão { }, escreva a chave como texto no bm.done(). Um único cuidado: num campo de conector alimentado por uma variável que o browserMate não conhece, o ícone de pendência do conector pode continuar aparecendo. Nesse caso, preencha o campo no mapeamento da etapa.

Arquivo, OCR e evidência

Alguns recursos acrescentam variáveis extras, com um sufixo, ao lado da variável do mapeamento:

VariávelConteúdoSaiba mais
{nome.FILE}Caminho do arquivo baixado, na máquina onde o agente rodaDownload
{nome.BUFFER}Conteúdo do arquivo baixado, em base64Download
{nome.OCR}Texto reconhecido na imagemOCR / ICR
{nome.evidence}, {nome.evidence_BUFFER}A evidência (screenshot) mantida em sessão e o seu conteúdo binárioScreenshot

Como se usa

Da mesma forma que qualquer outra variável: {nome} (ou {connector.nome}) em qualquer campo de texto, condição ou mapeamento das etapas seguintes à que a produziu. Elas aparecem nos seletores de variáveis, agrupadas sob o nome da etapa (ou do conector) de origem, e no autocomplete dos scripts.

Como se altera

Ciclo de vida

De sistema

Para que serve

As variáveis de sistema informam o que está acontecendo na execução: qual processo e qual instância estão rodando, quem iniciou, em que etapa está, se houve erro e há quanto tempo tudo começou. São o que permite montar uma mensagem de falha, encerrar uma execução longa demais ou reagir a uma navegação inesperada.

Como se cria

Não se cria: o runtime mantém essas variáveis automaticamente em toda execução, sem configurar nada. Elas já existem antes de a primeira etapa rodar.

Como se usa

Do mesmo jeito que as outras, com o nome entre chaves: {processName}, {errorDescription}. Funcionam em qualquer campo de texto, nas condições de rota e de execução de qualquer etapa e nos scripts de Regra Customizada, via bm.get('{variavel}').

Como se altera

Não se altera. As variáveis de sistema pertencem ao runtime: elas não aparecem na lista de Atribuir a existente, e o nome delas não pode ser usado por uma variável que você cria (variável local, nome de mapeamento, variável de Resultados de API ou retorno de agente chamado): a tela recusa o nome ao salvar. Só o próprio runtime as atualiza, ao longo da execução.

Ciclo de vida

Nascem no início da execução e são atualizadas pelo runtime conforme ela avança: {lastStep} muda a cada etapa, {elapsedSeconds} a cada segundo, {errorDescription} a cada falha. Terminam com a execução.

Durante uma execução em modo debug, todas elas aparecem com o valor do momento na gaveta Variáveis de sistema, no rodapé da aba Variáveis do console. É a maneira mais direta de conferir o que uma delas carrega numa execução real, em vez de deduzir. Veja A aba Variáveis.

Referência das variáveis de sistema

Identificação da execução

VariávelConteúdo
{processID}ID do processo sendo executado
{processName}Nome do processo
{instanceID}ID único desta instância de execução. Use para rastrear a execução na Trilha de Auditoria
{currentUser}E-mail do usuário que iniciou a execução

Fluxo e etapas

VariávelConteúdo
{stepName}Nome da etapa atual
{lastStep}Nome da etapa executada anteriormente
{execSteps}Número de etapas executadas até o momento. Útil para vigiar loops contra o Limitador de Ações
{workflow}Trilha das etapas percorridas na execução

Validações e página

VariávelConteúdo
{JS}Não guarda um valor: é um marcador de modo que você mesmo escreve no início de uma condição/script para dizer "o que vem depois é JavaScript puro, sem nenhuma {variavel} a substituir"
{fastCheck}Resultado da função de etapa fastCheck() (veja Configuração de Etapas): true se o seletor informado foi encontrado na página, false se não. Nunca dispara erro, só marca a variável, então serve para checar a presença de um elemento na tela sem interromper o processo
{stepValidation}Resultado do último script de validação de etapa/atributo (Execução Condicional)
{urlChanged}Indica se a URL da aba mudou durante a etapa, seja pela abertura da página, seja pela ação dela (voltar, um clique que navega). A condição de rota da própria etapa enxerga o resultado, e uma etapa sem navegador logo em seguida vê o valor da anterior. Vale verdadeiro ou falso, sem aspas: {urlChanged} == false
{currentUrl}URL da aba em que o agente está operando, já depois dos redirecionamentos e com a query. Fica vazia enquanto nenhuma página foi aberta. É atualizada no início de cada etapa de navegador e de novo logo depois da ação, antes de a rota ser avaliada, então uma condição de rota enxerga a URL de depois do clique. Escreva exatamente {currentUrl}: as referências diferenciam maiúsculas de minúsculas
Quando a URL é lida O runtime lê a URL da aba ao abrir a página da etapa e de novo logo depois da ação, antes da condição de rota. Para um clique que faz a página navegar, ou abrir outra aba, depois de um instante, configure o tempo no campo Aguardar Após Executar do mapeamento: depois da pausa, o agente passa a operar na última aba aberta. Detalhes de Aguardar Após Executar: Timers.
{JS} é escrito por você, não pelo runtime Ao contrário das demais variáveis desta tabela, ninguém preenche {JS} automaticamente: é um prefixo que você adiciona quando a condição não referencia nenhuma variável do processo, só lógica JavaScript pura: {JS} new Date().getDay() === 0. É assim que funciona o catch-all obrigatório das rotas, [{JS} true].goto(...). Veja Lógicas de Rota.

Erro e evidência

VariávelConteúdo
{lastErrorStatus}Status do último erro ocorrido
{errorStep}Etapa em que ocorreu o último erro
{errorDescription}Descrição/mensagem do último erro
{error.evidence}Evidência (screenshot) capturada no momento do erro
{error.evidence_BUFFER}Conteúdo binário (buffer) da evidência do erro, para anexar em e-mails ou salvar via código

Tempo

VariávelConteúdo
{startTime}Timestamp de início da execução
{elapsedSeconds}Segundos decorridos desde o início da execução

Exemplos com variáveis de sistema

Rota de recuperação que reporta o erro

Etapa "Notificar Falha": corpo da mensagem de alerta
O processo {processName} (instância {instanceID}) falhou na etapa {errorStep}.
Erro: {errorDescription}
Iniciado por {currentUser} em {startTime}, após {execSteps} etapas.

Encerrar execuções longas demais

Condição de rota
Rota 1: Number({elapsedSeconds}) > 1800   → Encerrar por Tempo
Rota 2: true                               → Continuar Processamento

Detectar navegação inesperada

Condição de rota após um clique
Rota 1: {urlChanged} == false   → Tratar Clique Sem Efeito
Rota 2: true                      → Próxima Ação

Decidir pela página em que o agente está

Condição de rota após enviar o login
Rota 1: {currentUrl}.includes('/login')   → Tratar Login Recusado
Rota 2: true                               → Próxima Ação

Qual tipo usar

Na dúvida, a pergunta é: de onde vem essa informação e quem precisa poder mudá-la?

Preciso de...Use
Receber uma informação de fora do fluxo (agendamento, webhook, API, quem executa)Global (Matrix)
Guardar um valor intermediário, montar um texto ou calcular no meio do fluxo, sem códigoLocal (Variáveis do Fluxo)
Levar adiante o que uma página, uma API, um conector ou um script devolveuAutomática (nome dado na própria etapa)
Saber qual processo, etapa, usuário ou erro está em jogo, ou quanto tempo passouDe sistema
Alterar, no meio do fluxo, o valor de uma global ou de uma automáticaLocal, com Atribuir a existente
Uma lógica com laços, chamadas HTTP, arquivos ou formatação complexaUm script em Regra Customizada, gravando o resultado de volta com bm.done() (a chave que você devolve vira uma variável automática)

Conferindo os valores na execução

Em modo debug, o console mostra a aba Variáveis, com o valor de cada variável no momento de cada etapa, incluindo as locais e as automáticas, além da gaveta das variáveis de sistema. É a forma mais rápida de confirmar se uma fórmula produziu o que você esperava.

Console do debug na aba Variáveis, com filtro e gaveta de variáveis de sistema
A aba Variáveis do console: filtro por nome ou valor e a gaveta das variáveis de sistema.

Duas ações do debug dependem diretamente das variáveis. Fixar a saída (📌) guarda o que uma etapa produziu, com uma linha por variável, para você testar as etapas seguintes sem repetir a chamada; uma variável local aparece ali como qualquer outra, e cada variável tem a sua própria linha. Reiniciar daqui retoma a execução de uma etapa com os valores que as anteriores já tinham produzido. O detalhe de cada uma está em Ações de debug em cada etapa.