예제 #1
0
    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()
예제 #2
0
    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()
예제 #3
0
    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)
예제 #4
0
    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()
예제 #5
0
    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)
예제 #6
0
    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)