def __init__(self, parent, id, ptID): wx.Panel.__init__(self, parent, id) self.PtID = ptID self.textctrl = {} self.not_billable = 0 textcontrols = [('Date', 100)] cptsizer = wx.BoxSizer(wx.VERTICAL) for label, size in textcontrols: EMR_utilities.buildOneTextCtrl(self, label, size, cptsizer) cptsizer.Add((-1, 10)) cptsizer.Add(wx.StaticText(self, -1, 'Select a template:')) self.tmplist = wx.ListBox(self, -1, pos=wx.DefaultPosition, size=(90, 110), choices = ['HTN', 'DM', \ 'Obesity', 'GI', 'Back Pain'], style=wx.LB_HSCROLL) self.Bind(wx.EVT_LISTBOX, self.EvtSelTmplist, self.tmplist) cptsizer.Add(self.tmplist) cptsizer.Add((-1, 10)) noteSizer = wx.BoxSizer(wx.VERTICAL) noteLabel = wx.StaticText(self, -1, 'SOAP Note') self.educNote = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) self.educNote.Show(False) self.neweducNote = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) noteSizer.Add(noteLabel, 0, wx.ALIGN_TOP | wx.ALIGN_LEFT, 5) noteSizer.Add(self.educNote, 1, wx.EXPAND) noteSizer.Add(self.neweducNote, 1, wx.EXPAND) buttons = [('Save', self.OnSave), ('New', self.OnNew), ('Print', self.OnPrint), ('PDF', self.OnPDF)] leftsizer = wx.BoxSizer(wx.VERTICAL) for label, handler in buttons: EMR_utilities.buildOneButton(self, self, label, handler, leftsizer) self.listctrl = wx.ListBox(self, -1, pos=wx.DefaultPosition, size=(145, 200), choices=[], style=wx.LB_HSCROLL) leftsizer.AddMany([(-1, 20), (wx.StaticText(self, -1, 'Select a note:')), (self.listctrl)]) self.Bind(wx.EVT_LISTBOX, self.EvtSelListBox, self.listctrl) self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtSelListBox, self.listctrl) mainsizer = wx.BoxSizer(wx.HORIZONTAL) mainsizer.AddMany([(leftsizer, 0, wx.ALL, 10), (noteSizer, 1, wx.EXPAND | wx.ALL, 10), (cptsizer, 0, wx.ALL, 10)]) self.SetSizer(mainsizer) self.loadList()
def __init__(self, parent, id, ptID): wx.Panel.__init__(self, parent, id) self.PtID = ptID self.textctrl = {} self.not_billable = 0 textcontrols = [("Date", 100)] cptsizer = wx.BoxSizer(wx.VERTICAL) for label, size in textcontrols: EMR_utilities.buildOneTextCtrl(self, label, size, cptsizer) cptsizer.Add((-1, 10)) cptsizer.Add(wx.StaticText(self, -1, "Select a template:")) self.tmplist = wx.ListBox( self, -1, pos=wx.DefaultPosition, size=(90, 110), choices=["HTN", "DM", "Obesity", "GI", "Back Pain"], style=wx.LB_HSCROLL, ) self.Bind(wx.EVT_LISTBOX, self.EvtSelTmplist, self.tmplist) cptsizer.Add(self.tmplist) cptsizer.Add((-1, 10)) noteSizer = wx.BoxSizer(wx.VERTICAL) noteLabel = wx.StaticText(self, -1, "SOAP Note") self.educNote = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) self.educNote.Show(False) self.neweducNote = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) noteSizer.Add(noteLabel, 0, wx.ALIGN_TOP | wx.ALIGN_LEFT, 5) noteSizer.Add(self.educNote, 1, wx.EXPAND) noteSizer.Add(self.neweducNote, 1, wx.EXPAND) buttons = [("Save", self.OnSave), ("New", self.OnNew), ("Print", self.OnPrint), ("PDF", self.OnPDF)] leftsizer = wx.BoxSizer(wx.VERTICAL) for label, handler in buttons: EMR_utilities.buildOneButton(self, self, label, handler, leftsizer) self.listctrl = wx.ListBox(self, -1, pos=wx.DefaultPosition, size=(145, 200), choices=[], style=wx.LB_HSCROLL) leftsizer.AddMany([(-1, 20), (wx.StaticText(self, -1, "Select a note:")), (self.listctrl)]) self.Bind(wx.EVT_LISTBOX, self.EvtSelListBox, self.listctrl) self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtSelListBox, self.listctrl) mainsizer = wx.BoxSizer(wx.HORIZONTAL) mainsizer.AddMany( [(leftsizer, 0, wx.ALL, 10), (noteSizer, 1, wx.EXPAND | wx.ALL, 10), (cptsizer, 0, wx.ALL, 10)] ) self.SetSizer(mainsizer) self.loadList()
def __init__(self, parent, ID, PtID): wx.Panel.__init__(self, parent, ID) #I need some way to set the max size for the grid self.PtID = PtID self.qry = "SELECT * FROM vitals WHERE patient_ID = %s;" % (str(self.PtID)) self.vitals = list(EMR_utilities.getAllDictData(self.qry)) self.textctrl = {} self.vitalsList = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) self.vitalsList.SetColumns([ ColumnDefn("Weight", "center", 80, valueGetter="wt"), ColumnDefn("Height", "center", 80, valueGetter="ht"), ColumnDefn("HC", "center", 80, valueGetter="hc"), ColumnDefn("Systolic", "center", 80, valueGetter="sBP"), ColumnDefn("Diastolic", "center", 80, valueGetter="dBP"), ColumnDefn("Pulse", "center", 80, valueGetter="pulse"), ColumnDefn("Resp", "center", 80, valueGetter="resp"), ColumnDefn("O2 Sat", "center", 80, valueGetter="sats"), ColumnDefn("Temp", "center", 80, valueGetter="temp"), ColumnDefn("Date", "center", 120, valueGetter="vitals_date") ]) self.vitalsList.SetObjects(self.vitals) self.vitalsList.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK self.vitalsList.Bind(EVT_CELL_EDIT_STARTING, self.HandleCellEditStarting) self.vitalsList.Bind(EVT_CELL_EDIT_FINISHED, self.listHandleCellEditFinished) self.vitalsbox = wx.BoxSizer(wx.HORIZONTAL) self.vitalsbox.Add(self.vitalsList, 1, wx.EXPAND |wx.ALL, 20) self.mainsizer = wx.BoxSizer(wx.VERTICAL) border = wx.StaticBox(self, -1, 'Add Vitals') f = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.LIGHT) border.SetFont(f) addvitals = wx.StaticBoxSizer(border, wx.HORIZONTAL) controls = [('Wt', 40), ('Ht', 30), ('HC', 30), ('Temp', 40), ('SBP', 40), ('DBP', 40), ('Pulse', 40), ('Resp', 30), \ ('O2 Sats', 30), ('Date', 80)] for label, size in controls: EMR_utilities.buildOneTextCtrl(self, label, size, addvitals) self.textctrl['Date'].SetValue(str(EMR_utilities.dateToday())) self.mainsizer.Add(self.vitalsbox) self.mainsizer.Add(addvitals, 0, wx.ALL, 20) buttonAdd = EMR_utilities.buildOneButton(self, self, 'Update Vitals', self.UpdateVitals) buttonDel = EMR_utilities.buildOneButton(self, self, 'Delete Vitals', self.DeleteVitals) self.mainsizer.Add(buttonAdd, 0, wx.ALIGN_LEFT|wx.ALIGN_TOP|wx.LEFT|wx.TOP, 20) self.mainsizer.Add(buttonDel, 0, wx.ALIGN_LEFT|wx.ALIGN_TOP|wx.LEFT|wx.TOP, 20) self.SetSizer(self.mainsizer)
def __init__(self, parent, id, ptID): wx.Panel.__init__(self, parent, id) self.PtID = ptID self.textctrl = {} self.not_billable = 0 self.note_number = '' textcontrols1 = [('Date', 100)] textcontrols2 = [('ICD #1', 60), ('ICD #2', 60), ('ICD #3', 60), ('ICD #4', 60), ('ICD #5', 60)] textcontrols3 = [('ICD #6', 60), ('ICD #7', 60), ('ICD #8', 60), ('ICD #9', 60), ('ICD #10', 60)] cptsizer = wx.BoxSizer(wx.VERTICAL) icd1sizer = wx.BoxSizer(wx.VERTICAL) icd2sizer = wx.BoxSizer(wx.VERTICAL) icdMainSizer = wx.BoxSizer(wx.HORIZONTAL) for label, size in textcontrols1: EMR_utilities.buildOneTextCtrl(self, label, size, cptsizer) for label, size in textcontrols2: EMR_utilities.buildOneTextCtrl(self, label, size, icd1sizer) for label, size in textcontrols3: EMR_utilities.buildOneTextCtrl(self, label, size, icd2sizer) icdMainSizer.Add(icd1sizer) icdMainSizer.Add(icd2sizer) cptsizer.Add(icdMainSizer) cptsizer.Add((-1,10)) cptsizer.Add(wx.StaticText(self, -1, 'Select a template:')) self.tmplist = wx.ListBox(self, -1, pos=wx.DefaultPosition, size=(90, 110), choices = ['generic', 'prenatal', \ 'procedure', 'phonecon', 'well child'], style=wx.LB_HSCROLL) self.Bind(wx.EVT_LISTBOX, self.EvtSelTmplist, self.tmplist) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #1']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #2']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #3']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #4']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #5']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #6']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #7']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #8']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #9']) self.Bind(wx.EVT_TEXT, self.OnTextEnterICD, self.textctrl['ICD #10']) #for some reason the EVT_KILL_FOCUS does not bind with the above method, ie self.bind self.textctrl['ICD #1'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #2'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #3'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #4'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #5'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #6'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #7'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #8'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #9'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) self.textctrl['ICD #10'].Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusICD) cptsizer.Add(self.tmplist) cptsizer.Add((-1, 10)) exambutton = EMR_utilities.buildOneButton(self, self, 'Exam', self.OnExamBtn, cptsizer) cpbutton = EMR_utilities.buildOneButton(self, self, 'Care Plan', self.OnCarePlanBtn, cptsizer) self.billBtn = EMR_utilities.buildOneButton(self, self, 'Billing', self.OnBillBtn, cptsizer) #self.CMSbutton = EMR_utilities.buildOneButton(self, self, 'Create 1500', self.OnCMSbutton, cptsizer) self.HCFAbutton = EMR_utilities.buildOneButton(self, self, 'Create HCFA', self.OnHCFAbutton, cptsizer) self.PtBillBtn = EMR_utilities.buildOneButton(self, self, 'Bill Pt', self.OnBillPt, cptsizer) #self.printData = wx.PrintData() #self.printData.SetPaperId(wx.PAPER_LETTER) #self.printData.SetPrintMode(wx.PRINT_MODE_PRINTER) soapsizer = wx.BoxSizer(wx.VERTICAL) soapLabel = wx.StaticText(self, -1, 'SOAP Note') self.soapNote = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) self.soapNote.Show(False) self.newsoapNote = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) soapsizer.Add(soapLabel, 0, wx.ALIGN_TOP|wx.ALIGN_LEFT, 5) soapsizer.Add(self.soapNote, 1, wx.EXPAND) soapsizer.Add(self.newsoapNote, 1, wx.EXPAND) buttons = [('Save', self.OnSave), ('New', self.OnNew), ('Print', self.OnPrint), ('PDF', self.OnPDF), ('Sign', self.OnSign)] leftsizer = wx.BoxSizer(wx.VERTICAL) for label, handler in buttons: EMR_utilities.buildOneButton(self, self, label, handler, leftsizer) self.listctrl = wx.ListBox(self, -1, pos=wx.DefaultPosition, size=(145,200), choices = [], style=wx.LB_HSCROLL) leftsizer.AddMany([(-1, 20), (wx.StaticText(self, -1, 'Select a note:')), (self.listctrl)]) self.Bind(wx.EVT_LISTBOX, self.EvtSelListBox, self.listctrl) self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtSelListBox, self.listctrl) mainsizer = wx.BoxSizer(wx.HORIZONTAL) mainsizer.AddMany([(leftsizer, 0, wx.ALL, 10),(soapsizer, 1, wx.EXPAND|wx.ALL, 10),(cptsizer, 0, wx.ALL, 10)]) self.SetSizer(mainsizer) self.loadList()
def __init__(self, parent, ptID=None, noteID=None): wx.Frame.__init__(self, None, -1, "Billing", size=(900, 700)) self.noteID = noteID self.ptID = ptID self.textctrl = {} font1 = wx.Font(12, wx.SWISS, wx.NORMAL, wx.LIGHT) font2 = wx.Font(7, wx.SWISS, wx.NORMAL, wx.LIGHT) self.cptLabels = (('Date', 100, 'date'), ('POS', 30, 'POS'), ('CPT', 60, 'CPT_code'), ('A', 30, 'mod_A'), ('B', 30, 'mod_B'), ('C', 30, 'mod_C'), ('D', 30, 'mod_D'), ('Pter', 40, 'dx_pter'), ('Charges', 60, 'total_charge'), ('Units', 20, 'units'), ('1 Ins Pmt', 50, '1_ins_pmt'), ('2 Ins Pmt', 50, '2_ins_pmt'), ('Pt Pmt', 50, 'pt_pmt'), ('Adj', 50, 'pmt_adj'), ('Balance', 60, 'balance'), ('Rendering Doc', 90, 'rendering_doc')) lowerGridSizer = wx.FlexGridSizer(cols=16, hgap=5, vgap=5) mainSizer = wx.BoxSizer(wx.VERTICAL) for label, size, field in self.cptLabels: #adds row of labels at top of grid cptLabel = wx.StaticText(self, -1, label) cptLabel.SetFont(font2) lowerGridSizer.Add(cptLabel, 0, wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL) for label, size, field in self.cptLabels: EMR_utilities.buildOneTextCtrl(self, label, size) lowerGridSizer.Add(self.textctrl[label], 1) self.Bind(wx.EVT_TEXT, self.OnCPTlookup, self.textctrl['CPT']) self.textctrl['CPT'].Bind(wx.EVT_KILL_FOCUS, self.OnLeaveCPT, self.textctrl['CPT']) textLabel = wx.StaticText( self, -1, 'Billing Notes CLICK UPDATE TO SAVE NOTES!') self.textctrl['Notes'] = wx.TextCtrl(self, -1, size=(800, 500), style=wx.TE_MULTILINE) cptLabel = wx.StaticText(self, -1, 'Procedure Codes') cptLabel.SetFont(font1) mainSizer.Add(cptLabel, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL) mainSizer.Add((-1, 10)) mainSizer.Add(lowerGridSizer, 0) btnSizer = wx.BoxSizer(wx.HORIZONTAL) submitBtn = EMR_utilities.buildOneButton(self, self, "Submit", self.OnSubmit, btnSizer) self.dictNumber = 0 if self.noteID == None: msg = wx.MessageBox('You need to select a note to code.', 'No Note Selected') msg.ShowModal() else: self.results = EMR_utilities.getAllDictData( 'SELECT * FROM billing WHERE note_number = %s;' % (self.noteID[0])) if self.results: for label, size, field in self.cptLabels: self.textctrl[label].SetValue( str(self.results[self.dictNumber][field])) self.textctrl['charge_number'] = wx.TextCtrl(self, -1, size=(0, -1)) self.textctrl['charge_number'].SetValue( str(self.results[self.dictNumber]['charge_number'])) self.textctrl['Notes'].SetValue( str(self.results[self.dictNumber]['notes'])) else: qry = 'SELECT date FROM notes WHERE note_number = %s;' % self.noteID self.textctrl['Date'].SetValue( EMR_utilities.getData(qry)[0].strftime("%Y-%m-%d")) self.textctrl['POS'].SetValue('11') self.textctrl['Units'].SetValue('1') self.textctrl['Rendering Doc'].SetValue('Barron') self.textctrl['Notes'].SetValue("") updateBtn = EMR_utilities.buildOneButton(self, self, "Update", self.OnUpdate, btnSizer) btnSizer.Add((50, -1)) prevBtn = EMR_utilities.buildOneButton(self, self, "Prev", self.OnPrev, btnSizer) nextBtn = EMR_utilities.buildOneButton(self, self, "Next", self.OnNext, btnSizer) mainSizer.Add((-1, 10)) mainSizer.Add(btnSizer, 0) mainSizer.Add((-1, 10)) self.EPSDT_List = [ 'n/a', 'Partial', 'Referral', 'Partial and Referral' ] self.epsdtBox = wx.RadioBox(self, -1, "EPSDT modifiers", choices=self.EPSDT_List) self.Bind(wx.EVT_RADIOBOX, self.OnSelectEPSDT_Mod, self.epsdtBox) mainSizer.Add(self.epsdtBox, 0) mainSizer.Add((-1, 10)) self.epsdtBox.Show(False) mainSizer.Add(textLabel, 0) mainSizer.Add(self.textctrl['Notes'], 0) self.SetSizer(mainSizer)
def __init__(self, parent, id=-1, title=None, ptID=None): wx.Panel.__init__(self, parent, id, title) self.ptID = ptID self.textctrl = {} font1 = wx.Font(12, wx.SWISS, wx.NORMAL, wx.LIGHT) Font2 = wx.Font(7, wx.SWISS, wx.NORMAL, wx.LIGHT) self.labels = (('First Name', 50, 'firstname'), ('Last Name', 75, 'lastname'), ('Mid Initial', 20, 'mid_init'), ('Address', 100, 'address'), ('City', 75, 'city'), ('State', 30, 'state'), ('Zip', 40, 'zipcode'), ('Phone', 40, 'phonenumber'), ('Sex', 20, 'sex'), ('DOB', 50, 'dob'), ('Insured', 30, 'relation_to_insured'), ('SSN', 30, 'SSN'), ('Email', 125, 'email'), ('Signature on File', 40, 'sof'), ('Insurance Co', 0, 'insurance_company'), ('Policy ID', 50, 'policy_ID'), ('Sec Insurance', 100, 'secondary_ins'), ('Sec Policy ID', 50, 'secondary_ins_ID'), ('Sec Policy #', 50, 'sec_PolicyGroupOrFecaNumber'), ('Plan Name', 75, 'InsuredInsurancePlanNameOrProgramName'), ('Ins Policy/Group/FECA Number', 50, 'InsuredPolicyGroupOrFecaNumber'), ('Ins Last', 75, 'InsuredLast'), ('Ins First', 50, 'InsuredFirst'), ('Ins Mid Initial', 20, 'InsuredMidInit'), ('Ins Address', 100, 'InsuredStreetAddress'), ('Ins City', 75, 'InsuredCity'), ('Ins State', 30, 'InsuredState'), ('Ins Zip', 40, 'InsuredZip'), ('Ins Phone', 40, 'InsuredPhone'), #These were removed to make space for other demographics fields; they were not being used; still in the db though #('Ins DOB', 40, 'InsuredDOB'), #('Ins Gender', 20, 'InsuredGender'), ('Ins Employer', 100, 'InsuredEmployerNameOrSchoolName'), ('Guarantor Last', 75, 'guarantor_last'), ('Guarantor First', 50, 'guarantor_first'), ('Guarantor Address', 100, 'guarantor_address'), ('Guarantor City', 75, 'guarantor_city'), ('Guarantor State', 30, 'guarantor_state'), ('Guarantor Zip', 40, 'guarantor_zip'), ('Guarantor Phone', 40, 'guarantor_phone'), ('Race', 100, 'race'), ('Primary Language', 50, 'language'), ('PCP', 50, 'pcp')) for label, size, field in self.labels: EMR_utilities.buildOneTextCtrl(self, label, size) demosizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) demo2sizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) demo3sizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) demo4sizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) demo5sizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) demosizer.AddGrowableCol(1) demo2sizer.AddGrowableCol(1) demo3sizer.AddGrowableCol(1) demo4sizer.AddGrowableCol(1) demo5sizer.AddGrowableCol(1) #Patient Info nameLabel = wx.StaticText(self, -1, 'First, Middle, Last') nameLabel.SetFont(Font2) demosizer.Add(nameLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) namesizer = wx.BoxSizer(wx.HORIZONTAL) namesizer.Add(self.textctrl['First Name'], 2) namesizer.Add(self.textctrl['Mid Initial'], 1, wx.RIGHT|wx.LEFT, 5) namesizer.Add(self.textctrl['Last Name'], 3, wx.EXPAND) demosizer.Add(namesizer, 0, wx.EXPAND) addrLabel = wx.StaticText(self, -1, 'Address') addrLabel.SetFont(Font2) demosizer.Add(addrLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) demosizer.Add(self.textctrl['Address'], 1, wx.EXPAND) cityLabel = wx.StaticText(self, -1, ' City State Zip Phone') cityLabel.SetFont(Font2) demosizer.Add(cityLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) cstsizer = wx.BoxSizer(wx.HORIZONTAL) cstsizer.Add(self.textctrl['City'], 3) cstsizer.Add(self.textctrl['State'], 1, wx.LEFT|wx.RIGHT, 5) cstsizer.Add(self.textctrl['Zip'], 2, wx.RIGHT, 5) cstsizer.Add(self.textctrl['Phone'], 4, wx.EXPAND) demosizer.Add(cstsizer, 0, wx.EXPAND) dobLabel = wx.StaticText(self, -1, 'DOB Sex email') dobLabel.SetFont(Font2) demosizer.Add(dobLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) sexsizer = wx.BoxSizer(wx.HORIZONTAL) sexsizer.Add(self.textctrl['DOB'], 3) sexsizer.Add(self.textctrl['Sex'], 2, wx.LEFT|wx.RIGHT, 5) sexsizer.Add(self.textctrl['Email'], 5, wx.EXPAND) demosizer.Add(sexsizer, 0, wx.EXPAND) InsLabel = wx.StaticText(self, -1, 'Insured SSN SOF') InsLabel.SetFont(Font2) demosizer.Add(InsLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) insuredsizer = wx.BoxSizer(wx.HORIZONTAL) insuredsizer.Add(self.textctrl['Insured'], 2, wx.RIGHT, 5) insuredsizer.Add(self.textctrl['SSN'], 4, wx.RIGHT, 5) insuredsizer.Add(self.textctrl['Signature on File'], 3, wx.EXPAND) demosizer.Add(insuredsizer, 0, wx.EXPAND) #Insurance Info insTuple = EMR_utilities.getAllData('SELECT InsurancePlanName FROM ins_companies;') insList = [] #this control forces me to choose from one of the insurance policies I accept or 'self' for item in insTuple: insList.append(item[0]) self.insChoice = wx.Choice(self, -1, choices=insList) InsCoLabel = wx.StaticText(self, -1, 'Primary Insurance Co') InsCoLabel.SetFont(Font2) demo3sizer.Add(InsCoLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) demo3sizer.Add(self.insChoice, 1, wx.EXPAND) IDLabel = wx.StaticText(self, -1, 'ID Group# Plan') IDLabel.SetFont(Font2) demo3sizer.Add(IDLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) pgrpsizer = wx.BoxSizer(wx.HORIZONTAL) pgrpsizer.Add(self.textctrl['Policy ID'], 1) pgrpsizer.Add(self.textctrl['Ins Policy/Group/FECA Number'], 1, wx.LEFT|wx.RIGHT, 5) pgrpsizer.Add(self.textctrl['Plan Name'], 1, wx.EXPAND) demo3sizer.Add(pgrpsizer, 0, wx.EXPAND) SecInsLabel = wx.StaticText(self, -1, 'Secondary Ins Co') SecInsLabel.SetFont(Font2) demo3sizer.Add(SecInsLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) demo3sizer.Add(self.textctrl['Sec Insurance'], 1, wx.EXPAND) SecIDLabel = wx.StaticText(self, -1, 'Sec ID Policy#') SecIDLabel.SetFont(Font2) demo3sizer.Add(SecIDLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) sgrpsizer = wx.BoxSizer(wx.HORIZONTAL) sgrpsizer.Add(self.textctrl['Sec Policy ID'], 1, wx.RIGHT, 5) sgrpsizer.Add(self.textctrl['Sec Policy #'], 1, wx.EXPAND) demo3sizer.Add(sgrpsizer, 0, wx.EXPAND) #Insured Info (if not the patient) InsNameLabel = wx.StaticText(self, -1, 'First, Middle, Last') InsNameLabel.SetFont(Font2) demo2sizer.Add(InsNameLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) insnamesizer = wx.BoxSizer(wx.HORIZONTAL) insnamesizer.Add(self.textctrl['Ins First'], 2) insnamesizer.Add(self.textctrl['Ins Mid Initial'], 1, wx.LEFT|wx.RIGHT, 5) insnamesizer.Add(self.textctrl['Ins Last'], 3, wx.EXPAND) self.textctrl['Ins Last'].Bind(wx.EVT_KILL_FOCUS, self.OnInsKillFocus) demo2sizer.Add(insnamesizer, 0, wx.EXPAND) InsAddrLabel = wx.StaticText(self, -1, 'Address') InsAddrLabel.SetFont(Font2) demo2sizer.Add(InsAddrLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) demo2sizer.Add(self.textctrl['Ins Address'], 1, wx.EXPAND) InsCityLabel = wx.StaticText(self, -1, 'City State Zip Phone') InsCityLabel.SetFont(Font2) demo2sizer.Add(InsCityLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) inscstsizer = wx.BoxSizer(wx.HORIZONTAL) inscstsizer.Add(self.textctrl['Ins City'], 3) inscstsizer.Add(self.textctrl['Ins State'], 1, wx.LEFT|wx.RIGHT, 5) inscstsizer.Add(self.textctrl['Ins Zip'], 2, wx.RIGHT, 5) inscstsizer.Add(self.textctrl['Ins Phone'], 4, wx.EXPAND) demo2sizer.Add(inscstsizer, 0, wx.EXPAND) #InsDOBLabel = wx.StaticText(self, -1, 'DOB Sex') #InsDOBLabel.SetFont(Font2) #demo2sizer.Add(InsDOBLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) #inssexsizer = wx.BoxSizer(wx.HORIZONTAL) #inssexsizer.Add(self.textctrl['Ins DOB'], 1, wx.RIGHT, 5) #inssexsizer.Add(self.textctrl['Ins Gender'], 1, wx.EXPAND) #demo2sizer.Add(inssexsizer, 0, wx.EXPAND) #emplLabel = wx.StaticText(self, -1, 'Employer') #emplLabel.SetFont(Font2) #demo2sizer.Add(emplLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) #demo2sizer.Add(self.textctrl['Ins Employer'], 1, wx.EXPAND) #Contact Info relationshipLabel = wx.StaticText(self, -1, 'Advanced Directive?') relationshipLabel.SetFont(Font2) demo4sizer.Add(relationshipLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) relationshipSizer = wx.BoxSizer(wx.HORIZONTAL) self.adv_dirYesRB = wx.RadioButton(self, -1, 'Yes', style=wx.RB_GROUP) self.adv_dirNoRB = wx.RadioButton(self, -1, 'No') self.adv_dirUnknownRB = wx.RadioButton(self, -1, 'Unknown') self.adv_dirYesRB.SetFont(Font2) relationshipSizer.Add(self.adv_dirYesRB) self.adv_dirNoRB.SetFont(Font2) relationshipSizer.Add(self.adv_dirNoRB) self.adv_dirUnknownRB.SetFont(Font2) relationshipSizer.Add(self.adv_dirUnknownRB) self.proxyBox = wx.CheckBox(self, -1, "Contact is healthcare proxy.") self.proxyBox.SetFont(Font2) relationshipSizer.Add((35, -1)) relationshipSizer.Add(self.proxyBox) demo4sizer.Add(relationshipSizer, 0, wx.EXPAND) guarNameLabel = wx.StaticText(self, -1, 'First, Last Name') guarNameLabel.SetFont(Font2) demo4sizer.Add(guarNameLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) guarnamesizer = wx.BoxSizer(wx.HORIZONTAL) guarnamesizer.Add(self.textctrl['Guarantor First'], 1, wx.RIGHT, 5) guarnamesizer.Add(self.textctrl['Guarantor Last'], 1, wx.EXPAND) self.textctrl['Guarantor Last'].Bind(wx.EVT_KILL_FOCUS, self.OnGuarKillFocus) demo4sizer.Add(guarnamesizer, 0, wx.EXPAND) gAddrLabel = wx.StaticText(self, -1, 'Address') gAddrLabel.SetFont(Font2) demo4sizer.Add(gAddrLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) demo4sizer.Add(self.textctrl['Guarantor Address'], 0, wx.EXPAND) gCityLabel = wx.StaticText(self, -1, 'City State Zip Phone') gCityLabel.SetFont(Font2) demo4sizer.Add(gCityLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) guarcstsizer = wx.BoxSizer(wx.HORIZONTAL) guarcstsizer.Add(self.textctrl['Guarantor City'], 3) guarcstsizer.Add(self.textctrl['Guarantor State'], 1, wx.LEFT|wx.RIGHT, 5) guarcstsizer.Add(self.textctrl['Guarantor Zip'], 2, wx.RIGHT, 5) guarcstsizer.Add(self.textctrl['Guarantor Phone'], 4, wx.EXPAND) demo4sizer.Add(guarcstsizer, 0, wx.EXPAND) #Other Info (mainly added for NCQA purposes) demo5sizer.Add(wx.StaticText(self, -1, ' ')) #no label needed, spacing only marriedSizer = wx.BoxSizer(wx.HORIZONTAL) self.marriedBox = wx.CheckBox(self, -1, "Married?") self.marriedBox.SetFont(Font2) marriedSizer.Add(self.marriedBox) self.inactiveBox = wx.CheckBox(self, -1, "Inactive Patient") self.inactiveBox.SetFont(Font2) marriedSizer.Add(self.inactiveBox) demo5sizer.Add(marriedSizer, 0, wx.EXPAND) languageLabel = wx.StaticText(self, -1, 'Language, PCP') languageLabel.SetFont(Font2) demo5sizer.Add(languageLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) languageSizer = wx.BoxSizer(wx.HORIZONTAL) languageSizer.Add(self.textctrl['Primary Language'], 1, wx.RIGHT, 5) languageSizer.Add(self.textctrl['PCP'], 1, wx.EXPAND) demo5sizer.Add(languageSizer, 0, wx.EXPAND) raceLabel = wx.StaticText(self, -1, 'Race') raceLabel.SetFont(Font2) demo5sizer.Add(raceLabel, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) demo5sizer.Add(self.textctrl['Race'], 0, wx.EXPAND) box = wx.StaticBox(self, -1, 'Patient') box2 = wx.StaticBox(self, -1, 'Insured') box3 = wx.StaticBox(self, -1, 'Insurance Information') box4 = wx.StaticBox(self, -1, 'Contact') box5 = wx.StaticBox(self, -1, 'Other Info') box.SetFont(font1) box2.SetFont(font1) box3.SetFont(font1) box4.SetFont(font1) box5.SetFont(font1) boxsizer = wx.StaticBoxSizer(box, wx.HORIZONTAL) box2sizer = wx.StaticBoxSizer(box2, wx.HORIZONTAL) box3sizer = wx.StaticBoxSizer(box3, wx.HORIZONTAL) box4sizer = wx.StaticBoxSizer(box4, wx.HORIZONTAL) box5sizer = wx.StaticBoxSizer(box5, wx.HORIZONTAL) boxsizer.Add(demosizer, 1, wx.EXPAND|wx.TOP|wx.BOTTOM, 25) box2sizer.Add(demo2sizer, 1, wx.EXPAND|wx.TOP|wx.BOTTOM, 25) box3sizer.Add(demo3sizer, 1, wx.EXPAND|wx.TOP|wx.BOTTOM, 25) box4sizer.Add(demo4sizer, 1, wx.EXPAND|wx.TOP|wx.BOTTOM, 25) box5sizer.Add(demo5sizer, 1, wx.EXPAND|wx.TOP|wx.BOTTOM, 25) leftsizer = wx.BoxSizer(wx.VERTICAL) leftsizer.Add(boxsizer, 0, wx.EXPAND|wx.BOTTOM, 10) leftsizer.Add(box3sizer, 0, wx.EXPAND) addPtBtn = EMR_utilities.buildOneButton(self, self, "Add New Patient", self.OnAddPt) buttonSizer = wx.BoxSizer(wx.HORIZONTAL) leftsizer.Add((-1, 25)) buttonSizer.Add(addPtBtn, 0) rightsizer = wx.BoxSizer(wx.VERTICAL) rightsizer.Add(box2sizer, 0, wx.EXPAND|wx.BOTTOM, 10) rightsizer.Add(box4sizer, 0, wx.EXPAND|wx.BOTTOM, 10) rightsizer.Add(box5sizer, 0, wx.EXPAND) if ptID == None: pass else: results = EMR_utilities.getDictData('SELECT * FROM demographics WHERE patient_ID = %s;' % (ptID)) for label, size, field in self.labels: self.textctrl[label].SetValue(str(results[field])) self.textctrl['Phone'].SetValue(EMR_formats.phone_format(self.textctrl['Phone'].GetValue())) self.textctrl['Ins Phone'].SetValue(EMR_formats.phone_format(self.textctrl['Ins Phone'].GetValue())) self.textctrl['Guarantor Phone'].SetValue(EMR_formats.phone_format(self.textctrl['Guarantor Phone'].GetValue())) self.insChoice.SetStringSelection(self.textctrl['Insurance Co'].GetValue()) if results['adv_dir'] == '1': self.adv_dirYesRB.SetValue(True) elif results['adv_dir'] == '2': self.adv_dirNoRB.SetValue(True) else: self.adv_dirUnknownRB.SetValue(True) if results['proxy'] == '1': self.proxyBox.SetValue(1) if results['marital_status'] == '1': self.marriedBox.SetValue(1) if results['inactive'] == '1': self.inactiveBox.SetValue(1) editPtBtn = EMR_utilities.buildOneButton(self, self, "Update Demographics", self.OnEditPt) scanBtn = EMR_utilities.buildOneButton(self, self, "Scan", self.OnScan) buttonSizer.Add(scanBtn, wx.ALL, 10) buttonSizer.Add(editPtBtn, 0) leftsizer.Add(buttonSizer, 0) mainsizer = wx.BoxSizer(wx.HORIZONTAL) mainsizer.Add(leftsizer, 0, wx.RIGHT, 10) mainsizer.Add(rightsizer, 0, wx.EXPAND) self.SetSizer(mainsizer)