Part of the drudgery of medicine is all the certification and paperwork, and the petty bureaucrats who need to constantly justify their existence by creating new rules. All the rules are well-intentioned, but taken together pave the road to hell—keeping us away from our patients and actually helping people. One such well-paved path is the American Board of Pediatrics which, over the past 20 years, turned board certification from "Take a test" to "Take a test at home every 7 years" to "Take a closed-book test in a secure environment because we can't trust you, every 7 years" to "Take a secured test every 7 years, keep your medical license (even losing it for not paying taxes means you lose your certification), do Board-approved CME, get patient-satisfaction surveys, and do Board-approved quality improvement projects, every 5 years." There's no reason to believe any of this makes me a better doctor but without it, what's the Board for? But enough griping, I may write about this more later.
One of the first things I tried to do when I started at the St. Lukes Pediatric Care Center this fall was improve our asthma management and follow up, so my Quality Improvement project will be the Board's Asthma Practice Improvement Module. It's no different from what I'm doing anyway, with the added fun of filling out data forms online for the Board to adjudicate.
Asthma Management
Asthma is a growing problem in the US, and the NIH has produced a huge (4 MB) report on managing it, with lots of its own jargon. Basically it's a chronic disease that comes in attacks, which can either be in control—only occasional symptoms—or not in control—frequent symptoms. Either way, attacks are treated with rescue medicines, usually an inhaler that relaxes the muscles in the lungs. If your asthma is in control without any other medicines, then you have intermittent asthma. If not, you have persistent asthma and need control medicines to take every day to prevent attacks. The report further divides persistent asthma into grades of severity, but judging severity is inconsistent and largely irrelevant: if your control medicines keep you in control, good; if not, do something more.
Classifying control is a long-term measure, 3 to 6 months. Every patient needs to know what to do for an attack, which means having an Asthma Action Plan. Your condition is classified as green zone—no symptoms—yellow zone—some symptoms but you can manage them at home—or red zone—see a doctor or get to the emergency room. You can often judge how bad your asthma is doing by how you feel; chest tightness, wheezing and coughing are all symptoms of asthma, but the best measure is how obstructed your breathing is. Measuring that uses a peak flow meter, a device that measures how fast you can exhale and costs $10-$20. Ideal peak flow is dependent on lung size and height.
The Plan
If I'm going to implement any quality improvement program, I need to document what I'm planning on doing, and have some way to measure results, so this blog post is going to be a long one. If you are reading this for the medical management side, feel free to skip the programming mumbo-jumbo.
Enter the Programmer
All this cries out for some automation, so I created an Asthma Action Plan and a set of Visual Basic routines to keep track of all this:
The file is a template (.dot) file, so each time it opens a new document is created. This makes VBA a bit more complicated, since variables are associated with the template (ThisDocument
) and the actual text is in ActiveDocument
.
The office still runs on Microsoft Office 2000, so I'm not sure how it will work with a modern version. It creates a custom toolbar to fill in the data:
Macros and Custom Document Properties
The key to the interaction between VBA macros and the document is custom document properties in both the document and the script. For instance, one cute aspect of the document is that you can change the gender of the instructions, "his" or "hers" rather than "your child's" or "his/hers" or some such. The sex is set with code like:
Public bar As CommandBar
Public boxSex As CommandBarComboBox
Sub initialize()
addProperty "Sex", msoPropertyTypeString, "Male"
CustomizationContext = ActiveDocument
Set bar = CommandBars.Add("CustomBar", msoBarTop, False, True)
Set ThisDocument.boxSex = bar.Controls.Add(msoControlDropdown)
With ThisDocument.boxSex
.Width = 90 ' found by trial and error. VB needs a function that calculates this!
.Caption = "Sex: "
.Style = msoComboLabel
.BeginGroup = True
.AddItem "Male"
.AddItem "Female"
.ListIndex = 1
.TooltipText = "Choose the patient's sex"
.OnAction = "setSex"
End With
bar.Visible = True
End Sub
Function addProperty(theName As String, theType As MsoDocProperties, theValue As Variant) As DocumentProperty
' DocumentProperties has no Exists method, so we have to do it by hand
For Each addProperty In ActiveDocument.CustomDocumentProperties
If addProperty.Name = theName Then
addProperty.Value = theValue
Exit Function
End If
Next addProperty
Set addProperty = ActiveDocument.CustomDocumentProperties.Add(theName, False, theType, theValue)
End Function
Sub setSex()
ActiveDocument.CustomDocumentProperties("Sex").Value = ThisDocument.boxSex.Text
updateFields ' reflect changes into the text
End Sub
Sub updateFields()
Dim r As Range
For Each r In ActiveDocument.StoryRanges
r.Fields.Update
Do Until r.NextStoryRange Is Nothing
Set r = r.NextStoryRange
r.Fields.Update
Loop
Next r
End Sub
And in the document itself: (note that the {} brackets are not typed brackets; they are inserted with control-F9):
Your child should check {If {DocProperty sex} = Female her his} peak flow twice a day
Fill-in-the blanks that are selected with a single click so they can be over-written are created with a clever hack from Microsoft's own fax templates. The MacroButton
field displays its second parameter as un-editable text, and using a non-existent macro name means nothing happens when its clicked except selecting it:
Use rescue medicine: {MacroButton NoMacro ______________________}
Calculating Ideal Peak Flow
The peak flow zones are green: >80% maximum; yellow: 50-80% maximum; red: <50% maximum, where the maximum peak flow is ideally the patient's own peak flow when completely healthy, but it can be estimated from patient height:
Function sngLookupPredictedPeakFlow(sngHeight As Single) As Single
' based on the regression formulas for African-American children and adolescents (based on the St. Luke's predominant ethnic mix)
' from Hsu et al. (1979)J Peds 95:14
Select Case ActiveDocument.CustomDocumentProperties("Sex").Value
Case "Male", "male", "M", "m"
sngLookupPredictedPeakFlow = 0.000174 * sngHeight ^ 2.92
Case "Female", "female", "F", "f"
sngLookupPredictedPeakFlow = 0.000551 * sngHeight ^ 2.68
End Select
End Function
Parameters for other ethnicities are available from the bililite webservices.
Scheduling followup: Adding Appointments to Outlook
The key to managing a chronic illness is followup: seeing what happens with each intervention and deciding if it was enough, too little or too much. If I've made any changes, I like to see the patient back in one month, and if everything is stable, every six months. I add a reminder to my Outlook calendar to send a letter:
Public boxPt As CommandBarComboBox
Public btnAppt As CommandBarButton
Public boxMonths As CommandBarComboBox
Sub initialize()
...Rest of routine
Set ThisDocument.btnAppt = bar.Controls.Add(msoControlButton)
With ThisDocument.btnAppt
.Caption = "Follow up appointment"
.FaceId = 1106 ' Calendar
.BeginGroup = True
.OnAction = "doFollowup"
End With
bar.Visible = True
Set ThisDocument.boxMonths = bar.Controls.Add(msoControlDropdown)
With ThisDocument.boxMonths
.Width = 80 ' found by trial and error. VB needs a function that calculates this!
.Caption = "Months: "
.Style = msoComboLabel
End With
Dim i As Integer
For i = 1 To 12
ThisDocument.boxMonths.AddItem i
Next i
ThisDocument.boxMonths.ListIndex = 1
...Rest of routine
End Sub
Sub doFollowup()
Dim outlook
Set outlook = CreateObject("Outlook.Application")
Dim appt
Set appt = outlook.CreateItem(1) ' new appointment
' My scheduling program tends to create all-capitalized names, LAST,FIRST, with no space after the comma
' the Replace and StrConv makes it better. Ideally I'd correct it to FIRST LAST, but this works
appt.Subject = StrConv(Replace(ThisDocument.boxPt.Text, ",", ", "), vbProperCase)
appt.Start = FormatDateTime(Date + ThisDocument.boxMonths.ListIndex * 30, vbShortDate) & " 9:00 AM" ' so many months from now
appt.Duration = 1
appt.Body = "Asthma management follow up"
appt.AllDayEvent = True
appt.ReminderSet = True
appt.ReminderMinutesBeforeStart = 7 * 24 * 60 ' one week in minutes
appt.Save
End Sub
Data Collection
(If you're just reading for the programming side, stop now. The rest is all medical)
The plan is to collect data on management (medications and guidance) on every patient with a diagnosis of asthma, and to diagnose asthma in anyone over the age of 4 with a history of 4 or more episodes of respiratory symptoms responsive to bronchodilators since the age of 1 (without any other diagnosis). The data collection form is a hybrid of the data that the Board wants and the things I think are important. It is designed to be a part of the patient's chart, and according to the Board does not need informed consent or Institutional Review Board approval since it is part of routine patient care and none of the data is identified when entered.
The data form is mostly information requested by the Board program; from my point of view I want to know what medicines (rescue and control) the patient is on, and how good their asthma control is. Most of my patients have never heard these terms before and can't remember their meds, so a lot of education happens here. If the patient is out of control, then we move up a step in control meds. If the patient has been in control for at least six months and the parent is comfortable with stepping back, we go down a step. If we've made any changes in medications, I want to see the patient back in 1 month. Otherwise, I'll see them back in six months.
Everyone gets their asthma action plan reviewed, and a demonstration of using inhalers and spacers correctly. Patients with persistent asthma who have had an asthma action plan for at least a year are introduced to the peak flow meter (I think there's too much other information to assimilate on the first visits).
The steps for control medicines are (see the report for details on medications and doses):
- No control medications
- Low-dose inhaled corticosteroid
- Medium-dose inhaled corticosteroid (may have to change this based on Zhang et al (2011) Pediatrics 127:129-138)
- Medium-dose inhaled corticosteroid plus oral leukotriene inhibitor
- Medium-dose inhaled corticosteroid with long-acting bronchodilator plus oral leukotriene inhibitor
- High-dose inhaled corticosteroid with long-acting bronchodilator plus oral leukotriene inhibitor and refer to pulmonologist
For the purpose of the quality improvement program, I'll collect the data in 3 successive 6-month series, with the hypothesis that average control will improve as these changes are implemented.
I think this represents a do-able program that should not take much more time than I would otherwise be using for asthma education, and certainly billing and getting paid will be easier with adequate documentation.
Future directions
Things I'd still like to be able to do:
- Track flu vaccine status and issue reminders. Perhaps our upcoming EMR will help.
- Do better with peak flow monitoring and even real spirometery (we have a spirometer in the closet that no one is using right now).
- Get the whole practice on board so the patients have good follow up even if they're seeing different doctors.
But for now, this seems like enough.
Leave a Reply