{"id":1304,"date":"2011-01-02T21:26:04","date_gmt":"2011-01-03T03:26:04","guid":{"rendered":"http:\/\/bililite.nfshost.com\/blog\/?p=1304"},"modified":"2011-01-06T10:47:44","modified_gmt":"2011-01-06T16:47:44","slug":"better-asthma-care-through-technology","status":"publish","type":"post","link":"https:\/\/bililite.com\/blog\/2011\/01\/02\/better-asthma-care-through-technology\/","title":{"rendered":"Better Asthma Care through Technology"},"content":{"rendered":"<p>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&mdash;keeping us away from our patients and actually helping people. One such well-paved path is the <a href=\"http:\/\/www.abp.org\">American Board of Pediatrics<\/a> 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.<\/p>\r\n<p>One of the first things I tried to do when I started at the <a href=\"http:\/\/www.stlukes-stl.com\/services\/pediatric_care\/\">St. Lukes Pediatric Care Center<\/a> this fall was improve our asthma management and follow up, so my Quality Improvement project will be the Board's <a href=\"http:\/\/pim.abp.org\/asthma\/global\/demo.php\">Asthma Practice Improvement Module<\/a>. 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.<\/p>\r\n<h3>Asthma Management<\/h3>\r\n<p>Asthma is a <a href=\"http:\/\/www.cdc.gov\/nchs\/data\/hestat\/asthma\/asthma.htm\">growing problem in the US<\/a>, and the NIH has produced a huge (4 MB) <a href=\"http:\/\/www.nhlbi.nih.gov\/guidelines\/asthma\/asthgdln.htm\">report<\/a> on managing it, with lots of its own jargon. Basically it's a chronic disease that comes in attacks, which can either be <em>in control<\/em>&mdash;only occasional symptoms&mdash;or <em>not in control<\/em>&mdash;frequent symptoms. Either way, attacks are treated with <em>rescue medicines<\/em>, usually an inhaler that relaxes the muscles in the lungs. If your asthma is in control without any other medicines, then you have <em>intermittent<\/em> asthma. If not, you have <em>persistent<\/em> asthma and need <em>control medicines<\/em> to take every day to prevent attacks. The report further divides persistent asthma into grades of severity, but <a href=\"http:\/\/www.ncbi.nlm.nih.gov\/pubmed\/14665495\">judging severity<\/a> <a href=\"http:\/\/www.ncbi.nlm.nih.gov\/pubmed\/17994399\">is inconsistent<\/a> and largely irrelevant: if your control medicines keep you in control, good; if not, do something more.<\/p>\r\n<!--more-->\r\n<p>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 <a href=\"http:\/\/www.cdc.gov\/asthma\/actionplan.html\">Asthma Action Plan<\/a>. Your condition is classified as <em>green zone<\/em>&mdash;no symptoms&mdash;<em>yellow zone<\/em>&mdash;some symptoms but you can manage them at home&mdash;or <em>red zone<\/em>&mdash;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 <a href=\"http:\/\/www.aaaai.org\/patients\/publicedmat\/tips\/whatispeakflowmeter.stm\">peak flow meter<\/a>, a device that measures how fast you can exhale and <a href=\"http:\/\/www.amazon.com\/gp\/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref_%3Dnb_sb_noss%26tag%3Dbililite20-com%26y%3D0%26field-keywords%3Dpeak%2520flow%2520meter%26url%3Dsearch-alias%253Dhpc&tag=bililitecom-20&linkCode=ur2&camp=1789&creative=390957\">costs $10-$20<\/a><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.assoc-amazon.com\/e\/ir?t=bililitecom-20&l=ur2&o=1\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" \/>. Ideal peak flow <a href=\"http:\/\/www.ncbi.nlm.nih.gov\/pubmed\/479997\">is dependent on lung size and height<\/a>.<\/p>\r\n<h3>The Plan<\/h3>\r\n<p>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, <a href=\"#management\">feel free to skip the programming mumbo-jumbo<\/a>.<\/p>\r\n<h3>Enter the Programmer<\/h3>\r\n<p>All this cries out for some automation, so I created an <a href=\"\/blog\/blogfiles\/Asthma%20Action%20Plan-SLPCC.dot\">Asthma Action Plan<\/a> and a set of Visual Basic routines to keep track of all this:<\/p>\r\n<p><a href=\"\/blog\/blogfiles\/Asthma%20Action%20Plan-SLPCC.dot\"><img decoding=\"async\" src=\"\/blog\/blogfiles\/AAP.PNG\" alt=\"Asthma Action Plan\" \/><\/a><\/p>\r\n<p>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 (<code>ThisDocument<\/code>) and the actual text is in <code>ActiveDocument<\/code>.<\/p>\r\n<p>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:<\/p>\r\n<p><img decoding=\"async\" src=\"\/blog\/blogfiles\/aapbar.PNG\" alt=\"Asthma Action Plan Toolbar\" \/><\/p>\r\n<h3>Macros and Custom Document Properties<\/h3>\r\n<p>The key to the interaction between VBA macros and the document is custom document properties in both the <a href=\"http:\/\/office.microsoft.com\/en-us\/word-help\/field-codes-docproperty-field-HP005186145.aspx\">document<\/a> and the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/dhxe2d75%28v=VS.100%29.aspx\">script<\/a>. 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:<\/p>\r\n<pre><code class=\"language-vb\">\r\nPublic bar As CommandBar\r\nPublic boxSex As CommandBarComboBox\r\n\r\nSub initialize()\r\n    addProperty \"Sex\", msoPropertyTypeString, \"Male\"\r\n    CustomizationContext = ActiveDocument\r\n    Set bar = CommandBars.Add(\"CustomBar\", msoBarTop, False, True)\r\n    Set ThisDocument.boxSex = bar.Controls.Add(msoControlDropdown)\r\n    With ThisDocument.boxSex\r\n        .Width = 90 ' found by trial and error. VB needs a function that calculates this!\r\n        .Caption = \"Sex: \"\r\n        .Style = msoComboLabel\r\n        .BeginGroup = True\r\n        .AddItem \"Male\"\r\n        .AddItem \"Female\"\r\n        .ListIndex = 1\r\n        .TooltipText = \"Choose the patient's sex\"\r\n        .OnAction = \"setSex\"\r\n    End With\r\n    bar.Visible = True\r\nEnd Sub\r\n\r\nFunction addProperty(theName As String, theType As MsoDocProperties, theValue As Variant) As DocumentProperty\r\n    ' DocumentProperties has no Exists method, so we have to do it by hand\r\n    For Each addProperty In ActiveDocument.CustomDocumentProperties\r\n        If addProperty.Name = theName Then\r\n            addProperty.Value = theValue\r\n            Exit Function\r\n        End If\r\n    Next addProperty\r\n    Set addProperty = ActiveDocument.CustomDocumentProperties.Add(theName, False, theType, theValue)\r\nEnd Function\r\n\r\nSub setSex()\r\n    ActiveDocument.CustomDocumentProperties(\"Sex\").Value = ThisDocument.boxSex.Text\r\n    updateFields ' reflect changes into the text\r\nEnd Sub\r\n\r\nSub updateFields()\r\n    Dim r As Range\r\n    For Each r In ActiveDocument.StoryRanges\r\n        r.Fields.Update\r\n        Do Until r.NextStoryRange Is Nothing\r\n            Set r = r.NextStoryRange\r\n            r.Fields.Update\r\n        Loop\r\n    Next r\r\nEnd Sub\r\n<\/code><\/pre>\r\n<p>And in the document itself: (note that the <strong>{}<\/strong> brackets are <em>not<\/em> typed brackets; they are inserted with control-F9):<\/p>\r\n<pre><code>Your child should check <strong>{<\/strong>If <strong>{<\/strong>DocProperty sex<strong>}<\/strong> = Female her his<strong>}<\/strong> peak flow twice a day\r\n<\/code><\/pre>\r\n<p>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 <a href=\"http:\/\/office.microsoft.com\/en-us\/word-help\/field-codes-macrobutton-field-HP005186171.aspx\"><code>MacroButton<\/code> field<\/a> displays its second parameter as un-editable text, and using a non-existent macro name means nothing happens when its clicked except selecting it:<\/p>\r\n<pre><code>Use rescue medicine: <strong>{<\/strong>MacroButton NoMacro ______________________<strong>}<\/strong><\/code><\/pre>\r\n<h3>Calculating Ideal Peak Flow<\/h3>\r\n<p>The <a href=\"\/webservices\/pf\">peak flow zones<\/a> are green: &gt;80% maximum; yellow: 50-80% maximum; red: &lt;50% maximum, where the maximum peak flow is ideally the patient's own peak flow when completely healthy, but <a href=\"http:\/\/www.ncbi.nlm.nih.gov\/pubmed\/479997\">it can be estimated from patient height<\/a>:<\/p>\r\n<pre><code class=\"language-vb\">Function sngLookupPredictedPeakFlow(sngHeight As Single) As Single\r\n' based on the regression formulas for African-American children and adolescents (based on the St. Luke's predominant ethnic mix)\r\n' from Hsu et al. (1979)J Peds 95:14\r\n    Select Case ActiveDocument.CustomDocumentProperties(\"Sex\").Value\r\n        Case \"Male\", \"male\", \"M\", \"m\"\r\n            sngLookupPredictedPeakFlow = 0.000174 * sngHeight ^ 2.92\r\n        Case \"Female\", \"female\", \"F\", \"f\"\r\n            sngLookupPredictedPeakFlow = 0.000551 * sngHeight ^ 2.68\r\n    End Select\r\nEnd Function\r\n<\/code><\/pre>\r\n<p>Parameters for other ethnicities are available from the <a href=\"\/webservices\/pf.csv\">bililite webservices<\/a>.<\/p>\r\n<h3>Scheduling followup: Adding Appointments to Outlook<\/h3>\r\n<p>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:<\/p>\r\n<pre><code class=\"language-vb\">Public boxPt As CommandBarComboBox\r\nPublic btnAppt As CommandBarButton\r\nPublic boxMonths As CommandBarComboBox\r\nSub initialize()\r\n ...Rest of routine\r\n    Set ThisDocument.btnAppt = bar.Controls.Add(msoControlButton)\r\n    With ThisDocument.btnAppt\r\n        .Caption = \"Follow up appointment\"\r\n        .FaceId = 1106 ' Calendar\r\n        .BeginGroup = True\r\n        .OnAction = \"doFollowup\"\r\n    End With\r\n    bar.Visible = True\r\n    \r\n    Set ThisDocument.boxMonths = bar.Controls.Add(msoControlDropdown)\r\n    With ThisDocument.boxMonths\r\n        .Width = 80 ' found by trial and error. VB needs a function that calculates this!\r\n        .Caption = \"Months: \"\r\n        .Style = msoComboLabel\r\n    End With\r\n    Dim i As Integer\r\n    For i = 1 To 12\r\n        ThisDocument.boxMonths.AddItem i\r\n    Next i\r\n    ThisDocument.boxMonths.ListIndex = 1\r\n...Rest of routine\r\nEnd Sub\r\n\r\nSub doFollowup()\r\n    Dim outlook\r\n    Set outlook = CreateObject(\"Outlook.Application\")\r\n    Dim appt\r\n    Set appt = outlook.CreateItem(1) ' new appointment\r\n    ' My scheduling program tends to create all-capitalized names, LAST,FIRST, with no space after the comma\r\n    ' the Replace and StrConv makes it better. Ideally I'd correct it to FIRST LAST, but this works\r\n    appt.Subject = StrConv(Replace(ThisDocument.boxPt.Text, \",\", \", \"), vbProperCase) \r\n    appt.Start = FormatDateTime(Date + ThisDocument.boxMonths.ListIndex * 30, vbShortDate) & \" 9:00 AM\" ' so many months from now\r\n    appt.Duration = 1\r\n    appt.Body = \"Asthma management follow up\"\r\n    appt.AllDayEvent = True\r\n    appt.ReminderSet = True\r\n    appt.ReminderMinutesBeforeStart = 7 * 24 * 60 ' one week in minutes\r\n    appt.Save\r\nEnd Sub\r\n<\/code><\/pre>\r\n<h3 id=\"management\">Data Collection<\/h3>\r\n<p>(If you're just reading for the programming side, stop now. The rest is all medical)<\/p>\r\n<p>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 <a href=\"https:\/\/www.abp.org\/abpwebsite\/moc\/performanceinpractice\/approvedq1projects\/asthmafaq.pdf\">according to the Board<\/a> 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.<\/p>\r\n<p><a href=\"\/blog\/blogfiles\/Asthma%20Management.pdf\"><img decoding=\"async\" src=\"\/blog\/blogfiles\/asthma%20management.PNG\" alt=\"Asthma Management Form\" \/><\/a><\/p>\r\n<p>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.<\/p>\r\n<p>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).<\/p>\r\n<p>The steps for control medicines are (see <a href=\"http:\/\/www.nhlbi.nih.gov\/guidelines\/asthma\/asthgdln.htm\">the report<\/a> for details on medications and doses):<\/p>\r\n<ol>\r\n<li>No control medications<\/li>\r\n<li>Low-dose inhaled corticosteroid<\/li>\r\n<li>Medium-dose inhaled corticosteroid (may have to change this based on <a href=\"http:\/\/pediatrics.aappublications.org\/cgi\/content\/abstract\/127\/1\/129\">Zhang et al (2011) Pediatrics 127:129-138<\/a>)<\/li>\r\n<li>Medium-dose inhaled corticosteroid plus oral leukotriene inhibitor<\/li>\r\n<li>Medium-dose inhaled corticosteroid with long-acting bronchodilator plus oral leukotriene inhibitor<\/li>\r\n<li>High-dose inhaled corticosteroid with long-acting bronchodilator plus oral leukotriene inhibitor and refer to pulmonologist<\/li>\r\n<\/ol>\r\n<p>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.<\/p>\r\n<p>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.<p>\r\n<h3>Future directions<\/h3>\r\n<p>Things I'd still like to be able to do:<\/p>\r\n<ul>\r\n<li>Track flu vaccine status and issue reminders. Perhaps our upcoming EMR will help.<\/li>\r\n<li>Do better with peak flow monitoring and even real spirometery (we have a spirometer in the closet that no one is using right now).<\/li>\r\n<li>Get the whole practice on board so the patients have good follow up even if they're seeing different doctors.<\/li>\r\n<\/ul>\r\n<p>But for now, this seems like enough.<\/li>","protected":false},"excerpt":{"rendered":"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&mdash;keeping us away from our patients and actually helping people. One such well-paved path is the [&hellip;]","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,8],"tags":[],"_links":{"self":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts\/1304"}],"collection":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/comments?post=1304"}],"version-history":[{"count":50,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts\/1304\/revisions"}],"predecessor-version":[{"id":1458,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts\/1304\/revisions\/1458"}],"wp:attachment":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/media?parent=1304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/categories?post=1304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/tags?post=1304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}