Quick background

The DHIS Community Module (also known as DHIS patient module or NBITS) is an integrated module in DHIS2 built to support community health systems and facilitate a smooth integration between the community health data and aggregated data management (e.g. HMIS).

The module deals with person-level data as opposed to aggregated data which is the main focus of the core DHIS2 modules. The module supports management of community health programs such as child immunisation and maternal health, and e.g. allows for tracking of individuals enrolled in various programs and activity planning for community health workers.
This module is still under development and being piloted in India.

While the user manual is still in progress we have collected bits of information  related to the use of this module from various emails and discussion lists and put them all here to help you get started.
 

DRAFT user manual from India:

Download here (6 mb)

Getting Started

Basically it is similar to DHIS2, the following are the major things

  • Patient
  • Program
  • ProgramStage
  • DataEntry

Patients and Program Menu

  • add/edit/remove - patient/program/programstage/attribute/attributevalue/relationshiptype
  • assign programs to organisationunits
  • define programstages for programs (for example ANC program can have First, Second and Third stages or trimesters)
  • when defining programstages you can also specify minimum day after the start of the program so that the stage should be serviced. For example you can say after 15 days of pregnancy First trimester checkup should be made, 90 days for second trimester........ blah blah - may be health people can give us a better example
  • and for each of these stages you can define what dataelements you will be collecting
  • you can put attributevalues for patients. Attributevalues are values you can put for attributes of patients. For example house number, phone number, blood group,...... could be attributes (you can add as many attributes as you like) and for any of these attributes you can assign values for a specific patient/person. Next time if you want you can search or sort patients based on these attributes
  • relationshiptype could be parent/child, husband/wife, sibling/sibling, HEW/Patient,.... here again you can have your own relationship. And for each of your registerd patients you can associate two patients based on your existing relationships. 
  • out of the available relationships for a given patient you can choose one and make the "partner_of_the_relationship" to be a representative of the patient. For example when a baby is born we need to define parent/child relationship, we can also put sibling/sibling relationship for the baby's sister(s)/brother(s) ...... and out of these relationship we can choose one to be representative. In this case the parent of the child could be assigned as a representative for the child. And while doing that you have two options - the first one with the child inheriting all its parents attributes and the other one without inheriting
  • .....
  • ....
  • so you can play around with the available links/buttons

Name-based Data Records

  • search for registered patient (based on attributes or name/identifier)
  • record data -- but first you need to choose a program and the corresponding programstage
  • while recording data there is a possibility to say whether the data(actually the service) is provided by another facility or not? This is important during aggregation - we can only report those provided by the reporting unit - this will avoid duplication - as all reporting units should report what ever they provided
  • Reports - per program
    • can select program
    • start date and end date
    • and it will display all the individuals who interact with the program within the given time frame. In addition it will show the status of the programstages
      • Green - safe and complete - you can drill down and see what the values are
      • Red - risk - due date missed
      • Yellow - ok - not completed but still on time
    • Visit Plans
      • When you select and OrgansiationUnit
      • the system will look for patients in the selected unit and those who are in active programs (like those patients who have not yet completed the cycles of a program)
      • then for each (active) program a patient is currently enrolled
        • display the next immediate stage together with the due date
        • you can sort visit plans - based on a number of attributes - by default sorted by House Number (this is an attribute)

Understanding Programs, ProgramStages, ProgramInstances, ProgramInstanceStages

Those program stage dates that you mentioned - 0 for ANC1, 90 for ANC2 and 180 for ANC3 - are dates relative to the program (in your example Antenatal care or mother care) in general. And they are sort of template or I would say meta data for ANC program.

When it comes to specific individuals we have what we call ProgramInstance which is unique for each and every individual. It is through this programInstance that you track and provide services (provide in a sense knowing specific service due dates). Once a program is created you can enroll individuals to a program - it is at this point of the work-flow that a ProgramInstance is created. By default the system will take the date of enrollment as the first gestation date (I am not sure of the medical concept gestation - is it the same as  LMP??) if that is how it is for the individual you are registering then you can continue with the default. Otherwise you can still fill the appropriate date for the LMP (or gestation??) then system will automatically recalculate the due dates for the subsequent stages (we call these stages programInstanceStages - because they are unique for this specific programInstance). Here again you still have the possibility to adjust service due dates for the programaStageInstances - say for example some dates could be holiday or weekends or so (this is very important specially if you look programs like immunization - you might need specific dates for campaigning and the like)

hope this clarifies the issue you raised for service due dates

coming to the sms thing -

We don't have that feature yet - you need to do a little bit of coding for that. And if you look at the programInstance class it has a boolean attribute called completed (I think?) then whenever an individual completes all stages of the program you can set the completed attribute to true. Or in cases where an individual fails to complete a program that he/she has been enrolled you need to un-enroll the individual so that the opened programInstance gets closed.

so you can follow the life cycle of a programInstance for your sms management - send sms for every programStage (actually programInstanceStage) of a given programInstance and stop sending sms when the programInstance gets completed.

Note: Both programInstance and programInstanceStages and background as far as users (the HMIS users or healthworkers) are concerned - they can deal with program and programstages.
 

Here is more from an email exchange between Thuy and abyot on Nov 2:

I read the document you sent (http://www.hisp.uio.no/projects/dhiscommunity/NBITS%20Operational%20Manual.doc). That document is very useful for me to have some pictures about the module. I forward that to other Sri Lankan students and one of them decided to select DHIS for her project at Mother And Child Health Care field. The project document was approved last week, and the board of study ask us to use DHIS for it. 

That is good. Hope you guys will come-up with something good that can go back to the module.
 
But seem that document is more about user manual when the program already developed, it didn't explain how to use the module to develop.
So there are some confuse in the Beneficiaries and Program module I have met. When you get time please explain to me.

1. In Beneficiary Attribute. When create new attribute, there is a thing called Inheritable. Could you explain its meaning? and when we set yes/no

That is to ask you whether a particular attribute is inheritable (among relatives) or not. For example you can register a mother with all the necessary attributes (housenumber, phone number, village, ..........) then when the mother gives birth to a baby, you need to have all the necessary details about the baby so that you provide for example immunization service. And obviously, a baby will not have phone number, address,..... and the like but can inherit all these from the mother - this is just to give you an idea where and how to use the inheritable feature of attributes. For the baby to inherit attributes, first you need to define relationships (for example parent/child). 

In general, there will be lots of use-cases for inheritable attributes in different relationships.

 
2. In Beneficiary Identifier Type function, there 
  •  I don't understand the meaning of State format. When I created a Beneficiary Identifier Type, and check that State format, then I couldn't add new Beneficiary because it generated this message "Please set valid 9 digit organisation unit code to add new Beneficiary". When the State format is unchecked, then I can add new beneficiary. Where the State format is set? 
  • The second one is the Related. In which case this Related is Yes or No?
I am not sure of this? This is something very specific from India I guess.

The idea is you can define any identifier type, and then assign identifiers based on defined types for beneficiaries.

 
3. In the Program
  • In each program there is Validation Data Element Associations function. I couldn't know how to work on this. I tried to create 2 data elements with Domain type is Patient. But none of them show in this list. 

We have programs and programstages. And the idea is in the course of a program we are going to meet beneficiaries and provide a service following specific programstages and the type of dataelements defined in the stage. While collecting data during each programstage, we might want to have some sort of validation. I can't think of specific example, may be those from the domain can help. But in the broader sense, for example the value you are entering for a dataelement of a specific program stage is going to be checked against some sort of criteria. For example in the normal dataentry, you can define min/max values and next time when you try to store some value, the value you are entering is going to be checked against the min/max validation criteria. The program stage validation dataelement association similar to this..... but then it is kind of linked with the other stages of the program........ I don't know may be that is also some sort of validation rule. 
 
 
From patient data to aggregate data

 

4. Benificiary Aggregation Query Builder function : I'm very confuse about this function. I don't understand what it is used for. I select data element group, program state, case properties, left expression, right expression, then click Test button, it show a expression in the Expression text area. I click Save button but don't know where it is saved. And The button Generate doesn't show anything.


But the idea is in the community-module, we are going to record individual data using Beneficiary and Program. But in DHIS we want to do reporting, graphs, charts and maps using aggregate figures. For this to happen, we need to aggregate individual records (from the community module) and feed aggregate figures to DHIS2 so that we can do further reporting and the like

For example in DHIS2 you might have a dataelement called "ANC 1st Visit" and you can put 20 for the month of Nov 2010 to imply 20 individuals have been visited for their 1st stage of ANC in the month of Nov. This figure can be generate automatically by the community system - but for this to happen you need to query through the beneficiary record and count the number of pregnant women who are enrolled in mother care program and have completed their 1st ANC in Nov. 


{Get all individuals enrolled in mother care program and    
completed ANC 1st Stage and                                               =       {ANC 1st visit}                         =  20
only the month of Nov 2010 }                                                        from the dhis2 side
from the community side

If you have such a system in place, then you can be relieved from entering the figure 20 manually. The system will automatically generate the aggregate figure and assign a value of 20 for "ANC 1st visit". But for this to happen you need to build the expression.

In other words, you are going to have the source and destination. The source is the community, and the destination is the dhis2. If you are thinking a more generic feature then the expression will be quite complex involving 

            {left side expression} operator {right side expression} 
 
You define such an expression of your choice under maintenance and run the expression from the services side.... then it will populate the dataentry screen.