Regras de programa com suporte no aplicativo Android Capture¶
The following is a comprehensive list of all Program Rule components (variable types and actions) available in DHIS2, and notes on whether or not these have been implemented in the DHIS2 Android App.
Note
Any issues around using a particular feature with Android are highlighted with an exclamation mark !.
| lenda | descrição |
|---|---|
| Tipo de valor implementado | |
| Tipo de valor não implementado, mas será ignorado com segurança (se não for obrigatório) | |
| Não aplicável | |
| Trabalho em progresso. Recurso ainda não totalmente implementado ou com comportamento inesperado já relatado |
Tipos de fonte de variável de regra de programa suportados¶
| Tipo de variável | Descrição do tipo de variável | Programa com registro | Programa sem registro | Notas sobre implementação |
|---|---|---|---|---|
| Data Element from the newest event for a program stage | Este tipo de fonte funciona da mesma maneira que "Elemento de dados do evento mais recente no programa atual", exceto que avalia apenas os valores de um estágio específico do programa. | |||
| Elemento de dados do evento mais recente no programa atual (com registro) | Este tipo de origem é preenchido com o valor de dados mais recente coletado para o elemento de dados especificado na inscrição. | |||
| Data Element from the newest event in the current program (without registration) | Esta variável de regra de programa será preenchida com o valor de dados mais recente encontrado nos 10 eventos mais recentes na mesma unidade de organização. | |||
| Data Element in current event (with registration) | A variável obtém o valor element’s de dados do evento atual. | |||
| Data Element in current event (without registration) | Contém o valor dos dados do mesmo evento que o utilizador abriu no momento. | |||
| Data Element from previous event (with registration) | Variáveis de regra de programa com este tipo de origem conterão o valor mais recente de todos os eventos anteriores para o elemento de dados especificado. O evento atualmente aberto não é avaliado. | |||
| Data Element from previous event (without registration) | Esta variável de regra de programa será preenchida com o valor de dados mais recente encontrado nos 10 eventos anteriores à data do evento atual (ou seja, não incluindo o evento atual). | |||
| Atributo de entidade rastreada | Preenche a variável de regra do programa com um atributo de entidade rastreada especificado para o TEI atual (por exemplo, paciente atual). | |||
| Valor calculado | Valor calculado. |
Ações de regra de programa suportadas (elemento de dados no evento atual)¶
| Açao | Descrição da ação | Programa com registro | Programa sem registro | Notas sobre implementação |
|---|---|---|---|---|
| Esconder o Campo | Oculta um elemento de dados individual se a regra for verdadeira. | ! Se você alterar o valor depois que o campo estiver oculto, ele reverterá a ação dependendo do valor padrão do mecanismo de regras do tipo de valor. Recomendamos seu uso combinado com a função hasvalue. | ||
| Ocultar seção | Oculta uma seção inteira e seus elementos de dados se a regra for verdadeira. | |||
| Ocultar opção | Oculte uma única opção para um conjunto de opções em um determinado elemento de dados / atributo de entidade rastreada. Quando combinado com mostrar grupo de opções a opção de ocultar tem precedência | |||
| Ocultar Grupo de Opções | Oculte todas as opções em um determinado grupo de opções e elemento de dados / atributo de entidade rastreada. Quando combinado com mostrar grupo de opções a opção de ocultar tem precedência | |||
| Mostrar grupo de opções | Usado para mostrar apenas opções de um determinado grupo de opções em um determinado elemento de dados / atributo de entidade rastreada. Mostrar um grupo de opções oculta implicitamente todas as opções que não fazem parte do (s) grupo (s) mostrado (s). | |||
| Atribuir valor | Atribui um valor a um elemento de dados ou atributo especificado se a regra for verdadeira. | Para avaliar o texto, deve estar entre aspas simples. Por exemplo: '2+2' mostrará o texto 2+2 e 2+2, sem as aspas simples mostrará 4. | ||
| Mostrar aviso | Mostra um aviso pop-up ao utilizador se a regra for verdadeira; não impede que o utilizador continue. | |||
| Aviso na conclusão | Mostra um aviso pop-up para o utilizador se, no ponto ‘complete’ for clicado, uma regra é verdadeira; isso não impede o utilizador de continuar. | |||
| Mostrar erro | Mostra uma mensagem de erro pop-up para o utilizador assim que uma regra é verdadeira e impede o utilizador de continuar até que a regra não seja mais verdadeira. | O valor não é salvo, mas o texto não é limpo para que o utilizador possa corrigi-lo facilmente. | ||
| Erro ao concluir | Mostra um aviso pop-up ao utilizador se, quando estiver "concluído"; for clicado, uma regra é verdadeira e impede o utilizador de continuar até que a regra não seja mais verdadeira. | |||
| Tornar campo obrigatório | Define um elemento de dados como "obrigatório"; se a regra for verdadeira. | |||
| Exibir texto (programas de eventos) | Usado para exibir informações que não são um erro ou aviso, por exemplo, feedback. | Independentemente do tipo de variável de origem, o texto será exibido no formulário como o último elemento da última seção. O texto será exibido como mensagens na guia de indicadores. | ||
| Exibir texto (programas rastreadores) | Usado para exibir informações que não são um erro ou aviso, por exemplo, feedback. | 1. Regra do programa configurada como "Regra de disparo apenas para o estágio do programa". O texto será exibido SOMENTE na forma como o último elemento da última seção. O texto será exibido como mensagens na guia de indicadores. -> Se a regra do programa usar qualquer tipo de variável que não seja do estágio atual, a regra não poderá ser avaliada e a mensagem não será mostrada. 2. Regra de programa NÃO configurada como "Regra de disparo apenas para estágio de programa". O texto será exibido SOMENTE na guia de indicadores e NÃO no formulário. -> Se a regra do programa utilizar alguma variável do tipo Evento Atual, a regra não poderá ser avaliada e a mensagem não será mostrada. | ||
| Exibir valor-chave / par (programas de eventos) | Usado para exibir informações extraídas de um elemento de dados. | Variable Type: * Data element from the newest event in the current program* Data element from previous event* Data element in current event* Built-in variableKey/Value Pair will be displayed in the form ONLY in the specified section. | ||
| Exibir valor-chave / par (programas Traker) | Usado para exibir informações extraídas de um elemento de dados. | 1. Variable Type:* Data element in current eventKey/Value Pair will be displayed in the form ONLY in the specified section.2. Variable Type:* Data element from the newest event in the current program* Data element from previous event* Data element from the newest event for a program stage* Tracked entity attribute* Built-in variableKey/Value Pair will be displayed ONLY in the indicators tab and NOT in the form. | ||
| Ocultar estágio do programa | Oculta todo um estágio do programa do utilizador se a regra for verdadeira. | A regra de ação é compatível apenas com o elemento de dados do evento mais recente no tipo de programa atual e variáveis de atributo da entidade rastreada. | ||
| Enviar mensagem | Enviar mensagem aciona uma notificação com base no modelo de mensagem fornecido. Essa ação será executada sempre que houver uma alteração no valor dos dados. No entanto, esse comportamento pode ser controlado fornecendo o status de inscrição do evento na expressão de regra do programa | Este recurso é executado no lado do servidor. | ||
| Mensagem de agendamento | A mensagem de agendamento agendará a notificação na data fornecida pelo Expression no campo de dados. | Este recurso é executado no lado do servidor. |
Regras do programa Ações suportadas (outras variáveis)¶
| Açao | Descrição da ação | Elemento de dados do evento mais recente no programa atual (com registro) | Elemento de dados do evento mais recente no programa atual (sem registro) | Elemento de dados do evento anterior (com registro) | Elemento de dados do evento anterior (sem registro) | Elemento de dados do evento mais recente para um estágio do programa (com registro) | Atributo de entidade rastreada (com registro) | Notas sobre implementação |
|---|---|---|---|---|---|---|---|---|
| Esconder o Campo | Oculta um elemento de dados individual se a regra for verdadeira. | |||||||
| Ocultar seção | Oculta uma seção inteira e seus elementos de dados se a regra for verdadeira. | |||||||
| Ocultar opção | Oculte uma única opção para um conjunto de opções em um determinado elemento de dados / atributo de entidade rastreada. Quando combinado com mostrar grupo de opções , a opção de ocultar tem precedência. | |||||||
| Ocultar Grupo de Opções | Oculte todas as opções em um determinado grupo de opções e atributo de elemento de dados / entidade rastreada. Quando combinado com o grupo de opções de exibição, a opção de ocultar tem precedência. | |||||||
| Atribuir valor | Atribui um valor a um elemento de dados ou atributo especificado se a regra for verdadeira. | Para avaliar o texto, deve estar entre aspas simples. Por exemplo: '2+2' mostrará o texto 2+2 e 2+2, sem as aspas simples mostrará 4. | ||||||
| Mostrar aviso | Mostra um aviso pop-up ao utilizador se a regra for verdadeira; não impede que o utilizador continue. | |||||||
| Aviso na conclusão | Mostra um aviso pop-up ao utilizador se, no ponto em que "concluir" for clicado, uma regra for verdadeira; isso não impede o utilizador de continuar. | |||||||
| Mostrar erro | Mostra uma mensagem de erro pop-up para o utilizador assim que uma regra é verdadeira e impede o utilizador de continuar até que a regra não seja mais verdadeira. | A regra permitirá que o utilizador conclua a inscrição, mas impedirá de concluir os eventos até que a regra não seja mais verdadeira. O valor não é salvo, mas o texto não é limpo para que o utilizador possa corrigi-lo facilmente. | ||||||
| Erro ao concluir | Mostra um aviso pop-up ao utilizador se, no ponto em que "concluir" for clicado, uma regra for verdadeira; isso não impede o utilizador de continuar. | |||||||
| Tornar campo obrigatório | Define um elemento de dados como "obrigatório" se a regra for verdadeira. | |||||||
| Exibir texto (programas de eventos) | Usado para exibir informações que não são um erro ou aviso, por exemplo, feedback. | Independentemente do tipo de variável de origem, o texto será exibido no formulário como o último elemento da última seção. O texto será exibido como mensagens na guia de indicadores. | ||||||
| Exibir texto (programas rastreadores) | Usado para exibir informações que não são um erro ou aviso, por exemplo, feedback. | 1. Regra do programa configurada como "Regra de disparo apenas para o estágio do programa". O texto será exibido SOMENTE na forma como o último elemento da última seção. O texto será exibido como mensagens na guia de indicadores. -> Se a regra do programa usar qualquer tipo de variável que não seja do estágio atual, a regra não poderá ser avaliada e a mensagem não será mostrada. 2. Regra de programa NÃO configurada como "Regra de disparo apenas para estágio de programa". O texto será exibido SOMENTE na guia de indicadores e NÃO no formulário. -> Se a regra do programa utilizar alguma variável do tipo Evento Atual, a regra não poderá ser avaliada e a mensagem não será mostrada. | ||||||
| Exibir valor-chave / par (programas de eventos) | Usado para exibir informações extraídas de um elemento de dados. | Variable Type: * Data element from the newest event in the current program* Data element from previous event* Data element in current event* Built-in variableKey/Value Pair will be displayed in the form ONLY in the specified section. | ||||||
| Exibir valor-chave / par (programas Traker) | Usado para exibir informações extraídas de um elemento de dados. | 1. Variable Type:* Data element in current eventKey/Value Pair will be displayed in the form ONLY in the specified section.2. Variable Type:* Data element from the newest event in the current program* Data element from previous event* Data element from the newest event for a program stage* Tracked entity attribute* Built-in variableKey/Value Pair will be displayed ONLY in the indicators tab and NOT in the form. | ||||||
| Ocultar estágio do programa | Oculta todo um estágio do programa do utilizador se a regra for verdadeira. | A regra de ação é compatível apenas com o elemento de dados do evento mais recente no tipo de variável de programa atual . Se o evento for gerado automaticamente, a regra não se aplicará. | ||||||
| Enviar mensagem | Enviar mensagem aciona uma notificação com base no modelo de mensagem fornecido. Essa ação será executada sempre que houver uma alteração no valor dos dados. No entanto, esse comportamento pode ser controlado fornecendo o status de inscrição do evento na expressão de regra do programa | Este recurso é executado no lado do servidor. | ||||||
| Mensagem de agendamento | A mensagem de agendamento agendará a notificação na data fornecida pelo Expression no campo de dados. | Este recurso é executado no lado do servidor. |
Funções para usar em expressões de regra de programa¶
| Função | Descrição da função | Status | Notas sobre implementação |
|---|---|---|---|
| d2: ceil | Arredonda o argumento de entrada para o número inteiro mais próximo. | ||
| d2: chão | Arredonda o argumento de entrada para o número inteiro mais próximo. | ||
| d2: redondo | Arredonda o argumento de entrada para o número inteiro mais próximo. | ||
| d2: módulo | Produz o módulo ao dividir o primeiro com o segundo argumento. | ||
| d2: zing | Avalia o argumento do tipo número para zero se o valor for negativo, caso contrário, para o próprio valor. | ||
| d2: oizp | Avalia o argumento do tipo número como um se o valor for zero ou positivo, caso contrário, como zero. | ||
| d2: concatenar | Produz uma string concatenada a partir dos parâmetros de entrada. Suporta qualquer número de parâmetros. | Use d2: a função concatenar em vez de usar "+", pois o avaliador de expressão no aplicativo adicionará números, se puder. | |
| d2: dias entre | Produces the number of days between the first and second argument. If the second argument date is before the first argument, the return value will be the negative number of days between the two dates. The static date format is 'yyyy-MM-dd'. | ||
| d2: semanas entre | Produces the number of full weeks between the first and second argument. If the second argument date is before the first argument, the return value will be the negative number of weeks between the two dates. The static date format is 'yyyy-MM-dd'. | ||
| d2: meses entre | Produz o número de meses completos entre o primeiro e o segundo argumento. Se a data do segundo argumento for anterior ao primeiro argumento, o valor de retorno será o número negativo de meses entre as duas datas. O formato de data estático é 'aaaa-MM-dd'. | ||
| d2: anos entre | Produz o número de anos entre o primeiro e o segundo argumento. Se a data do segundo argumento for anterior ao primeiro argumento, o valor de retorno será o número negativo de anos entre as duas datas. O formato de data estático é 'aaaa-MM-dd'. | ||
| d2: addDays | Produz uma data com base na data do primeiro argumento, adicionando o segundo argumento número de dias. | ||
| d2: contagem | Conta o número de valores inseridos para o campo de origem no argumento. | ||
| d2: countIfValue | Conta o número de valores correspondentes inseridos para o campo de origem no primeiro argumento. Apenas as ocorrências que correspondem ao segundo argumento são contadas. | ||
| d2: countIfZeroPos | Conta o número de valores que é zero ou positivo inserido para o campo de origem no argumento. O parâmetro do campo de origem é o nome de um dos campos de origem definidos no programa. | ||
| d2: hasValue | Evaluates to true of the argument source field contains a value, false if no value is entered. | ||
| d2: validatePattern | Avalia como verdadeiro se o texto de entrada é uma correspondência exata com o padrão de expressão regular fornecido. A expressão regular precisa ser escapada. | ||
| d2: esquerda | Avalia à esquerda de um texto, num-chars do primeiro caractere. | ||
| d2: certo | Avalia à direita de um texto, num-chars do último caractere. | ||
| d2: substring | Avalia a parte de uma string especificada pelo número do caractere inicial e final. | ||
| d2: dividir | Divida o texto por delimitador e mantenha o enésimo elemento (0 é o primeiro). | ||
| d2: comprimento | Encontre o comprimento de uma corda. | ||
| d2: zpvc | Retorna o número de valores numéricos zero e positivos entre os argumentos de objeto fornecidos. Pode ser fornecido com qualquer número de argumentos. | ||
| d2: inOrgUnitGroup * | Avalia se a unidade organizacional atual está no grupo de argumento. O argumento pode ser definido com ID ou código de grupo de unidade organizacional. | ||
| d2:hasUserRole** | Retorna verdadeiro se o utilizador atual tem essa função, caso contrário, é falso. | ||
| d2:zScoreWFA*** | A função calcula o escore z com base nos dados fornecidos pelo indicador de peso para idade da OMS. Seu valor varia entre -3,5 a 3,5 dependendo do valor do peso. | Providing an age less than 0 or greater than 60 will result in the program rule to not be calculated. Also, WFA tables have the age parameter increment in steps of 1, providing a fraction age will floor the value (2.3 months → 2 months). | |
| d2:zScoreHFA*** | Function calculates z-score based on data provided by WHO height-for-age indicator. Its value varies between -3.5 to 3.5 depending upon the value of weight. | Providing an age less than 0 or greater than 60 will result in the program rule to not be calculated. Also, HFA tables have the age parameter increment in steps of 1, providing a fraction age will floor the value (2.3 months → 2 months). | |
| d2:zScoreWFH*** | Function calculates z-score based on data provided by WHO weight-for-height indicator. Its value varies between -3.5 to 3.5 depending upon the value of weight. | Providing a height less than 45 or greater than 120 will result in the program rule to not be calculated. Also, WFH tables have the height parameter increment in steps of 0.5, providing a fraction height will floor the value (45.3 → 45 |
Note
- Available in DHIS2 v2.30 ** Available in DHIS2 v2.31 and greater *** Available in DHIS2 v2.32 and greater
Variáveis padrão para usar em expressões de regra de programa¶
Disponível em DHIS2 v2.30
| Variável | Descrição da função | Status | Notas sobre implementação |
|---|---|---|---|
| V{current_date} | Contém a data atual sempre que a regra é executada. | ||
| V{event_date} | Contém a data do evento da execução do evento atual. Não terá valor no momento em que a regra for executada como parte do formulário de inscrição. | ||
| V{event_status} | Contém o status do evento atual ou inscrição. | ||
| V{due_date} * | Esta variável conterá a data atual quando a regra é executada. Observação: isso significa que a regra pode produzir resultados diferentes em momentos diferentes, mesmo que nada mais tenha mudado. | ||
| V{event_count} | Contém o número total de eventos na inscrição. | ||
| V{enrollment_date} * | Contém a data de inscrição da inscrição atual. Não terá valor para programas de eventos únicos. | ||
| V{incident_date} * | Contém a data do incidente da inscrição atual. Não terá valor para programas de eventos únicos. | ||
| V{enrollment_id} * | Cadeia de identificador universal (UID) da inscrição atual. Não terá valor para programas de eventos únicos. | ||
| V{event_id} | Cadeia de identificador universal (UID) do contexto do evento atual. Não terá valor no momento em que a regra for executada como parte do formulário de inscrição. | ||
| V{orgunit_code} | Contém o código do orgunit vinculado à inscrição atual. Para programas de evento único, o código da unidade organizacional do evento atual será usado. | ||
| V{environment} | Contém um código que representa o ambiente de tempo de execução atual para as regras. Os valores possíveis são "WebClient", "AndroidClient" e "Server". Pode ser usado quando uma regra de programa deve ser executada apenas em um ou mais tipos de cliente. | ||
| V{program_stage_id} | Contém o ID do estágio atual do programa que acionou as regras. Isso pode ser usado para executar regras em estágios específicos do programa ou evitar a execução em certos estágios. Ao executar as regras no contexto de um formulário de registro TEI, a variável estará vazia. | ||
| V{program_stage_name} | Contém o nome do estágio atual do programa que acionou as regras. Isso pode ser usado para executar regras em estágios específicos do programa ou evitar a execução em certos estágios. Ao executar as regras no contexto de um formulário de registro TEI, a variável estará vazia. |
** Notas **
* Aplica-se apenas ao rastreador
Diferenças entre as regras do programa na web e a versão Android¶
As the web and the Android application are currently using a different program rule engine there might be programs rule that work in one system and not in the other. In general terms it can be said that the Android program rule engine is more strict and so, some Program Rules that work in the web version of DHIS2 will fail in Android. This subsection describes the main differences and how to adapt the rules in order to have them working in both systems.
Avaliação do tipo booleano¶
DHIS2 web version considers the type boolean as 0 or 1 (which can be evaluated to true or false), however Android evaluates them only as true or false. While this makes possible the addition of booleans in web, it will fail in Android; in order to fix this an additional program rule variable is needed to transform the boolean into an number that can be operated. Check the table below for examples and possible solutions.
Para os exemplos abaixo, considere o seguinte:
- yn_prv1: é uma variável de regra de programa que foi configurada para obter o valor de um elemento de dados 'Sim / Não'
- yn_prv2: é uma variável de regra de programa que foi configurada para obter o valor de um elemento de dados 'Sim / Não'
- prv_boolean_one: é uma variável de regra de programa que foi configurada para obter o valor de um elemento de dados 'Sim / Não'
- prv_boolean_two: é uma variável de regra de programa que foi configurada para obter o valor de um elemento de dados 'Sim / Não'
- prv_boolean_one_to_number: é uma variável de regra de programa com valor calculado
- prv_boolean_two_to_number: é uma variável de regra de programa com valor calculado
- às vezes verdadeiro é usado como condição de regra de programa, o que significa que a ação é sempre executada
- The following acronyms are used:
- DE (Data Elemetn)
- PR (Program Rule)
- PRE (Program Rule Expression)
- PRC (Program Rule Condition)
- PRV (Program Rule Variable)
- PRA (Program Rule Action)
| Condição (ões) da regra do programa | Ação (ões) de regra do programa | Versão web | Versão Android | Comente |
|---|---|---|---|---|
| d2:hasValue('yn_prv1') || d2:hasValue('yn_prv2') | Atribuir valor fixo para DE | |||
| #{yn_prv1} || #{yn_prv2} | Atribuir valor fixo para DE | |||
| d2:hasValue('yn_prv1') || d2:hasValue('yn_prv2') | Atribua valor a DE: # {yn_prv1} + # {yn_prv2} + 1 | Crashes in Android whenver a boolean is marked as the expression would result in true+false+1 | ||
| PR1: #{prv_boolean_one} PR2: #{prv_boolean_two} PR3: #{prv_boolean_one} || # {prv_boolean_two} | PRA1. Atribua o valor "1" a PRV "# {prv_bool_one_to_number}" PRA2. Atribua o valor: "1" a PRV "# {prv_bool_two_to_number}" PRA3. Atribua valor a DE: "# {prv_bool_one_to_number} + # {prv_bool_two_to_number} + 1" | Existem 2 variáveis para booleano, uma obtém o valor por meio de uma definição de PRV “valor da forma DE” e a outra por meio de um PRA. Se um booleano não estiver marcado, ele será contado como string em vez de um número | ||
| Four PR to assign 1 or 0 to the booleans and an additional for the addition. Priorities go from top to bottom PRC1: !d2:hasValue('prv_boolean_one') || !#{prv_boolean_one} PRC2: d2:hasValue('prv_boolean_one') && #{prv_boolean_one} PRC3: !d2:hasValue('prv_boolean_two') || !#{prv_boolean_two} PRC4: d2:hasValue('prv_boolean_two') && #{prv_boolean_two} PRC5: true | PRA1: Assign value: "0" to PRV "#{prv_bool_one_to_number}" PRA2: Assign value: "1" to PRV "#{prv_bool_one_to_number}" PRA3: Assign value: "0" to PRV "#{prv_bool_two_to_number}" PRA4: Assign value: "1" to PRV "#{prv_bool_two_to_number}" PRA5: Assign value: "#{prv_bool_one_to_number} + #{prv_bool_two_to_number} + 1" to DE | Existem 2 variáveis para booleano, uma obtém o valor por meio de uma definição de PRV “valor da forma DE” e a outra por meio de um PRA. |
Avaliação de números¶
DHIS2 web version evaluate numbers in a more flexible way casting values from integer to floats and viceversa. This can lead to some issues as explained in the examples below.
Division of numbers¶
If required for a division web will cast from integer to float, however, Android take numbers as such (literally and without casting) which my end up giving unexpected results. Check the table below for examples and possible solutions.
| Condição (ões) da regra do programa | Ação (ões) de regra do programa | Versão web | Versão Android | Comente |
|---|---|---|---|---|
| verdade | Atribua valor a DE: d2: daysBetween ('2020-05-13', '2020-05-17') / 3 | O utilizador esperaria que a divisão fosse calculada como 4/3 com um resultado de 1,3333. No entanto, o Android não converte 4 em um float (4.0 como a versão web faz), então o resultado no Android é um puro 1 como resultado da divisão inteira 4/3 | ||
| verdade | Atribuir valor a DE: d2: daysBetween ('2020-05-13', '2020-05-17') / 3.0 | Resultados da divisão em 1.33333 na web e no Android |
Using the function validatePattern¶
In the same way, if a DataElement of the type number is used, Android will use that value as float (including decimals) which might lead to validatePattern function not working as expected.
Consider the following:
- temperatue_prv: is a Program Rule Variable containing the value of the Data Element temperature.
- User inputs 38 in the Data Element.
| Condição (ões) da regra do programa | Ação (ões) de regra do programa | Versão web | Versão Android | Comente |
|---|---|---|---|---|
| !d2:validatePattern(#{temperature_prv},'\\{d}') | Display error if value is not 2 digits | The user would expect the program rule to NOT show an error as 38 does match the pattern. However, Android attempts to validate the pattern \{d} against 38.0 resulting in Android displaying the error. | ||
| !d2:validatePattern(#{temperature_prv},'(\\d{2}|\\d{2}\\.\\d|\\d{2}\\.\\d{2})$') | Display error if value is not 2 digits | The regular expression used here will match both integeres and floats resulting in being properly evaluated in web and Android and not displaying an error. |
Changes in Program Rules (as from version 2.2 of the app)¶
In the version 2.2 of the application (released on August, 2020) a new rule-engine was included. This rule-engine requires some optional and some mandatory changes to be performed on the program rules expressions in order to make it work in the new application. A list of those changes, how to detect them and how to fix them is included in the following subsections.
Avaliação de 'd2: hasValue'¶
Descrição¶
This is an optional change. d2:hasValue now works with both single quotes or full variable expression. The following expressions is valid: (d2:hasValue('variable_name') and d2:hasValue(#{variable_name}))
Como se identificar via API?¶
Obtenha programRules em que a condição ou a ação da regra do programa usa a função d2: hasValue.
https://example.org/api/programRules?fields=program[name],name,programRuleActions[data],condition&filter=programRuleActions.data:like:hasValue&filter=condition:like:hasValue&rootJunction=OR
<programRule name="PR01 - Check variable with hasValue(#{variable})">
<condition>d2:hasValue(#{Age in years})</condition>
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction/>
</programRuleActions>
</programRule>
<programRule name="PR01 - Check variable with hasValue('variable')">
<condition>d2:hasValue('Age in years')</condition>
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction/>
</programRuleActions>
</programRule>
Como corrigi-lo?¶
O exemplo acima mostra como diferentes maneiras de usar a função hasValue terão o mesmo efeito da versão 2.2. Não há mudanças obrigatórias, mas tenha em mente que, ao escrever novas regras de programa, ser consistente pode ajudar a evitar problemas.
Avaliação de uma variável¶
Descrição¶
This is a mandatory change. !#{variable_name} can only be used boolean type variables (BOOLEAN and TRUE_ONLY).
Como se identificar via API?¶
Obtenha programRulesVariables com dataElements do tipo NOT BOOLEAN ou TRUE_ONLY
https://example.org/api/programRuleVariables?fields=name&filter=dataElement.valueType:!in:[TRUE_ONLY,BOOLEAN]&paging=False
Obtenha todas as programRule.conditions
https://example.org/api/programRules?fields=displayName,condition&paging=False
Verifique manualmente (ou programaticamente por meio de um script) se na lista de programRule.conditions (obtida por meio da segunda chamada de API) alguma das variáveis de regras de programa (obtidas por meio da primeira chamada de API) está sendo usada.
Por exemplo, da primeira lista obtemos:
<programRuleVariable name="AdditionalMedication"/>
<programRuleVariable name="age"/>
<programRuleVariable name="Age in years"/>
<programRuleVariable name="AgeYears"/>
<programRuleVariable name="allergies"/>
<programRuleVariable name="apgarcomment"/>
E podemos comparar com a segunda lista:
<programRule>
<condition>!#{Pregant}</condition>
<displayName>PR03- !#{varible_name} - BOOLEAN</displayName>
</programRule>
<programRule>
<condition>!#{Age in years}</condition>
<displayName>PR03- !#{varible_name} - NOT BOOLEAN</displayName>
</programRule>
<programRule>
<condition>#{PregnancyStatus} != 'YES'</condition>
<displayName>Pregnancy status : false</displayName>
</programRule>
Isso mostra que uma variável NÃO BOOLEANA está sendo usada incorretamente.
Como corrigi-lo?¶
Certifique-se de avaliar as variáveis BOOLEAN ou TRUE_ONLY em suas condições. Caso a variável de regra do programa não seja desse tipo, atualize a condição da regra do programa com d2: hasValue (# {variable_name}) ou d2: hasValue (‘nome_variável’)
No exemplo acima, a condição deve mudar de:
<condition>!#{Age in years}</condition>
<condition>d2:hasValue(‘Age in years’)</condition>
Avaliação de textos¶
Descrição¶
This is a mdantory change. In program rule actions of the type ASSIGN, DISPLAY TEXT, DISPLAY KEY/VALUE PAIR, SHOW WARNING, SHOW ERROR, WARNING ON COMPLETE or ERROR ON COMPLETE if the Expression to evaluate and assign/display is a text, it must be enclosed with single quotes.
Como se identificar via API?¶
Obtenha as Regras do Programa cujas ações são do tipo texto, com algo nos dados do campo e verifique o conteúdo dos dados para encontrar strings sem aspas.
https://example.org/api/programRules?fields=program[name],name,programRuleActions[programRuleActionType,content,data]&filter=programRuleActions.programRuleActionType:in:[ASSIGN,DISPLAYTEXT,DISPLAYKEYVALUEPAIR,SHOWWARNING,SHOWERROR]&filter=programRuleActions.data:!null&paging=false
Por exemplo, podemos detectar aqui um erro de um campo de texto sem aspas na primeira Ação de regra do programa enquanto a segunda está correta.
<programRule name="PR04- !#{varible_name} - BOOLEAN - Assign text without quotes">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>SHOWWARNING</programRuleActionType>
<data>embarazada</data>
<content>PR04 text with quotes is: </content>
</programRuleAction>
</programRuleActions>
</programRule>
<programRule name="PR04- !#{varible_name} - BOOLEAN - Assign text with quotes">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>SHOWWARNING</programRuleActionType>
<data>'embarazada'</data>
<content>PR04 text with quotes is: </content>
</programRuleAction>
</programRuleActions>
</programRule>
Como corrigi-lo?¶
Faça a varredura da lista gerada (por meio das chamadas de API sugeridas) para localizar componentes de dados da Ação de regra do programa onde o texto não está entre aspas, vá para cada uma das regras do programa identificadas e atualize-as.
Concatenação de string e objetos¶
Descrição¶
This is a mdantory change. In program rule actions of the type ASSIGN, DISPLAY TEXT, DISPLAY KEY/VALUE PAIR, SHOW WARNING, SHOW ERROR, WARNING ON COMPLETE or ERROR ON COMPLETE if the Expression to evaluate and assign/display is a text, it must be enclosed with single quotes (same as previous change); but, on top of that, if it requires to concatenate two strings or a combination of functions it is mandatory to use the d2:concatenate function.
Como se identificar via API?¶
Obtenha as Regras do Programa quais ações são do tipo texto, com qualquer conteúdo nos dados do campo e verifique o conteúdo dos dados para verificar se no caso de duas ou mais strings (ou outros objetos) estão sendo unidas, a função d2: concatenate é usada
Obtenha as Regras do Programa cujas ações são do tipo texto e verifique seu conteúdo de dados para encontrar strings sem aspas.
http://localhost:8034/api/programRules?fields=program[name],name,programRuleActions[programRuleActionType,content,data]&filter=programRuleActions.programRuleActionType:in:[ASSIGN,DISPLAYTEXT,DISPLAYKEYVALUEPAIR,SHOWWARNING,SHOWERROR]&filter=programRuleActions.data:!null&paging=false
Por exemplo, podemos detectar aqui um erro de duas strings em uma ação sem o uso de d2: concatenate.
<programRule name="PR08- Assign text and variable without concatenate">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>SHOWWARNING</programRuleActionType>
<data>'Age is 10 and modulus' 'another string'</data>
<content>PR05 text without concat is: </content>
</programRuleAction>
</programRuleActions>
</programRule>
Como corrigi-lo?¶
Faça a varredura da lista gerada (por meio das chamadas de API sugeridas) para encontrar componentes de dados da Ação de Regra do Programa onde dois ou mais objetos estão sendo concatenados e atualize-os para usar a função d2: concatenar.
No exemplo acima, os dados devem mudar de:
<data>'Age is 10 and modulus' 'another string'</data>
<data>d2:concatenate('Age is 10 and modulus','another string')</data>