Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This scoping document defines the narrative and technical requirements for dynamic task generation and entity persistence for the Reveal platform. The contents of this document relates to dynamic form configuration, but is not wholly dependent on that feature set. In essence dynamic task generation and entity persistence can take place independently of which form is opened when a task is assigned.

...

  1. Plans will be updated to include action criteria that supports defining templated logic that should be evaluated when generating tasks in the server and client. This will be used at multiple steps across the system.

  2. We will move bulk task generation from Nifi into the OpenSRP server, adding a business layer and queue that supports the evaluation of plans and generation of tasks. This process will walk the relationship tree for all affected entities that are affected in the jurisdiction, evaluating the logic defined in the plan action at each step.

    1. (CRAIG CHECK THIS AGAIN AFTER YOU FINISH THIS DOC) We will not implement a state machine in the OpenSRP Server.

  3. Configurable forms will be able to define the task’s business status as a hidden value in the bottom of the form labeled business_status.

    1. This allows for configuration of the business logic, color coding, and task processing

  4. We will implement a task state machine in the Android client that is able to execute logic on task state changes.

    1. This allows us to respond to changes in task state independent of form submissions. A post save action on a form may or may not change the state of an assigned task. This allows us to chain actions in the event we need to execute multiple, independent, actions based on task state changes.

  5. Plans will be evaluated in the Android client after a task state has changed to identify if follow-on actions should be taken. Each action will include evaluation criteria that determines the action.

  6. The Android client will be able to display multiple tasks assigned to a structure in the map view. This will allow implementers to assign multiple action items and independent forms at the structure level.

  7. (I’m not sure if we want to do this or solve it another way) We will provide access to view and edit locations, families and family members in the Android client even if a task is not assigned to that entity.

    1. The location is the primary unit of navigation from the map view. A user can not access the information at a location if a task is not assigned. We will lift that constraint and allow users to view the underlying entity.

...

  • Forms (Upload Web UI)

    • System administrators will be able to add, edit, and update fields for forms that are available in the system. This includes changing the business status that impacts task generation

  • Plan Templates (No Web UI)

    • This is a new item that will allow system administrators to define plan templates for certain workflows. We currently hard code this into the OpenSRP Web UI for IRS and Focus Investigation. These templates allow a user to select from a drop down menu and control the actions that show up. Ultimately, the template creator has the capacity to create any action they wish.

    • Creating, updating, and archiving Plan Templates will not be accessible through the web UI.

  • Plans (Web UI)

    • Users are currently able to create plans in the Web UI. We will expand this to support adding criteria to action.

  • Task State Change Logic (No Web UI)

    • This will allow us to define logic that executes when the task state changes

  • (Placeholder: I’m not sure if we need to do this) Post form save logic (No Web UI)

    • We want to standardize the post form save logic so that it can be templated and eventually defined server side. This would allow us to define what happens after a form is saved.

  • (I’m not sure if we want to do this, or if MapBox provides this for us) Map View Styles (No Web UI)

    • System administrators will be able to define color coding for business status combinations available in the Android client and Web UI’s map views. This will allow system administrators to define color coding combinations on state

...

  • User creates a plan in the Web UI

    • They select from a drop down of plan templates, choosing (IRS Zambia 2020 plan template)

    • They complete the online form, confirm the default dates are correct and click Save

  • (optional) The user walks through the map based planning UI

  • The plan’s status is changed to “active” which triggers an action that generates all tasks for the plan in the OpenSRP Server

  • The user assigns a team to the plan if it wasn’t done in the map based planning UI

  • The spray operator logs into the Android client and the data syncs to their device

  • The user drops a point to add a location

    • The form is saved

    • The post form save action generates a task with status=”complete” and business_status defined by the form.

    • The task state change triggers an evaluation of the actions in the plan

    • The spray action evaluates to true because the location is marked as a residential structure.

    • The task state machine generates a “spray” task based on the spray task template that was configured with status “Ready”

    • The color coding is reflected as it was defined for this type of task in the Map View Styles configuration

    • The user taps the structure

      • If multiple tasks were assigned, they would be presented with a list of those tasks so they could choose which one to complete. The user should also be able to archive a task if it’s not relevant.

    • The form opens, they complete the form, and save it.

    • The post save action executes, updating the business status of the task

    • The task state change in status and business_status triggers an evaluation of the actions of the plan

    • All criteria evaluates to false for each action, so nothing is changed in the system

    • The user is returned to the map view. The color coding is reflected as it was defined for this type of task in the Map View Styles configuration.

...

  • User creates a plan in the Web UI

    • They select from a drop down of plan templates, choosing (Thailand Routine FI 2020 plan template)

    • They complete the online form, confirm the default dates are correct.

    • They make sure to check the plan as active

  • The plan’s status is changed to “active” which triggers an action that generates all tasks for the plan in the OpenSRP Server

  • The user assigns a team to the plan

  • The frontline worker logs into the Android client and the data syncs to their device

  • The user drops a point to add a location

    • The form is saved

    • The post form save action generates a task with status=”complete” and business_status defined by the form.

    • The task state change triggers an evaluation of the actions in the plan

    • The spray action evaluates to true because the location is marked as a residential structure.

    • The task state machine generates a “register family” task based on the register family task template that was configured with status “Ready”

    • The color coding is reflected as it was defined for this type of task in the Map View Styles configuration

    • The user taps the structure

      • If multiple tasks were assigned, they would be presented with a list of those tasks so they could choose which one to complete. The user should also be able to archive a task if it’s not relevant.

    • The form opens, they complete the form, and save it.

    • The post save action executes, updating the business status of the task.

    • The task state change in status and business_status triggers an evaluation of the actions of the plan

      • The criteria for the “Bednet Distribution” action evaluates to true so a bednet distribution task is created

      • The criteria for the “Blood Screening” action evaluates to true so a blood screening task is created for the head of household.

      • The criteria for all other actions evaluate to false.

    • The user is forwarded to the household view

    • The user registers the spouse of the head of household and saves the form.

    • The post save action executes, creating a task with status=”complete” and business_status based on the register family member form. (This allows us to count that work, even though it wasn’t initially assigned)

    • The task state change in status and business_status triggers an evaluation of the actions of the plan

      • The criteria for the “Blood Screening” action evaluates to true so a blood screening task is created for the recently added family member.

      • The criteria for all other actions evaluate to false.

    • The user returns to the household view.

    • The user completes the blood screening form for the head of household.

    • The post save action executes, updating the business status of the task.

    • The task state change in status and business_status triggers an evaluation of the actions of the plan

      • The criteria for all actions evaluate to false.

    • The user returns to the household view.

    • The user edits the blood screening form for the head of household.

    • The post save action executes, updating the business status of the task.

    • The task state change in business_status triggers an evaluation of the actions of the plan

      • The criteria for all actions evaluate to false.

    • The user returns to the household view.

    • The user navigates back to the map view and the color of that structure changes to the color defined in the configurable Map View Style

...

This section outlines the software packages that need to be developed in order to deliver these features. The target is to break out these items into tangible chunks of work that can be scheduled and delivered within two weeks.

(This section is still a work in progress)

1. Develop Plan Evaluator Java Library

...

  • Issue: We don’t evaluate the difference in state between the OpenSRP server and the Android client upon sync. There’s an underlying Issue where we evaluate plans only once when they are made active based on the state in the server at that time.

    • Option 1:

      • Evaluate the entity state of certain task types before they are opened. For example, if you have a register family task type, you could evaluate it and see that there’s already a relationship available for that structure. If so, run through the plan locally and generate the appropriate tasks.

    • Option 2:

      • Evaluate all tasks of a certain type when they are received by the Android client and update the state as part of the sync process

  • We don’t address state of entities across plans. In other words, the completion of certain types of events could trigger changes in other plans.

    • We aren’t sure if it should. I need help with this

  • Issue: We don’t provide generic access to the underlying family or family member registered at a location regardless of task assignment for that particular plan

    • Logic:

      • Any user should be able to tap on any location to open a view of the family regardless of task assignment.

        • We need to determine the impact of this across plans and in the reporting system

  • We don’t have a clear process for handling duplicate registrations and tasks that are generated on multiple offline devices

    • Logic:

  • We don’t allow users to archive locations or change the state of a location

    • Logic:

      • Any user should be able to tap a location regardless of task status, view and edit information about the location.

        • We need to determine the impact of this across plans and in the reporting system

...

  • Craig

    • Can we use the same logic in the server in the Android client to evaluate entities when an event is evaluated?

      • The core assumption is yes, we just need to make sure we architect it correctly.

    • Thinking through sample plan actions and criteria

      • Register Family Action

        • Description: This action focuses on registering families if they don’t already exist at each residential structure

        • subjectCodableConcept: location

        • Criteria

          • location.type=”residential_structure” AND

          • (location.status=”active” or “pending”) AND

          • a family isn’t registered against this structure AND

          • a task hasn’t already been generated for this plan and action combination

        • Notes:

          • It would be easier from a logic perspective for end users if we keep the subjectCodableConcept to a resourceType such as on jurisdiction, location, family, family member and then add that to a criteria

      • Complex MDA example

        • Mass Drug Administration Round 1 Administration Action

          • Description: This action supports the initial administration of the medication to the person

          • subjectCodableConcept: person (family member?)

          • Criteria

            • person.dob>=today - 5 years

        • Mass Drug Administration Round 1 Adherence Action

          • Description: This action supports the adherence follow-up of the medication to the person

          • subjectCodableConcept: person (family member?)

          • Criteria

            • person.dob>=today - 5 years AND

            • person has an event for MDA Round 1 Administration

        • Mass Drug Administration Round 2 Administration Action

          • Description: This action supports the second administration of the medication to the person who already received round 1

          • subjectCodableConcept: person (family member?)

          • Criteria

            • person.dob>=today - 5 years AND

            • person has a complete task with business status=Adherent for task.focus=action.id for the Mass Drug Administration Round 1 Administrative Action

        • Notes:

          • I don’t know if we want to set the criteria to see if an event exists or if a task exists with the complete status

    • Links to Dynamic Forms

      • We are adding the ability to define the form name in a plan action so that we can link that particular action to the data collection instrument. This will be in the action.definitionUri.

      • We need to create a table in the SQLite database that can be quickly referenced to identify which forms should be opened by which task

        • task.focus links to the plan.action.id.

        • We need to create a table that updates for each plan action that’s downloaded to the device that links the task.focus to the plan.action.definitionUri so that we can open the right form in a performant way.

        • We will not define the form version in the plan. That will be managed by the configurable forms manifest file.

    • We should be able to identify the difference of jurisdictions before it’s saved and generate tasks for that plan

Reveal Location to FHIR Location mapping

This section maps the Reveal FHIR location elements to the FHIR specification

Reveal Location Entity

FHIR Location

type

N/A

id

identifier[0]

geometry

(not represented)

properties.status

status

properties.parentId

partOf

properties.name

name

properties.geographicLevel

properties.version

meta.versionId

properties.OpenMRS_Id

identifier[1]

properties.externalId

identifier[2]

properties.name_en

location.alias

serverVersion

meta.lastUpdated as YYYY-MM-DDTHH:mm.sss+00:00

isJurisdiction?

true = physicalType:jdn

false=physicalType:bu

mode:instance

Existing Application Logic that needs to be reworked

...