Skip to Content
Produtos

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.

CampoO que faz
ProdutoO produto que fica na linha filha, por exemplo um suplemento NFC ou o aluguer de um contador. Obrigatório
QuantidadeA 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 âncoraMultiplica 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 linhaPredefinido (produto), DEFAULT ou INFO. Com INFO, a linha filha torna-se uma nota cinzenta no PDF e no editor
Uma vez por faturaSó é 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órmulaOpcional. 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.

CampoO que faz
Texto da linha de informaçãoO texto visível, por exemplo "Inclusief toeristen-, gemeente- en provincietaksen". Obrigatório
Estilo da linhaPor omissão INFO. Pode escolher DEFAULT se quiser mostrar a linha como uma linha normal
FórmulaOpcional. 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 devolvidoEfeito
trueUma linha com a Quantidade definida
false ou nullNenhuma linha
Um número maior que 0Uma linha com esse número como quantidade
Uma lista de linhasExatamente essas linhas, por essa ordem. Uma lista vazia significa nenhuma linha

Uma linha numa lista deste tipo é um objeto com estes campos:

CampoSignificado
quantityObrigatório. A quantidade, 0 ou mais. Uma linha com 0 mantém-se, mesmo com Multiplicar pela quantidade da linha âncora
descriptionOpcional. A descrição desta linha; caso contrário, a Descrição do passo, caso contrário, o nome do produto
unitPriceOpcional. 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
accessMethodValueOpcional. 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ávelO 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.

Ver também

Esta página foi útil?

Nesta página