Package Gnumed :: Package business :: Module gmPracSoftAU |
[frames] | no frames]

# Source Code for Module Gnumed.business.gmPracSoftAU

     1  """GNUmed to PracSoft(tm) AU connector classes.
     2
     3  The Australian PracSoft package writes patient data to a file
     4  called PATIENTS.IN whenever patient data is added or edited.
     5
     6  This file has a de-facto format with one patient per line. The
     7  line format has been derived empirically with no knowledge of
     8  PracSoft internals whatsoever. The content is "ASCII" text of
     9  fixed width fields.
    10
    11  This implementation is in the sole responsibility of the authors.
    12  """
    13  #============================================================
    14  # $Source: /home/ncq/Projekte/cvs2git/vcs-mirror/gnumed/gnumed/client/business/gmPracSoftAU.py,v $
    15  # $Id: gmPracSoftAU.py,v 1.2 2007-02-13 17:05:22 ncq Exp $
    16  __license__ = "GPL"
    17  __version__ = "$Revision: 1.2 $"
    18  __author__ = "K.Hilbert <Karsten.Hilbert@gmx.net>"
    19
    20
    21  # stdlib
    22  import sys, codecs, time, datetime as pyDT
    23
    24
    25  # GNUmed modules
    26  if __name__ == '__main__':
    27          sys.path.insert(0, '../../')
    28  from Gnumed.pycommon import gmTools, gmDateTime
    29  from Gnumed.business import gmPerson
    30
    31  PATIENTS_IN_line_len = 223
    32  PATIENTS_IN_dob_format = '%d/%m/%Y'
    33
    34  #============================================================
    35 -def read_persons_from_pracsoft_file(filename=None, encoding='ascii'):
    36
    37          pats_file = codecs.open(filename=filename, mode='rU', encoding=encoding)
    38          dtos = []
    39
    40          for line in pats_file:
    41                  if len(line) < PATIENTS_IN_line_len:
    42                          continue                        # perhaps raise Exception ?
    43
    44                  dto = gmPerson.cDTO_person()
    45                  dto.external_ids = [
    46                          {'PracSoft No.': line[0:9].strip(), 'issuer': 'AU PracSoft application'},
    47                          {'CRN': line[166:180].replace(' ', ''), 'issuer': 'Centrelink (AU)'},
    48                          {'DVA': line[180:194].replace(' ', ''), 'issuer': "Department of Veteran's Affairs (AU)"},
    49                          {'AU-Medicare': line[153:166].replace(' ', ''), 'issuer': 'HIC (AU)'}
    50                  ]
    51
    52                  dto.title = gmTools.capitalize(line[9:14].strip(), gmTools.CAPS_FIRST)
    53                  dto.firstnames = gmTools.capitalize(line[44:74].strip(), gmTools.CAPS_NAMES)
    54                  dto.lastnames = gmTools.capitalize(line[14:44].strip(), gmTools.CAPS_NAMES)
    55
    56                  dto.gender = line[223].lower()
    57                  dob = time.strptime(line[143:153].strip(), PATIENTS_IN_dob_format)
    58                  dto.dob = pyDT.datetime(dob.tm_year, dob.tm_mon, dob.tm_mday, tzinfo = gmDateTime.gmCurrentLocalTimezone)
    59
    60                  # this is the home address
    61                  dto.street = gmTools.capitalize(line[74:114].strip(), gmTools.CAPS_FIRST)
    62                  dto.zip = line[139:143].strip()
    63                  dto.urb = line[114:139].strip()
    64
    65                  dto.comms = [                                   # types must correspond to GNUmed database comm type
    66                          {'homephone': line[194:208].replace(' ', '')},
    67                          {'workphone': line[208:222].replace(' ', '')}
    68                  ]
    69                  dto.pracsoft_billing_flag = line[222] # P=pensioner R=repatriation
    70
    71                  dtos.append(dto)
    72
    73          return dtos
    74  #============================================================
    75  # main
    76  #------------------------------------------------------------
    77  if __name__ == "__main__":
    78          from Gnumed.pycommon import gmI18N
    79          gmI18N.activate_locale()
    80          gmI18N.install_domain()
    81          gmDateTime.init()
    82
    83          patfile = sys.argv[1]
    84          print "reading patient data from PATIENTS.IN PracSoft file [%s]" % patfile
    85
    86          dtos = read_persons_from_pracsoft_file(patfile)
    87          for dto in dtos:
    88                  print "DTO:", dto
    89                  print "dto.dob:", dto.dob, type(dto.dob)
    90                  print "dto.dob.tz:", dto.dob.tzinfo
    91                  print "dto.zip: %s dto.urb: %s" % (dto.zip, dto.urb)
    92                  print "dto.street", dto.street
    93  #               searcher = gmPersonSearch.cPatientSearcher_SQL()
    94  #               ident = searcher.get_identities(dto=dto)[0]
    95  #               print ident
    96
    97  #==============================================================
    98