def test_post_healthsystem_view(self): scenario = Scenario(self.model_scenario.xml) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.name, "Kenya ACT") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.firstLine, "ACT") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.secondLine, "QN") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareSevere, 0.48) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated1, 0.04) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated2, 0.04) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSelfTreatUncomplicated, 0.0212) perc_total = 20 perc_formal = 40 expected_prob_total = get_prob_from_percentage(perc_total) expected_prob_formal = get_prob_from_percentage(100-perc_formal) post_data = { "perc_total_treated": str(perc_total), "perc_formal_care": str(perc_formal), "first_line_drug": "SP", } response = self.client.post(reverse("ts_om.healthsystem", kwargs={"scenario_id": self.model_scenario.id}), post_data) self.assertEqual(response.status_code, 302) model_scenario = ScenarioModel.objects.get(id=self.model_scenario.id) scenario = Scenario(model_scenario.xml) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.name, "Kenya ACT") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.firstLine, "SP") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.secondLine, "QN") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareSevere, 0.48) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated1, expected_prob_total) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated2, expected_prob_total) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.pSelfTreatUncomplicated, expected_prob_formal)
def test_probabilities(self): # get_prob_from_percentage self.assertRaises(AssertionError, get_prob_from_percentage, -1) self.assertRaises(AssertionError, get_prob_from_percentage, 101) self.assertRaises(AssertionError, get_prob_from_percentage, "not a number") self.assertEqual(get_prob_from_percentage(50), 0.2411937) self.assertEqual(get_prob_from_percentage(0), 0.0) self.assertEqual(get_prob_from_percentage(100), 0.9984184) for i in range(0, 101): self.assertEqual( get_percentage_from_prob(get_prob_from_percentage(i)), i) # get_percentage_from_prob self.assertEqual(get_percentage_from_prob(0.5), 77) self.assertEqual(get_percentage_from_prob(0.0), 0) self.assertEqual(get_percentage_from_prob(0.003655051), 0) self.assertEqual(get_percentage_from_prob(0.003655053), 1) self.assertEqual(get_percentage_from_prob(0.01), 2) self.assertEqual(get_percentage_from_prob(0.5), 77) self.assertEqual(get_percentage_from_prob(0.9984183), 99) self.assertEqual(get_percentage_from_prob(0.9984185), 100) self.assertEqual(get_percentage_from_prob(1.00), 100)
def form_valid(self, form, **kwargs): prob_total = get_prob_from_percentage( int(form.cleaned_data["perc_total_treated"])) perc_formal = int(form.cleaned_data["perc_formal_care"]) prob_formal = get_prob_from_percentage(100 - perc_formal) # total % (uncomplicated) fevers treated converted to probability. self.scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated1 = prob_total self.scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated2 = prob_total # % treated in a health clinic (formal care). self.scenario.healthSystem.ImmediateOutcomes.pSelfTreatUncomplicated = prob_formal first_line_drug = form.cleaned_data["first_line_drug"] self.scenario.healthSystem.ImmediateOutcomes.firstLine = first_line_drug self.scenario.healthSystem.ImmediateOutcomes.drugs.add( first_line_drug, unicode(INITIAL_DRUG_VALUE), ["initialACR", "compliance", "nonCompliersEffective"]) drug = self.scenario.healthSystem.ImmediateOutcomes.drugs[ first_line_drug] drug.treatmentAction = DRUG_NAME drug.treatmentAction.stage = TREATMENT_ACTION_STAGE drug.treatmentAction.timesteps = TREATMENT_ACTION_TIMESTEPS return super(ScenarioHealthSystemView, self).form_valid(form, kwargs={'xml': self.scenario.xml})
def test_post_healthsystem_view(self): scenario = Scenario(self.model_scenario.xml) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.name, "Kenya ACT") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.firstLine, "ACT") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.secondLine, "QN") self.assertEqual( scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareSevere, 0.48) self.assertEqual( scenario.healthSystem.ImmediateOutcomes. pSeekOfficialCareUncomplicated1, 0.04) self.assertEqual( scenario.healthSystem.ImmediateOutcomes. pSeekOfficialCareUncomplicated2, 0.04) self.assertEqual( scenario.healthSystem.ImmediateOutcomes.pSelfTreatUncomplicated, 0.0212) perc_total = 20 perc_formal = 40 expected_prob_total = get_prob_from_percentage(perc_total) expected_prob_formal = get_prob_from_percentage(100 - perc_formal) post_data = { "perc_total_treated": str(perc_total), "perc_formal_care": str(perc_formal), "first_line_drug": "SP", } response = self.client.post(self.url, post_data) self.assertEqual(response.status_code, 302) model_scenario = ScenarioModel.objects.get(id=self.model_scenario.id) scenario = Scenario(model_scenario.xml) self.assertEqual(scenario.healthSystem.ImmediateOutcomes.name, "Kenya ACT") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.firstLine, "SP") self.assertEqual(scenario.healthSystem.ImmediateOutcomes.secondLine, "QN") self.assertEqual( scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareSevere, 0.48) self.assertEqual( scenario.healthSystem.ImmediateOutcomes. pSeekOfficialCareUncomplicated1, expected_prob_total) self.assertEqual( scenario.healthSystem.ImmediateOutcomes. pSeekOfficialCareUncomplicated2, expected_prob_total) self.assertEqual( scenario.healthSystem.ImmediateOutcomes.pSelfTreatUncomplicated, expected_prob_formal)
def form_valid(self, form, **kwargs): prob_total = get_prob_from_percentage(int(form.cleaned_data["perc_total_treated"])) perc_formal = int(form.cleaned_data["perc_formal_care"]) prob_formal = get_prob_from_percentage(100-perc_formal) # total % (uncomplicated) fevers treated converted to probability. self.scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated1 = prob_total self.scenario.healthSystem.ImmediateOutcomes.pSeekOfficialCareUncomplicated2 = prob_total # % treated in a health clinic (formal care). self.scenario.healthSystem.ImmediateOutcomes.pSelfTreatUncomplicated = prob_formal first_line_drug = form.cleaned_data["first_line_drug"] self.scenario.healthSystem.ImmediateOutcomes.firstLine = first_line_drug self.scenario.healthSystem.ImmediateOutcomes.drugs.add(first_line_drug, unicode(INITIAL_DRUG_VALUE), ["initialACR", "compliance", "nonCompliersEffective"]) drug = self.scenario.healthSystem.ImmediateOutcomes.drugs[first_line_drug] drug.treatmentAction = DRUG_NAME drug.treatmentAction.stage = TREATMENT_ACTION_STAGE drug.treatmentAction.timesteps = TREATMENT_ACTION_TIMESTEPS return super(ScenarioHealthSystemView, self).form_valid(form, kwargs={'xml': self.scenario.xml})