Support ADX disaggregations with DHIS2 Reporting Module

Hi all,

The current module doesn’t support ADX disaggregations. In order to do that we need to map DHIS2’s Categories and CategoryOptions within the module. The next thing is the current import format is not compatible with the exported metadata information of DHIS2. We have to fix it at all.

This is the current DB:

There’s an existing ticket that suggested a structure. https://issues.openmrs.org/projects/DRM/issues/DRM-43

But according to the DHIS2 ADX documentation we don’t need to store the CategoryOptionCombos. I raised a discussion on DHIS2 Community as well.

This is the EER I came up by considering the above.

One more thing to clarify; The Reporting module supports custom queries right? If it is we no longer need to add another field to store custom queries.

cc: @akshika47 @heliostrike

1 Like

@mseaton @judeniroshan @darius @ssmusoke @dkayiwa @arbaughj @maurya

Could you please help to review this EER diagram?

Also, may I know whether the reporting module supports custom queries?

1 Like

This is good progress @jayasanka.

@judeniroshan could you answer the question on the reports module? I have not worked with that module before.

2 Likes

I have shared the knowledge with @jayasanka on this topic :slight_smile:

2 Likes

Thank you @judeniroshan :slight_smile:

Hello there,

We have to remove existing implementations that aren’t compatible with the new ADX disaggregations. The current implementation is designed according to the DFX structure but later on, it has changed to ADX while keeping the same. It supports only non disaggregated data. Unfortunately, the current implementation isn’t expandable because it is incompatible with the latest DHIS2’s data structure. In order to implement it, we have to remove some previous implementations.

Also, there are some unused classes as which used on DFX and haven’t removed when upgrading. Need to remove them as well.

Issue:

@akshika47 could you please review and merge this PR?

@akshika47 Please review and merge this PR as well, (after merging DRM-53)

This is the updated EER:

@akshika47 could you please review and merge this PR?

Ticket:

https://issues.openmrs.org/browse/DRM-56

I’ve generated JAXB classes to fully unmarshal the import file using XJC. XJC compiles an XML schema file into fully annotated Java classes.

Please review and merge:

Hi all,

I implemented the following:

  • Create methods to extract and save,
    1. Data Elements
    2. Data Set
    3. Categories
    4. Category Options
    5. Disaggregations
  • Create a new DAO method to save Disaggregations
  • Create a new DAO method to find a Dissagregation using a Category and a Category Option

Please Review and merge:

Ticket:

Hi all, I implemented the following,

  • Implement a method to generate Data Value Template
  • Implement a recursive method to generate Disaggregation combinations for a given Data Element
  • Remove irrelevant field “name” from Data Value Template
  • Fix wrong field “dataelement_id” in Data Value Template’s mapping file
  • Implement DAO methods to
    1. save a Data Value Template
    2. remove Data Value Templates of a given Dataset
    3. get Disaggregations of a given Category

With this PR the import function is being fully completed.

Please review and merge:

Ticket:

1 Like

Hi all,

I’ve implemented the following,

  • Create a new view list imported Data Sets
  • Create a new controller to handle reports
  • Create a new DAO method to get all Data Sets
  • Modify the local header with new links and fix broken HTML tags
  • Remove irrelevant JSP pages

Please review and merge:

Ticket: https://issues.openmrs.org/browse/DRM-60

1 Like

Hello there,

I’ve implemented the following,

  • Create DAO methods
    • Find Data Value Templates by a Data Set
    • Find a dataset by UUID
  • Create a new service to update the report of a Data Set
  • Create a new view to map Report with a DataSet

Kapture 2020-07-25 at 16 37 38

Please review and merge:

Ticket: https://issues.openmrs.org/browse/DRM-61

1 Like

Hi, I’ve implemented the following,

  • Create a DAO method to find a DataValueTemplate by id
  • Create a service to update the Report Indicator of a DataValue Template
  • Create a view to mapping DataValueTemplates with Report Indicators

Please review and merge:

1 Like

Hi all, I’ve implemented the following,

  • Exclude dependencies which included javax.xml.namespace.QName
  • Create new Controller and Service methods to
    • Execute the mapped Report Definition
    • Map Report result with Data Value Templates
    • Generate ADX output
    • Post data to connected DHIS2 instance

Please review and merge:

Hi all, I’ve replaced Category and Category Options with Category Options Combos. With that, it will be easy to store metadata and it will reduces the complexity of the module.

Please review and merge:

Ticket: https://issues.openmrs.org/browse/DRM-64

Hi all, I’ve added the support for the following period Types:

  • Daily
  • Weekly
  • WeeklyWednesday
  • WeeklyThursday
  • WeeklySaturday
  • WeeklySunday
  • Monthly
  • BiMonthly
  • Quarterly
  • Yearly

Please review and merge:

Ticket: https://issues.openmrs.org/browse/DRM-66

2 Likes

@jayasanka After our conversation with @jamesm , do you think there’s a way we could extend or modify the Period type to support the full range of ADX periods rather than just creating fixed classes for supported period lengths? E.g., as I understand things “01-02-2020/P2D” is a valid ADX period descriptor, but with the current setup, it looks like to support that we’d need to add a new “EveryOtherDay” class and supporting code. It would be nicer if the Period class defined something like a static function of:

public static Period of(String periodDescriptor) {
    Period newPeriod = new Period();
    String[] parts = periodDescriptor.split("/");
    ...
}