PMA-2020 / collect

ODK Collect is an Android app for filling out forms. It's been used to collect billions of data points in challenging environments around the world. Contribute and make the world a better place! ✨📋✨
https://docs.opendatakit.org/collect-intro
Other
0 stars 0 forks source link

Notable ODK Collect updates missing from JHU Collect #1

Open joeflack4 opened 6 years ago

joeflack4 commented 6 years ago

General Notes

What JHU Collect has that ODK Collect doesn't

Independent, novel features

Form linking

If I recall correctly, this was developed by @yanokwa. In the source file there is a save_form and save_instance binding (I believe this may be the correct term). The corresponding fields exist in the source XlsForm.

A standard use case is the following:

  1. The parent form is a used to fill in a household roster to identify people for further follow-up.
  2. Children forms are generated for those who are identified, and certain data is pre-populated in the children forms.

PMA2020 uses this scheme to interview a household (household questionnaire) and identify eligible females for later questioning (female questionnaire) on topics like reproductive health. The household questionnaire might have the following fields:

Given this setup, we would expect the following behavior in JHU Collect:

  1. An interviewer would enter a household roster in the household questionnaire. Upon saving it, she would receive a toast notification saying that the form had been saved, and 1+ other forms were created.
  2. The interviewer would navigate to the new forms or edit forms section. There, she would see a single item that she could select which, in ODK Collect, would simply be the name of the form, which she would press her finger on to enter the form. In JHU Collect, tapping this option would expand into a list of the parent form (household questionnaire) and any child forms (female questionnaire(s)).
  3. She opens a child form.
  4. When navigating to the questions for which the path to that question was designated in the save_instance in the parent form, the question would be pre-populated with whatever the value was in the parent form (household questionnaire).
  5. If she changed that information in the child form (female questionnaire), the change would be synced with the corresponding value in the parent form.
  6. Once completing all of these linked forms (parent form and all child forms), she would be able to submit to the server.

Some features of form linking are the following:

  1. The parent form may contain eligibility logic to create the child form. If in the parent form, answers are changed such an existing child form is no longer eligible, the child form is deleted.
  2. The child form may contain eligibility logic such that if further information shows ineligibility, the child form will be deleted.
  3. The parent form determines the instance name of the generated forms upon creation.
    • Example: PMA2020 uses this so that in the instance chooser list, the instance name shows the age and name of the eligible female.
  4. The parent form may send values to the child form. These values are linked, so that an update in one form triggers an update in the other form.
    • Example: PMA2020 uses this so that name and age can be updated in the female form.
  5. In the instance chooser lists for "edit saved form," "send finalized form," "view sent form," and "delete saved form," linked instances are shown together.
  6. In "send finalized form," linked instances are sent to the server together.
  7. In "delete saved form," deleting a parent instance deletes all child forms

We at PMA2020 have used the form linking functionality only in the context of repeat groups. If a single repeat group has an associated child form and the repeat group is deleted, then the child form is deleted.

In the future, it may be useful to allow different child forms with different eligibility and to allow form linking outside of repeat groups.

Hidden fields

JHU Collect has fields like "hidden string", "hidden int", etc. However I am not sure if there is an advantage to using these fields over a calculate, other than the advantage of strong typing. @jkpr may be able to say more.

Variations of features that exist in ODK Collect

User in-app behavior analytics

JHU Collect's implementation may be more granular, but the underlying mechanism (plain text file attachment) is probably inferior to what exists in ODK Collect. I do not use either, so I'm not too sure on the differences. @jkpr would be able to speak more on JHU Collects implementation.

Ethiopian calendar implementation

I think this is very similar to what ODK Collect has, and probably not as good.

What ODK Collect has that JHU Collect doesn't

Essential or very desired

New Features

Bugfixes

Nice to have

New Features

General Updates

Developer updates

Bugfixes

Other updates of possible interest

New Features

General Updates

Developer Updates

joeflack4 commented 6 years ago

@jkpr Recently had me look through the ODK Collect release note history for the purposes of evaluating possible future upgrades of JHU Collect. Here is what I found.

yanokwa commented 6 years ago

@joeflack4 It'd be good to understand what critical features JHU Collect has that ODK Collect doesn't have. It'd also be good to understand what would it take to get those critical features added to ODK Collect in a generic way so JHU doesn't have the burden of keeping your fork in sync with the mainline.

joeflack4 commented 6 years ago

@yanokwa What are you doing here!

I'll confer with James. We can get a list for you. Any preference on where you'd like that list to ultimately be posted?

yanokwa commented 6 years ago

@joeflack4 I'M EVERYWHERE!

I think putting a list at the top of this issue would be a good place to start.

joeflack4 commented 6 years ago

@yanokwa Sounds good. I've updated this info with some of the unique implementations of features that JHU Collect has. Let me know if that is helpful.

jkpr commented 6 years ago

@yanokwa: We would like to update our fork of ODK Collect this year, preferably before November. You have said it would be nice to pull this feature into community ODK Collect. What are the next steps to move this forward so that it can become a part of community ODK Collect? What timelines are we looking at? How can we help? It would be great for us if we could get it done before November.

I am putting below some more details about form linking to add to what @joeflack4 has written.

Form linking

A standard use case is the following:

  1. The parent form is a used to fill in a household roster to identify people for further follow-up.
  2. Children forms are generated for those who are identified, and certain data is pre-populated in the children forms.

PMA2020 uses this scheme to interview a household and identify eligible females for later questioning on topics like reproductive health.

Some features of form linking are the following:

  1. The parent form may contain eligibility logic to create the child form. If in the parent form, answers are changed such an existing child form is no longer eligible, the child form is deleted.
  2. The child form may contain eligibility logic such that if further information shows ineligibility, the child form will be deleted.
  3. The parent form determines the instance name of the generated forms upon creation.
    • Example: PMA2020 uses this so that in the instance chooser list, the instance name shows the age and name of the eligible female.
  4. The parent form may send values to the child form. These values are linked, so that an update in one form triggers an update in the other form.
    • Example: PMA2020 uses this so that name and age can be updated in the female form.
  5. In the instance chooser lists for "edit saved form," "send finalized form," "view sent form," and "delete saved form," linked instances are shown together.
  6. In "send finalized form," linked instances are sent to the server together.
  7. In "delete saved form," deleting a parent instance deletes all child forms

We at PMA2020 have used the form linking functionality only in the context of repeat groups. If a single repeat group has an associated child form and the repeat group is deleted, then the child form is deleted.

It may be useful to allow different child forms with different eligibility and to allow form linking outside of repeat groups.

yanokwa commented 6 years ago

I think the high-level process is that JHU files this as a feature request at https://forum.opendatakit.org/c/features so we can start a discussion with the technical steering committee. Paging @lognaturel for feedback.

It's unlikely this can be pulled into Collect as is, so November would be a challenge. What would make it less of a challenge is if JHU could resource a technical person (ideally an Android dev) to take the lead on bringing this functionality into the core.

joeflack4 commented 6 years ago

@jkpr Added your comments to the issue. @yanokwa I will go ahead and post this to the features forum, thanks for the direction. As for working internally on this (would come from the PMA2020 grant), I do not know what our capacity is / will be in the near future for that. We are currently transitioning to a new grant. I believe we will know more in the coming months.

Edit: Posted, https://forum.opendatakit.org/t/form-linking/14565.

joeflack4 commented 5 years ago

Just noting a bugfix that we'll benefit from when upgrading; something that's been solved in ODK Collect.

Error in choice filter during begin repeat This guy was having an error: XPath evaluation: type mismatch This field is repeated I noticed I was having this as well. Yaw mentioned that this was an issue in older versions. In this case, the guy was using the KoBo Toolbox app.