| 1 | ORCHECK ;SLC/MKB-Order checking calls ; 08 May 2002  2:12 PM [8/16/05 5:28am]
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**7,56,70,94,141,215**;Dec 17, 1997
 | 
|---|
| 3 | DISPLAY ; -- DISPLAY event [called from ORCDLG,ORCACT4,ORCMED]
 | 
|---|
| 4 |  ;    Expects ORVP, ORNMSP, ORTAB, [ORWARD]
 | 
|---|
| 5 |  Q:$$GET^XPAR("DIV^SYS^PKG","ORK SYSTEM ENABLE/DISABLE")'="E"
 | 
|---|
| 6 |  N ORX,ORY,I
 | 
|---|
| 7 |  I ORNMSP="PS" D  ;reset to PSJ, PSJI, or PSO
 | 
|---|
| 8 |  . I $G(ORDG) S I=$P($G(^ORD(100.98,+ORDG,0)),U,3),I=$P(I," ") Q:'$L(I)  S ORNMSP="PS"_$S(I="UD":"I",1:I) Q
 | 
|---|
| 9 |  . I $G(ORXFER) S I=$P($P(^TMP("OR",$J,ORTAB,0),U,3),";",3) S:I="" I=$G(ORWARD) S ORNMSP="PS"_$S(I:"O",1:"I") ;opposite of list
 | 
|---|
| 10 |  S ORX(1)="|"_ORNMSP,ORX=1
 | 
|---|
| 11 |  D EN^ORKCHK(.ORY,+ORVP,.ORX,"DISPLAY") Q:'$D(ORY)
 | 
|---|
| 12 |  S I=0 F  S I=$O(ORY(I)) Q:I'>0  W !,$P(ORY(I),U,4) ; display only
 | 
|---|
| 13 |  Q
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | SELECT ; -- SELECT event
 | 
|---|
| 16 |  ;    Expects ORVP, ORDAILOG(PROMPT,ORI), ORNMSP
 | 
|---|
| 17 |  Q:$$GET^XPAR("DIV^SYS^PKG","ORK SYSTEM ENABLE/DISABLE")'="E"
 | 
|---|
| 18 |  N ORX,ORY,OI
 | 
|---|
| 19 |  S OI=+$G(ORDIALOG(PROMPT,ORI))
 | 
|---|
| 20 |  S ORX=1,ORX(1)=OI_"|"_ORNMSP_"|"_$$USID^ORMBLD(OI)
 | 
|---|
| 21 |  D EN^ORKCHK(.ORY,+ORVP,.ORX,"SELECT"),RETURN:$D(ORY)
 | 
|---|
| 22 |  Q
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | ACCEPT(MODE) ; -- ACCEPT event [called from ORCDLG,ORCACT4,ORCMED]
 | 
|---|
| 25 |  ;    Expects ORVP, ORDIALOG(), ORNMSP
 | 
|---|
| 26 |  Q:$$GET^XPAR("DIV^SYS^PKG","ORK SYSTEM ENABLE/DISABLE")'="E"
 | 
|---|
| 27 |  N ORX,ORY,ORZ,OI,ORSTRT,ORI,ORIT,ORID,ORSP
 | 
|---|
| 28 |  S:'$L($G(MODE)) MODE="ACCEPT"
 | 
|---|
| 29 |  S OI=$$PTR^ORCD("OR GTX ORDERABLE ITEM"),ORSTRT=$$START,ORX=0
 | 
|---|
| 30 |  S ORI=0 F  S ORI=$O(ORDIALOG(OI,ORI)) Q:ORI'>0  D STUF
 | 
|---|
| 31 |  I $G(ORDG)=+$O(^ORD(100.98,"B","IV RX",0)) S OI=$$PTR^ORCD("OR GTX ADDITIVE"),ORI=0 F  S ORI=$O(ORDIALOG(OI,ORI)) Q:ORI'>0  D STUF
 | 
|---|
| 32 |  D EN^ORKCHK(.ORY,+ORVP,.ORX,MODE),RETURN:$D(ORY)
 | 
|---|
| 33 |  Q
 | 
|---|
| 34 | STUF S ORIT=ORDIALOG(OI,ORI),ORSP=""
 | 
|---|
| 35 |  S:ORNMSP="LR" ORSP=+$G(ORDIALOG($$PTR^ORCD("OR GTX SPECIMEN"),ORI))
 | 
|---|
| 36 |  S ORID=$S($E(ORNMSP,1,2)="PS":$$DRUG(ORIT,OI),1:$$USID^ORMBLD(ORIT))
 | 
|---|
| 37 |  S ORZ=1,ORZ(1)=ORIT_"|"_ORNMSP_"|"_ORID
 | 
|---|
| 38 |  I MODE'="ALL" D EN^ORKCHK(.ORY,+ORVP,.ORZ,"SELECT"),RETURN:$D(ORY)
 | 
|---|
| 39 |  S ORX=ORX+1,ORX(ORX)=ORZ(1)_"|"_ORSTRT_"||"_ORSP K ORY,ORZ
 | 
|---|
| 40 |  Q
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | DELAY(MODE) ; -- Delayed ACCEPT event [called from ORMEVNT]
 | 
|---|
| 43 |  ;    Expects ORVP, ORIFN
 | 
|---|
| 44 |  Q:$$GET^XPAR("DIV^SYS^PKG","ORK SYSTEM ENABLE/DISABLE")'="E"
 | 
|---|
| 45 |  N ORX,ORY,ORCHECK S:'$L($G(MODE)) MODE="NOTIF"
 | 
|---|
| 46 |  D BLD(+ORIFN),EN^ORKCHK(.ORY,+ORVP,.ORX,MODE) Q:'$D(ORY)
 | 
|---|
| 47 |  D RETURN I MODE="NOTIF" S ORCHECK("OK")="Notification sent to provider" D OC^ORCSAVE2 Q  ; silent
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | SESSION ; -- SESSION event [called from ORCSIGN]
 | 
|---|
| 51 |  ;    Expects ORVP, ORES()
 | 
|---|
| 52 |  Q:$$GET^XPAR("DIV^SYS^PKG","ORK SYSTEM ENABLE/DISABLE")'="E"
 | 
|---|
| 53 |  N ORX,ORY,ORIFN,I,X,Y
 | 
|---|
| 54 |  S ORIFN=0 F  S ORIFN=$O(ORES(ORIFN)) Q:ORIFN'>0  I +$P(ORIFN,";",2)'>1 D
 | 
|---|
| 55 |  . I "^5^6^10^11^"'[(U_$P($G(^OR(100,+ORIFN,3)),U,3)_U) Q  ;unreleased
 | 
|---|
| 56 |  . D BLD(+ORIFN) Q:'$D(^OR(100,+ORIFN,9))
 | 
|---|
| 57 |  . S ORCHECK("IFN")=+$G(ORCHECK("IFN"))+1
 | 
|---|
| 58 |  . S I=0 F  S I=$O(^OR(100,+ORIFN,9,I)) Q:I'>0  S X=$G(^(I,0)),Y=$G(^(1)),ORCHECK=+$G(ORCHECK)+1,ORCHECK(+ORIFN,$S($P(X,U,2):$P(X,U,2),1:99),ORCHECK)=$P(X,U,1,2)_U_Y
 | 
|---|
| 59 |  I $D(ORX) D EN^ORKCHK(.ORY,+ORVP,.ORX,"SESSION"),RETURN:$D(ORY),REMDUPS
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | BLD(ORDER) ; -- Build new ORX(#) for ORDER
 | 
|---|
| 63 |  Q:'$G(ORDER)  Q:'$D(^OR(100,ORDER,0))  ;Q:$P($G(^(3)),U,11)  ;edit/renew
 | 
|---|
| 64 |  N PKG,START,ORI,ITEM,USID,SPEC,ORDG,PTR,INST
 | 
|---|
| 65 |  S ORDG=$P(^OR(100,ORDER,0),U,11),PKG=$$GET1^DIQ(9.4,$P(^(0),U,14)_",",1)
 | 
|---|
| 66 |  I PKG="PS",$G(ORDG) S ORI=$P($G(^ORD(100.98,+ORDG,0)),U,3),ORI=$P(ORI," "),PKG=PKG_$S(ORI="UD":"I",1:ORI)
 | 
|---|
| 67 |  S START=$$START(ORDER),ORI=0
 | 
|---|
| 68 |  F  S ORI=$O(^OR(100,ORDER,4.5,"ID","ORDERABLE",ORI)) Q:ORI'>0  D
 | 
|---|
| 69 |  . S INST=$P($G(^OR(100,ORDER,4.5,ORI,0)),U,3),PTR=$P($G(^(0)),U,2),ITEM=+$G(^(1))
 | 
|---|
| 70 |  . S USID=$S(PKG?1"PS".E:$$DRUG(ITEM,PTR,ORDER),1:$$USID^ORMBLD(ITEM))
 | 
|---|
| 71 |  . S SPEC=$S(PKG="LR":$$VALUE^ORCSAVE2(ORDER,"SPECIMEN",INST),1:"")
 | 
|---|
| 72 |  . S ORX=+$G(ORX)+1,ORX(ORX)=ITEM_"|"_PKG_"|"_USID_"|"_START_"|"_ORDER_"|"_SPEC
 | 
|---|
| 73 |  Q
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | RETURN ; -- Return checks in ORCHECK(ORIFN,CDL,#)
 | 
|---|
| 76 |  N I,IFN,CDL S I=0 F  S I=$O(ORY(I)) Q:I'>0  D
 | 
|---|
| 77 |  . S IFN=+$P(ORY(I),U) S:'IFN IFN="NEW"
 | 
|---|
| 78 |  . S CDL=+$P(ORY(I),U,3) S:'CDL CDL=99
 | 
|---|
| 79 |  . S:'$D(ORCHECK(IFN)) ORCHECK("IFN")=+$G(ORCHECK("IFN"))+1 ; count
 | 
|---|
| 80 |  . S ORCHECK=+$G(ORCHECK)+1,ORCHECK(IFN,CDL,ORCHECK)=$P(ORY(I),U,2,4)
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | REMDUPS ;
 | 
|---|
| 84 |  N IFN,CDL,I
 | 
|---|
| 85 |  S IFN=0 F  S IFN=$O(ORCHECK(IFN)) Q:'IFN  D
 | 
|---|
| 86 |  . S CDL=0 F  S CDL=$O(ORCHECK(IFN,CDL)) Q:'CDL  D
 | 
|---|
| 87 |  . . S I=0 F  S I=$O(ORCHECK(IFN,CDL,I)) Q:'I  D
 | 
|---|
| 88 |  . . . S J=I F  S J=$O(ORCHECK(IFN,CDL,J)) Q:'J  I $G(ORCHECK(IFN,CDL,I))=$G(ORCHECK(IFN,CDL,J)) K ORCHECK(IFN,CDL,J) S ORCHECK=$G(ORCHECK)-1
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | START(DA) ; -- Returns start date/time
 | 
|---|
| 91 |  N I,X,Y,%DT S Y=""
 | 
|---|
| 92 |  I $G(DA) S X=$O(^OR(100,DA,4.5,"ID","START",0)),X=$G(^OR(100,DA,4.5,+X,1))
 | 
|---|
| 93 |  E  D  ; look in ORDIALOG instead
 | 
|---|
| 94 |  . S I=0 F  S I=$O(ORDIALOG(I)) Q:I'>0  Q:$P(ORDIALOG(I),U,2)="START"
 | 
|---|
| 95 |  . S X=$S(I:$G(ORDIALOG(I,1)),1:"")
 | 
|---|
| 96 |  D AM^ORCSAVE2:X="AM",NEXT^ORCSAVE2:X="NEXT"
 | 
|---|
| 97 |  D ADMIN^ORCSAVE2("NEXT"):X="NEXTA",ADMIN^ORCSAVE2("CLOSEST"):X="CLOSEST"
 | 
|---|
| 98 |  I $L(X) S %DT="TX" D ^%DT S:Y'>0 Y=""
 | 
|---|
| 99 |  Q Y
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 | DRUG(OI,PTR,IFN) ; -- Returns 6 ^-piece identifier for Dispense Drug
 | 
|---|
| 102 |  N ORDD,ORNDF,Y
 | 
|---|
| 103 |  I ORDG=+$O(^ORD(100.98,"B","IV RX",0)) S ORDD=$$IV G D1
 | 
|---|
| 104 |  I $G(IFN) S ORDD=$O(^OR(100,IFN,4.5,"ID","DRUG",0)),ORDD=+$G(^OR(100,IFN,4.5,+ORDD,1))
 | 
|---|
| 105 |  E  S ORDD=+$G(ORDIALOG($$PTR^ORCD("OR GTX DISPENSE DRUG"),1))
 | 
|---|
| 106 | D1 Q:'ORDD "" S ORNDF=$$ENDCM^PSJORUTL(ORDD)
 | 
|---|
| 107 |  S Y=$P(ORNDF,U,3)_"^^99NDF^"_ORDD_U_$P($G(^PSDRUG(ORDD,0)),U)_"^99PSD"
 | 
|---|
| 108 |  Q Y
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 | IV() ; -- Get Dispense Drug for IV orderable
 | 
|---|
| 111 |  N PSOI,TYPE,VOL,ORY
 | 
|---|
| 112 |  S PSOI=+$P($G(^ORD(101.43,+OI,0)),U,2),VOL=""
 | 
|---|
| 113 |  S TYPE=$S(PTR=$$PTR^ORCD("OR GTX ADDITIVE"):"A",1:"B")
 | 
|---|
| 114 |  S:TYPE="B" VOL=$S($G(IFN):$$VALUE^ORCSAVE2(IFN,"VOLUME"),1:+$G(ORDIALOG($$PTR^ORCD("OR GTX VOLUME"),1)))
 | 
|---|
| 115 |  D ENDDIV^PSJORUTL(PSOI,TYPE,VOL,.ORY)
 | 
|---|
| 116 |  Q +$G(ORY)
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | LIST(IFN) ; -- Displays list of ORCHECK(IFN) checks
 | 
|---|
| 119 |  N ORI,ORJ,ORZ,ORMAX,ORTX,ON,OFF
 | 
|---|
| 120 |  S ORZ=0 F  S ORZ=$O(ORCHECK(IFN,ORZ)) Q:ORZ'>0  D
 | 
|---|
| 121 |  . S:ORZ=1 ON=IOINHI,OFF=IOINORM S:ORZ'=1 (ON,OFF)="" ; use bold if High
 | 
|---|
| 122 |  . S ORI=0 F  S ORI=$O(ORCHECK(IFN,ORZ,ORI)) Q:ORI'>0  D
 | 
|---|
| 123 |  . . S X=$P(ORCHECK(IFN,ORZ,ORI),U,3) I $L(X)<75 W !,ON_">>>  "_X_OFF Q
 | 
|---|
| 124 |  . . S ORMAX=74 K ORTX D TXT^ORCHTAB Q:'$G(ORTX)  ; wrap
 | 
|---|
| 125 |  . . F ORJ=1:1:ORTX W !,ON_$S(ORJ=1:">>>  ",1:"      ")_ORTX(ORJ)_OFF
 | 
|---|
| 126 |  W !
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | CANCEL() ; -- Returns 1 or 0: Cancel order(s)?
 | 
|---|
| 130 |  N X,Y,DIR,NUM
 | 
|---|
| 131 |  S NUM=+$G(ORCHECK("IFN")),DIR(0)="YA"
 | 
|---|
| 132 |  S DIR("A")="Do you want to cancel "_$S(NUM>1:"any of the new orders? ",1:"the new order? ")
 | 
|---|
| 133 |  S DIR("?",1)="Enter YES to cancel "_$S(NUM>1:"an",1:"the")_" order.  If you wish to override these order checks"
 | 
|---|
| 134 |  S DIR("?",2)="and release "_$S(NUM>1:"these orders",1:"this order")_", enter NO; you will be prompted for a justification",DIR("?")="if there are any highlighted critical order checks."
 | 
|---|
| 135 |  D ^DIR
 | 
|---|
| 136 |  Q +Y
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | REASON() ; -- Reason for overriding order checks
 | 
|---|
| 139 |  ; I '$D(^XUSEC("ORES",DUZ)),'$D(^XUSEC("ORELSE",DUZ)) Q  ??
 | 
|---|
| 140 |  N X,Y,DIR
 | 
|---|
| 141 |  S DIR(0)="FA^2:80^K:X?1."" "" X",DIR("A")="REASON FOR OVERRIDE: "
 | 
|---|
| 142 |  S DIR("?")="Enter a justification for overriding these order checks, up to 80 characters"
 | 
|---|
| 143 |  D ^DIR I $D(DTOUT)!$D(DUOUT) S Y="^"
 | 
|---|
| 144 |  Q Y
 | 
|---|