This product has 3 sample forms that can be used to complete a process. Although the example is for a medical clinic the same approach could be used for any process. In the case of the medical clinic process steps are::
Each of the process participants has their own device on which notifications will appear. Hence the doctor will get a notification when a patient has been registered. This notification will appear as a list entry with the patient’s name on it. When the doctor is ready to see the patient, then they can select the patient’s name to see their details and record the new consultation.
The registration person is the only one who needs to select the empty form which has a yellow icon like a clipboard. The nurse and the doctor will get forms pre-populated with patient data. These will show as a white clipboard icon.
It’s a good idea to set fieldTask to automatically refresh so that when, for example, a new patient is registered, the doctor will get that patient's file on their phone without having to manually press the reload button.
You will need some users who will be registering patients, treating them and dispensing pharmaceuticals.
We can use roles to control which forms a user can see and whether or not they get notified of a newly registered patient or a patient that needs to be dispensed pharmaceuticals. These roles can be quite complex, for example they can be used to allocate patients to specific doctors however for this example we are just going to differentiate job types.
Create a register user
Repeat for a doctor who should get the role of “doctor” and a nurse who should get the role of “dispense”.
First upload the register form
Now upload the doctor form however we want to group these forms together so that they can share data.
Repeat for the dispense form, again set the group to register
When you are grouping forms in this way it is not important which form you set as the group form however all members of the group must refer to the same group form.
If you want the doctor form to be only visible to users with the doctor role then:
Repeat for the register and dispense forms enabling the appropriate role in each case.
Got to the tasks page by selecting the “modules” menu and then “tasks”.
These settings are shown in the picture below.
The doctor and nurse forms both get their list of medications from a CSV file. To make this available to the forms you will need to load in onto the server.
You will need three android phones with fieldTask installed; one with the register user, when for the doctor and one for the nurse.
Press the refresh button on fieldTask to download the forms and the settings for the phone from the server. As earlier we set the phones to auto update then from now on changes to forms on the server and new patient registrations should automatically be reflected on the phones. However if an expected patient does not appear on your phone then you can try pressing refresh again.
If the patient left before seeing the doctor they can do a long press on the patient’s icon and then select “reject” from the menu.
You can use Smap’s reporting functions available from the analysis module. There you can select one of the 3 forms and it will show the collected data for that form. There are two issues with this that you may want to address. Firstly you will only get incomplete views of the data, either the registration view, the doctor’s view or the nurse’s view depending on the form you selected. Secondly there will be quite a few data columns containing data used to support the process and format the information on the phones. You don’t really want this data cluttering up your reports.
You can address both of the above issues by creating a new form that has the questions from the other three forms in it. Then load this into the same group. Do you reporting on this overview form.
You can also use “roles” to hide columns the register, doctor, nurse forms if you wish.
The forms that have been included in the product are much simpler than the ones that you would use in a real medical clinic. However you can take these as the starting point and add more questions or even more forms to meet your needs. If there are additional capabilities that you need for your particular situation then don’t hesitate to contact us at Smap or Zarkman and we will see if the system can be enhanced accordingly.
The following considerations when designing your form are particularly relevant to creating a “process” using linked forms. For more general form design instructions refer to the documentation available at the Smap web site or xlsform.org.
You can set the key policy for a survey to “merge” and specify a key, which would be a question or a combination of questions, that will be used to identify the unique records. So in the example surveys in this product the key is the patient id. If a survey submits data for that patient then if the id already exists the data will be merged. Unanswered questions from the new survey will be filled with data from the old one and then the old survey will be replaced. However for sub-forms the new records will be appended to the existing records. Hence you can update the name of a patient and then append the new consultation record.
If you also want the sub-form data to be merged then you can put a parameter of “merge=yes” on the begin repeat. This is done for the nurse survey where we want the information on which medications were dispensed to be added to the same record created by the doctor indicating which records have been newly added.
Sometimes you want to allow the user to add another record to a repeating group but you don’t want to allow them to modify previous records. This is the case in this example process where we want to allow the doctor to review previous consultations in read only mode and then to add the outcome of a new consultation.
You can do this by setting a property value of “ref”, for reference, on a begin repeat. For an example refer to the “begin repeat” prev_consultation_rpt in the doctor form.
This has the parameter ref=consultation_rpt. consultation_rpt is a normal odk sub form. The effect of this is that the data for prev_consultation_rpt is pulled out of the consultation_rpt form as a read only copy.
A little bit later in the form they can enter the new consultation into the consultation_rpt sub form.
You cannot use a type of calculate to get a value into a reference form. Calculates are only calculated on the phone. Hence you should use a question type of “text” when referencing a calculate question completed by another sub form.
The name of each question in the reference form will be the same as the real sub form but it will have an “_” underscore in front of it.
In the reference form we have a text question with name "_medication_1_val"
In the real form we have a calculate question with name "medication_1_val"
Apart from calculates you can use the same question type for your reference question as the real question.
The normal way to put hidden data into a form is to use a calculate. However when you are referring to a question in a reference sub forms then you can’t use a calculate. This is awkward if you just wanted to use the answer to the question to create another value using calculations as we do in the doctor and nurse forms. To support this there is a new appearance of “hidden” that will hide a text, select1 etc question.
You can scroll through multiple records that were added by a previous form however if you want to do this in reverse order, most recent first, then you can add a parameter "order=reverse" to the new sub-form.
In the medical clinic process we might have wanted to only see the last consultation. For that case we could have added the parameter “instance_count=1”, to the prev_consultation_rpt sub form.
However we wanted to see all previous consultations so we didn’t do this. But in the consultation_rpt we did not want to see any of the previous consultations as this is the sub-form that is going to add the new one. So we added the parameter “instance_count=0”