Response Plan Import
High level overview
Importing happens into an existing Workspace
Response Plan list to choose from should be retrieved for workspace countries
OCHA provided cluster names can be used directly
With the exception of disaggregations, only V1 API is being used in this import
Only initial RP info is being pulled when the import request happens, a background task to retrieve other information is started afterwards
Cluster names in OCHA are not validated in any way
Implementation Details
Workspace countries in PRP are currently not validated, it is possible for a workspace to exists, that cannot have plans retrieved for it
To account for this workspace endpoint had a can_import_ocha_response_plans
boolean flag added, which indicates lack of valid countries.
Response Plan
https://api.hpc.tools/v1/public/rpm/plan/id/<pk>
Is the base URL to retrieve basic Response Plan information.
Response Plan Model | OCHA Source |
title | name |
start | startDate |
end | endDate |
plan_type | Can be detected from |
Country must have correct 'Country Short Code' when pulling a Response Plan from OCHA. If receiving the error Countries in the workspace have invalid setup, cannot proceed ; check to make sure the Country Short Code is correct in Django Admin page.
For categories id 4 maps to HRP, 5 to FA, there are other types that are ignored and HRP is used as default.
Clusters
Cluster list is located under governingEntities
key in the response, where entityPrototype.refCode
is equal to CL.
Cluster Model | OCHA Source |
type | Manually set to Imported |
imported_type | name |
Code generating how cluster type is displayed has been changed to display based off of those values.
Cluster Objectives and Activities
In OCHA there's a concept of Strategic Objective - related to multiple Clusters, in PRP we save those as Cluster Objectives
Those are somewhat oddly split between an entities response:
https://api.hpc.tools/v1/public/rpm/plan/id/<pk>?format=json&content=entities
and measurements response:
https://api.hpc.tools/v1/public/rpm/plan/id/<pk>?format=json&content=measurements
So to get them all both responses need to be retrieved and combined. They are contained with the same governingEntities
list as Clusters, but with entityPrototype.refCode
as follows.
Strategic Objective | SO |
Cluster Objective | CO |
Cluster Activity | CA |
To find which Cluster an Objective belongs to we need to look for parentId.
Some Objective don't seem to have parent_id
, in which case we get the info from child Activities
Cluster Objective Model | OCHA Source |
cluster | parentId |
title | value.description |
List under value.support.planEntityIds
ties Cluster Activities to Cluster Objectives.
In OCHA single Activity can support multiple Objectives, this is not the case in PRP, we only save the first one on the list.
Cluster Activity Model | OCHA Source |
cluster_objective | value.support.planEntityIds[0] |
title | value.description |
Reportables
Indicators are stored under attachments
key in the objective / activity payload, they are further distinguished by key type
with value indicator
.
First we create the IndicatorBlueprint
object:
IndicatorBlueprint Model | OCHA Source |
title | value.description |
disaggregatable | disaggregated |
And with that we can make the Reportable
Reportable Model | OCHA Source |
blueprint | IndicatorBlueprint as created above |
content_object | Cluster Objective or Activity it comes from. |
target | value.metrics.values.totals[type=target] |
baseline | value.metrics.values.totals[type=baseline] |
in_need | value.metrics.values.totals[type=inNeed] |
locations | value.metrics.values.disaggregated.locations |
At this point locations are also populated to the parent content_object
.
Disaggregations
Global disaggregation groups and categories can be retrieved from https://api.hpc.tools/v2/public/disaggregation-category-group
Name of the category (eg. Age) is saved as follows.
Disaggregation Model | OCHA Source |
name | label |
Then we save values (eg. Children, Elderly, Adult)
Disaggregation Value Model | OCHA Source |
value | label |
disaggregation | as saved above |
Last updated