| 1 | RAO7RO ;HISC/GJC,FPT-Request message from OE/RR. ;9/11/98  11:56
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**1,2,13,15,75**;Mar 16, 1998;Build 4
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;------------------------- Variable List -------------------------------
 | 
|---|
| 5 |  ; RAFLG=flag indicates ORC reached     RAHLFS="|"
 | 
|---|
| 6 |  ; RAMSG=HL7 message passed in          RAORD=ORC-1 (Order control)
 | 
|---|
| 7 |  ; RAPLCHLD=Tracks place holder values for adding entries to sub-files
 | 
|---|
| 8 |  ;          in the Rad/Nuc Med Orders file.
 | 
|---|
| 9 |  ; RASEG=specific HL7 node              X=subscript of HL7 node
 | 
|---|
| 10 |  ; ----------------------------------------------------------------------
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | EN1(RAMSG) ; Pass in the message from OE/RR.  Decipher information.
 | 
|---|
| 13 |  ; new variables for RAO7RO processing
 | 
|---|
| 14 |  N A,AAH,ARR,CHAR,CNT,DFN,ERR,FLG,GMTSTYP,I,J,L,LEN,MSG,RA,RA0
 | 
|---|
| 15 |  N RA7003,RA71,RA713,RA783,RAA,RAB,RAC,RACLIN,RACMCODE,RACMNOR
 | 
|---|
| 16 |  N RACNT,RACOST,RACPT,RACPTIEN,RAD0,RADATA,RADBS,RADC,RADFN,RADUZ
 | 
|---|
| 17 |  N RAECH,RAEMSG,RAERR,RAFDA,RAFLG,RAFNAME,RAFNUM,RAHDR,RAHLFS
 | 
|---|
| 18 |  N RAIEN71,RAIL,RAIMGAB,RAIMGTYI,RAINCR,RAION,RAIT,RALDT,RALINEX,RALOC
 | 
|---|
| 19 |  N RAMFE,RAMODIEN,RAMSH3,RAMULT,RANEW,RANOW,RANSTAT,RAOBR18,RAOBR19
 | 
|---|
| 20 |  N RAOBR30,RAOBR4,RAOBX2,RAOBX3,RAOBX5,RAOIFN,RAORC1,RAORC10,RAORC11
 | 
|---|
| 21 |  N RAORC12,RAORC15,RAORC16,RAORC2,RAORC3,RAORC7,RAORC7D,RAORC7P
 | 
|---|
| 22 |  N RAORD,RAPGE,RAPLCHLD,RAPREG,RAPHYAP,RAPID3,RAPID5,RAPRCTY
 | 
|---|
| 23 |  N RAPV119,RAPV12,RAPV13,RAREA,RARMBED,RASEG,RASTATUS,RASUB
 | 
|---|
| 24 |  N RATSTMP,RAVAR,RAWARD,RAWP,RAX,RAXIT,RAXT71,RAY,RAZ,T1,T2,T3
 | 
|---|
| 25 |  N VAIP,X,Y,Y1,Y2,Y3,Y4,Y5,Z,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 | 
|---|
| 26 |  S X=^%ZOSF("ERRTN"),@^%ZOSF("TRAP")
 | 
|---|
| 27 |  S (RAFLG,X)=0,RAPLCHLD=1
 | 
|---|
| 28 |  D EN1^RAO7UTL ; setup field seperator data (see var list)
 | 
|---|
| 29 |  S RALDT=$$NOW^XLFDT() ; setup 'Last Activity Date/Time'
 | 
|---|
| 30 |  F  S X=$O(RAMSG(X)) Q:X'>0  D  Q:RAFLG
 | 
|---|
| 31 |  . S RASEG=$G(RAMSG(X)) Q:$P(RASEG,RAHLFS)'="ORC"  ; quit if not ORC
 | 
|---|
| 32 |  . S RAORD=$P(RASEG,RAHLFS,2),RAFLG=1
 | 
|---|
| 33 |  . Q
 | 
|---|
| 34 |  I RAORD'="NW"&(RAORD'="DC")&(RAORD'="NA")&(RAORD'="DE")&(RAORD'="Z@") D BRKOUT^RAO7UTL1,REJ^RAO7OKS("OC","Missing/Invalid Order Control") Q
 | 
|---|
| 35 |  I RAORD="NW" D EN1^RAO7RON(.RAMSG) D
 | 
|---|
| 36 |  .I $G(RAERR) D  Q
 | 
|---|
| 37 |  ..S RAERR1="" I RAERR=35 I $G(RANOW) S RAERR1="Now="_RANOW
 | 
|---|
| 38 |  ..I RAERR=35 S RAERR1=RAERR1_" Req Entered Dt="_$G(RAORC15)
 | 
|---|
| 39 |  ..S RAERR=$$EN1^RAO7RO1(RAERR)_" "_$G(RAERR1) K RAERR1
 | 
|---|
| 40 |  ..D REJ^RAO7OKS("OC",RAERR) Q
 | 
|---|
| 41 |  .;if CLINICAL HISTORY was passed from CPRS and it failed the CLINICAL HISTORY data
 | 
|---|
| 42 |  .;requirements, reject the message
 | 
|---|
| 43 |  .I $P(RACLIN,U)=1,$P(RACLIN,U,2)'=1 S RAERR=$$EN1^RAO7RO1(15) D REJ^RAO7OKS("OC",RAERR) Q
 | 
|---|
| 44 |  .K ERR
 | 
|---|
| 45 |  .; Update 'REQUEST STATUS TIMES' multiple if parameter dictates!
 | 
|---|
| 46 |  .I "Yy"[RADIV(.119) D
 | 
|---|
| 47 |  ..; make sure that the activity log place holders differ from the
 | 
|---|
| 48 |  ..; modifiers place holders
 | 
|---|
| 49 |  ..S RAPLCHLD=RAPLCHLD+1
 | 
|---|
| 50 |  ..S RANEW(75.12,"+"_RAPLCHLD_",+1,",.01)=RALDT
 | 
|---|
| 51 |  ..S RANEW(75.12,"+"_RAPLCHLD_",+1,",2)=5
 | 
|---|
| 52 |  ..S RANEW(75.12,"+"_RAPLCHLD_",+1,",3)=+RAORC10
 | 
|---|
| 53 |  ..Q
 | 
|---|
| 54 |  .D UPDATE^DIE("","RANEW","RAORC3","ERR") S RAORC3=+$G(RAORC3(1))
 | 
|---|
| 55 |  .S RAORC3=$G(RAORC3)_"^RA"
 | 
|---|
| 56 |  .I $D(ERR) S RAERR=$$EN1^RAO7RO1(21) D REJ^RAO7OKS("OC",RAERR) Q
 | 
|---|
| 57 |  .D WP^DIE(75.1,+RAORC3_",",400,"K","^TMP(""RAWP"",$J)","ERR")
 | 
|---|
| 58 |  .D ACC^RAO7OKS("OK","","","","")
 | 
|---|
| 59 |  .; Prt request on im'g loc req prtr; if no im'g loc on the HL7 msg
 | 
|---|
| 60 |  .; check for prtr on first entry in Im'g Loc file; if no prtr on
 | 
|---|
| 61 |  .; first entry, don't print request
 | 
|---|
| 62 |  . S RAO751=$G(^RAO(75.1,+RAORC3,0))
 | 
|---|
| 63 |  . D:$P(RAO751,"^",6)=1!($P(RAO751,"^",6)=2) OENO^RAUTL19(+RAORC3)
 | 
|---|
| 64 |  . K RAO751 ; fire off 'stat' or 'urgent' alert if order qualifies
 | 
|---|
| 65 |  . ; print the request
 | 
|---|
| 66 |  . I +RAOBR19(3)>0 S RAION=$P($G(^RA(79.1,+RAOBR19(3),0)),U,16)
 | 
|---|
| 67 |  . ;I +RAOBR19(3)=0 S RAION=$P($G(^RA(79.1,+$O(^RA(79.1,0)),0)),U,16)
 | 
|---|
| 68 |  . I +RAOBR19(3)=0 D  S:RAION="" RAION=$P($G(^RA(79.1,+$O(^RA(79.1,0)),0)),U,16)
 | 
|---|
| 69 |  .. S (RALOC,RAION)=""
 | 
|---|
| 70 |  .. ; Get Imaging Type of Procedure..
 | 
|---|
| 71 |  .. S RAIMGTYI=$P(^RAMIS(71,RAOBR4(4),0),U,12) Q:RAIMGTYI=""
 | 
|---|
| 72 |  .. F  S RALOC=$O(^RA(79.1,"BIMG",RAIMGTYI,RALOC)) Q:RALOC=""  D  Q:RAION]""
 | 
|---|
| 73 |  ... ; Find Imaging Location within Imaging Type with Request device..
 | 
|---|
| 74 |  ... Q:$P(^RA(79.1,RALOC,0),U,16)=""
 | 
|---|
| 75 |  ... Q:^RA(79.1,RALOC,"DIV")'=+$$KSP^XUPARAM("INST")
 | 
|---|
| 76 |  ... S RAION=$P(^RA(79.1,RALOC,0),U,16)
 | 
|---|
| 77 |  . I RAION]"" D
 | 
|---|
| 78 |  .. D PSETUP Q:RAION']""
 | 
|---|
| 79 |  .. S ZTDTH=$H,ZTRTN="PRHS^RAO7RO",ZTIO=RAION
 | 
|---|
| 80 |  .. S ZTDESC="Rad/Nuc Med Request print - frontdoor (CPRS)"
 | 
|---|
| 81 |  .. D ^%ZTLOAD,HOME^%ZIS
 | 
|---|
| 82 |  .. K ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 | 
|---|
| 83 |  .. Q
 | 
|---|
| 84 |  . Q
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  I RAORD="Z@" N RAPUROK D EN2^RAO7PURG(.RAMSG) D  ; RAPUROK set in
 | 
|---|
| 87 |  . ; EN2^RAO7PURG.  If RAPUROK=1 send ok msg, else send reject msg
 | 
|---|
| 88 |  . I $G(RAERR) D REJ^RAO7OKS("ZU","") Q
 | 
|---|
| 89 |  . D:'RAPUROK REJ^RAO7OKS("ZU","")
 | 
|---|
| 90 |  . D:RAPUROK ACC^RAO7OKS("ZR","","","","")
 | 
|---|
| 91 |  . Q
 | 
|---|
| 92 |  I RAORD="DC" D EN1^RAO7RCH(.RAMSG) D
 | 
|---|
| 93 |  .I $G(RAERR) S RAERR=$$EN1^RAO7RO1(RAERR) D REJ^RAO7OKS("UD",RAERR) Q
 | 
|---|
| 94 |  .K ERR D FILE^DIE("K","RANEW","ERR")
 | 
|---|
| 95 |  .I $D(ERR) S RAERR=$$EN1^RAO7RO1(37) D REJ^RAO7OKS("UD",RAERR) Q
 | 
|---|
| 96 |  .D OE3^RABUL(+RAORC3) ; rad/nuc med request cancelled bulletin
 | 
|---|
| 97 |  .I "Yy"[RADIV(.119) D  Q:$G(RAERR)
 | 
|---|
| 98 |  ..N ERR
 | 
|---|
| 99 |  ..S ERR=$$EN5^RAO7VLD(+RAORC3,1,+RAORC10,"")
 | 
|---|
| 100 |  ..I +$G(ERR) S RAERR=$$EN1^RAO7RO1(30) D REJ^RAO7OKS("UD",RAERR) Q
 | 
|---|
| 101 |  ..Q
 | 
|---|
| 102 |  .D ACC^RAO7OKS("DR","","","","")
 | 
|---|
| 103 |  .; print out the cancelled request
 | 
|---|
| 104 |  .S RAIMJLOC=+$P($G(^RAO(75.1,+RAORC3,0)),"^",20)
 | 
|---|
| 105 |  .I RAIMJLOC>0 S RAION=$P($G(^RA(79.1,RAIMJLOC,0)),U,24)
 | 
|---|
| 106 |  .I RAIMJLOC=0 S RAION=$P($G(^RA(79.1,+$O(^RA(79.1,0)),0)),U,24)
 | 
|---|
| 107 |  .I RAION]"" D
 | 
|---|
| 108 |  ..D PSETUP Q:RAION']""
 | 
|---|
| 109 |  ..S RACRHD="" ; set the cancelled request flag
 | 
|---|
| 110 |  ..S ZTDESC="Rad/Nuc Med Cancelled Request print - frontdoor (CPRS)"
 | 
|---|
| 111 |  ..S ZTIO=RAION,ZTDTH=$H,ZTRTN="PRHS^RAO7RO",ZTSAVE("RACRHD")=""
 | 
|---|
| 112 |  ..D ^%ZTLOAD,HOME^%ZIS
 | 
|---|
| 113 |  ..K RACRHD,RAIMJLOC,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 | 
|---|
| 114 |  ..Q
 | 
|---|
| 115 |  .Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ;For an order control of: 'NA', we error if one of these three
 | 
|---|
| 118 |  ;conditions are true:
 | 
|---|
| 119 |  ;1) if the ien of the Rad/Nuc Med Order is not valid
 | 
|---|
| 120 |  ;2) patient file pointer (PID3) evaluates to a different
 | 
|---|
| 121 |  ;   patient name than the PID5 value
 | 
|---|
| 122 |  ;3) cannot file oerr order ien into file 75.1
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  I RAORD="NA" D EN1^RAO7OKR(.RAMSG) I $G(RAERR) D
 | 
|---|
| 125 |  . N RATXT S RATXT="Error for order control: 'NA'"
 | 
|---|
| 126 |  . S:RAERR'?1N.N RAERR="error not found in our error table"
 | 
|---|
| 127 |  . S:RAERR?1N.N RAERR=$$EN1^RAO7RO1(RAERR)
 | 
|---|
| 128 |  . S:$D(XQY0)#2 RAVAR("XQY0")="" S RAVAR("RAERR")=""
 | 
|---|
| 129 |  . D ERR^RAO7UTL(RATXT,.RAMSG,.RAVAR)
 | 
|---|
| 130 |  . Q
 | 
|---|
| 131 |  ;if order control of 'DE', CPRS files data into their OE/RR Errors file
 | 
|---|
| 132 |  ;I RAORD="DE"
 | 
|---|
| 133 |  ;purge DBS specific variables before exiting
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | PURGE ; kill & quit
 | 
|---|
| 136 |  D CLEAN^DILF
 | 
|---|
| 137 |  K ^TMP("RAWP",$J)
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 | PRHS ; print request and/or health summary
 | 
|---|
| 140 |  U IO D ^RAORD5 ; print the request
 | 
|---|
| 141 |  S:'$D(RACRHD) GMTSTYP=$P($G(^RAMIS(71,+$G(RAOBR4(4)),0)),U,13)
 | 
|---|
| 142 |  I +$G(GMTSTYP) D  ; don't print Health Summary with cancelled requests
 | 
|---|
| 143 |  . W:$Y @IOF D ENX^GMTSDVR(RADFN,GMTSTYP)
 | 
|---|
| 144 |  . Q
 | 
|---|
| 145 |  W ! D CLOSE^RAUTL
 | 
|---|
| 146 |  Q
 | 
|---|
| 147 | PSETUP ; Define the variables needed to print cancelled and non-cancelled
 | 
|---|
| 148 |  ; requests from the frontdoor (CPRS).
 | 
|---|
| 149 |  I RAION'?1N.N S RAION=$O(^%ZIS(1,"B",RAION,0)) Q:RAION']""
 | 
|---|
| 150 |  S RAION=$P($G(^%ZIS(1,RAION,0)),"^") Q:RAION']""
 | 
|---|
| 151 |  S RAOIFN=+RAORC3,RAPAGE=0,RAX="",RADFN=RAPID3
 | 
|---|
| 152 |  N RAFOERR S RAFOERR="" ; flag to indicate entry from frontdoor (CPRS)
 | 
|---|
| 153 |  F RAI="RADFN","RAOIFN","RAX","RAPGE","RAOBR4(","RAFOERR" S ZTSAVE(RAI)=""
 | 
|---|
| 154 |  S:$D(RAIL) ZTSAVE("RAIL")=""
 | 
|---|
| 155 |  Q
 | 
|---|