O que você precisa saber
- Um cálculo é um número com nome, calculado a partir das respostas: um preço, uma pontuação ou uma contagem, por exemplo.
- Ele é uma pequena árvore de expressão: leia respostas com
answer, some as pontuações das opções comoption_scoree combine valores com operações de exatamente dois argumentos. - Se alguma entrada ainda não foi respondida, o cálculo ainda não tem valor.
- A referência de resposta mostra uma resposta anterior, ou o resultado de um cálculo, numa pergunta seguinte ou na tela final.
- Cálculos e referências de resposta estão disponíveis em todos os planos.
- O trulyform não recebe pagamentos. Um cálculo pode mostrar um valor, mas a cobrança precisa ser feita por fora.
Formato do cálculo
Os cálculos ficam na lista calculations da definição:
| Chave | Observações |
|---|---|
id |
Um UUIDv7, único no formulário. |
name |
Obrigatório, com até 100 caracteres. O dono do formulário vê esse nome ao lado de cada resposta. |
decimals |
Obrigatório. Número de casas decimais do resultado, de 0 a 6. |
expression |
O nó raiz da expressão. |
Nós de expressão
A referência técnica a seguir é gerada a partir do código e está em inglês, como os assistentes de IA a leem.
| Nó | Formato | Valor |
|---|---|---|
constant |
{"type": "constant", "value": "1.5"} |
A decimal number, written as a string. |
answer |
{"type": "answer", "ref": "<question id>"} |
The answer to a number, nps, opinion_scale question. |
option_score |
{"type": "option_score", "ref": "<question id>"} |
The total score of the options chosen in a single_choice, dropdown, multiple_choice, ranking, matrix question. |
calculation |
{"type": "calculation", "ref": "<calculation id>"} |
The result of another calculation. |
add |
{"type": "add", "args": [a, b]} |
a + b |
subtract |
{"type": "subtract", "args": [a, b]} |
a − b |
multiply |
{"type": "multiply", "args": [a, b]} |
a × b |
divide |
{"type": "divide", "args": [a, b]} |
a ÷ b, to 6 decimal places. Dividing by zero gives no result. |
min |
{"type": "min", "args": [a, b]} |
The smaller of a and b. |
max |
{"type": "max", "args": [a, b]} |
The larger of a and b. |
round |
{"type": "round", "args": [a, {"type": "constant", "value": "0"}]} |
a rounded half up to the number of decimal places in the second argument, 0 to 6. |
As operações recebem exatamente dois argumentos, e uma expressão pode ter até 12 níveis de aninhamento. Cada formulário pode ter até 100 cálculos.
Como os resultados são calculados
- A aritmética é decimal e exata: 0,1 + 0,2 dá 0,3.
- Cada etapa guarda 6 casas decimais, arredondando metades para cima. A divisão também para na sexta casa, então 1 ÷ 3 dá 0,333333.
- O resultado final é arredondado, com metades para cima, para o número de casas em
decimals. - Um nó
calculationusa o valor sem arredondamento do cálculo referenciado, não o resultado mostrado com osdecimalsdele. Se um cálculo mostra 1,5 como 2, outro que dobra esse valor dá 3. Para usar o valor mostrado, coloque a referência dentro de um nóround. - Os resultados precisam ficar abaixo de 10^18 em valor absoluto.
- Uma opção sem
scorevale 0. Na múltipla escolha, somam-se as pontuações de todas as opções marcadas; na matriz, a pontuação da coluna escolhida em cada linha. - O cálculo fica sem valor enquanto uma entrada está sem resposta ou oculta, depois de uma divisão por zero ou quando falta uma referência.
get_responseinforma o motivo noerrordo cálculo. - Uma pergunta de escolha sem nada marcado conta como não respondida, e não como 0. Para extras opcionais que entram no preço, deixe a pergunta obrigatória e inclua uma opção como "Sem extras" com pontuação "0".
Exemplo
A inscrição em workshop calcula o valor da reserva: cada opção de ingresso tem um score (o preço), e cada opção de "número de pessoas" também (a quantidade). O cálculo multiplica os dois.
Workshop registration: calculations
[
{
"id": "01990000-0000-7000-8000-000000000131",
"name": "Total price",
"decimals": 2,
"expression": {"type":"multiply","args":[{"type":"option_score","ref":"01990000-0000-7000-8000-000000000103"},{"type":"option_score","ref":"01990000-0000-7000-8000-000000000104"}]}
}
]
Selecione o texto para copiá-lo.
A pesquisa de feedback de clientes tira a média de uma matriz: soma as pontuações das três linhas e divide por 3, com uma casa decimal.
Referências de resposta
Um nó answerToken mostra uma resposta ou o resultado de um cálculo dentro de um texto formatado:
Agradecimento seguido do nome que a pessoa digitou
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "Thanks, " },
{
"type": "answerToken",
"attrs": { "source": "answer", "ref": "01990000-0000-7000-8000-000000000001", "fallback": "there" }
},
{ "type": "text", "text": "!" }
]
}
Selecione o texto para copiá-lo.
sourceéanswer, com o ID de uma pergunta emref, oucalculation, com o ID de um cálculo.fallbackaparece quando ainda não há nada para mostrar. É obrigatório e pode ser uma string vazia. Escreva o texto em volta do token de um jeito que continue fazendo sentido com o fallback, como "Preço estimado (USD): " com o fallback "a confirmar".- A resposta referenciada precisa vir de uma pergunta anterior, e nunca de um texto informativo. Um cálculo referenciado só pode usar perguntas anteriores.
- A tela de boas-vindas vem antes de todas as perguntas, então não pode mostrar respostas. A tela final pode mostrar qualquer resposta ou cálculo.
As respostas referenciadas aparecem como quem responde as vê: rótulos das opções, várias opções separadas por vírgulas, consentimento como Yes ou No (Sim ou Não em um formulário em português) e a nota seguida do comentário. Um cálculo referenciado mostra exatamente o número de casas de decimals, como 120.00, sem separador de milhar nem símbolo de moeda; escreva o símbolo no texto em volta.
A tela final da inscrição em workshop cumprimenta a pessoa pelo nome e mostra o preço:
Workshop registration: ending
{
"title": {"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"You are booked in, "},{"type":"answerToken","attrs":{"source":"answer","ref":"01990000-0000-7000-8000-000000000101","fallback":"friend"}},{"type":"text","text":"!"}]}]},
"description": {"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Total to pay on the day (USD): "},{"type":"answerToken","attrs":{"source":"calculation","ref":"01990000-0000-7000-8000-000000000131","fallback":"to be confirmed"}},{"type":"text","text":"."}]}]}
}
Selecione o texto para copiá-lo.