Passos do pacote
Todos os campos de um passo de produto e de informação, e a fórmula com que um passo determina as suas próprias linhas de fatura.
Última atualização em
Esta página descreve os campos do cartão Linhas de fatura extra na página do produto. Como construir um pacote está em Configurar linhas de fatura extra.
Passo de produto
O Tillor converte um passo de produto em zero, uma ou mais linhas de fatura com esse produto. Sem fórmula, é uma linha com a quantidade definida; com uma fórmula é você quem determina se há linhas, quantas e quais.
| Campo | O que faz |
|---|---|
| Produto | O produto que fica na linha filha, por exemplo um suplemento NFC ou o aluguer de um contador. Obrigatório |
| Quantidade | A quantidade da linha quando o passo não tem fórmula, ou quando a fórmula devolve true. Maior que 0 |
| Multiplicar pela quantidade da linha âncora | Multiplica cada quantidade calculada pela quantidade da linha principal, por exemplo 0,5 num semestre de Estacionamento. O resultado é arredondado a duas casas decimais. O Tillor omite as linhas que, por isso, ficam a 0; uma linha que a própria fórmula devolve com quantidade 0 mantém-se |
| Descrição (opcional) | Substitui o nome do produto na linha de fatura. Uma fórmula que devolve linhas pode dar a cada linha uma descrição própria |
| Estilo da linha | Predefinido (produto), DEFAULT ou INFO. Com INFO, a linha filha torna-se uma nota cinzenta no PDF e no editor |
| Uma vez por fatura | Só é relevante quando há duas ou mais linhas principais com um pacote na mesma fatura. O passo pertence então apenas à primeira linha principal pela ordem da fatura |
| Dias extra após o fim da linha principal (métodos de acesso) | Só faz sentido quando o produto principal tem Prorrogar período de ocupação como ação. Quando é paga uma linha deste passo, o Tillor prorroga os métodos de acesso do cliente até à data de fim da linha principal mais este número de dias; os tipos e estados vêm de Prorrogar método de acesso no produto principal, ver Prorrogar NFC através do pacote |
| Fórmula | Opcional. TypeScript que determina se o passo entra na fatura, com que quantidade, ou que linhas exatamente, ver Fórmula por passo |
Passo de informação
Um passo de informação é apenas texto, sem produto nem montante. O Tillor mostra-o como linha explicativa.
| Campo | O que faz |
|---|---|
| Texto da linha de informação | O texto visível, por exemplo "Inclusief toeristen-, gemeente- en provincietaksen". Obrigatório |
| Estilo da linha | Por omissão INFO. Pode escolher DEFAULT se quiser mostrar a linha como uma linha normal |
| Fórmula | Opcional. Se a fórmula devolver false, a linha de informação é omitida |
Se um passo de informação estiver sob uma linha principal, o PDF coloca automaticamente ↳ antes do texto.
Fórmula por passo
Cada passo pode ter uma Fórmula: TypeScript, tal como a fórmula de tarifa, que o Tillor executa ao guardar uma fatura com este pacote. Assim, um passo pode depender do cliente, da ocupação, do terreno, dos contadores ou dos métodos de acesso, por exemplo através de um campo personalizado em que mantém uma exceção.
O que a fórmula devolve
| Valor devolvido | Efeito |
|---|---|
true | Uma linha com a Quantidade definida |
false ou null | Nenhuma linha |
| Um número maior que 0 | Uma linha com esse número como quantidade |
| Uma lista de linhas | Exatamente essas linhas, por essa ordem. Uma lista vazia significa nenhuma linha |
Uma linha numa lista deste tipo é um objeto com estes campos:
| Campo | Significado |
|---|---|
quantity | Obrigatório. A quantidade, 0 ou mais. Uma linha com 0 mantém-se, mesmo com Multiplicar pela quantidade da linha âncora |
description | Opcional. A descrição desta linha; caso contrário, a Descrição do passo, caso contrário, o nome do produto |
unitPrice | Opcional. Preço unitário com IVA incluído, como a tarifa do produto; caso contrário, a tarifa do produto. 0 cria uma linha gratuita |
accessMethodValue | Opcional. O valor do método de acesso a que esta linha diz respeito (o UID da etiqueta NFC), para a prorrogação no pagamento |
O que a fórmula pode ler
Os campos são lidos com chavetas, como nas automatizações. O menu Variável junto ao campo mostra tudo o que está disponível, incluindo os seus campos personalizados.
| Variável | O que é |
|---|---|
{customer.…} | O cliente da fatura, por exemplo {customer.createdAt} ou {customer.customFields.meterhuurVrijgesteld} |
{occupation.…} | A ocupação da linha principal. Se o produto principal não estiver em Prorrogar período de ocupação, a única ocupação do cliente; vazio (null) se o cliente ocupar vários terrenos |
{terrain.…} | O terreno dessa ocupação |
{anchor.…} | A linha principal: {anchor.quantity} (por exemplo 0,5 num semestre), {anchor.terrainId}, {anchor.occupationId} e {anchor.endDate} |
{meters} | A lista de contadores no âmbito: no terreno da linha principal com Prorrogar período de ocupação, caso contrário em todos os terrenos que o cliente ocupa. Cada contador tem name, provider (por exemplo ICY), type (por exemplo ELECTRICITY, GAS), os metadados do seu fornecedor (por exemplo icyMetadata.switchState para fornecimento ligado), o seu terrain e customFields |
{accessMethods} | A lista de métodos de acesso do cliente, os mais antigos primeiro, de todos os tipos e estados. Cada método tem type (por exemplo NFC), status (por exemplo ACTIVE), value, uma label legível (o nome conhecido da etiqueta NFC, caso contrário o valor) e customFields |
O Tillor só carrega as listas {meters} e {accessMethods} se a fórmula as utilizar.
Exemplos
Ignorar um passo para clientes isentos:
if ({customer.customFields.exemptFromSurcharges} === true) return false;
return true;Uma linha por contador de eletricidade ICY com fornecimento ligado e, para clientes desde 2026, também com fornecimento desligado:
const newCustomer = new Date({customer.createdAt} ?? 0) >= new Date("2026-01-01T00:00:00+01:00");
return {meters}
.filter((m) => m.provider === "ICY" && m.type === "ELECTRICITY")
.filter((m) => m.icyMetadata?.switchState === true || newCustomer)
.map((m) => ({ quantity: 1, description: `Huur digitale elektriciteitsmeter ${m.name}` }));A primeira etiqueta NFC gratuita como nota explicativa, cada uma das seguintes pela tarifa do produto (dois passos com o mesmo produto, ou um passo que devolve os dois tipos de linhas):
const nfc = {accessMethods}.filter((a) => a.type === "NFC" && a.status === "ACTIVE");
return nfc.map((a, i) => ({
quantity: i === 0 ? 0 : 1,
unitPrice: i === 0 ? 0 : undefined,
accessMethodValue: a.value,
description: i === 0 ? `Toegangsmethode inclusief: ${a.label}` : `Toeslag extra toegangsmethode: ${a.label}`,
}));Uma linha com o número de cães a partir de um campo personalizado do cliente, nenhuma linha sem cães:
const dogs = Math.max(0, Math.floor(Number({customer.customFields.animals.dogs}) || 0));
return dogs === 0 ? false : [{ quantity: dogs, description: `Honden (${dogs})` }];Com Inserir exemplo por baixo do campo, obtém um ponto de partida com estas formas em comentário.
Erros
Uma fórmula que não compila não pode ser guardada; a mensagem por baixo do campo indica o que está errado. Se uma fórmula bloquear ao guardar uma fatura, ou devolver algo diferente de true, false, um número ou linhas válidas, o guardar falha com o nome do passo na mensagem de erro, para que uma fórmula avariada nunca acrescente ou omita uma linha em silêncio.