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 __license__ = "GPL v2 or later"
15 __author__ = "K.Hilbert <Karsten.Hilbert@gmx.net>"
16
17
18
19 import sys, io, time, datetime as pyDT
20
21
22
23 if __name__ == '__main__':
24 sys.path.insert(0, '../../')
25 from Gnumed.pycommon import gmTools, gmDateTime
26 from Gnumed.business import gmPerson
27
28 PATIENTS_IN_line_len = 223
29 PATIENTS_IN_dob_format = '%d/%m/%Y'
30
31
33
34 pats_file = io.open(filename, mode = 'rt', encoding = encoding)
35 dtos = []
36
37 for line in pats_file:
38 if len(line) < PATIENTS_IN_line_len:
39 continue
40
41 dto = gmPerson.cDTO_person()
42 dto.external_ids = [
43 {'PracSoft No.': line[0:9].strip(), 'issuer': 'AU PracSoft application'},
44 {'CRN': line[166:180].replace(' ', ''), 'issuer': 'Centrelink (AU)'},
45 {'DVA': line[180:194].replace(' ', ''), 'issuer': "Department of Veteran's Affairs (AU)"},
46 {'AU-Medicare': line[153:166].replace(' ', ''), 'issuer': 'HIC (AU)'}
47 ]
48
49 dto.title = gmTools.capitalize(line[9:14].strip(), gmTools.CAPS_FIRST)
50 dto.firstnames = gmTools.capitalize(line[44:74].strip(), gmTools.CAPS_NAMES)
51 dto.lastnames = gmTools.capitalize(line[14:44].strip(), gmTools.CAPS_NAMES)
52
53 dto.gender = line[223].lower()
54 dob = time.strptime(line[143:153].strip(), PATIENTS_IN_dob_format)
55 dto.dob = pyDT.datetime(dob.tm_year, dob.tm_mon, dob.tm_mday, tzinfo = gmDateTime.gmCurrentLocalTimezone)
56
57
58 dto.street = gmTools.capitalize(line[74:114].strip(), gmTools.CAPS_FIRST)
59 dto.zip = line[139:143].strip()
60 dto.urb = line[114:139].strip()
61
62 dto.comms = [
63 {'homephone': line[194:208].replace(' ', '')},
64 {'workphone': line[208:222].replace(' ', '')}
65 ]
66 dto.pracsoft_billing_flag = line[222]
67
68 dtos.append(dto)
69
70 return dtos
71
72
73
74 if __name__ == "__main__":
75 from Gnumed.pycommon import gmI18N
76 gmI18N.activate_locale()
77 gmI18N.install_domain()
78 gmDateTime.init()
79
80 patfile = sys.argv[1]
81 print "reading patient data from PATIENTS.IN PracSoft file [%s]" % patfile
82
83 dtos = read_persons_from_pracsoft_file(patfile)
84 for dto in dtos:
85 print "DTO:", dto
86 print "dto.dob:", dto.dob, type(dto.dob)
87 print "dto.dob.tz:", dto.dob.tzinfo
88 print "dto.zip: %s dto.urb: %s" % (dto.zip, dto.urb)
89 print "dto.street", dto.street
90
91
92
93
94
95