====== Campos personalizados ====== ===== Resumo ===== 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. ===== Descrição ===== Um campo personalizado deve conter as seguintes informações: |< 100% 19% 60% 7% 7% 7%>| ^ Campo ^ Descrição ^ Tipo ^ Tamanho ^ Obrigatório? ^ |Nome |Nome da campo personalizado | Texto | 240 | 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 | ==== Tipos de campos personalizados ==== - **Texto simples**: uma única linha de texto. - **Texto multilinhas**. - **Número inteiro**. - **Número decimal**. - **Data**. - **Lista**: permite que o usuário cadastre uma lista de itens para que seja usada como opção de escolha ao preencher o campo personalizado. - **Anexo**: permite que o usuário inclua um arquivo para um campo personalizado. - **Fórmula**: permite definir uma fórmula para cálculo automático do valor do campo em função de outros campos no mesmo cadastro. Uma fórmula pode ser uma simples expressão ou uma fórmula condicional. Todos os tipos de fórmulas podem ter um valor máximo que limite o resultado do cálculo. Para campos de lista, cada item deve ter uma descrição e, opcionalmente, um valor decimal associado. 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. === Fórmulas simples === Uma fórmula simples define uma expressão matemática e pode conter os seguintes elementos: * Operadores básicos: +, -, * e /; * Parênteses; * Campos: nomes dos campos do tipo inteiro, decimal, data ou lista que pertençam ao mesmo cadastro; * Constantes numéricas. 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: * Somente números: qualquer operação resulta num número; * Data com data: só é permitido fazer a subtração e o resultado é o número de dias entre as duas datas, inteiro, podendo ser negativo; * Data com número: é permitido somar e subtrair e o resultado é a data em questão somada ou subtraída com um número de dias; * Número com data: só é permitido somar e o resultado é a data em questão somada com um número de dias. 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. === Fórmulas condicionais === 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 E|OU : , SENÃO . (MÁXIMO ) Portanto uma fórmula condicional é formada por: * Uma primeira condição (obrigatória); * Uma segunda condição (opcional); * Um operador lógico para combinar as duas condições (obrigatório se a segunda condição for preenchida): E / OU; * Uma expressão a ser avaliada quando a combinação das condições for verdadeira (obrigatória); * Uma expressão a ser avaliada quando a combinação das condições for falsa (obrigatória); * Um valor máximo (número real) para limitar o resultado da fórmula (opcional); 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: * = (igual a) * > (maior que) * < (menor que) * >= (maior ou igual a) * <= (menor ou igual a) * <> (diferente de) 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 === Campos predefinidos === 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. ==== Cadastro de valores para os campos personalizados ==== A definição dos campos personalizados pode ser feita em dois módulos: nas configurações do sistema => [[softwares:geoservicos:requisitos:configuracoes:categorias|cadastro de categorias]] ou no [[softwares:geoservicos:requisitos:modulos:servicos|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. ===== Pontos de verificação ===== * O sistema só deverá permitir a entrada de dados (valores) do tipo definido para cada campo. Ex: Um campo do tipo inteiro só deverá receber número inteiro (1, 2, 3, 123...); * Nos cadastros onde os campos são utilizados, os valores devem ser validados da seguinte maneira: * Texto simples e texto múltiplas linhas: não podem ser vazios; * Números inteiros e decimais: devem ser positivos; * Datas: devem ser posteriores a 30/12/1899; * Lista: devem ter um item definido. * Anexo: devem ter algum arquivo carregado. * Campos do tipo Lista devem conter ao menos dois itens distintos. * Não pode haver mais de um item com a mesma descrição 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). * Quando um novo campo personalizado for criado, ele deverá estar disponível para ser usado em qualquer cadastro, incluindo aqueles criados antes da criação do campo. * A descrição dos itens do tipo lista aceitam 240 caracteres ==== Fórmulas ==== * Somente os campos inteiros, decimais, listas e datas podem ser incluídos numa fórmula. * Nas fórmulas simples apenas o valor máximo não é obrigatório. * Nas fórmulas condicionais, todos os campos exceto o valor máximo e a segunda condição são obrigatórios; * As fórmulas, simples ou condicionais, devem ser validadas sintaticamente antes de serem salvas; * Nas fórmulas condicionais quando não for informada a segunda condição, o resultado dependerá somente da primeira condição. Quando houver a segunda condição, o resultado dependerá da combinação das duas condições com o operador lógico informado; * Quando definido um valor máximo para uma fórmula, o seu resultado nunca deverá ultrapassar este valor, mas somente se este resultado for um número; * Ao criar uma nova fórmula, o usuário deve informar que tipo de fórmula ele quer inserir. Ao editar uma fórmula, o sistema deve identificar o tipo de fórmula e mostrar a interface apropriada; * O resultado de um campo de fórmula não poderá ser editado pelo usuário; * O valor de um campo de fórmula deverá ser atualizado automaticamente quando qualquer outro campo personalizado do tipo inteiro, decimal ou data no mesmo cadastro for alterado; * Qualquer campo não preenchido será avaliado como 0 (zero). * Uma fórmula deverá ser avaliada como vazio quando não for possível definir seu resultado: * Quando um campo referenciado na fórmula não existir no momento da avaliação ou não for de um dos tipos permitidos; * Quando o cálculo da expressão executar uma divisão por zero; * Quando a operação envolvendo datas não for válida. Por exemplo: multiplicação de datas. * Quando as condições ou expressões de uma fórmula condicional não puderem ser avaliadas por um dos motivos acima. ===== Observações =====