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

GMRCCCRA.m

Go to the documentation of this file.
  1. GMRCCCRA ;COG/PB/LB/MJ - Receive HL7 Message for HCP ;3/21/18 09:00
  1. ;;3.0;CONSULT/REQUEST TRACKING;**99,106,112,123,134,146,158,163,173,190,203**;JUN 1, 2018;Build 6
  1. ;
  1. ;DBIA# Supported Reference
  1. ;----- --------------------------------
  1. ;2161 INIT^HLFNC2
  1. ;2164 GENERATE^HLMA
  1. ;2944 TGET^TIUSRVR1
  1. ;3267 SSN^DPTLK1
  1. ;3630 BLDPID^VAFCQRY
  1. ;5807 GETLINK^TIUSRVT1
  1. ;10103 FMTE^XLFDT, FMTHL7^XLFDT
  1. ;10104 UP^XLFSTR
  1. ;10106 FMDATE^HLFNC
  1. ;1252 OUTPTPR^SDUTL3
  1. ;6917 EN^VAFHLIN1
  1. ;10106 HLADDR^HLFNC
  1. ;2467 OR^ORX8
  1. ;2171 NS^XUAF4
  1. ;2693 EXTRACT^TIULQ
  1. ;
  1. ;Patch 85 fix for CA SDM ticket R6063960FY16
  1. ;Patch 99 fix for screen to send community care consults HL7 messages - Cognosante - PB Mar 5 2018
  1. ;Patch 99 commented out PCP code- 2nd PRD segment -until Intersystems ready M14/M15- Cognosante-LB Apr 3 2018
  1. ;Patch 106 added code to include IN1 segments with reimburse flag, and division value in PV1.
  1. ;Patch 106 cleaned up per several ICRs.
  1. ;Patch 112 critical fix to remove control characters before sending consult, as bad data was causing infinite loop of HL7 process.
  1. ;Patch 123 consult status updates inbound to VistA, OHI additions outbound from VistA in IN1 segment
  1. ;Patch 134 fix control character issue in TIU notes
  1. ;Patch 146 fix if the consult was transferred from an imaging order, sets the DXCODE from the DX text
  1. ;Patch 146 fix PRD address problem, set to null fields that contain only spaces
  1. ;Patch 158 add code to convert start and end times from eastern to local, code to update the new field 81 in file 123
  1. ;Patch 163 add code to allow editing of new file 81 in file 123
  1. ;proposed for CCRA release 8.0 - successfully send Administrative Complete consult notes
  1. ;Patch 173 add EDIPI to the PID segment
  1. ;Patch 190 adds a check for a discontinue comment in the Order file, field 65 if Order file, field 64 is null.
  1. ;
  1. EN(MSG) ;Entry point to routine from GMRC CONSULTS TO CCRA protocol attached to GMRC EVSEND OR
  1. ;MSG = local array which contains the HL7 segments
  1. N I,QUIT,MSGTYP,DFN,ORC,GMRCDA,FS,MSGTYP2,MSGTYP3,ACTIEN,FROMSVC,OK,OKFROM,STATUS
  1. N UCID ;ABV/SCR 12/14/2017 *96*
  1. S (I,QUIT)=0,I=$O(MSG(I)) Q:'I S MSG=MSG(I) Q:$E(MSG,1,3)'="MSH" D Q:QUIT
  1. .S FS=$E(MSG,4) I $P(MSG,FS,3)'="CONSULTS" S QUIT=1 Q
  1. .S MSGTYP=$P(MSG,FS,9) I ",ORR,ORM,"'[","_MSGTYP_"," S QUIT=1 Q ;ORR is new consult, ORM are updates
  1. .Q
  1. F S I=$O(MSG(I)) Q:'I!QUIT S MSG=MSG(I) D
  1. .I $E(MSG,1,3)="PID" S DFN=+$P(MSG,FS,4) I 'DFN!('$D(^DPT(DFN))) S QUIT=1 Q
  1. .I $E(MSG,1,3)="ORC" S ORC=MSG S GMRCDA=+$P(ORC,FS,4),MSGTYP2=$P(ORC,FS,2),MSGTYP3=$P(ORC,FS,6) D
  1. ..D CCONTROL^GMRCCCR1(GMRCDA) ; strip out consult lines that contain only $C(13,10,10) to fix infinite msg loop - patch 112
  1. ..I MSGTYP3="IP" S ACTIEN=$O(^GMR(123,GMRCDA,40,99999),-1) D
  1. ...I ACTIEN S FROMSVC=$P($G(^GMR(123,GMRCDA,40,ACTIEN,0)),U,6) I FROMSVC S OKFROM=$$FEE(FROMSVC)
  1. ..S OK=$$FEE($$GET1^DIQ(123,GMRCDA,1,"I"))
  1. ..I '$G(OKFROM)&'$G(OK) S QUIT=1 ;not a Fee service or not forwarded from a fee service
  1. ..Q
  1. .Q
  1. Q:QUIT
  1. I MSGTYP="ORR" S MSGTYP3="NW"
  1. S STATUS=$$STATUS(MSGTYP2,MSGTYP3) I STATUS="UNKNOWN" Q ;don't process anything we haven't coded for
  1. ;done verifying this consult needs to go to HCP, start building HL7 message
  1. N SNAME,GMRCHL,ZERR,ZCNT,ECH,DATA,GDATA,URG,TYP,RES,EFFDT,PDUZ,PN,ADDR,PH,GMRCP,SENS,DX,DXCODE
  1. N PCP,PCDUZ,PCPN,PCADDR,PCPH,GMRCERR,UPDATE81,FDA
  1. ;S SNAME="GMRC HCP REF-"_$S(MSGTYP2="DR":"I14",MSGTYP="ORR":"I12",MSGTYP2="OC":"I14",MSGTYP2="OD":"I14",1:"I13")_" SERVER"
  1. S SNAME="GMRC CCRA-HSRM REF-"_$S(MSGTYP2="DR":"I14",MSGTYP="ORR":"I12",MSGTYP2="OC":"I14",MSGTYP2="OD":"I14",1:"I13")_" SERVER"
  1. S GMRCHL("EID")=$$FIND1^DIC(101,,"X",SNAME)
  1. Q:'GMRCHL("EID") D INIT^HLFNC2(GMRCHL("EID"),.GMRCHL)
  1. S ZERR="",ZCNT=0,ECH=$E(GMRCHL("ECH")) ;component separator
  1. ;start creating the segments.
  1. S DATA=$NA(^TMP("GMRCHL7CCRA",$J)) K @DATA D GETS^DIQ(123,GMRCDA,"*","IE",DATA)
  1. S GDATA=$NA(^TMP("GMRCHL7CCRA",$J,123,+GMRCDA_",")) ;File 123 data
  1. ;RF1 segment
  1. K GMRCM
  1. S URG=$G(@GDATA@(5,"E")) ;I URG]"" S URG=$S(URG["ROUTINE":"R",URG["STAT":"S",1:"A")
  1. S URG=$P(URG,"- ",2)
  1. S TYP=$G(@GDATA@(1,"I"))_ECH_$G(@GDATA@(1,"E")) D GETLINK^TIUSRVT1(.RES,+TYP_";GMR(123.5,")
  1. S TYP=TYP_ECH_ECH_$P($G(RES),U)_ECH_$P($G(RES),U,4)
  1. S EFFDT=$$FMTHL7^XLFDT($G(@GDATA@(.01,"I")))
  1. S ZCNT=ZCNT+1,GMRCM(ZCNT)="RF1|"_STATUS_"|"_URG_"|"_TYP_"||"_$G(@GDATA@(14,"I"))_"|"_GMRCDA_"|"_EFFDT_"||||"
  1. S UCID=$$GET1^DIQ(123,GMRCDA,80)
  1. S:$G(UCID)'="" GMRCM(ZCNT)="RF1|"_STATUS_"|"_URG_"|"_TYP_"||"_$G(@GDATA@(14,"I"))_"|"_UCID_"|"_EFFDT_"||||"
  1. S:$G(UCID)="" ^XTMP("GMRCHL7H","UCID IS EMPTY",GMRCDA)=GMRCDA ;TEMP ERROR HANDLER
  1. ;PRD segments
  1. ;"RP"- Referring Provider segment
  1. S PDUZ=+$G(@GDATA@(10,"I")),PN=$G(@GDATA@(10,"E")),PN=$$HLNAME^XLFNAME(PN,"S",ECH),$P(PN,ECH,9)=PDUZ
  1. N NPI S NPI=$P($G(^VA(200,PDUZ,"NPI")),"^")
  1. S ADDR=$$ADDR^GMRCHL7P(PDUZ,.GMRCHL),PH=$$PH^GMRCHL7P(PDUZ,.GMRCHL)
  1. S ADDR=$$CLRADD^GMRCCCR1(ADDR) ; patch 146 - MJ
  1. S ZCNT=ZCNT+1,GMRCM(ZCNT)="PRD|RP|"_PN_"|"_$G(ADDR)_"||"_$G(PH)_"||"_+$G(NPI)
  1. ;commented out PCP code- 2nd PRD segment -until Intersystems ready M14/M15- Cognosante-LB Apr 3 2018
  1. ;PCP code-starts here-
  1. ;"PP"- Primary Care Provider segment if the info exists
  1. S PCP=$$OUTPTPR^SDUTL3(DFN)
  1. I +PCP D
  1. . S PCDUZ=+PCP,PCPN=$P(PCP,"^",2),PCPN=$$HLNAME^XLFNAME(PCPN,"S",ECH),$P(PCPN,ECH,9)=PCDUZ
  1. . S PCADDR=$$ADDR^GMRCHL7P(PCDUZ,.GMRCHL),PCPH=$$PH^GMRCHL7P(PCDUZ,.GMRCHL)
  1. . S PCADDR=$$CLRADD^GMRCCCR1(PCADDR) ; patch 146 - MJ
  1. . S NPI=$P($G(^VA(200,PCDUZ,"NPI")),"^")
  1. . S ZCNT=ZCNT+1,GMRCM(ZCNT)="PRD|PP|"_PCPN_"|"_$G(PCADDR)_"||"_$G(PCPH)_"||"_+$G(NPI)
  1. ;PCP code-ends here-
  1. ;PID segment May be multiple nodes in the return array - make nodes 2-n sub nodes
  1. K LOOPER S LOOPER=0 N TGMRCP,TMPGMRCP
  1. PID ;
  1. K PID N GMRCP
  1. D BLDPID^VAFCQRY(DFN,1,"ALL",.GMRCP,.GMRCHL,ZERR)
  1. M TGMRCP=GMRCP
  1. K NEWGMRCP
  1. K ^TMP($J,"GMRCP")
  1. ;D EDIPI^GMRCCCR1(DFN,.GMRCP)
  1. D EDIPI^GMRCCCR1(DFN,.GMRCP)
  1. I $G(NEWGMRCP(1))'="" M GMRCP=NEWGMRCP
  1. ;for the first patch after 203, fix the issue of not sending a PID if no edipi:
  1. ;I $G(GMRCP)=1 M GMRCP=TGMRCP
  1. I $G(GMRCP(1))="" K GMRCP M GMRCP=^TMP($J,"GMRCP")
  1. S I=0 F S I=$O(GMRCP(I)) Q:'I D
  1. .I I=1 S ZCNT=ZCNT+1,GMRCM(ZCNT)=$TR(GMRCP(I),"""") Q
  1. .S GMRCM(ZCNT,I)=$TR(GMRCP(I),"""")
  1. K GMRCP,^TMP($J,"GMRCP")
  1. ;MJ - 5/24/2018 patch 106 changes to add - IN1 segments
  1. N GMRC0,I,INSP,INSPX,RETVAL,X,GMRCIN1,N,GMRCSTR,PLAN,PRECERT,TYPE ; PLAN, PRECERT, TYPE added for patch 123
  1. S GMRCSTR=",3,4,5,7,8,9,12,13,15,16,17,28,36" ; IN1 fields to capture
  1. D EN^VAFHLIN1(DFN,GMRCSTR,,"|","GMRCIN1","^~\&") ; get IN1 segments
  1. ;loop through IN1 segments found
  1. F I=0:0 S I=$O(GMRCIN1(I)) Q:'I I I>0 D
  1. . S GMRC0=$G(GMRCIN1(I,0)) I GMRC0']"" Q
  1. . S INSP=$P(GMRC0,"|",4)
  1. . S PRECERT="" ; added for patch 123
  1. . S N=0 F S N=$O(^DPT(DFN,.312,N)) Q:'N I $D(^(N,0)) D
  1. .. S X=^DPT(DFN,.312,N,0)
  1. .. ;begin patch 123 mods
  1. .. N COORDBEN,LASTVER,Y
  1. .. S COORDBEN=$P(X,"^",20)
  1. .. S COORDBEN=$S(COORDBEN=1:"PRIMARY",COORDBEN=2:"SECONDARY",COORDBEN=3:"TERTIARY",1:"")
  1. .. S $P(GMRC0,"|",22)=COORDBEN
  1. .. S Y=$G(^DPT(DFN,.312,N,1)),LASTVER=$P(Y,"^",3)
  1. .. I +LASTVER>0 S LASTVER=LASTVER+17000000
  1. .. S $P(GMRC0,"|",30)=LASTVER
  1. .. S PLAN=+$P(X,"^",18)
  1. .. S PRECERT=$G(^IBA(355.3,PLAN,0)),TYPE=$P(PRECERT,"^",15),PRECERT=$P(PRECERT,"^",6)
  1. .. S PRECERT=$S(PRECERT=1:"YES",0:"NO",1:"")
  1. .. S $P(GMRC0,"|",16)=TYPE
  1. .. S PLANID=+$G(^IBA(355.3,PLAN,6)) S:PLANID=0 PLANID=""
  1. .. I $L(PLANID)>0 S PLANID=$P($G(^IBCNR(366.03,PLANID,0)),"^",1)
  1. .. S $P(GMRC0,"|",3)=PLANID ;
  1. .. K COORDBEN,LASTVER,PLANID,Y
  1. .. ;end patch 123 mods
  1. .. N X1 S X1=$G(^DIC(36,+X,0)) I X1="" Q ; no insurance company entry
  1. .. S INSPX=$P(X,U,1)
  1. .. I INSP=INSPX D ; insurance plan found matches that of the segment
  1. ... S RETVAL=$$GET1^DIQ(36,INSP_",",1,"I") ; get reimbursable flag
  1. ... S RETVAL=$S(RETVAL="Y":"YES",RETVAL="*":"*",RETVAL="**":"**",RETVAL="":"YES",RETVAL="N":"NO",1:"?")
  1. ... S $P(GMRC0,"|",33)=RETVAL ; add flag back into segment
  1. ... ;get address
  1. ... S $P(GMRC0,"|",6)=$$GETADD^GMRCCCR1(INSP) ; get address info and put it into segment field 5
  1. ... S GMRCIN1(I,0)=GMRC0
  1. . S ZCNT=ZCNT+1,GMRCM(ZCNT)=GMRCIN1(I,0) ; add segment to message
  1. . ;patch 123 mods - if PRECERT value exists, create IN3 segment
  1. . I $L(PRECERT) S ZCNT=ZCNT+1,GMRCM(ZCNT)="IN3",$P(GMRCM(ZCNT),"|",21)="^"_PRECERT,PRECERT=""
  1. . ;end patch 123 mods
  1. K GMRC0,I,INSP,INSPX,RETVAL,X,GMRCIN1,N,GMRCSTR,PLAN,PRECERT,TYPE ; PLAN, PRECERT, TYPE added for patch 123
  1. ;end patch 106 changes
  1. ;DG1 segment ;Patch 85 modified
  1. ;if this is a radiology order converted to a consult the dxcode will not be in the consult in field 30.1
  1. ;the DX text has the dxcode in it, the code below parses it.
  1. ;radiology dx text:Encounter for other specified special examinations (ICD-10-CM Z01.89)
  1. S DX=$G(@GDATA@(30,"E"))
  1. S DXCODE=$G(@GDATA@(30.1,"E"))
  1. N TDXCODE
  1. I $G(DX)["(" S TDXCODE=$P($P(DX,"ICD-10-CM ",2),")",1),DX=$P(DX,"(") ;PB - patch 146
  1. S:$G(DXCODE)="" DXCODE=$G(TDXCODE)
  1. S ZCNT=ZCNT+1,GMRCM(ZCNT)="DG1|1||"_$G(DXCODE)_ECH_$G(DX)_"|||W"
  1. ;OBR segment
  1. S ZCNT=ZCNT+1,GMRCM(ZCNT)="OBR|1|"_$P(ORC,FS,3)_"|"_$P(ORC,FS,4)_"|ZZ||"_$$FMTHL7^XLFDT($G(@GDATA@(17,"I")))
  1. ;PV1 segment
  1. D IN5^VADPT ;VAIP(18)=Attending Physician, VAIP(13,5)=Primary Physician for admission
  1. S ZCNT=ZCNT+1,GMRCM(ZCNT)="PV1|1|"_$S(VAIP(13):"I",1:"O")_"|||||"_VAIP(18)_"|"
  1. I VAIP(5) S $P(GMRCM(ZCNT),"|",4)=VAIP(5) ;location for last movement event
  1. ;patch 106 - add in division value
  1. N GMRCDIV
  1. S GMRCDIV=$$NS^XUAF4(DUZ(2)),GMRCDIV=$P(GMRCDIV,"^",2)
  1. N ORGDIV S ORGDIV=$$GET1^DIQ(123,GMRCDA_",",81,"I")
  1. I $G(ORGDIV)'="" S:$G(ORGDIV)'=$G(GMRCDIV) GMRCDIV=$G(ORGDIV)
  1. I $G(ORGDIV)="" D
  1. .Q:($G(MSGTYP)="SC"&($G(MSGTYP3)="ZC")) ; patch 163 - PB don't update the new field if it is a scheduling update
  1. .N FDA S FDA(123,$G(GMRCDA)_",",81)=GMRCDIV D UPDATE^DIE(,"FDA",$G(GMRCDA)_",","GMRCERR")
  1. N A,B S A="&"_GMRCDIV,B=$P(GMRCM(ZCNT),"|",4),$P(B,"^",4)=A,$P(GMRCM(ZCNT),"|",4)=B K A,B
  1. K GMRCDIV
  1. ;End patch 106 mod
  1. S SENS=$$SSN^DPTLK1(DFN) I SENS["*SENSITIVE*" S $P(GMRCM(ZCNT),"|",17)="R" ;sensitive patient
  1. S $P(GMRCM(ZCNT),"|",18)=VAIP(13,5)
  1. ;begin patch 106 mod
  1. K VAIP
  1. ;end patch 106 mod
  1. D KVA^VADPT
  1. ;NTE segment
  1. D NTE(.GMRCHL)
  1. I $G(^GMR(123,GMRCDA,5))'="" D ; patch 163 - PB set referral facility on PV1 to value in field 81, file 123
  1. .N XXCNT,P4
  1. .S XXCNT=0 F S XXCNT=$O(GMRCM(XXCNT)) Q:XXCNT'>0 D
  1. ..S:$P(GMRCM(XXCNT),"|")="PV1" P4=$P(GMRCM(XXCNT),"|",4),$P(P4,"&",2)=$P(^GMR(123,GMRCDA,5),"^"),$P(GMRCM(XXCNT),"|",4)=P4
  1. K ^TMP("GMRCHL7CCRA",$J)
  1. ;When done, re-serve the (modified) referral message to CCRA
  1. N HL,HLA,GMRCRES,GMRCHLP
  1. M HL=GMRCHL,HLA("HLS")=GMRCM
  1. M GMRCHL=^XTMP("GMRCHL7H","MESSAGE")
  1. ;D EDIPI^GMRCCCR1(DFN)
  1. D GENERATE^HLMA(GMRCHL("EID"),"LM",1,.GMRCRES,"",.GMRCHLP)
  1. Q
  1. NTE(HL) ;Find Reason for Request for New or Resubmit entries, Find TIU for complete, find Activity Comment for others
  1. N NTECNT,X S NTECNT=1
  1. I (MSGTYP="ORR"&(MSGTYP2'="DR"))!((MSGTYP3="IP")&'$G(OKFROM)) D Q
  1. .D AUTHDTTM
  1. .S ZCNT=ZCNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"|P|Reason for Request"
  1. .S I=0 F S I=$O(@GDATA@(20,I)) Q:'I S X=@GDATA@(20,I) Q:X["^TMP" D
  1. ..S X=$$TRIM^XLFSTR(X) I $L(X)=0 Q
  1. ..I X=$C(9,9) Q
  1. ..S X=$$TIUC^GMRCCCR1(X)
  1. ..D HL7TXT^GMRCHL7P(.X,.HL,"\")
  1. ..S ZCNT=ZCNT+1,NTECNT=NTECNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"||"_X
  1. ..Q
  1. .Q
  1. ;Build NTE for CM^ADDENDED
  1. I MSGTYP2="XX",MSGTYP3="CM" D Q
  1. .N GMRCN,GMRCTXT,GMRCCMP,GMRCASTR
  1. .D AUTHDTTM
  1. .S ZCNT=ZCNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"|P|Progress Note"
  1. .S GMRCN=$P($G(^GMR(123,GMRCDA,50,1,0)),U) I GMRCN'["TIU(8925," Q
  1. .D TGET^TIUSRVR1(.GMRCTXT,$S(+$G(GMRCPARN):+GMRCPARN,+$G(TIUDA):+TIUDA,1:+GMRCN),"VIEW")
  1. .;line below modified in patch 106 to use GET1^DIQ call for date
  1. .S GMRCCMP=$$DATE^GMRCCCRA($$GET1^DIQ(8925,+TIUDA_",",1301,"I"),"MM/DD/CCYY")_" ADDENDUM"_" STATUS: "_$$GET1^DIQ(8925,+TIUDA_",",.05)
  1. .S (I,GMRCASTR)=0
  1. .F S I=$O(@GMRCTXT@(I)) Q:I="" S X=@GMRCTXT@(I) D
  1. ..I X=GMRCCMP S GMRCASTR=I
  1. .I GMRCASTR D
  1. ..S I=GMRCASTR-1
  1. ..F S I=$O(@GMRCTXT@(I)) Q:I="" S X=@GMRCTXT@(I) D
  1. ...S X=$$TRIM^XLFSTR(X) I $L(X)=0 Q
  1. ...D HL7TXT^GMRCHL7P(.X,.HL,"\")
  1. ...S X=$$TIUC^GMRCCCR1(X)
  1. ...S ZCNT=ZCNT+1,NTECNT=NTECNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"||"_X
  1. .K ^TMP("TIUVIEW",$J) ;clean up results of TIUSRVR1 call
  1. ;patch 146 - DONE flag used to determine if notes are found. If so, no need to drop to default
  1. ;some cases of DR/CM combo have notes stored in level 50, some in level 40
  1. ;both need to be accounted for
  1. ;I MSGTYP3="CM" D Q ; pre-146
  1. N DONE S DONE=0 ; patch 146
  1. I MSGTYP3="CM" D Q:DONE ; patch 146
  1. .N GMRCN,GMRCTXT
  1. .D AUTHDTTM
  1. .S ZCNT=ZCNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"|P|Progress Note"
  1. .S GMRCN=$P($G(^GMR(123,GMRCDA,50,1,0)),U) I GMRCN'["TIU(8925," Q
  1. .D TGET^TIUSRVR1(.GMRCTXT,$S(+$G(TIUDA):+TIUDA,1:+GMRCN),"VIEW") S I=0
  1. .F S I=$O(@GMRCTXT@(I)) Q:I="" S X=@GMRCTXT@(I) D
  1. ..S X=$$TRIM^XLFSTR(X) I $L(X)=0 Q
  1. ..D HL7TXT^GMRCHL7P(.X,.HL,"\")
  1. ..S X=$$TIUC^GMRCCCR1(X)
  1. ..S ZCNT=ZCNT+1,NTECNT=NTECNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"||"_X,DONE=1 ; patch 146 - DONE
  1. ..Q
  1. .K ^TMP("TIUVIEW",$J) ;clean up results of TIUSRVR1 call
  1. .Q
  1. I (MSGTYP2="DR") D Q
  1. .N ORIEN,CMT
  1. .D AUTHDTTM
  1. .S ZCNT=ZCNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"|L|Activity Comment"
  1. .S ORIEN=$G(@GDATA@(.03,"I")) I 'ORIEN Q
  1. .S CMT=$$GET1^DIQ(100,ORIEN_",",64)
  1. .I $G(CMT)="" S CMT=$$GET1^DIQ(100,ORIEN_",",65) ;Patch 190 - PB if field 64 is null check field 65
  1. .I $G(CMT)'="" S CMT=$$TRIM^XLFSTR($G(CMT))
  1. .S CMT=$TR($G(CMT),$C(13,10,10),$C(10,10))
  1. .D HL7TXT^GMRCHL7P(.CMT,.HL,"\")
  1. .S:$G(CMT)'="" CMT=$$TIUC^GMRCCCR1(CMT) ;Patch 190 - PB if the comment is null, don't call the control character screen API
  1. .S ZCNT=ZCNT+1,GMRCM(ZCNT)="NTE|2||"_CMT
  1. .Q
  1. N ACT,ACTD,ACTIEN,Q,UPDATE81
  1. S UPDATE81=0
  1. S Q=0,ACTIEN=9999 F S ACTIEN=$O(^GMR(123,GMRCDA,40,ACTIEN),-1) Q:'ACTIEN!Q S X=$G(^GMR(123,GMRCDA,40,ACTIEN,0)) D
  1. .S ACT=$P(X,U,2),ACTD=$P($P($G(^GMR(123.1,+ACT,0)),U)," ")
  1. .I $P($P(STATUS,ECH,2)," ")'=ACTD Q
  1. .I +$O(^GMR(123,GMRCDA,40,ACTIEN,1,0)) D AUTHDTTM
  1. .S I=0 F S I=$O(^GMR(123,GMRCDA,40,ACTIEN,1,I)) Q:'I S X=$G(^GMR(123,GMRCDA,40,ACTIEN,1,I,0)) D
  1. ..I 'Q S ZCNT=ZCNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"|L|Activity Comment",Q=1
  1. ..S X=$$TRIM^XLFSTR(X) I $L(X)=0 Q
  1. ..D HL7TXT^GMRCHL7P(.X,.HL,"\")
  1. ..S X=$$TIUC^GMRCCCR1(X)
  1. ..S ZCNT=ZCNT+1,NTECNT=NTECNT+1,GMRCM(ZCNT)="NTE|"_NTECNT_"||"_X
  1. ..I $$UP^XLFSTR($G(X))["EDIT REFERRAL FACILITY:" D ; patch 163 - PB if the edit is to change referral facility parse and update field 81, file 123
  1. ...S X=$TR(X,$C(10),"")
  1. ...S UPDATE81=$P(X,": ",2)
  1. ...Q:$G(UPDATE81)=0
  1. ...N FDA S FDA(123,$G(GMRCDA)_",",81)=$G(UPDATE81) D UPDATE^DIE(,"FDA",$G(GMRCDA)_",","GMRCERR")
  1. ..Q
  1. .Q
  1. Q
  1. AUTHDTTM ; Add Author and Date/Time to NTE
  1. D AUTHDTTM^GMRCCCR1 ; patch 146, for size
  1. Q
  1. STATUS(T1,T2) ;get status for event
  1. ;also add IP^COMMENT when those events are captured
  1. I T2="DC"!(T1="DR") Q "DC^DISCONTINUED"
  1. I T2="NW" Q "NW^CPRS RELEASED ORDER"
  1. I T1="SC"&(T2="SC") Q "SC^RECEIVED"
  1. I T1="SC"&(T2="ZC") Q "SC^SCHEDULED"
  1. I T1="XX"&(T2="XX") Q "IP^ADDED COMMENT"
  1. I T2="CA" Q "CA^CANCELLED"
  1. I T2="CM" D
  1. .I '+$G(GMRCPARN),'+$G(TIUDA) S GMRCPARN=$P($G(^GMR(123,GMRCDA,50,1,0)),U)
  1. .S $P(ORC,FS,4)=$S(+$G(GMRCPARN):+GMRCPARN_";TIU^TIU",+$G(TIUDA):+TIUDA_";TIU^TIU",1:$P(ORC,FS,4))
  1. I T1="XX"&(T2="CM") Q "CM^ADDENDED"
  1. I T2="CM" Q "CM^COMPLETE/UPDATE" ; patch 146, was "CM^COMPLETE", didn't match file 123.1 ; MJ
  1. I T1="XX"&(T2="IP")&$G(OKFROM) Q "XX^FORWARDED"
  1. I T1="XX"&(T2="IP") Q "IP^RESUBMITTED"
  1. Q "UNKNOWN"
  1. FEE(FEESVC) ;send only if name contains HCPS
  1. I $G(FEESVC)="" Q 0
  1. N VAL
  1. S VAL=0
  1. I $$UP^XLFSTR($$GET1^DIQ(123.5,FEESVC,.01,"E"))["HCPS" S VAL=1
  1. I $$UP^XLFSTR($$GET1^DIQ(123.5,FEESVC,.01,"E"))["COMMUNITY CARE" S VAL=1 ;*99 - PB - Mar 5, 2018
  1. I $$UP^XLFSTR($$GET1^DIQ(123.5,FEESVC,.01,"E"))["DOD TREATMENT" S VAL=1 ;*99 - PB - Mar 5, 2018
  1. Q VAL
  1. COMMENT(GMRCDA) ;send comments on Non VA Care consults to HCP
  1. ;create a fake event for HCP since there is no HL7 event passed to GMRC EVSEND OR
  1. I '$G(GMRCDA) Q
  1. ;N DFN S DFN=$$GET1^DIQ(123,GMRCDA,.02,"I") I 'DFN,'$D(^DPT(DFN)) Q ; modified "," to "!" within patch 106
  1. N DFN S DFN=+$$GET1^DIQ(123,GMRCDA,.02,"I") I 'DFN!('$D(^DPT(DFN))) Q
  1. N T S T(1)="MSH|^~\&|CONSULTS||||||ORM"
  1. S T(2)="PID|||"_DFN
  1. S T(4)="ORC|XX|"_$$GET1^DIQ(123,GMRCDA,.03,"I")_";"_$$OITEM($$GET1^DIQ(123,GMRCDA,.03,"I"))_"^OR|"_GMRCDA_";GMRC^GMRC||XX|"
  1. D EN(.T)
  1. Q
  1. ADDEND(TIUDA) ;send addendums on Non VA Care consults to HCP
  1. ;create a fake event for HCP since there is no HL7 event passed to GMRC EVSEND OR
  1. I '$G(TIUDA) Q
  1. Q:'$D(^TIU(8925,+TIUDA,0))
  1. N TIUTYP,DFN,GMRCPARN,GMRCO,GMRCD,GMRCDA,GMRCD1,GMRC8925,T
  1. S GMRCO=$$ADDEND^GMRCCCR1 Q:'GMRCO ; patch 146, needed for space ; MJ
  1. S T(1)="MSH|^~\&|CONSULTS||||||ORM"
  1. S T(2)="PID|||"_DFN
  1. S T(4)="ORC|XX|"_$$GET1^DIQ(123,GMRCO,.03,"I")_";"_$$OITEM($$GET1^DIQ(123,GMRCO,.03,"I"))_"^OR|"_GMRCO_";GMRC^GMRC||CM|"
  1. I $$FEE($$GET1^DIQ(123,GMRCO,1,"I")) D EN(.T)
  1. Q
  1. TIME(X,FMT) ; Copied from $$TIME^TIULS
  1. ; Receives X as 2910419.01 and FMT=Return Format of time (HH:MM:SS).
  1. N HR,MIN,SEC,TIUI
  1. I $S('$D(FMT):1,'$L(FMT):1,1:0) S FMT="HR:MIN"
  1. S X=$P(X,".",2),HR=$E(X,1,2)_$E("00",0,2-$L($E(X,1,2))),MIN=$E(X,3,4)_$E("00",0,2-$L($E(X,3,4))),SEC=$E(X,5,6)_$E("00",0,2-$L($E(X,5,6)))
  1. F TIUI="HR","MIN","SEC" S:FMT[TIUI FMT=$P(FMT,TIUI)_@TIUI_$P(FMT,TIUI,2)
  1. Q FMT
  1. DATE(X,FMT) ; Copied from $$DATE^TIULS
  1. ; Call with X=2910419.01 and FMT=Return Format of date ("MM/DD")
  1. N AMTH,MM,CC,DD,YY,TIUI,TIUTMP
  1. I +X'>0 S $P(TIUTMP," ",$L($G(FMT))+1)="",FMT=TIUTMP G QDATE
  1. I $S('$D(FMT):1,'$L(FMT):1,1:0) S FMT="MM/DD/YY"
  1. S MM=$E(X,4,5),DD=$E(X,6,7),YY=$E(X,2,3),CC=17+$E(X)
  1. S:FMT["AMTH" AMTH=$P("JAN^FEB^MAR^APR^MAY^JUN^JUL^AUG^SEP^OCT^NOV^DEC","^",+MM)
  1. F TIUI="AMTH","MM","DD","CC","YY" S:FMT[TIUI FMT=$P(FMT,TIUI)_@TIUI_$P(FMT,TIUI,2)
  1. I FMT["HR" S FMT=$$TIME(X,FMT)
  1. QDATE Q FMT
  1. OITEM(GMRCORDN) ; Orderable Item
  1. ; patch 106 - modified to use ICR 2467
  1. N RETVAL ;,GMRCOITM
  1. S RETVAL=1
  1. S RETVAL=+$$OI^ORX8(GMRCORDN)
  1. I 'RETVAL S RETVAL=1
  1. ;end patch 106 mods
  1. Q RETVAL
  1. ACK ; Process ACK HL7 messages
  1. D ACK^GMRCCCR1 ; patch 146, moved for space
  1. Q
  1. MESSAGE(MSGID,ERRARY) ; Send a MailMan Message with the errors
  1. D MESSAGE^GMRCCCR1(MSGID,.ERRARY)
  1. Q