Com a necessidade de tornar o sistema mais flexível, o usuário deve poder definir campos personalizados a serem utilizados nos cadastros. Uma vez definidos os campos, o usuário pode vinculá-los a um cadastro e informar valores para eles.
Um campo personalizado deve conter as seguintes informações:
| Campo | Descrição | Tipo | Tamanho | Obrigatório? |
|---|---|---|---|---|
| Nome | Nome da campo personalizado | Texto | 120 | Sim |
| Tipo | O tipo do campo que irá indicar o tipo de valor a ser inserido | Enumerado | – | Sim |
| Grupo | Grupo em que se encontra o campo personalizado | Texto | 25 | Sim |
| Campo obrigatório? | Informa se haverá obrigatoriedade no preenchimento do valor do campo em um cadastro | Booleano | – | Sim |
| Itens | Quando o campo for do tipo lista, define os itens dessa lista | Objeto | – | Somente campos do tipo lista |
| Fórmula | Quando o campo for do tipo fórmula, define a expressão para calcular o valor do campo | Texto | 5000 | Somente campos do tipo fórmula |
| Deve exibir? | Define se o campo vai ser exibido na visão que apresentam os valores de campo personalizado | Booleano | – | Não |
| Expressão regular | Expressão regular(regex) usada para validar os valores de acordo com a expressão, somente para o tipo texto simples | Texto | 100 | Não |
| Máscara | Máscara usada para formatar os valores dos campos, somente para o tipo texto simples | Texto | 100 | Não |
Para campos de lista, cada item deve ter uma descrição e, opcionalmente, um valor decimal associado.
Para campos de seleção múltipla, cada item deve ter uma descrição, e é obrigatório ter no mínimo dois itens.
Para campos do tipo hora, o formato será do tipo HH:mm, ele poderá ser usado nas fórmulas,o sistema não realiza expressões do tipo: hora x hora, hora / hora, hora + data, hora - data.
A opção de definir ou não a obrigatoriedade do preenchimento do campo não se aplica às fórmulas porque o seu valor não é digitado pelo usuário.
A definição dos campos personalizados pode ser feita em dois módulos: nas configurações do sistema ⇒ cadastro de categorias ou no cadastro de serviços.
Para as categorias, os campos poderão ser usados no cadastro de pontos de atendimento. Quando for informada a categoria do ponto de atendimento, o sistema deverá carregar os campos personalizados da categoria em questão para que o usuário possa editar os valores de cada campo (exceto os campos de fórmula).
Para os serviços, os campos personalizados serão definidos durante o cadastro de cada serviço. Assim durante o cadastro de um atendimento, quando for selecionado o serviço, deverão estar disponíveis para edição todos os campos definidos para o serviço.
Em ambos os módulos, durante a edição dos valores os campos deverão estar separados por grupos.
Uma fórmula simples define uma expressão matemática e pode conter os seguintes elementos:
Quando um campo do tipo lista for usado numa fórmula, o valor correspondente ao item selecionado deverá ser usado como um valor decimal.
Exemplos de fórmulas válidas:
KM FINAL - KM INICIAL (ENTRADAS - SAÍDAS) * 2,5 / 100 DATA DE NASCIMENTO + 1 HOJE - DATA PREVISTA
O tipo de dados resultante da avaliação das fórmulas depende do tipo e ordem dos operandos:
Para compor a fórmula, o usuário poderá digitá-la diretamente no campo próprio durante a definição da fórmula ou inserir os elementos com a ajuda de um editor de fórmulas. Neste editor, devem ser listados todos os símbolos aceitos e os nomes dos campos que podem ser inseridos na fórmula. O elemento selecionado pelo usuário será inserido na posição em que estiver o cursor no campo de edição da fórmula.
Uma fórmula condicional deve ter duas expressões a serem avaliadas de acordo com a combinação de duas condições. O resultado da fórmula virá da primeira expressão quando as condições forem verdadeiras, ou da segunda, caso contrário.
Embora as partes de uma fórmula condicional sejam tratadas separadamente, elas podem ser representadas assim:
SE <CONDIÇÃO 1> E|OU <CONDIÇÃO 2>: <VALOR SE VERDADEIRO>, SENÃO <VALOR SE FALSO>. (MÁXIMO <VALOR MÁXIMO>)
Portanto uma fórmula condicional é formada por:
As expressões seguem as mesmas regras das fórmulas simples.
Cada uma das condições é composta por duas expressões combinadas com um operador de comparação de modo que o resultado possa ser definido como falso ou verdadeiro. Portanto, além do que é permito nas fórmulas simples, as condições devem conter um dos seguintes operadores:
Exemplos de fórmulas válidas:
SE IDADE >= 18 OU DATA DE VENCIMENTO < HOJE, HOJE - DATA DE VENCIMENTO, SENÃO IDADE SE KM FINAL - KM INICIAL > 100, (KM FINAL - KM INICIAL) * 2,80, SENÃO 200 (MÁXIMO 500) SE ENTRADAS > SAÍDAS E TAXA <> 0, (ENTRADAS - SAÍDAS) * TAXA / 100, SENÃO 0
O campo “HOJE” é predefinido e retorna a data do sistema toda vez que a fórmula for reavaliada.
O campo “UFIR” deve retornar o valor da UFIR selecionado durante o cadastro do atendimentos. A lista de valores vem do cadastro de serviços.
O sistema deverá permitir a entrada de dados (valores), apenas do tipo definido para cada campo. Ex: Um campo do tipo inteiro só deverá receber números inteiros (1, 2, 3, 123…), um campo do tipo data deverá receber uma data no formato padrão para este tipo de dado.
Nos cadastros onde os campos são utilizados, os valores devem ser validados da seguinte maneira:
Campos do tipo Lista devem conter, ao menos, dois itens, e estes devem possuir descrição diferente para cada conjunto de campos personalizados. Num campo do tipo Lista, um item não pode ser alterado ou excluído se já tiver um valor definido para ele em algum cadastro (pontos de atendimento ou atendimentos).
Campos dos tipos anexo tem seus valores substituídos quando é carregado um novo arquivo, e o download pode ser feito clicando no nome do arquivo anexado.
Quando um novo campo personalizado for criado, este deverá estar disponível para ser usado em qualquer cadastro, incluindo aqueles criados antes da criação do campo.
Existem algumas restrições para edição dos campos personalizados, essas regras valem apenas para os campos personalizados que estão sendo utilizados. Quando não há registros vinculados a esses itens, todos os campos devem ser editáveis sem restrições: