Hi,
Just a quick update about Patient registration form functionality :
* Check duplicate :
This function allow user to check for existing patient base on : name , birthdate, age, gender
If there is duplicate patient, a pop up will be showed, with the list of all the duplicated patients.
From this pop up, user can have two options :
- Continue create the current patient. So there will be two patients with the same information like above. But their identifiers must be different which will be checked later.
- User can choose a patient from the list duplicated patient to update information for him, by click on the button “Update this patient” that follow by each patient in the list. User will then be redirected to the Update Patient page.
* Under age patient :
Under age patient can be understand as a child. The purpose of this field is not to hard code the age to define a child, like age < 5 or age < 15.
In the registration form, there is a check box named " Is Underage" . User check on this check box to identify the patient is a child. A pop up will be showed after clicking.
The purpose of this pop up is : user must choose a representative for this child. Because , some identifiers that are mandatory ( can be defined in Patient Identifier Type management page ) . But a child can not have those identifier, so we have to inherit those identifier from the child’s representative.
Not all identifier can be inherited, you can defined a PatientIdentiferType is able to inherit or not when creating it. The field name is “Related” … ( God …why didn’t I use" Inheritable" … ) .
If a PatientIdentifierType with “related” = FALSE and “mandatory” = TRUE then user must enter value for it.
Ok, back to the popup, there are two tabs :
- Search existing person : user can search for an existing patient in system to be the representative of the child.
- Add new person : said this is person, because this is not really a patient, this person is just giving identifier…not enrolling to any program, at least at this step. Of course the record is also saved to the patient table. The form just only include basic information ( name , birthdate, gender… ) and Identifiers. No attributes is needed. Of course user can update attributes for this person later by the Update Patient page.
One problem in this function that I can not have enough time to do :
In the combo box Relationship Type, there should be Parent and Guardian, I hard coded this. You should create two relationship type with this information before testing this function :
A is to B : Guardian, B is to A : Child
A is to B : Parent , B is to A : Child.
The list of relationship type should be get from the Relationship type table. But if we put everything to the combo box, then user may choose Husband, Wife, or even child…which is so wrong.
My plan is creating an object RelationshipGroup, which should be based on the age…
Anyway, because we are late for releasing this version in India. so hard code for now is the only solution. I will continue working on this, so …please don’t worry…
* System generated identifier :
I looked at the id_gen module from OpenMRS. Well , they have a whole module for this which has many functionality for manage system auto generated identifier.
I can not have enough time for getting all of that. So what I did is just get a piece of code that is used for generate a check digit for the ID.
The format that Indian team chose is : [BirthDate][Gender][XXXXXX][checkdigit]
BirthDate : yyyyMMdd
Gender : Male = 1 ; Female = 0
XXXXXX : a random number with length = 6 ( 0 - 999999 )
checkdigit : generated using Luhn Algorithm ( thanks to OpenMRS guys )
I also changed the way that Abyot generate the birthdate from age ( when user only enter age ) .
It is : todayCalendar.add( Calendar.YEAR, -1 * age );
What Abyot did is
todayCalendar.set( Calendar.DATE, 1 );
todayCalendar.set( Calendar.MONTH, Calendar.JANUARY );
todayCalendar.add( Calendar.YEAR, -1 * age );
Because we generate the id base on birthdate , get current date should be better.
Hope this is ok for Abyot…
Each country will have different formats…so I think for current we just can change code when implementing in the country. Building a module for this would take time…
Finally, but almost those things only follow India 's requirements.
Please give comment then we can try to make it more generic…
Regards,
Viet Nguyen