Пример #1
0
 def get_undernutrition_detail(self, zscore_type, zscore):
   ''' Retrieve patients with undernutrition zscores within a date range in order to build a report
   '''
   report_detail = []
   visits = self._get_visits(ordered = True)
   for visit in visits:
     try:
       stats = visit.get_visit_statistics()
       stat = float(zscore)
       if zscore_type == 'stunted':
         stat = float(stats.length_or_height_for_age.zscore)
       elif zscore_type == 'underweight':
         stat = float(stats.weight_for_age.zscore)
       elif zscore_type == 'wasting':
         stat = float(stats.weight_for_length_or_height.zscore)
       else:
         stat = float(zscore)
         
       if stat < float(zscore):
         if self.residence > '':
           if util.string_eq_nocase(visit.get_patient().residence, self.residence):
             report_detail.append(ReportLine(patient=visit.get_patient(), visit=visit))
         elif self.country > '':
           if visit.get_patient().country == self.country:
             report_detail.append(ReportLine(patient=visit.get_patient(), visit=visit))
         else:
           report_detail.append(ReportLine(patient=visit.get_patient(), visit=visit))  
     except:
       pass
   
   return report_detail
Пример #2
0
 def get_screening_data(self):
   ''' Return # of visits and # unique patients within a date range.
   '''
   report_data = []
   visit_count = 0
   visits = self._get_visits()
   patients = []
   
   # Get patients and count
   if self.residence > '':
     for visit in visits:
       if util.string_eq_nocase(visit.get_patient().residence, self.residence):
         (patients, visit_count) = add_screening_record(visit, patients, visit_count)
         #patients.append(visit.get_patient())
         #visit_count += 1
     patient_count = len(set(patients))
   elif self.country > '':
     for visit in visits:  
       if visit.get_patient().country == self.country:
         (patients, visit_count) = add_screening_record(visit, patients, visit_count)
         #patients.append(visit.get_patient())
         #visit_count += 1
     patient_count = len(set(patients))          
   else:       
     patient_count = len(set([visit.get_patient() for visit in visits])) 
     visit_count = visits.count()             
       
   # Build report
   report_data.append(ReportLine(visitcount = visit_count, patientcount=patient_count))
   return report_data
Пример #3
0
 def test_function(self):
   self.assertFalse(util.string_eq_nocase('Anivorano', None))
   self.assertFalse(util.string_eq_nocase('Anivorano', 'Andranonakoho'))
   self.assertTrue(util.string_eq_nocase('Anivorano', 'anivorano'))
   self.assertTrue(util.string_eq_nocase('Anivorano', 'Anivorano'))
   self.assertTrue(util.string_eq_nocase(None, None))
   self.assertTrue(util.string_eq_nocase('Anivorano', ''))
   
Пример #4
0
 def get_screening_details(self):
   ''' Retrieve patients that have visits within a date range in order to build a report
   '''
   # TODO(dan): Factor get_screening_data and get_screening_details
   report_detail = []
   visits = self._get_visits(ordered = True)
   
   for visit in visits:
     if self.residence > '':
       if util.string_eq_nocase(visit.get_patient().residence, self.residence):
         report_detail.append(ReportLine(patient=visit.get_patient(), visit=visit))  
     elif self.country > '':
       if visit.get_patient().country == self.country:
         report_detail.append(ReportLine(patient=visit.get_patient(), visit=visit))
     else:
       report_detail.append(ReportLine(patient=visit.get_patient(), visit=visit))
   
   return report_detail
Пример #5
0
 def get_undernutrition_data(self, zscore):
   ''' Retrieve undernutrition data based on zscore in order to build a report
   '''
   # TODO(dan): Factor get_undernutrition_data and get_undernutrition_detail
   report_data = []
   patients = []
   visits_latest = []
   visits = self._get_visits()
   stunted_children_counter = 0
   underweight_children_counter = 0
   wasting_children_counter = 0
   visit_counter = 0
   visit_latest_counter = 0
   
   # Get latest visit per patient
   for visit in visits:
     if self.residence > '':
       if util.string_eq_nocase(visit.get_patient().residence, self.residence):
         (patients, visits_latest, visit_counter) = add_undernutrition_record(visit, patients, visits_latest, visit_counter)
         #patients.append(visit.get_patient())
         #visits_latest.append(visit.get_patient().get_latest_visit())
         #visit_counter += 1
     elif self.country > '':
       if visit.get_patient().country == self.country:
         (patients, visits_latest, visit_counter) = add_undernutrition_record(visit, patients, visits_latest, visit_counter)
         #patients.append(visit.get_patient())
         #visits_latest.append(visit.get_patient().get_latest_visit()) 
         #visit_counter += 1     
     else:
       (patients, visits_latest, visit_counter) = add_undernutrition_record(visit, patients, visits_latest, visit_counter)          
       #patients.append(visit.get_patient())
       #visits_latest.append(visit.get_patient().get_latest_visit())
       #visit_counter += 1
           
   visits_latest = list(set(visits_latest))
   
   for visit in visits_latest:
     visit_latest_counter += 1
     # If the statistics does not exist, ignore the visit in the counts
     try:
       stats = visit.get_visit_statistics()
       if stats.length_or_height_for_age.zscore:
         if stats.length_or_height_for_age.zscore < float(zscore):
           stunted_children_counter += 1
       if stats.weight_for_age.zscore:
         if stats.weight_for_age.zscore < float(zscore):
           underweight_children_counter += 1
       if stats.weight_for_length_or_height.zscore:
         if stats.weight_for_length_or_height.zscore < float(zscore):
           wasting_children_counter += 1
     except:
       pass
   # Remove duplicate patients
   patients = list(set(patients))
   
   percent_stunted = 0
   percent_underweight = 0
   percent_wasting = 0
   total_undernourished = 0
   percent_undernourished = 0
   
   if visit_counter > 0:
     # Calculate percentages    
     percent_stunted = stunted_children_counter * 100.00 / visit_counter
     percent_underweight = underweight_children_counter * 100.00 / visit_counter
     percent_wasting = wasting_children_counter * 100.00 / visit_counter
     total_undernourished = stunted_children_counter + underweight_children_counter + wasting_children_counter
     percent_undernourished = total_undernourished * 100.00 / visit_counter
   
   # Build report
   report_data.append(ReportLine(stunted=stunted_children_counter, percentagestunted=percent_stunted,
                                 underweight=underweight_children_counter, percentageunderweight=percent_underweight,
                                 wasting=wasting_children_counter, percentagewasting=percent_wasting,
                                 totalundernourished = total_undernourished, percentundernourished = percent_undernourished,
                                 visitcount=visit_counter, patientcount=len(patients)))
   
   return report_data