- Timestamp:
- Dec 4, 2009, 12:11:15 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORKCHK.m
r613 r623 1 ORKCHK ; slc/CLA - Main routine called by OE/RR to initiate order checks ; 9/21/07 11:54am2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**6,32,94,105,123,232,267,243**;Dec 17, 1997;Build 242 3 EN(ORKY,ORKDFN,ORKA,ORKMODE) 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 OI2DD(ORPSA,OROI,ORPSPKG) 130 131 132 133 134 135 136 CHKRMT 137 138 139 140 141 142 143 144 145 146 147 . S ORKY(IFN)="^99^2^Remote Order Checking not available - checks doneon local data only"148 149 150 151 152 153 . S I=0 F S I=$O(ORARR(I)) Q:'I S IFN=IFN+1,ORKY(IFN)=I_"^99^2^Remote Order Checking not available - checks done on local data only"154 155 1 ORKCHK ; slc/CLA - Main routine called by OE/RR to initiate order checks ; 1/16/07 6:28am 2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**6,32,94,105,123,232,267**;Dec 17, 1997;Build 6 3 EN(ORKY,ORKDFN,ORKA,ORKMODE) ;initiate order checking 4 ;ORKY: array of returned msgs in format: ornum^orderchk ien^clin danger^msg 5 ;ORKDFN: patient dfn 6 ;ORKA: array of order information in the format: 7 ; orderable item ien| 8 ; display group-filler app| 9 ; nat'l id^nat'l text^nat'l code sys^local id^local text^local code sys| 10 ; effective d/t| 11 ; order number| 12 ; filler data (LR: specimen ien, PS: meds prev ordered during this session in format med1^med2^...) 13 ;ORKMODE: mode/event trigger (DISPLAY,SELECT,ACCEPT,SESSION,ALL,NOTIF) 14 ; PS: meds previously ordered during this session med1^med2^... 15 ; 16 N ORKQ,ORKN S ORKQ=0,ORKN=1 17 S:+$G(ORKDFN)<1 ORKY(ORKN)="^^^Order Checking Unavailable - invalid patient id",ORKQ=1,ORKN=ORKN+1 18 S:'$L($G(ORKMODE)) ORKY(ORKN)="^^^Order Checking Unavailable - invalid mode/event",ORKQ=1,ORKN=ORKN+1 19 Q:$G(ORKQ)=1 20 Q:+$G(ORKA)<1 21 N ORKX,ORKS,DNGR,ORENT,ORKENT,ORKNENT,ORNUM,ORKOFF,ORKTMODE 22 N ORKADUZ,ORKNDUZ,ORKI,ORKPRIM,ORKNMSG,ORKMSG,ORKLOG,ORKLD,ORKLI,ORKOI 23 N ORKDG,ORKLPS,ORKPSA,ORKCNT,ORKDGI 24 ; 25 ;save array of orders for use in session processing: 26 M ^TMP("ORKA",$J)=ORKA 27 ; 28 ;get patient's location flag (INPATIENT ONLY - outpt locations cannot be 29 ;reliably determined, and many simultaneous outpt locations can occur): 30 N DFN,ORKLOC 31 S DFN=ORKDFN,VA200="" D OERR^VADPT 32 S ORKLOC=+$G(^DIC(42,+VAIN(4),44)) 33 K VA200,VAIN 34 ; 35 ;get user's service/section flag: 36 N ORKSRV 37 S ORKSRV=$$GET1^DIQ(200,DUZ,29,"I") I +ORKSRV>0 S ORKSRV=$P(ORKSRV,U) 38 ; 39 ;log order check debug messages (or not) 40 S ORKLOG=$$GET^XPAR("DIV^SYS^PKG","ORK DEBUG ENABLE/DISABLE",1,"I") 41 I $G(ORKLOG)="D" K ^XTMP("ORKLOG") S ^XTMP("ORKLOG",0)="" 42 I +$P($G(^XTMP("ORKLOG",0)),U,3)>5000 K ^XTMP("ORKLOG") 43 ; 44 ;if SESSION mode & pharmacy order occurred in session get unsigned med orders 45 I ORKMODE="SESSION" D 46 .S ORKDG=$P(ORKA(1),"|",2) 47 .I $E($G(ORKDG),1,2)="PS" D 48 ..S ORKDGI=0,ORKDGI=$O(^ORD(100.98,"B","PHARMACY",ORKDGI)) 49 ..K ^TMP("ORR",$J) 50 ..D EN^ORQ1(DFN_";DPT(",ORKDGI,11,"","","",0,0) 51 ..;store unsigned med orders in ^TMP("ORR",$J for processing in ORKPS 52 ; 53 ;main processing loop: 54 S ORKX="" F S ORKX=$O(ORKA(ORKX)) Q:ORKX="" D 55 .S ORKOI=$P(ORKA(ORKX),"|") 56 .; 57 .;log debug msgs if parameter is enabled: 58 .I $G(ORKLOG)="E" D 59 ..S ORKLD=$$NOW^XLFDT 60 ..S ORKLI=0 61 ..I +$P($G(^XTMP("ORKLOG",0)),U,3)<1 S $P(^XTMP("ORKLOG",0),U,3)=0 62 ..S ORKCNT=$P(^XTMP("ORKLOG",0),U,3)+1 63 ..S ^XTMP("ORKLOG",0)=$$FMADD^XLFDT(ORKLD,3,"","","")_U_ORKLD_U_ORKCNT 64 ..S ^XTMP("ORKLOG",ORKLD,ORKDFN,+$G(ORKOI),ORKMODE,DUZ,ORKLI)=ORKA(ORKX) 65 .; 66 .S ORKDG=$P(ORKA(ORKX),"|",2),ORKTMODE="" 67 .S ORKENT="USR^LOC.`"_+$G(ORKLOC)_"^SRV.`"_+$G(ORKSRV)_"^DIV^SYS^PKG" 68 .Q:'$L($G(ORKDG)) 69 .; 70 .;if pharmacy order and multiple pharmacy orders in session add data node: 71 .I $E(ORKDG,1,2)="PS",($L($G(ORKPSA))) D 72 ..S $P(ORKA(ORKX),"|",6)=ORKPSA 73 .; 74 .S ORNUM=$P(ORKA(ORKX),"|",5) 75 .; get correct DUZ for notification processing if in NOTIF mode: 76 .I ORKMODE="NOTIF" D 77 ..S:+$G(ORNUM)>0 ORKNDUZ=$$ORDERER^ORQOR2(ORNUM) ;ordering provider 78 ..S:+$G(ORNUM)<1 ORKNDUZ=$P($$PRIM^ORQPTQ4(ORKDFN),U) ;prim provider 79 ..I +$G(ORKNDUZ)>0 D 80 ...S ORKSRV=$$GET1^DIQ(200,ORKNDUZ,29,"I") I +ORKSRV>0 S ORKSRV=$P(ORKSRV,U) 81 ...S ORKNENT="USR.`"_+ORKNDUZ_"^LOC.`"_+$G(ORKLOC)_"^SRV.`"_+$G(ORKSRV)_"^DIV^SYS^PKG" 82 ..S:+$G(ORKNDUZ)<1 ORKNENT="LOC.`"_+$G(ORKLOC)_"^DIV^SYS^PKG" 83 .S ORENT=$S(ORKMODE="NOTIF":ORKNENT,1:ORKENT) 84 .; 85 .;If the order is a delayed release order (NOTIF) process all nodes. 86 .;If it is a renewal, edit or delayed signature order (ALL) process all 87 .;modes except SESSION which gets processed just before signature: 88 .I ORKMODE="NOTIF"!(ORKMODE="ALL") S ORKTMODE=ORKMODE D 89 ..D EN^ORKCHK3(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) ;DISPLAY 90 ..D EN^ORKCHK4(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) ;SELECT 91 ..D EN^ORKCHK5(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) ;ACCEPT 92 ..I ORKMODE="NOTIF" D EN^ORKCHK6(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) ;SESSION 93 ..S ORKMODE=ORKTMODE 94 .; 95 .;Process regular orders/modes: 96 .I '$L($G(ORKTMODE)) D 97 ..I ORKMODE="DISPLAY" D EN^ORKCHK3(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) 98 ..I ORKMODE="SELECT" D EN^ORKCHK4(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) 99 ..I ORKMODE="ACCEPT" D EN^ORKCHK5(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) 100 ..I ORKMODE="SESSION" D EN^ORKCHK6(.ORKS,ORKDFN,ORKA(ORKX),ORENT,ORKTMODE) 101 ; 102 ;set messages into sorting array then into ORKY ORKS("ORK",clinical danger level,oi,msg)=ornum^order check ien^clin danger level^message 103 S ORKX="",ORKI=1 104 F S ORKX=$O(ORKS("ORK",ORKX)) Q:ORKX="" D 105 .S ORKY(ORKI)=$E(ORKS("ORK",ORKX),1,250) 106 .; 107 .;log debug msgs if parameter is enabled: 108 .I $G(ORKLOG)="E" D 109 ..S ORKLI=$G(ORKLI)+1 110 ..S ^XTMP("ORKLOG",$$NOW^XLFDT,ORKDFN,+$G(ORKOI),ORKMODE,DUZ,ORKLI)=ORKY(ORKI) 111 ..S $P(^XTMP("ORKLOG",0),U,3)=$P($G(^XTMP("ORKLOG",0)),U,3)+1 112 .; 113 .;send moderate and high danger order checks for delayed orders as notifications: 114 .I ORKMODE="NOTIF" S DNGR=$P(ORKY(ORKI),U,3) I $G(DNGR)<3 D 115 ..S ORKADUZ="",ORNUM=$P(ORKY(ORKI),U) 116 ..S:+$G(ORKNDUZ)>0 ORKADUZ(ORKNDUZ)="" 117 ..S ORKNMSG="Order check: "_$P(ORKY(ORKI),U,4) 118 ..D EN^ORB3(54,ORKDFN,$G(ORNUM),.ORKADUZ,ORKNMSG,"") 119 .S ORKI=ORKI+1 120 ; 121 K ^TMP("ORKA",$J),^TMP("ORR",$J) 122 I $G(ORKLOG)="E" D 123 .S ORKLI=$G(ORKLI)+1 124 .S ^XTMP("ORKLOG",$$NOW^XLFDT,ORKDFN,+$G(ORKOI),ORKMODE,DUZ,ORKLI)="LEAVING ORDER CHECKING" 125 .S $P(^XTMP("ORKLOG",0),U,3)=$P($G(^XTMP("ORKLOG",0)),U,3)+1 126 D CHKRMT 127 Q 128 ; 129 OI2DD(ORPSA,OROI,ORPSPKG) ;rtn dispense drugs for a PS OI 130 N PSOI 131 Q:'$D(^ORD(101.43,OROI,0)) 132 S PSOI=$P($P(^ORD(101.43,OROI,0),U,2),";") 133 Q:+$G(PSOI)<1 134 D DRG^PSSUTIL1(.ORPSA,PSOI,ORPSPKG) 135 Q 136 CHKRMT ; 137 N I,ORQFLAG 138 S ORQFLAG=1 139 S I=0 F S I=$O(ORKA(I)) Q:'I I $E($P(ORKA(I),"|",2),1,2)="PS"!($E($P(ORKA(I),"|",2),1,2)="RA") S ORQFLAG=0 140 Q:$G(ORQFLAG) 141 Q:'$$HAVEHDR^ORRDI1 142 Q:$$LDPTTVAL^ORRDI2($G(DFN)) 143 Q:$P($G(^XTMP("ORRDI","PSOO",ORKDFN,0)),U,3)'<0&($P($G(^XTMP("ORRDI","ART",ORKDFN,0)),U,3)'<0) 144 I $G(ORKMODE)="ACCEPT" D 145 . N IFN 146 . S IFN=$O(ORKY(""),-1)+1 147 . S ORKY(IFN)="^99^2^Order check performed on local data only" 148 . K ^TMP($J,"ORRDI") S ^TMP($J,"ORRDI",ORKDFN)=1 149 I $G(ORKMODE)="SESSION" D 150 . N I,IFN,ORARR 151 . S IFN=$O(ORKY(""),-1) 152 . S I=0 F S I=$O(ORKY(I)) Q:'I S ORARR(+ORKY(I))="" 153 . S I=0 F S I=$O(ORARR(I)) Q:'I S IFN=IFN+1,ORKY(IFN)=I_"^99^2^Order check performed on local data only." 154 . K ^TMP($J,"ORRDI") S ^TMP($J,"ORRDI",ORKDFN)=1 155 Q
Note:
See TracChangeset
for help on using the changeset viewer.