====== 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 | 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 | ==== 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. - **Pessoa**: permite que o usuário consulte uma pessoa cadastrada e selecione. - **Hora**: permite informa um valor do tipo hora no formato de 24 horas. - **Seleção múltipla**: permite criar uma lista de valores selecionáveis. 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. ==== 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.online:requisitos:configuracoes:categorias|cadastro de categorias]] ou no [[softwares:geoservicos.online: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. ==== Fórmulas ==== * Somente os campos inteiros, decimais, listas e datas podem ser incluídos numa fórmula. * Para incluir um campo personalizado na fórmula é preciso selecionar o campo na lista de campos, só assim os campos personalizados podem ser reconhecidos na fórmula * O campo personalizado do tipo fórmula não poderá ser criado com a atribuição de obrigatoriedade, ao contrário dos demais tipos. * Nas fórmulas simples apenas o valor máximo não é obrigatório. No entanto, este campo deverá conter o valor 0 (zero), caso o usuário não o preencha. * Nas fórmulas condicionais, todos os campos exceto o valor máximo e a segunda condição são obrigatórios. Semelhante à fórmula simples, o campo valor máximo deverá conter o valor 0 (zero), caso o usuário não o preencha. * 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 (E ou OU) informado. * Quando definido um valor máximo para uma fórmula, seu resultado nunca deverá ultrapassar este valor, mas somente se este resultado for um número. * Ao criar uma 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 relacionada. * 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. === 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. ==== Aplicação dos campos personalizados ==== 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: * 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 conter, ao menos, dois itens definidos. * Anexo: devem conter algum arquivo carregado/anexado. 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. ===== Observações ===== 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: - Ajustes permitidos: * Incluir um novo campo na lista * Alterar a ordem dos campos * Alterar o nome (desde que não seja igual a outro campo) * Alterar o grupo * Definir se ele é obrigatório ou não (ativar/desativar a obrigatoriedade do campo não deve afetar os registros existentes, ou seja: se o campo não era obrigatório, mas passou a ser, os registros que não têm o campo preenchido devem permanecer no cadastro, sem erros. Entretanto, se o usuário editar um desses registros, ao salvá-lo o sistema irá fazer novamente a validação dos campos e irá exigir o preenchimento do campo). * Incluir valores em campos do tipo lista (novos itens na lista não podem alterar os registros já existentes, só os futuros) - Ajustes proibidos: * Excluir um campo da lista * Tipo do campo * Editar/excluir valores em campos do tipo lista * Fórmula