Click here to Skip to main content
Full site     10M members (43.7K online)    

Real time detection of medication interaction using VB.NET

Introduction 

Drug–drug interaction (DDI) is defined as a change in the clinical effect of a given drug because of  the interference  of another drug. Drug Interactions can occur between drugs, between drugs and food, herbs or supplements. They can be classified into three types: pharmacokinetic, pharmacodynamic and pharmaceutical. (Scripture CD, 2006)

Drug interactions present a profound and a serious problem especially with the emergence of newer agents every day which makes it harder to manage optimum prescribing and dispensing of combination therapies. It also presents an opportunity, but a challenging arena, for pharmacists to employ their knowledge of drug mechanisms and interactions for the welfare of patients.

Drug–drug interactions (DDI) can be the cause of treatment failure or side effects. The resulting adverse drug reactions (ADR) are major causes of mortality and morbidity. One of the leading causes of death in hospitalized patients is fatal ADRs. (J. Lazarou, 1998) Five to 6.5 % of hospitalizations are caused by ADRs, of these 2.5-4% are due to DDIs. (L. Guedon-Moreau, 2003). In the general population 20 to 30% of the ADRs are caused by DDIs. (Kohler GI, 2000)

It is very hard for physicians and pharmacists to remember and understand all DDIs and the situation is even worse in large specialized practices where the healthcare team is more focused on the specialty used medication with less knowledge about the medications used in other specialties and their associated interactions and
precautions.

In diseases like cancer, a multidisciplinary treatment approach is adapted to meet the patients’ complex needs. The risk for DDIs, in this case, is even higher than in the general settings due to the fact of concomitant administration of multiple drugs. The literature confirms this high prevalence which leads to considerable adverse events. (Kohler GI, 2000) In fact 4% of cancer related deaths are drug related. (Buajordet I, 2001) A literature review of drug interaction in oncology settings revealed that, depending on the type of study population, the frequency of potential DDIs varied from 12% to 63%. (Riechelmann RP, 2009)

The seriousness of DDIs consequences was the driving force for the available drug interactions checking software which pharmacists and physicians rely on worldwide. In spite of the fact that most of these softwares works nicely, their integration with open-source or in-house built computerized physician order entry (CPOE) was not feasible. This made us think of building a customizable DDI checker which can be easily updated and tuned to avoid "alert fatigue" which is main complaint of most of the clinical decision support systems users.

Using the code

Using the application involves two simple steps: Step (1) is to fill the array "DrugList" sequentially with the prescribed drugs, and, Step (2) which compares item combinations in the array against the reference table "Interactions". The array that will store the selected medications is defined first. 

Imports System.IO
Imports System.Web.Hosting
Partial Class _Default
    Inherits System.Web.UI.Page
    ' Define a new array "druglist"
    Dim drugList As New ArrayList  

The search box consumes an auto-complete function that "find-as-you-type" in the medication database. In this application, medication names are stored in a text file stored at the application root. The data can also be stored in MS Excel,  MS Access, XML file or SQL database. 

 

Once the medication is selected and the user click "add to List", the array "druglist" will carry one more medication and the array become stored in the session "drugs". 

Protected Sub addbtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles addbtn.Click
'this code to avoid adding "" to the array
    If txtSearch.Text = "" Then
        Exit Sub
    End If

    ' this code to avoid adding medication names not stored in the database to the array

    Dim spath As String = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "drugs.txt")

    Dim Testdrugs() As String = File.ReadAllLines(spath, Encoding.Default)
    If Testdrugs.Contains(txtSearch.Text) Then
        GoTo 99
    Else

        Response.Write("not in built-in medication list")

        Exit Sub

    End If
 
99:
 
    'this code here to count the medication added to the array. this is of value
    'for the pharmacist to make sure all items in the presciption are added to the application
    If Label1.Text = "" Then Label1.Text = 0
    Label1.Text = Label1.Text + 1
    Dim myLabel As New Label
    myLabel.Text = txtSearch.Text
    PlaceHolder1.Controls.Add(myLabel)
    
    'with each click of the button "Add to List",
    'the array "druglist" (defined earlier) will carry
    'one more medication and stored in a session "drugs"
    drugList.Add(txtSearch.Text)
    Session("drugs") = drugList
    txtSearch.Text = ""
End Sub

After adding the prescribed medications one by one, the user interface look like the following:

The count of medications added to the array is of value for the pharmacist to make sure all items in the prescription are added to the application. After the medication selection is complete, the user click the button "Check", which then call the sub checkinteractions().

Protected Sub chkbtn_Click(ByVal sender As Object, _
                  ByVal e As System.EventArgs) Handles chkbtn.Click
    checkinteractions()
End Sub 

The sub checkinteractions() runs a dynamically created query on the table "Interactions" which contains the documented Drug-Drug Interactions. This table contains two fields for Medication Names "A" and "B". The Field "Grade" stores the severity of the interaction between "A" and "B" while the field "Summary" contains the mechanism of interaction. 

 

After running the query, there are two possibilities: If Interaction exists, then the sub "checkinteractions" will display the color coded warning according to the severity of the interaction. If no interaction exists, a custom message can be placed.  

Public Sub checkinteractions()
 
    Dim Item1, Item2 As String

    For Each a In drugList
        For Each b In drugList
            Item1 = a
            Item2 = b
            If Item1 <> Item2 Then
            'using this condition to avoid waste of resources
            'in comparing one drug against itself

                InteractionDs.SelectCommand = "SELECT [A], [B], [Grade], [Summary] FROM " & _ 
                   "[Interactions] WHERE [A]='" + a + "' and [B]='" + b + "';"
                InteractionDs.DataBind()
                Dim mygrid As New GridView
                mygrid.DataSource = InteractionDs
                mygrid.DataBind()
    
                'if drug-drug interaction exist, display the warning according to severity of interaction 
                Try
                    If mygrid.Rows.Count > 0 Then
                    ' if the row count is > 0, this means that an interaction
                    ' exists between the medication "A" and medication "B"
                        Dim alertlbl As New Label
                        alertlbl.Text = mygrid.Rows(0).Cells(0).Text.ToString + _
                          " interacts with " + mygrid.Rows(0).Cells(1).Text.ToString + _
                          "  -- degree of interaction is -- " + mygrid.Rows(0).Cells(2).Text.ToString
                        If mygrid.Rows(0).Cells(2).Text.ToString = "Serious - Use Alternative" Then
                            alertlbl.BackColor = Drawing.Color.Orange
                        ElseIf mygrid.Rows(0).Cells(2).Text.ToString = "Contraindicated" Then
                            alertlbl.BackColor = Drawing.Color.Pink
                        ElseIf mygrid.Rows(0).Cells(2).Text.ToString = "Significant - Monitor Closely" Then
                            alertlbl.BackColor = Drawing.Color.Yellow
                        End If
                        'add the colored warning label and the summary of interaction mechanism

                        alertlbl.Font.Bold = True
                        PlaceHolder1.Controls.Add(New LiteralControl("<br />"))
                        PlaceHolder1.Controls.Add(alertlbl)
                        PlaceHolder1.Controls.Add(New LiteralControl("<br />"))
                        Dim comments As New Label
                        comments.Font.Italic = True

                        comments.Text = mygrid.Rows(0).Cells(3).Text.ToString
                        PlaceHolder1.Controls.Add(comments)
                        PlaceHolder1.Controls.Add(New LiteralControl("<hr>"))

     
                    End If
                Catch ex As Exception
    
                End Try
            End If
         Next
    Next

End Sub 

The resulting Report of Drug-Drug interaction after submission of the prescribed medications list will look like this

The code described below is employed to clear the medication list and maintain the application throughout the page life-cycle.

Protected Sub clearbtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles clearbtn.Click
    'to start adding a new medication set in a new prescription, this code clears
    'the content in the array "druglist" and, consequently the stored session
    drugList.Clear()
    Session("drugs") = drugList
    Response.Redirect("default.aspx?")
End Sub 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'store the empty array "druglist" in the session "drugs"
    If Not IsPostBack Then
        Session("drugs") = drugList
    End If
End Sub
 
    
 
Protected Sub Page_PreInit(sender As Object, e As System.EventArgs) Handles Me.PreInit
    'retrieve the array from the session
    If IsPostBack Then
        Try
            'now the array "druglist" restores its content stored in the session "drugs"
            drugList = Session("drugs")
            For Each a In drugList
                ' each medication stored in the array will be displayed in a label
                Dim mylabel As New Label
                mylabel.Text = a & "<br/>"
                PlaceHolder1.Controls.Add(mylabel)
            Next
        Catch ex As Exception
        End Try
    End If
End Sub

References  

Disclaimer 

The interaction data used in this article is for demonstration purposes only. It might be inaccurate or outdated. The live application will use an accredited database from a reliable source, so please DO NOT use the data presented in this article as a reference for your clinical decision.

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search 
Per page   
GeneralMy vote of 5
Ranjan.D
8hrs 3mins ago 
GeneralRe: My vote of 5
Omneya Hassanain
4hrs 2mins ago 
GeneralMy vote of 5
VitorHugoGarcia
10 May '13 - 4:44 
GeneralRe: My vote of 5
Omneya Hassanain
11 May '13 - 10:32 
GeneralMy vote of 3
Member 10032143
8 May '13 - 17:40 
GeneralRe: My vote of 3
Omneya Hassanain
11 May '13 - 10:31 
GeneralMy vote of 5
R3dbrnu
8 May '13 - 2:07 
GeneralRe: My vote of 5
MohamedKamalPharm
8 May '13 - 3:46 

Last Updated 7 May 2013 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2013