Source code for emodpy_malaria.interventions.community_health_worker
from emod_api import schema_to_class as s2c
from emod_api.interventions.common import utils
[docs]
def add_community_health_worker(campaign,
start_day: int = 1,
trigger_condition_list: list = None,
demographic_coverage: float = 1.0,
node_ids: list = None,
ind_property_restrictions: list = None,
target_age_min: int = 0,
target_age_max: int = 125,
target_gender: str = "All",
initial_amount: int = 6,
amount_in_shipment: int = 2147480000,
days_between_shipments: float = 7,
duration: float = 3.40282e+38,
intervention_config: any = None,
max_distributed_per_day: int = 2147480000,
max_stock: int = 2147480000,
waiting_period: int = 0):
"""
Sets up a CommunityHealthWorkerEventCoordinator with the passed in intervention
Args:
campaign: campaign object to which the intervention will be added, and schema_path container
start_day: The day the intervention is given out.
trigger_condition_list: The list of individual events that are of interest to the community health worker (CHW).
If one of these events occurs, the individual or node is put into a queue to receive the CHW's intervention.
The CHW processes the queue when the event coordinator is updated.
demographic_coverage: This value is the probability that each individual in the target population will
receive the intervention. It does not guarantee that the exact fraction of the target population set by
Demographic_Coverage receives the intervention.
node_ids: List of nodes to which to distribute the intervention. [] or None, indicates all nodes
will get the intervention
ind_property_restrictions: A list of dictionaries of IndividualProperties, which are needed for the individual
to receive the intervention. Sets the **Property_Restrictions_Within_Node**
target_age_min: The lower end of ages targeted for an intervention, in years. Sets **Target_Age_Min**
target_age_max: The upper end of ages targeted for an intervention, in years. Sets **Target_Age_Max**
target_gender: The gender targeted for an intervention: All, Male, or Female.
initial_amount: Each instance will receive this constant/fixed value. Uses **Initial_Amount_Constant**
amount_in_shipment: The number of interventions (such as vaccine doses) that a health worker or clinic receives
in a shipment.
days_between_shipments: The number of days to wait before a clinic or health worker receives a new shipment
of interventions (such as vaccine doses)
duration: The number of days for an event coordinator to be active before it expires. -1 means it never expires.
intervention_config: A configured intervention to be distributed by the coordinator
max_distributed_per_day: The maximum number of interventions (such as vaccine doses) that can be distributed
by health workers or clinics in a given day
max_stock: The maximum number of interventions (such as vaccine doses) that can be stored by a health worker
or clinic
waiting_period: The number of days a person or node can be in the queue waiting to get the intervention from
the community health worker (CHW)
Returns:
Nothing
"""
if not trigger_condition_list or not intervention_config:
raise ValueError("Please define trigger_condition_list and intervention_config.\n")
schema_path = campaign.schema_path
# configuring the intervention itself
coordinator = s2c.get_class_with_defaults("CommunityHealthWorkerEventCoordinator", schema_path)
coordinator.Amount_In_Shipment = amount_in_shipment
coordinator.Days_Between_Shipments = days_between_shipments
coordinator.Demographic_Coverage = demographic_coverage
coordinator.Duration = duration
coordinator.Initial_Amount_Constant = initial_amount
coordinator.Initial_Amount_Distribution = "CONSTANT_DISTRIBUTION"
coordinator.Intervention_Config = intervention_config
coordinator.Max_Distributed_Per_Day = max_distributed_per_day
coordinator.Max_Stock = max_stock
coordinator.Property_Restrictions_Within_Node = ind_property_restrictions if ind_property_restrictions else []
coordinator.Trigger_Condition_List = [campaign.get_recv_trigger(trigger, old=True) for trigger in trigger_condition_list]
coordinator.Waiting_Period = waiting_period
if target_age_min > 0 or target_age_max < 125:
coordinator.Target_Age_Min = target_age_min
coordinator.Target_Age_Max = target_age_max
if target_gender != "All":
coordinator.Target_Gender = target_gender
coordinator.Target_Demographic = "ExplicitAgeRangesAndGender"
event = s2c.get_class_with_defaults("CampaignEvent", schema_path)
event.Start_Day = start_day
event.Nodeset_Config = utils.do_nodes(schema_path, node_ids)
event.Event_Coordinator_Config = coordinator
campaign.add(event)