Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: GMRCIMSG

GMRCIMSG.m

Go to the documentation of this file.
  1. GMRCIMSG ;SLC/JFR - IFC MESSAGE HANDLING ROUTINE; 09/26/02 00:23 ; Oct 23, 2023@07:47:54
  1. ;;3.0;CONSULT/REQUEST TRACKING;**22,28,51,44,154,184,189**;DEC 27, 1997;Build 54
  1. ;
  1. ; Reference to EN^RMPRFC3 supported by #4661
  1. ; #2053 DIE, #4838 MAGDTR01, #2165 HLMA1, #10103 XLFDT, #2263 XPAR, #2171 XUAF4, #2541 XUPARAM
  1. ; Reference to SAVEHL7^EHMHL7 supported by ICR #7424
  1. ;
  1. Q ;don't start at the top
  1. IN ;process incoming message and save segments to ^TMP(
  1. K ^TMP("GMRCIF",$J)
  1. N GMRCCRNR,GMRCMSGD,GMRCMSGI,GMRCVALM,HLNODE,SEG,I,GMRCIER ;production code ;MKN GMRC*3*154 added GMRCCRNR, GMRCMSGI, GMRCVALM
  1. N GMRCI,TCH,TEXTIN,TEXTOUT,TEXTRM,GMRCFRM ;MKN GMRC*3*154
  1. S GMRCCRNR=0,GMRCMSGI="" ;MKN GMRC*3*154
  1. F I=1:1 X HLNEXT Q:HLQUIT'>0 D
  1. . I $P(HLNODE,"|",8)="CRNR" S GMRCCRNR=1 ;MKN GMRC*3*154
  1. . I $P(HLNODE,"|")="MSH" D
  1. .. S GMRCMSGD=$$HL7TFM^XLFDT($P(HLNODE,"|",7),"L"),GMRCMSGD=$$FMTE^XLFDT(GMRCMSGD,"P")
  1. .. S GMRCMSGI=$P(HLNODE,"|",10)_"^"_GMRCMSGD
  1. . I $P(HLNODE,"|")="ORC" D
  1. .. I $G(GMRCCRNR)=1 S ^TMP("GMRCIF",$J,"GMRCCRCR")=1,GMRCFRM=$P($P(HLNODE,"|",3),U,2),^TMP("GMRCIF",$J,"GMRCCRNR")=1_U_$P(GMRCFRM,U,1) ;WTC GMRC*3.0*184
  1. . I $P(HLNODE,"|")="OBX" D ;multiple segs for OBX
  1. .. ;MKN GMRC*3.0*154 start of mods
  1. .. I $P(HLNODE,"|",3)="TX" D Q
  1. ... D SETTCH
  1. ... S TEXTIN=$E(HLNODE,5,999),TEXTRM="",TEXTOUT=""
  1. ... D DECODE^GMRCHL7E(TEXTIN,.TCH,.TEXTOUT,TEXTRM)
  1. ... S ^TMP("GMRCIF",$J,"OBX",$P(HLNODE,"|",2),$P(HLNODE,"|",5))=TEXTOUT_TEXTRM
  1. .. ;MKN GMRC*3.0*154 end of mods
  1. .. S ^TMP("GMRCIF",$J,"OBX",$P(HLNODE,"|",2),$P(HLNODE,"|",5))=$E(HLNODE,5,999)
  1. . I $P(HLNODE,"|")="NTE" D ; may be multiple NTE's
  1. .. ;MKN GMRC*3.0*154 start of mods
  1. .. D SETTCH
  1. .. S TEXTIN=$E(HLNODE,5,999),TEXTRM="",TEXTOUT=""
  1. .. D DECODE^GMRCHL7E(TEXTIN,.TCH,.TEXTOUT,TEXTRM)
  1. .. S ^TMP("GMRCIF",$J,"NTE",$P(HLNODE,"|",2))=TEXTOUT
  1. .. ;S ^TMP("GMRCIF",$J,"NTE",$P(HLNODE,"|",2))=$E(HLNODE,5,999)
  1. .. ;MKN GMRC*3.0*154 end of mods
  1. . I "OBXNTE"'[$P(HLNODE,"|") D ;all other segs are single
  1. .. S ^TMP("GMRCIF",$J,$P(HLNODE,"|"))=$E(HLNODE,5,999)
  1. . Q
  1. ;
  1. S GMRCVALM=$$VALMSG(^TMP("GMRCIF",$J,"ORC"),GMRCCRNR) ; MKN GMRC*3.0*154
  1. I 'GMRCVALM,'GMRCCRNR D EX Q ;chk msg for valid cslt #'s ; MKN GMRC*3.0*154 added GMRCCRNR
  1. I 'GMRCVALM,GMRCCRNR D MGMSG^GMRCIAC2(101,GMRCMSGI),EX Q ; send app. ACK ;MKN GMRC*3*154 added GMRCCRNR and GMRCMSGI
  1. ;
  1. I $P(^TMP("GMRCIF",$J,"ORC"),"|")="NW" D D EX Q
  1. . I $P(^TMP("GMRCIF",$J,"ORC"),"|",2)["TST1234" D D EX Q ;testing impl
  1. .. D TST^GMRCIAC2($NA(^TMP("GMRCIF",$J)))
  1. . D NW^GMRCIACT($NA(^TMP("GMRCIF",$J)))
  1. I $P(^TMP("GMRCIF",$J,"ORC"),"|")="XO" D D EX Q
  1. . D RESUB^GMRCIAC1($NA(^TMP("GMRCIF",$J)),GMRCCRNR,GMRCMSGI) ; MKN GMRC*3.0*154 added GMRCCRNR and GMRCMSGI
  1. I $P(^TMP("GMRCIF",$J,"ORC"),"|")="XX" D D EX Q
  1. . D FWD^GMRCIAC1($NA(^TMP("GMRCIF",$J)),GMRCCRNR,GMRCMSGI) ; MKN GMRC*3.0*154 added GMRCCRNR and GMRCMSGI
  1. I $P(^TMP("GMRCIF",$J,"ORC"),"|")="RE" D D EX Q
  1. . I $P($G(^TMP("GMRCIF",$J,"OBX",4,1)),"|",11)="D" D Q
  1. .. D DIS^GMRCIACT($NA(^TMP("GMRCIF",$J)),GMRCCRNR,GMRCMSGI) ; dis-assoc. result ; MKN GMRC*3.0*154 added GMRCCRNR and GMRCMSGI
  1. . I $P($P(^TMP("GMRCIF",$J,"ORC"),"|",16),U)="S" D Q
  1. .. D SF^GMRCIAC1($NA(^TMP("GMRCIF",$J)),GMRCCRNR,GMRCMSGI) ; significant findings ; MKN GMRC*3.0*154 added GMRCCRNR and GMRCMSGI
  1. . D COMP^GMRCIAC1($NA(^TMP("GMRCIF",$J)),GMRCCRNR,GMRCMSGI) ; MKN GMRC*3.0*154 added GMRCCRNR and GMRCMSGI
  1. D OTHER^GMRCIACT($NA(^TMP("GMRCIF",$J)),GMRCCRNR,GMRCMSGI) ; MKN GMRC*3.0*154 added GMRCCRNR and GMRCMSGI
  1. D EX
  1. Q
  1. ;
  1. EX ; clean up
  1. ;
  1. ; If from Cerner, save HL7 message in file #1609. - P189
  1. ;
  1. I $G(GMRCCRNR) D SAVEHL7^EHMHL7("IFC","CERNER-"_$P($P($G(^TMP("GMRCIF",$J,"OBR")),"|",2),"^",2),"VISTA-"_$$STA^XUAF4($$KSP^XUPARAM("INST")),"|","^","~") ;
  1. ;
  1. ; EHRM Prosthetics
  1. N GMRCEHRM
  1. S GMRCEHRM=$$EHRMCHK($G(^TMP("GMRCIF",$J,"ORC")),$G(^TMP("GMRCIF",$J,"OBR")))
  1. K ^TMP("GMRCIF",$J)
  1. ; Call EHRM Prosthetics routine - added for GMRC*3*154
  1. I GMRCEHRM=1,$T(EN^GMRCRFC0)'="" D Q ; invoke EHRM Prosthetics if tag^routine exists and this is EHRM message. Otherwise, invoke legacy routine EN^RMPRFC3
  1. .D EN^GMRCRFC0(HLNEXT,HLQUIT)
  1. ;
  1. ;call Prosthetics routine - added for RMPR*3*83
  1. I $T(EN^RMPRFC3)'="" D ;invoke prosthetics code if tag^routine exists
  1. . D EN^RMPRFC3
  1. Q
  1. ;
  1. EHRMCHK(ORCSEG,OBRSEG) ; Check for EHRM
  1. N GMRCORC,GMRCORC2,GMRCORC3,GMRCORC5,GMRCSTAT,GMRCOBR4
  1. S GMRCORC2=$P($P(ORCSEG,"|",2),"^",2) ; Placer Facility
  1. S GMRCORC3=$P($P(ORCSEG,"|",3),"^",2) ; Filler Facility
  1. S GMRCOBR4=$P($P(OBRSEG,"|",4),"^",2) ; Text (string) component of the Universal Identifier
  1. S GMRCSTAT=$P(ORCSEG,"|") ; Control Code
  1. I GMRCSTAT="OD" S GMRCSTAT=$P(ORCSEG,"|",5) ; Status
  1. I (GMRCSTAT'="NW")&(GMRCSTAT'="DC") Q 0 ; Only process NW and DC
  1. ; EHRM Prosthetics NW requires incoming Placer Facility = Local Facility, Universal Service ID contains PROSTHETICS IFC or PSAS
  1. I GMRCSTAT="NW" I ($$IEN^XUAF4(GMRCORC2)=$$KSP^XUPARAM("INST")),((GMRCOBR4["PROSTHETICS IFC")!(GMRCOBR4["PSAS")) Q 1
  1. ; EHRM Prosthetics DC requires incoming Placer Facility = Local Facility, Placer Facility = Filler Facility, Universal Service ID contains PROSTHETICS IFC or PSAS
  1. I GMRCSTAT="DC" I ($$IEN^XUAF4(GMRCORC2)=$$KSP^XUPARAM("INST")),(GMRCORC2=GMRCORC3),((GMRCOBR4["PROSTHETICS IFC")!(GMRCOBR4["PSAS")) Q 1
  1. Q 0
  1. ;
  1. ORRIN ;process IFC responses
  1. K ^TMP("GMRCIF",$J)
  1. N HLNODE,SEG,I,PTACCTNO ;production code
  1. F I=1:1 X HLNEXT Q:HLQUIT'>0 D
  1. .S ^TMP("GMRCIF",$J,$P(HLNODE,"|"))=$E(HLNODE,5,999)
  1. ;
  1. I $D(^TMP("GMRCIF",$J,"ORC")),$P(^("ORC"),"|")="OK" D
  1. . N GMRCFNUM,GMRCROUT,GMRCDA,FDA
  1. . S GMRCROUT=$$IEN^XUAF4($P($P(^TMP("GMRCIF",$J,"ORC"),"|",3),U,2))
  1. . S GMRCDA=+$P(^TMP("GMRCIF",$J,"ORC"),"|",2)
  1. . ;I GMRCROUT'=$P(^GMR(123,GMRCDA,0),U,23) Q
  1. . S GMRCFNUM=+$P(^TMP("GMRCIF",$J,"ORC"),"|",3)
  1. . S FDA(1,123,GMRCDA_",",.06)=GMRCFNUM
  1. . ;
  1. . ; If Cerner order, extract and save patient account number. p184
  1. . ;
  1. . S PTACCTNO=$P($G(^TMP("GMRCIF",$J,"PID")),"|",18) I PTACCTNO'="" S FDA(1,123,GMRCDA_",",502)=PTACCTNO ;
  1. . ;
  1. . D UPDATE^DIE("","FDA(1)",,"GMRCERR")
  1. . Q
  1. ;
  1. I $P(^TMP("GMRCIF",$J,"MSA"),"|")="AA" D
  1. . N MSGID,MSGLOG,FDA,GMRCDA,GMRCACT,GMRCLOG
  1. . S MSGID=$P(^TMP("GMRCIF",$J,"MSA"),"|",2)
  1. . S MSGLOG=$O(^GMR(123.6,"AM",MSGID,0)) Q:'MSGLOG
  1. . ;
  1. . ; Do not delete log message for 203 error (Patient not in Cerner) until 2nd acknowledgement message is received and patient account number is filed. - wtc p189 8/21/23
  1. . ;
  1. . S GMRCDA=$P(^GMR(123.6,MSGLOG,0),U,4) ;
  1. . I $$GET1^DIQ(123.6,MSGLOG,.08)=203,GMRCDA,$$GET1^DIQ(123,GMRCDA,502)="" Q ;
  1. . ;
  1. . S FDA(1,123.6,MSGLOG_",",.06)="@"
  1. . S FDA(1,123.6,MSGLOG_",",.08)="@"
  1. . D UPDATE^DIE("","FDA(1)",,"GMRCERR")
  1. . ;S GMRCDA=$P(^GMR(123.6,MSGLOG,0),U,4) Q:'GMRCDA ; p189 8/21/23
  1. . Q:'GMRCDA ; p189 8/21/23
  1. . S GMRCACT=$P(^GMR(123.6,MSGLOG,0),U,5) Q:'GMRCACT
  1. . S GMRCACT=$O(^GMR(123.6,"AC",GMRCDA,GMRCACT)) D
  1. .. I 'GMRCACT Q
  1. .. S GMRCLOG=$O(^GMR(123.6,"AC",GMRCDA,GMRCACT,1,0)) Q:'GMRCLOG
  1. .. I $P(^GMR(123.6,GMRCLOG,0),U,8)<900 Q ;re-send 901 & 902 immed.
  1. .. D TRIGR^GMRCIEVT(GMRCDA,GMRCACT)
  1. . Q
  1. I $P(^TMP("GMRCIF",$J,"MSA"),"|")="AR" D
  1. . N MSGID,MSGLOG,FDA,GMRCERR,GMRCE
  1. . S MSGID=$P(^TMP("GMRCIF",$J,"MSA"),"|",2)
  1. . S MSGLOG=$O(^GMR(123.6,"AM",MSGID,0)) Q:'MSGLOG
  1. . S GMRCE=$P(^TMP("GMRCIF",$J,"MSA"),"|",3)
  1. . S FDA(1,123.6,MSGLOG_",",.08)=GMRCE
  1. . I GMRCE=802 S FDA(1,123.6,MSGLOG_",",.06)="@"
  1. . D UPDATE^DIE("","FDA(1)",,"GMRCERR")
  1. . I GMRCE=901!(GMRCE=902) Q ;no alerts on these probs (yet)
  1. . I GMRCE=201 D Q
  1. .. I '$$GET^XPAR("SYS","GMRC IFC ALERT IMMED ON PT ERR",1) Q
  1. .. D SNDALRT^GMRCIERR(MSGLOG,"C","IFC patient error at remote facility")
  1. . D SNDALRT^GMRCIERR(MSGLOG,"C")
  1. . ;
  1. . ; If message from Cerner, save to EHRM HL7 Message file (#1609). p189
  1. . ;
  1. . I $P(^TMP("GMRCIF",$J,"MSH"),"|",7)="CRNR" D SAVEHL7^EHMHL7("IFC","CERNER-"_$P($P($G(^TMP("GMRCIF",$J,"OBR")),"|",2),"^",2),"VISTA-"_$$STA^XUAF4($$KSP^XUPARAM("INST")),"|","^","~") ;
  1. ;
  1. K ^TMP("GMRCIF",$J)
  1. I $T(ORRIN^MAGDTR01)'="" D ;invoke Imaging code if tag^routine exists
  1. . D ORRIN^MAGDTR01
  1. Q
  1. ;
  1. VALMSG(GMRCORC,GMRCCRNR) ;check to make sure placer and filler # match current entr
  1. ; Input:
  1. ; GMRCORC = ORC segment from incoming HL7 msg
  1. ;
  1. I $P(GMRCORC,"|")="NW" Q 1 ; no #'s to match on new order ; MKN GMRC*3.0*154 added GMRCCRNR
  1. N GMRCPDA,GMRCFDA,GMRCPSIT,GMRCFSIT,GMRCROL,GMRCOK
  1. S GMRCPDA=+$P(GMRCORC,"|",2)
  1. S GMRCPSIT=$$IEN^XUAF4($P($P(GMRCORC,"|",2),U,2))
  1. S GMRCFDA=+$P(GMRCORC,"|",3)
  1. S GMRCFSIT=$$IEN^XUAF4($P($P(GMRCORC,"|",3),U,2))
  1. I $$KSP^XUPARAM("INST")=GMRCPSIT S GMRCROL="P"
  1. I $$KSP^XUPARAM("INST")=GMRCFSIT S GMRCROL="F"
  1. S GMRCOK=1
  1. I '$D(GMRCROL) S GMRCOK=0,GMRCROL="" ;bad institutions in msg
  1. I GMRCROL="P" D
  1. . I '$D(^GMR(123,GMRCPDA,0)) S GMRCOK=0 Q ;no such cslt #
  1. . I $P(^GMR(123,GMRCPDA,0),U,22)'=GMRCFDA S GMRCOK=0 Q ;cslt # prob
  1. . I $P(^GMR(123,GMRCPDA,0),U,23)'=GMRCFSIT S GMRCOK=0 Q ;routing facil.
  1. I GMRCROL="F" D
  1. . I '$D(^GMR(123,GMRCFDA,0)) S GMRCOK=0 Q ;no such cslt #
  1. . I $P(^GMR(123,GMRCFDA,0),U,22)'=GMRCPDA S GMRCOK=0 Q ;cslt # prob
  1. . I $P(^GMR(123,GMRCFDA,0),U,23)'=GMRCPSIT S GMRCOK=0 Q ;routing facil.
  1. I 'GMRCOK D ;return a 101 error to sending site
  1. . N GMRCRSLT
  1. . D RESP^GMRCIUTL("AR",HL("MID"),,,101) ;build HLA(
  1. . D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.GMRCRSLT) ;-(
  1. Q GMRCOK
  1. ;
  1. ;MKN GMRC*3.0*154 - setting up variables required by DECODE^GMRCHL7E - see call at current line 17 above
  1. SETTCH() ;Set up TCH array with decoding characters
  1. N GMRCI
  1. F GMRCI=1:1:4 S TCH($P("\E\-\R\-\S\-\T\","-",GMRCI))=$E("\~^&",GMRCI)
  1. Q
  1. ;
  1. SETTCH2() ;Set up TCH array with encoding characters
  1. N GMRCI
  1. F GMRCI=1:1:4 S TCH($E("\~^&",GMRCI))=$P("\E\-\R\-\S\-\T\","-",GMRCI)
  1. Q
  1. ;