Epic Empty Segments

Clovertech Forums Read Only Archives Cloverleaf Cloverleaf Epic Empty Segments

  • Creator
    Topic
  • #54795
    Matthew Taylor
    Participant

      We are in the implementation phase with Epic.  Epic creates multiple A08s with MSH only or MSH with empty EVNs PIDs PV1s for just about every ADT it triggers.  We get the fix in about 1.5 months.  How could i suppress these in the meantime?

    Viewing 14 reply threads
    • Author
      Replies
      • #83030
        Robert Milfajt
        Participant

          Write TCL proc that sit on inbound data TPS and KILLs messages that are missing some important required field, like MRN in PID (could be 2 or 3 depending on your Epic profile variable settings).  This would be most efficient processing-wise, and easiest to implement/remove.

          Hope this helps,

          Robert Milfajt
          Northwestern Medicine
          Chicago, IL

        • #83031
          James Cobane
          Participant

            Matthew,

            Just a question – What version of Epic are you on?  We never saw this type of issue.  We implemented version 2012 and have upgraded to 2014.  Just curious.

            Thanks

            Jim Cobane

            Henry Ford Health

          • #83032
            Matthew Taylor
            Participant

              James Cobane wrote:

              Matthew,

              Just a question – What version of Epic are you on?

            • #83033
              Matthew Taylor
              Participant

                Basically looking for a simple proc to get kill messages that come in looking like the below:

                MSH|^~&||KGH|||201508241127|ADTPA|ADT^A08|9200|T|2.3

                EVN

                PID

                PV1

                They are always A08s but not all A08s are like this  – some actually are correct.

              • #83034
                James Cobane
                Participant

                  Per Robert’s suggestion, you could simply KILL any message where PID 2 or 3 is null.  That would address the messages like the sample you provided.

                  Jim Cobane

                  Henry Ford Health

                • #83035
                  Jim Kosloskey
                  Participant

                    I think Matthew is looking for someone to provide an actual proc to do this.

                    Matthew I have a proc which does almost all of our filtering. It is moree than what you need right now but it will do what you want and can also filter any Cloverleaf definable message type (HL/7, X12, XML, FRL, VRL HRL, etc.) on virtually any field and is extensible as it has its own UPoC architecture.

                    The proc is argument driven so no need to modify the code.

                    I know others have similar procs for HL/7 specifically – hopefully someone will respond about one of those.

                    email: jim.kosloskey@jim-kosloskey.com 30+ years Cloverleaf, 60 years IT – old fart.

                  • #83036
                    Kevin Crist
                    Participant

                      Here is one that we have. You can change it to meet your needs fairly simply i believe. Im sure someone has a more streamlined way of doing it.

                      Code:


                      #########################################################################################
                      #########################################################################################
                      #########################################################################################
                      # Name: tpsKILL_InstGT1.tcl
                      # Purpose: This tps tclproc will KILL out any ADT’s that has an I in the GT1_10 field
                      #      
                      #
                      #
                      # UPoC type: tps
                      # Args: tps keyedlist containing the following keys:
                      #       MODE    run mode (”start”, “run” or “time”)
                      #       MSGID   message handle
                      #       ARGS    user-supplied arguments:
                      # 1) The user can specify if we are to echo to log
                      # The key is ECHOON
                      # ECHOON = YES -> put entry in engine log
                      # ECHOON = NO -> do not put entry in log (default value)
                      # ECHOON = anything else -> Default to NO
                      #
                      # Example arguments: {ECHOON YES}
                      #
                      #
                      # Returns: tps disposition list:
                      #          Continues the messages as is
                      # OR
                      # Errors the message
                      #
                      #
                      #
                      #
                      #########################################################################################
                      #########################################################################################
                      #########################################################################################

                      proc tpsKILL_InstGT1 { args } {

                      #########################################################################################
                      # Get the Connection/Proc Name for Error/Debug Messages (NOT USED)
                      #########################################################################################

                      # global HciConnName
                      # set myname “$HciConnName/[lindex [info level 1] 0]”
                      # set nowis [clock format [clock scan now] -format “%D – %T”]

                      #########################################################################################
                      # Initialize Variables Used
                      #########################################################################################

                      set dispList [list]   ;# Disposition List Returned to Engine

                      set fldSep “” ;# Field Seperator – get from MSH
                      set subSep “” ;# SubField Seperator – get from MSH
                      set repSep “” ;# Repeating Field Seperator – get from MSH

                      set GT1pos -1 ;# Position of GT1 Segment in msg
                      set GT1List [list] ;# GT1 Segment Fields in List Form

                             
                                 
                      set GT1Type 10 ;# Guarantor Type is in field 10            
                                 

                      #########################################################################################
                      # Load in the arguments we need that were passed from the caller
                      #########################################################################################

                      keylget args MODE mode             ;# The mode the engine called from
                      set echoon “NO” ;# Set to default Value
                      keylget args ARGS.ECHOON echoon ;# The Engine Log output indicator
                      set echoon [string toupper $echoon] ;# Use upper case in procedure

                      #########################################################################################
                      # Switch based on what mode the engine was in when it called the procedure
                      #########################################################################################

                       switch -exact — $mode {

                        start { }

                         run {
                          set mh [keylget args MSGID] ;# Get message handle from args
                           set dispList [list “CONTINUE $mh”] ;# Initialize to good message
                           set msg [msgget $mh] ;# Get a copy of the message

                           set fldSep [string index $msg 3] ;# Field Seperator
                           set subSep [string index $msg 4] ;# Sub-Field Seperator
                           set repSep [string index $msg 5] ;# Repeating Field Seperator

                      set segList [split $msg r] ;# Split message into segList

                      #########################################################################################
                      # Find Position of Segements –
                      #########################################################################################

                      set GT1pos [lsearch -regexp $segList {^GT1}]  

                      #########################################################################################
                      # Split up the Segments into Field Lists
                      #########################################################################################

                       set GT1List [split [lindex $segList $GT1pos] $fldSep]  

                      #########################################################################################
                      #
                      #########################################################################################

                      set gtType [lindex $GT1List $GT1Type]

                      #########################################################################################
                      # If the GT1-10 = I then KILL the message
                      # else
                      # CONTIUNE the message
                      #########################################################################################

                         if {[string equal $gtType I]} {

                      set dispList [list “KILL $mh”]
                       
                           
                         }  
                         
                      }

                         time { }
                         shutdown { }
                      } ;# End Switch

                      return $dispList

                      } ;# End Proc

                    • #83037
                      Russ Ross
                      Participant

                        I shared this post with our integration team and got a response back from one of our bridge certified team members.  

                        We recently went from Epic 2014 to Epic 2015 so I was concerned we would see the same problem and apparently we did but it was handled on the Epic side and I was unaware until now.

                        Here is the email I got back from one of our team members about this:

                        FYI. We have error setting in Bridges to log fatal error and suppress ADT messages with blank PID-3.  I do see many A08 messages with MSH segment only in our EPIC TST as well like a user said in the clovertech forum, but they are being all suppressed by the error setup.

                        Russ Ross
                        RussRoss318@gmail.com

                      • #83038
                        James Cobane
                        Participant

                          Thanks for the info.  This is something that we will keep in the back of our minds as we start planning for the 2015 upgrade.

                          Jim Cobane

                          Henry Ford Health

                        • #83039
                          Kevin Crist
                          Participant

                            same here. we start our new epic install next month.

                          • #83040
                            Matthew Taylor
                            Participant

                              Thanks to all for the help.

                              I have a new quick one?  New to everything cloverleaf…

                              If this is an ORU in the variant i am using

                              MSH

                              {

                              [

                              PID

                              [ PD1 ]

                              [{ NTE } ]

                              [

                              PV1

                              [ PV2 ]

                              ]

                              ]

                              {

                              [ ORC ]

                              OBR

                              [{ NTE } ]

                              {

                              [ OBX ]

                              [{ NTE } ]

                              }

                              [{ CTI } ]

                              }

                              }

                              [ DSC ]

                              I want to put a value in every obx-3 of =&GDT – i have tried it in the translate using iterate but i do not fully understand how it works esp when the group is repeating and what ‘basis’ to use.  I think if i get one good example/explanation i could go from there for the next one.  Any help would be appreciated.  Thanks.

                            • #83041
                              Jim Kosloskey
                              Participant

                                Matthew,

                                email me (my email address is in my signature) and I will assist.

                                email: jim.kosloskey@jim-kosloskey.com 30+ years Cloverleaf, 60 years IT – old fart.

                              • #83042
                                Keith McLeod
                                Participant

                                  Matthew,

                                  See the Help with Translate Topic.

                                • #83043
                                  Matthew Taylor
                                  Participant

                                    I have this working now.  Thanks Keith and Jim and all that replied with helpful ideas.

                                  • #83044
                                    Russ Ross
                                    Participant

                                      Turns out another team member ran across a case that does require a filter on Cloverleaf to get rid of messages with no MRN that still can come from EPIC 2015 despite configurations to prevent that from happening.

                                      Here is what that person sent me in an email about this:

                                      When Cerner receives a message without a MRN, it crashes their listener.

                                      Russ Ross
                                      RussRoss318@gmail.com

                                  Viewing 14 reply threads
                                  • The forum ‘Cloverleaf’ is closed to new topics and replies.