Generating sequential numbers in program rule

Dear All

I am creating a program rule to develop a UID for the patient. I have currently created a program rule using d2:concatenate to bring various attributes and DEs together into the Unique ID (such as date and OrgUnit code). However, I would also like to include sequential numbering after this to ensure that more than 1 case can be registered on a single day.

I have looked through all of the documentation and am unable to find anything along these lines. Is it possible?

Example:

2018-10-10-OrgUnit code-1;

2018-10-10-OrgUnit code-2;

2018-10-10-OrgUnit code-3; etc. (where 1,2 and 3 are the sequential numbers generated).

I have also looked at Program Rule variables and am unsure as to what the “Calculated value” source type is, as in the documentation it is listed as “TBA” with no further information.

I would appreciate any help or advise.

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

1 Like

Hi Terence,
Should be possible using CALCULATED_VALUE.

Program rule variable having source type as CALCULATED_VALUE will get its value assigned by some other program rule. Try these steps

  1. create program rule variable of source type CALCULATED_VALUE // Let say “auto-increment”

  2. create program rule with Program Rule Action as Assign Value and select variable created in step 1 and assign it “#{auto-increment} + 1”

  3. Use it in your program rule where ever needed for example v{current-date}-#{orgunit}-#{auto-increment}

In order to use CALCULATED_CALUE make sure you are correctly setting rule priority.

Zubair Asghar

DHIS-2 Developer

University of Oslo

zubair@dhis2.org

https://www.dhis2.org

···

On Wed, Oct 10, 2018 at 1:25 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear All

I am creating a program rule to develop a UID for the patient. I have currently created a program rule using d2:concatenate to bring various attributes and DEs together into the Unique ID (such as date and OrgUnit code). However, I would also like to include sequential numbering after this to ensure that more than 1 case can be registered on a single day.

I have looked through all of the documentation and am unable to find anything along these lines. Is it possible?

Example:

2018-10-10-OrgUnit code-1;

2018-10-10-OrgUnit code-2;

2018-10-10-OrgUnit code-3; etc. (where 1,2 and 3 are the sequential numbers generated).

I have also looked at Program Rule variables and am unsure as to what the “Calculated value” source type is, as in the documentation it is listed as “TBA” with no further information.

I would appreciate any help or advise.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

1 Like

Hi Terence

Please have a look at textpattern to generate UID’s:

https://docs.dhis2.org/2.29/en/user/html/working-with-textpattern.html

This is available as of 2.29 and believe it should be able to generate what you need.

Nick

···

Shurajit Dutta (MPH, MHI)
Health Information Systems Adviser

Dear Zubair

Thank you for your rapid response. I have attempted to do this without success. I think I am misunderstanding.

  1. I created the program variable "auto-increment’ as suggested

  2. In this step - is this a new program rule? I created a program rule as follows: “d2:hasValue #UID”, Assign “#auto-increment + 1” to field “auto-increment”. I then set this as priority 2.

  3. I created my UID program rule as with the following action: “d2:concatenate( V{enrollment_date}, ‘-’, A{Closest Health Center}, #{auto-increment})” assigned to the attribute for UID. This is set as priority 1.

Unfortunately, this does not create the sequential number, but the concatenated sequence is showing in the UID Attribute.

Do I have my priorities incorrect or have I done something else incorrectly?

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

Hi Terence,

There could be many reasons for that.

Have you tried implementing what Nick suggested? The only limitation is that the TextPattern option is only available for TEAttribute and not to DataElement.

···

Zubair Asghar

DHIS-2 Developer

University of Oslo

zubair@dhis2.org

https://www.dhis2.org

Hi Zubair

Unfortunately, I am running 2.28 at the moment and therefore cannot do what Nick suggested.

I will have to look into upgrading in any case, so I think that may be the best option for now.

Thank you again for both of your help - I really appreciate it!

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

Dear Zubair, Nick

I have upgraded the instance to 2.30 now and am attempting to once again implement the sequential numbering using the TextPattern option. I am using it on a TEAttribute, but have not had any success.

Thus far, my Defined program rule action looks as follows:

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’)

This is currently working and generating the UID, but of course, without the sequential numbers. I have attempted the following combinations to try include the sequential numbers to no avail:

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, SEQUENTIAL(###))

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, Sequential(###))

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{Sequential(###)})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{sequential(###)})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{sequential###})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, ‘SEQUENTIAL(###)’) - this one simply added the text in (as suspected).

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’) + SEQUENTIAL(###)

None of these combinations have worked thus far. Clearly I am misunderstanding something or missing something and would appreciate any help.

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

Hi Terrance,

Sometime back I read about this. I think you need to use the expression like

  • ORG_UNIT_CODE(…) + "-" + CURRENT_DATE(yyyyww) + "-" + SEQUENTIAL(#####)
    

Instead of using the function concatenate. Please refer the below link for more details:

Hope this helps.

Thanks and regards

MSP

···

On Tue, Oct 30, 2018 at 4:56 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear Zubair, Nick

I have upgraded the instance to 2.30 now and am attempting to once again implement the sequential numbering using the TextPattern option. I am using it on a TEAttribute, but have not had any success.

Thus far, my Defined program rule action looks as follows:

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’)

This is currently working and generating the UID, but of course, without the sequential numbers. I have attempted the following combinations to try include the sequential numbers to no avail:

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, SEQUENTIAL(###))

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, Sequential(###))

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{Sequential(###)})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{sequential(###)})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{sequential###})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, ‘SEQUENTIAL(###)’) - this one simply added the text in (as suspected).

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’) + SEQUENTIAL(###)

None of these combinations have worked thus far. Clearly I am misunderstanding something or missing something and would appreciate any help.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

On Wed, Oct 10, 2018 at 3:06 PM Zubair Asghar Raja zubair@dhis2.org wrote:

Hi Terence,

There could be many reasons for that.

Have you tried implementing what Nick suggested? The only limitation is that the TextPattern option is only available for TEAttribute and not to DataElement.

Zubair Asghar

DHIS-2 Developer

University of Oslo

zubair@dhis2.org

https://www.dhis2.org

On Wed, Oct 10, 2018 at 2:48 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear Zubair

Thank you for your rapid response. I have attempted to do this without success. I think I am misunderstanding.

  1. I created the program variable "auto-increment’ as suggested
  1. In this step - is this a new program rule? I created a program rule as follows: “d2:hasValue #UID”, Assign “#auto-increment + 1” to field “auto-increment”. I then set this as priority 2.
  1. I created my UID program rule as with the following action: “d2:concatenate( V{enrollment_date}, ‘-’, A{Closest Health Center}, #{auto-increment})” assigned to the attribute for UID. This is set as priority 1.

Unfortunately, this does not create the sequential number, but the concatenated sequence is showing in the UID Attribute.

Do I have my priorities incorrect or have I done something else incorrectly?

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

On Wed, Oct 10, 2018 at 2:01 PM Zubair Asghar Raja zubair@dhis2.org wrote:

Hi Terence,
Should be possible using CALCULATED_VALUE.

Program rule variable having source type as CALCULATED_VALUE will get its value assigned by some other program rule. Try these steps

  1. create program rule variable of source type CALCULATED_VALUE // Let say “auto-increment”
  1. create program rule with Program Rule Action as Assign Value and select variable created in step 1 and assign it “#{auto-increment} + 1”
  1. Use it in your program rule where ever needed for example v{current-date}-#{orgunit}-#{auto-increment}

In order to use CALCULATED_CALUE make sure you are correctly setting rule priority.

Zubair Asghar

DHIS-2 Developer

University of Oslo

zubair@dhis2.org

https://www.dhis2.org

On Wed, Oct 10, 2018 at 1:25 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear All

I am creating a program rule to develop a UID for the patient. I have currently created a program rule using d2:concatenate to bring various attributes and DEs together into the Unique ID (such as date and OrgUnit code). However, I would also like to include sequential numbering after this to ensure that more than 1 case can be registered on a single day.

I have looked through all of the documentation and am unable to find anything along these lines. Is it possible?

Example:

2018-10-10-OrgUnit code-1;

2018-10-10-OrgUnit code-2;

2018-10-10-OrgUnit code-3; etc. (where 1,2 and 3 are the sequential numbers generated).

I have also looked at Program Rule variables and am unsure as to what the “Calculated value” source type is, as in the documentation it is listed as “TBA” with no further information.

I would appreciate any help or advise.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Hi MSP

Thank you for the suggestion. I have also attempted this and was unable to have any success. I tried to create a new rule with simply having “Sequential(###)” alone, and did not have any success either. Therefore, I assumed that there would be some sort of additional text that is required to make it work.

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

Hi Terence

This textpattern applies to generating unique tracked entity attributes. So if you make the attribute unique and then system generated you can enter the pattern accordingly:

···

Shurajit Dutta (MPH, MHI)
Health Information Systems Adviser

Dear Shurajit

Thanks for the advice. This worked fantastically - however, the documentation is a little confusing with regards to the required format. Is there somewhere where I can possibly make suggestions for clarification?

The string that eventually worked under the Auto-generate section is as follows:

CURRENT_DATE(yyyy-MM)-"-"-ORG_UNIT_CODE(…)-"-"-SEQUENTIAL(####)

The ‘+’ did not work for me and gave a parse error - this is what is specified in some parts of the documentation, whereas using the ‘-’ worked (as is shown in one example under “SEQUENTIAL(format)”.

It seems that currently only CURRENT_DATE is supported and not enrollment date? Is there some way to include Enrollment date instead? I tried to simply include ENROLLMENT_DATE(yyyy-MM) and this did not work.

Thank you once again for the help! Really appreciate it as I have been struggling with this for a while.

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

Hi Terence,
Create a JIRA issue for this enhancement (ENROLLMENT_DATE) and we will look into it.

···

Den tor. 1. nov. 2018, 9:21 a.m. skrev Terence Scott <terence.scott@rabiesalliance.org:

Dear Shurajit

Thanks for the advice. This worked fantastically - however, the documentation is a little confusing with regards to the required format. Is there somewhere where I can possibly make suggestions for clarification?

The string that eventually worked under the Auto-generate section is as follows:

CURRENT_DATE(yyyy-MM)-"-"-ORG_UNIT_CODE(…)-"-"-SEQUENTIAL(####)

The ‘+’ did not work for me and gave a parse error - this is what is specified in some parts of the documentation, whereas using the ‘-’ worked (as is shown in one example under “SEQUENTIAL(format)”.

It seems that currently only CURRENT_DATE is supported and not enrollment date? Is there some way to include Enrollment date instead? I tried to simply include ENROLLMENT_DATE(yyyy-MM) and this did not work.

Thank you once again for the help! Really appreciate it as I have been struggling with this for a while.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

On Thu, Nov 1, 2018 at 3:46 AM Shurajit Dutta shurajitdutta@gmail.com wrote:

Hi Terence

This textpattern applies to generating unique tracked entity attributes. So if you make the attribute unique and then system generated you can enter the pattern accordingly:

image.png

On Wed, Oct 31, 2018 at 5:58 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Hi MSP

Thank you for the suggestion. I have also attempted this and was unable to have any success. I tried to create a new rule with simply having “Sequential(###)” alone, and did not have any success either. Therefore, I assumed that there would be some sort of additional text that is required to make it work.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

On Tue, Oct 30, 2018 at 5:49 PM M.Selvaraaj Prabu msp.cbe@gmail.com wrote:

Hi Terrance,

Sometime back I read about this. I think you need to use the expression like

  • ORG_UNIT_CODE(…) + "-" + CURRENT_DATE(yyyyww) + "-" + SEQUENTIAL(#####)
    

Instead of using the function concatenate. Please refer the below link for more details:

Hope this helps.

Thanks and regards

MSP

On Tue, Oct 30, 2018 at 4:56 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear Zubair, Nick

I have upgraded the instance to 2.30 now and am attempting to once again implement the sequential numbering using the TextPattern option. I am using it on a TEAttribute, but have not had any success.

Thus far, my Defined program rule action looks as follows:

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’)

This is currently working and generating the UID, but of course, without the sequential numbers. I have attempted the following combinations to try include the sequential numbers to no avail:

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, SEQUENTIAL(###))

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, Sequential(###))

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{Sequential(###)})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{sequential(###)})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, V{sequential###})

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’, ‘SEQUENTIAL(###)’) - this one simply added the text in (as suspected).

d2:concatenate( V{enrollment_date}, ‘-’, V{orgunit_code}, ‘-’) + SEQUENTIAL(###)

None of these combinations have worked thus far. Clearly I am misunderstanding something or missing something and would appreciate any help.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

On Wed, Oct 10, 2018 at 3:06 PM Zubair Asghar Raja zubair@dhis2.org wrote:

Hi Terence,

There could be many reasons for that.

Have you tried implementing what Nick suggested? The only limitation is that the TextPattern option is only available for TEAttribute and not to DataElement.

Zubair Asghar

DHIS-2 Developer

University of Oslo

zubair@dhis2.org

https://www.dhis2.org

On Wed, Oct 10, 2018 at 2:48 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear Zubair

Thank you for your rapid response. I have attempted to do this without success. I think I am misunderstanding.

  1. I created the program variable "auto-increment’ as suggested
  1. In this step - is this a new program rule? I created a program rule as follows: “d2:hasValue #UID”, Assign “#auto-increment + 1” to field “auto-increment”. I then set this as priority 2.
  1. I created my UID program rule as with the following action: “d2:concatenate( V{enrollment_date}, ‘-’, A{Closest Health Center}, #{auto-increment})” assigned to the attribute for UID. This is set as priority 1.

Unfortunately, this does not create the sequential number, but the concatenated sequence is showing in the UID Attribute.

Do I have my priorities incorrect or have I done something else incorrectly?

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

On Wed, Oct 10, 2018 at 2:01 PM Zubair Asghar Raja zubair@dhis2.org wrote:

Hi Terence,
Should be possible using CALCULATED_VALUE.

Program rule variable having source type as CALCULATED_VALUE will get its value assigned by some other program rule. Try these steps

  1. create program rule variable of source type CALCULATED_VALUE // Let say “auto-increment”
  1. create program rule with Program Rule Action as Assign Value and select variable created in step 1 and assign it “#{auto-increment} + 1”
  1. Use it in your program rule where ever needed for example v{current-date}-#{orgunit}-#{auto-increment}

In order to use CALCULATED_CALUE make sure you are correctly setting rule priority.

Zubair Asghar

DHIS-2 Developer

University of Oslo

zubair@dhis2.org

https://www.dhis2.org

On Wed, Oct 10, 2018 at 1:25 PM Terence Scott terence.scott@rabiesalliance.org wrote:

Dear All

I am creating a program rule to develop a UID for the patient. I have currently created a program rule using d2:concatenate to bring various attributes and DEs together into the Unique ID (such as date and OrgUnit code). However, I would also like to include sequential numbering after this to ensure that more than 1 case can be registered on a single day.

I have looked through all of the documentation and am unable to find anything along these lines. Is it possible?

Example:

2018-10-10-OrgUnit code-1;

2018-10-10-OrgUnit code-2;

2018-10-10-OrgUnit code-3; etc. (where 1,2 and 3 are the sequential numbers generated).

I have also looked at Program Rule variables and am unsure as to what the “Calculated value” source type is, as in the documentation it is listed as “TBA” with no further information.

I would appreciate any help or advise.

Kind regards,

Terence

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Shurajit Dutta (MPH, MHI)
Health Information Systems Adviser

Hi Terence, great to see it worked out.

Just plugging the collaborative nature of the documentation effort as well :wink:

https://docs.dhis2.org/master/en/implementer/html/doc_guide_chapter.html#

···

Knut Staring

Department of Information, Evidence and Research
World Health Organization, Geneva, Switzerland
Office: +41 22 791 3683 Mob1: +33 6 4434 2931 Mob2: +47 9188 0522
Skype: knutstar

Dear Knut

Thank you - I will update as soon as possible with some of my recommendations.

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987

Dear Zubair

Thank you for this recommendation. I have created the JIRA issue as suggested: DHIS2-5094

Kind regards,

Terence

···

Terence Scott

Global Alliance for Rabies Control (GARC)

Pan-African Rabies Control Network (PARACON) Steering Committee

terence.scott@rabiesalliance.org

https://paracon.rabiesalliance.org

Skype: tpscott1987