| 1 | ORWDXM2 ; SLC/KCM - Quick Orders ;11/25/02  09:49 | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,109,116,132,158,187,195,215**;Dec 17, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | CLRRCL(OK)      ; clear ORECALL | 
|---|
| 5 | S OK=1 | 
|---|
| 6 | K ^TMP("ORECALL",$J),^TMP("ORWDXMQ",$J) | 
|---|
| 7 | Q | 
|---|
| 8 | VERTXT ; set verify text for order | 
|---|
| 9 | N SEQ,DA,X,PROMPT,MULT,CHILD,INST,TITLE,ILST,SPACES | 
|---|
| 10 | S ILST=0,$P(SPACES," ",31)="" | 
|---|
| 11 | S SEQ=0 F  S SEQ=$O(^ORD(101.41,+ORDIALOG,10,"B",SEQ)) Q:SEQ'>0  D | 
|---|
| 12 | . S DA=0 F  S DA=$O(^ORD(101.41,+ORDIALOG,10,"B",SEQ,DA)) Q:'DA  D | 
|---|
| 13 | . . S X0=$G(^ORD(101.41,+ORDIALOG,10,DA,0)) | 
|---|
| 14 | . . Q:$P(X0,U,9)["*"  ; hidden prompt | 
|---|
| 15 | . . S PROMPT=$P(X0,U,2),MULT=$P(X0,U,7),CHILD=$P(X0,U,11) Q:CHILD | 
|---|
| 16 | . . Q:'PROMPT  S INST=$O(ORDIALOG(PROMPT,0)) Q:'INST  ; no values | 
|---|
| 17 | . . S TITLE=$S($L($G(ORDIALOG(PROMPT,"TTL"))):ORDIALOG(PROMPT,"TTL"),1:ORDIALOG(PROMPT,"A")) | 
|---|
| 18 | . . I $E(ORDIALOG(PROMPT,0))="W" D | 
|---|
| 19 | . . . N IWP,WP,CNT | 
|---|
| 20 | . . . S IWP=0,CNT=0 | 
|---|
| 21 | . . . F  S IWP=$O(^TMP("ORWORD",$J,PROMPT,INST,IWP)) Q:'IWP  D | 
|---|
| 22 | . . . . S CNT=CNT+1,WP(CNT)=^TMP("ORWORD",$J,PROMPT,INST,IWP,0) | 
|---|
| 23 | . . . I CNT=1 S ILST=ILST+1,LST(ILST)=$J(TITLE,30)_WP(1) | 
|---|
| 24 | . . . I CNT>1 D | 
|---|
| 25 | . . . . S ILST=ILST+1,LST(ILST)=TITLE,IWP=0 | 
|---|
| 26 | . . . . F  S IWP=$O(WP(IWP)) Q:'IWP  S ILST=ILST+1,LST(ILST)=WP(IWP) | 
|---|
| 27 | . . E  D | 
|---|
| 28 | . . . S ILST=ILST+1,LST(ILST)=$J(TITLE,30) | 
|---|
| 29 | . . . S LST(ILST)=LST(ILST)_$$ITEM^ORCDLG(PROMPT,INST) | 
|---|
| 30 | . . Q:'MULT  Q:'$O(ORDIALOG(PROMPT,INST))  ; done | 
|---|
| 31 | . . F  S INST=$O(ORDIALOG(PROMPT,INST)) Q:INST'>0  S ILST=ILST+1,LST(ILST)=SPACES_$$ITEM^ORCDLG(PROMPT,INST) | 
|---|
| 32 | D DISPLAY^ORWDBA3  ;for display of Billing Aware data from orig order | 
|---|
| 33 | Q | 
|---|
| 34 | RA ; setup environment for radiology | 
|---|
| 35 | ; -- get imaging types based on display group of quick order and | 
|---|
| 36 | ;    setup list of imaging locations based on imaging type | 
|---|
| 37 | N ORY,ITYPE,IFN,CNT,ORIMLOC,PROMPT | 
|---|
| 38 | S ORDIV=$$DIV^ORCDRA1,ITYPE=$P($G(^ORD(100.98,+ORDG,0)),U,3) | 
|---|
| 39 | S ORIMTYPE=$O(^RA(79.2,"C",ITYPE,0)) | 
|---|
| 40 | D EN4^RAO7PC1(ITYPE,"ORY") | 
|---|
| 41 | S (IFN,CNT)=0 F  S IFN=$O(ORY(IFN)) Q:IFN'>0  D | 
|---|
| 42 | . S CNT=CNT+1,ORIMLOC(CNT)=ORY(IFN),ORIMLOC("B",$P(ORY(IFN),U,2))=IFN | 
|---|
| 43 | I '$$GET^XPAR("ALL","RA SUBMIT PROMPT",1,"Q"),CNT>1 K ORIMLOC | 
|---|
| 44 | E  S ORIMLOC=CNT_"^1" | 
|---|
| 45 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX IMAGING LOCATION",0)) | 
|---|
| 46 | I $G(ORIMLOC) M ORDIALOG(PROMPT,"LIST")=ORIMLOC | 
|---|
| 47 | Q | 
|---|
| 48 | LR ; setup environment for lab | 
|---|
| 49 | ; -- setup ORTIME, ORIMTIME & ORTEST arrays | 
|---|
| 50 | ;    setup ORMAX, ORDG, & ORCOLLCT variables | 
|---|
| 51 | N PROMPT,INST,EDITONLY | 
|---|
| 52 | D GETIMES^ORCDLR1  ; sets up ORTIME and ORIMTIME arrays | 
|---|
| 53 | S ORMAX=$$GET^XPAR("ALL^LOC.`"_+ORL,"LR MAX DAYS CONTINUOUS",1,"Q") | 
|---|
| 54 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM",0)),INST=1 | 
|---|
| 55 | D LRTEST           ; sets up ORTEST array and ORDG | 
|---|
| 56 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX COLLECTION TYPE",0)) | 
|---|
| 57 | I $D(ORDIALOG(PROMPT,1)) S ORCOLLCT=ORDIALOG(PROMPT,1) I 1 | 
|---|
| 58 | E  S EDITONLY=0,ORCOLLCT=$$COLLTYPE^ORCDLR1 | 
|---|
| 59 | I ORCOLLCT="I" D | 
|---|
| 60 | . S PROMPT=$O(^ORD(101.41,"AB","OR GTX START DATE/TIME",0)) | 
|---|
| 61 | . D LRICTMOK | 
|---|
| 62 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ADMIN SCHEDULE",0)) | 
|---|
| 63 | I $D(ORDIALOG(PROMPT,1)) S ORSCH=ORDIALOG(PROMPT,1) | 
|---|
| 64 | Q | 
|---|
| 65 | LRTEST ; -- Setup ORTEST() array of ordering parameters (copied from ORCDLR) | 
|---|
| 66 | N OI,TST,DG | 
|---|
| 67 | S OI=+$G(ORDIALOG(PROMPT,INST)) Q:'OI | 
|---|
| 68 | I '$D(ORTEST) S TST=+$P($G(^ORD(101.43,OI,0)),U,2) D TEST^LR7OR3(TST,.ORTEST) S ORTEST=TST | 
|---|
| 69 | S DG=$P($G(^ORD(101.43,+OI,"LR")),U,6) S:'$L(DG) DG="LAB" | 
|---|
| 70 | S DG=$O(^ORD(100.98,"B",DG,0)) S:DG ORDG=DG | 
|---|
| 71 | Q | 
|---|
| 72 | LRRQCM()        ; return true if lab test has required comments | 
|---|
| 73 | I $O(^TMP("ORWORD",$J,PROMPT,INST,0)) Q 1 ; edit via WP | 
|---|
| 74 | N LRTEST,LRSAMP,LRSPEC,LRTSTN,LRTCOM,LRCCOM,DA,CNT,I,REQDCOMM,OI,TST | 
|---|
| 75 | S LRSAMP=$$VAL^ORCD("COLLECTION SAMPLE"),LRSPEC=$$VAL^ORCD("SPECIMEN") | 
|---|
| 76 | S OI=+$G(ORDIALOG(PROMPT,INST)) Q:'OI 0 | 
|---|
| 77 | I '$D(ORTEST) S TST=+$P($G(^ORD(101.43,OI,0)),U,2) D TEST^LR7OR3(TST,.ORTEST) S ORTEST=TST | 
|---|
| 78 | S LRTSTN=1,LRTEST(1)=+ORTEST,DA=$O(^LAB(60,LRTEST(1),3,"B",+LRSAMP,0)) | 
|---|
| 79 | S REQDCOMM=$P($G(^LAB(60,LRTEST(1),3,+DA,0)),U,6) | 
|---|
| 80 | S:'REQDCOMM REQDCOMM=+$P($G(^LAB(60,LRTEST(1),0)),U,19) | 
|---|
| 81 | Q REQDCOMM | 
|---|
| 82 | LRASMP()       ; return true to ask collection sample (from ASKSAMP^ORCDLR) | 
|---|
| 83 | N DEFSAMP,SAMP0 | 
|---|
| 84 | S DEFSAMP=$G(ORDIALOG(PROMPT,INST)),SAMP0=$G(^LAB(62,+DEFSAMP,0)) | 
|---|
| 85 | I (ORCOLLCT="LC")!(ORCOLLCT="I"),$G(ORTEST("Lab CollSamp")) Q 0 | 
|---|
| 86 | I $G(ORTEST("Unique CollSamp")),DEFSAMP Q 0 ; unique -> don't ask | 
|---|
| 87 | I 'DEFSAMP!('FIRST) Q 1 ; no default or edit -> ask | 
|---|
| 88 | I $G(ORDIALOG(PROMPT,"LIST"))="1^1" Q 0 ; only one choice | 
|---|
| 89 | Q 1 | 
|---|
| 90 | LRICTMOK        ; | 
|---|
| 91 | Q:'$D(ORDIALOG(PROMPT,1)) | 
|---|
| 92 | N ORY | 
|---|
| 93 | D VALDT^ORWU(.ORY,ORDIALOG(PROMPT,1)) | 
|---|
| 94 | I +$$VALID^LR7OV4(DUZ(2),ORY)=0 S ORDIALOG(PROMPT,1)="" | 
|---|
| 95 | Q | 
|---|
| 96 | DO ; setup environment for diet order | 
|---|
| 97 | ; partially copied from EN^ORCDFH | 
|---|
| 98 | I ORCAT'="I" D  Q | 
|---|
| 99 | . S ORQUIT=1 | 
|---|
| 100 | . S LST(0)="8^0" | 
|---|
| 101 | . S LST(.5)="This type of diet may be entered for inpatients only." | 
|---|
| 102 | D EN^FHWOR8(+ORVP,.ORPARAM)          ; set FH ordering parameters | 
|---|
| 103 | S:'$L($G(ORPARAM(3))) ORPARAM(3)="T" ; for now | 
|---|
| 104 | N PROMPT,OI                          ; set NPO flag if NPO diet | 
|---|
| 105 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM",0)) | 
|---|
| 106 | S OI=+$G(ORDIALOG(PROMPT,1)) | 
|---|
| 107 | S ORNPO=($P($G(^ORD(101.43,OI,0)),U)="NPO") | 
|---|
| 108 | Q | 
|---|
| 109 | EL ; setup environment for early/late tray | 
|---|
| 110 | D EN^FHWOR8(+ORVP,.ORPARAM)          ; set FH ordering parameters | 
|---|
| 111 | S:'$L($G(ORPARAM(3))) ORPARAM(3)="T" ; for now | 
|---|
| 112 | D EN2^ORCDFH                         ; setup ORTIME array | 
|---|
| 113 | N PROMPT                             ; set ORMEAL,ORTRAY | 
|---|
| 114 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX MEAL",0)) | 
|---|
| 115 | I $D(ORDIALOG(PROMPT,1)) S ORMEAL=ORDIALOG(PROMPT,1) | 
|---|
| 116 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM",0)) | 
|---|
| 117 | I $D(ORDIALOG(PROMPT,1)) S ORTRAY=ORDIALOG(PROMPT,1) | 
|---|
| 118 | Q | 
|---|
| 119 | UD ; setup environment for unit dose med | 
|---|
| 120 | I $G(ORWP94) G PS^ORWDPS3  ; if patch 94 installed | 
|---|
| 121 | ; | 
|---|
| 122 | D AUTHMED Q:$G(ORQUIT)  ; checks authorized to write meds | 
|---|
| 123 | N PROMPT,OI | 
|---|
| 124 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM",0)) | 
|---|
| 125 | I $D(ORDIALOG(PROMPT,1)) S OI=ORDIALOG(PROMPT,1) D MEDACTV(1) Q:$G(ORQUIT) | 
|---|
| 126 | D INSTR^ORCDPS(OI)      ; sets up instructions, routes, etc. | 
|---|
| 127 | D CHOICES^ORCDPS("U")   ; gets list of dispense drugs | 
|---|
| 128 | Q | 
|---|
| 129 | IV ; setup environment for IV fluid | 
|---|
| 130 | D AUTHMED Q:$G(ORQUIT)  ; checks authorized to write meds | 
|---|
| 131 | ; sets up list of volumes if only one solution | 
|---|
| 132 | ; otherwise, let the dialog go interactive | 
|---|
| 133 | N PROMPT,INST,CNT,OI | 
|---|
| 134 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM",0)) | 
|---|
| 135 | S (CNT,INST)=0 | 
|---|
| 136 | F  S INST=$O(ORDIALOG(PROMPT,INST)) Q:'INST  D  Q:$G(ORQUIT) | 
|---|
| 137 | . S CNT=CNT+1 | 
|---|
| 138 | . S OI=ORDIALOG(PROMPT,INST) D MEDACTV(3) ; check active solutions | 
|---|
| 139 | I CNT=1 S INST=1 D VOLUME^ORCDPSIV | 
|---|
| 140 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ADDITIVE",0)) | 
|---|
| 141 | S INST=0 | 
|---|
| 142 | F  S INST=$O(ORDIALOG(PROMPT,INST)) Q:'INST  D  Q:$G(ORQUIT) | 
|---|
| 143 | . S OI=ORDIALOG(PROMPT,INST) D MEDACTV(4) ; check active additives | 
|---|
| 144 | Q | 
|---|
| 145 | OP ; setup environment for outpatient pharmacy | 
|---|
| 146 | I $G(ORWP94) G PS^ORWDPS3  ; if patch 94 installed | 
|---|
| 147 | ; | 
|---|
| 148 | D AUTHMED Q:$G(ORQUIT)       ; checks authorized to write meds | 
|---|
| 149 | N PROMPT,INST,CNT,OI | 
|---|
| 150 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM",0)),OI=0 | 
|---|
| 151 | I $D(ORDIALOG(PROMPT,1)) S OI=$G(ORDIALOG(PROMPT,1)) D MEDACTV(2) Q:$G(ORQUIT) | 
|---|
| 152 | D:+OI INSTR^ORCDPS(OI)           ; sets up instructions, routes, etc. | 
|---|
| 153 | D CHOICES^ORCDPS("O")        ; gets list of dispense drugs | 
|---|
| 154 | ; get defaults for drug, refills if only one dispense drug | 
|---|
| 155 | S PROMPT=$O(^ORD(101.41,"AB","OR GTX DISPENSE DRUG",0)) | 
|---|
| 156 | S (CNT,INST)=0 | 
|---|
| 157 | F  S INST=$O(ORDIALOG(PROMPT,INST)) Q:'INST  S CNT=CNT+1 | 
|---|
| 158 | I CNT=1 D | 
|---|
| 159 | . S ORDRUG=+$G(ORDIALOG(PROMPT,1)),ORCOMPLX=0 | 
|---|
| 160 | . S OREFILLS=$P($G(ORDIALOG(PROMPT,"LIST","D",ORDRUG)),U,3) | 
|---|
| 161 | . S:'$L(OREFILLS) OREFILLS=11 | 
|---|
| 162 | E  S ORCOMPLX=1,OREFILLS=11  ; force interactive on complex order | 
|---|
| 163 | S ORCOPAY=1                  ; ask SC if can't determine copay | 
|---|
| 164 | I $G(ORDRUG),$L($T(ASKSC^ORCDPS)) S ORCOPAY=$$ASKSC^ORCDPS | 
|---|
| 165 | Q | 
|---|
| 166 | AUTHMED ; sets ORQUIT if not authorized to write meds | 
|---|
| 167 | N NOAUTH,NAME | 
|---|
| 168 | D AUTH^ORWDPS32(.NOAUTH,ORNP) | 
|---|
| 169 | I +NOAUTH D | 
|---|
| 170 | . S ORQUIT=1 | 
|---|
| 171 | . S LST(0)="8^0" | 
|---|
| 172 | . S NAME=$P($G(^VA(200,+ORNP,20)),U,2) | 
|---|
| 173 | . I '$L(NAME) S NAME=$P($G(^VA(200,+ORNP,0)),U,1) | 
|---|
| 174 | . S LST(.5)=NAME_" is not authorized to write med orders." | 
|---|
| 175 | Q | 
|---|
| 176 | MEDACTV(USAGE) ; sets ORQUIT if the orderable item is not active for a med | 
|---|
| 177 | Q:'$G(OI)  S USAGE=+$G(USAGE) | 
|---|
| 178 | I $G(^ORD(101.43,OI,.1)),^(.1)'>$$NOW^XLFDT D  Q | 
|---|
| 179 | . S ORQUIT=1,LST(0)="8^0" | 
|---|
| 180 | . S LST(.5)=$P($G(^ORD(101.43,OI,0)),U)_" has been inactivated and may not be ordered anymore." | 
|---|
| 181 | I USAGE,'$P($G(^ORD(101.43,OI,"PS")),U,USAGE) D  Q | 
|---|
| 182 | . S ORQUIT=1,LST(0)="8^0" | 
|---|
| 183 | . S LST(.5)=$P($G(^ORD(101.43,OI,0)),U)_" may not be ordered as an "_$S(USAGE=1:"inpatient medication",USAGE=2:"outpatient medication",USAGE=3:"IV solution",1:"IV additive")_" anymore." | 
|---|
| 184 | Q | 
|---|
| 185 | SCHEDULD() ; Is patient scheduled for PREOP (Imaging) | 
|---|
| 186 | I $G(ORDIALOG(PROMPT,1)) Q 1 ; don't ask - already have date | 
|---|
| 187 | E  Q 0 | 
|---|
| 188 | Q | 
|---|