Package Gnumed :: Package exporters :: Module export_immunization_metadata
[frames] | no frames]

Source Code for Module Gnumed.exporters.export_immunization_metadata

  1  # GNUmed vaccination metadata exporter 
  2  #============================================================ 
  3  __author__ = "Karsten Hilbert" 
  4  __license__ = 'GPL' 
  5   
  6  from Gnumed.pycommon import gmPG 
  7  #============================================================ 
  8  # connect to database 
  9  pool = gmPG.ConnectionPool() 
 10   
 11  filename = 'immunization-data.txt' 
 12  print "Writing immunization metadata to:", filename 
 13  f = open(filename, 'w') 
 14   
 15  vaccine_template = """ 
 16  Vaccine "%s" (%s) 
 17    comment  : %s 
 18    given via: %s (%s = %s) 
 19    age range: %s days - %s days 
 20  """ 
 21   
 22  schedule_template = """ 
 23  Schedule "%s" (%s) 
 24    indication : %s (%s) 
 25    start @ age: %s days 
 26    # of shots : %s 
 27    comment    : %s 
 28  """ 
 29   
 30  #=========================== 
 31  # export vaccine information 
 32  #=========================== 
 33   
 34  # retrieve vaccines 
 35  cmd = "select * from clin.v_vaccine" 
 36  vaccine_rows, idx = gmPG.run_ro_query ( 
 37          link_obj = 'clinical', 
 38          aQuery = cmd, 
 39          get_col_idx = True 
 40  ) 
 41  # error 
 42  if vaccine_rows is None: 
 43          print "error retrieving vaccine data" 
 44  # display vaccine data 
 45  else: 
 46          f.write('Vaccines in the GNUmed database\n') 
 47          f.write('-------------------------------\n') 
 48          for vacc in vaccine_rows: 
 49                  f.write(vaccine_template % ( 
 50                          vacc[idx['trade_name']], 
 51                          vacc[idx['short_name']], 
 52                          vacc[idx['comment']], 
 53                          vacc[idx['l10n_route_description']], 
 54                          vacc[idx['route_abbreviation']], 
 55                          vacc[idx['route_description']], 
 56                          vacc[idx['min_age']].day, 
 57                          vacc[idx['max_age']].day 
 58                  )) 
 59                  if vacc[idx['is_live']] is None: 
 60                          f.write("  type of vaccine not known\n") 
 61                  elif vacc[idx['is_live']]: 
 62                          f.write("  Cave: live vaccine\n") 
 63                  else: 
 64                          f.write("  non-live vaccine\n") 
 65                  # get indications for this vaccine 
 66                  cmd = """select * from clin.v_inds4vaccine where pk_vaccine = %s""" 
 67                  indication_rows, ind_idx = gmPG.run_ro_query ( 
 68                          'clinical', 
 69                          cmd, 
 70                          True, 
 71                          vacc[idx['pk_vaccine']] 
 72                  ) 
 73                  # error 
 74                  if indication_rows is None: 
 75                          print "error retrieving vaccine indication data" 
 76                  # display them 
 77                  else: 
 78                          f.write('  Indications:\n') 
 79                          for ind in indication_rows: 
 80                                  f.write('  - %s (%s)\n' % (ind[ind_idx['l10n_indication']], ind[ind_idx['indication']])) 
 81   
 82  #============================= 
 83  # export vaccination schedules 
 84  #============================= 
 85   
 86  # retrieve schedules 
 87  cmd = "select * from clin.v_vacc_regimes" 
 88  schedule_rows, idx = gmPG.run_ro_query ( 
 89          'clinical', 
 90          cmd, 
 91          True 
 92  ) 
 93  if schedule_rows is None: 
 94          print "error retrieving vaccination schedules" 
 95  else: 
 96          f.write('\n\nVaccination schedules in the GNUmed database\n') 
 97          f.write(    '--------------------------------------------\n') 
 98          for sched in schedule_rows: 
 99                  if sched[idx['is_active']]: 
100                          act = 'active' 
101                  else: 
102                          act = 'inactive' 
103                  f.write(schedule_template % ( 
104                          sched[idx['regime']], 
105                          act, 
106                          sched[idx['l10n_indication']], 
107                          sched[idx['indication']], 
108                          sched[idx['min_age_due']], 
109                          sched[idx['shots']], 
110                          sched[idx['comment']] 
111                  )) 
112                  # get shots for this schedule 
113                  cmd = "select * from clin.v_vacc_defs4reg where pk_regime=%s order by vacc_seq_no" 
114                  shot_rows, shots_idx = gmPG.run_ro_query ( 
115                          'clinical', 
116                          cmd, 
117                          True, 
118                          sched[idx['pk_regime']] 
119                  ) 
120                  if shot_rows is None: 
121                          print "error retrieving shots for regime" 
122                  else: 
123                          f.write('  Shots defined for this schedule:\n') 
124                          for shot in shot_rows: 
125                                  if shot[shots_idx['is_booster']]: 
126                                          f.write('  booster) start %s - %s days of age, refresh after %s (%s)\n' % ( 
127                                                  shot[shots_idx['age_due_min']].day, 
128                                                  shot[shots_idx['age_due_max']].day, 
129                                                  shot[shots_idx['min_interval']].day, 
130                                                  shot[shots_idx['vacc_comment']] 
131                                          )) 
132                                  elif shot[shots_idx['vacc_seq_no']] == 1: 
133                                          f.write('  shot #%s) due between day %s and %s (%s)\n' % ( 
134                                                  shot[shots_idx['vacc_seq_no']], 
135                                                  shot[shots_idx['age_due_min']].day, 
136                                                  shot[shots_idx['age_due_max']].day, 
137                                                  shot[shots_idx['vacc_comment']] 
138                                          )) 
139                                  else: 
140                                          f.write('  shot #%s) due between day %s and %s, minimum %s day after previous (%s)\n' % ( 
141                                                  shot[shots_idx['vacc_seq_no']], 
142                                                  shot[shots_idx['age_due_min']].day, 
143                                                  shot[shots_idx['age_due_max']].day, 
144                                                  shot[shots_idx['min_interval']].day, 
145                                                  shot[shots_idx['vacc_comment']] 
146                                          )) 
147                  # get vaccines suitable for this schedule 
148                  cmd = """ 
149  select trade_name, short_name 
150  from ref.vaccine 
151  where 
152          select () = () 
153  """ 
154   
155  f.close() 
156