Primero <> ONA Dashboard Sync for Indicator Monitoring
UNICEF is currently using an ONA-built Canopy-based dashboard to visualize integrated child protection-related indicators. This integration allows UNICEF to link specific indicators from this dashboard with aggregated data from Primero, to be extracted on a quarterly basis.
The two indicators being covered in this solution are:
- 4.8 Number of children provided with family reunification or kinship, or community-based care placements
- 4.11a Number of children receiving case management support (Primero)
The mapping specifications for both indicators can be found via this link under the “mappings to DB” tabs (see mapping specs).
Check out this presentation on the project overview for more information.
Demo ONA Dashboard for preview: https://app.akuko.io/post/572db7b9-e2d7-4bbc-afe9-08c36b6ea57d
This is an automated flow that is triggered by a cron job scheduled to run quarterly. There are 4 jobs. Note that jobs 0 and 3 were added to the integration to mitigate negative performance times due to the large data volumes being fetched from Primero. These two jobs allow OpenFn to GET and load the data in batches.
- Job 0 - Initiate the sync by posting metadata to the OpenFn inbox.
- Job 1 - Fetch cases created or updated in Primero since the last sync. (The data is fetched twice in this one job to meet the requirements for both indicators.)
- Job 2 - Map and upsert case and service data to the ONA database.
- Job 3 - Post metadata to the OpenFn inbox to trigger the next batch.
Please see this data diagram for a review of the solution:
Workflow Diagram (Lucidchart Link)
Find the completed Project Security & Go-Live Checklist here.
primeroto access Primero
language-postgresto access PostgreSQL ONA database
Assumptions & Considerations for Change Management
- The ONA production database can only be accessed via a static IP that was provided by OpenFn. However, the ONA team was not able to provide a range of IPs for OpenFn to direct traffic to–their IP is not statically assigned and may change. For future runs of this workflow, it might be necessary for OpenFn to request the current ONA IP address before the sync is successful.
- OpenFn is fetching ALL Primero cases where for indicator 1: “type_of_case” = “Children Undergoing Reintegration” and for indicator 2: Age < 18 years. Any further disegregation of these indicators will be completed in the ONA database.
locations_lookuptable can be used to look up the codes that will be stored in the
data_dicitonarytable can be used to determine the Primero label for each column in the
servicestables. This table also includes the Khmer translations for each
option valuename. The translations are used by the ONA team to generate dashboards in both English and Khmer.
- OpenFn will perform upsert() (update if record exists, create if new) operations in the ONA database when syncing data. To ensure no duplicate cases are entered, OpenFn will use the below identifiers to check for existing cases. We assume that these identifiers are unique.
casestable in ONA
servicestable in ONA
View the full documentation at: https://openfn.github.io/primero-ona-dashboard/