| 1 | ORWDXM1 ; SLC/KCM - Order Dialogs, Menus;2/19/03 ;11/15/2005 | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,131,132,141,178,185,187,215**;Dec 17, 1997 | 
|---|
| 3 | BLDQRSP(LST,ORIT,FLDS,ISIMO) ; Build responses for an order | 
|---|
| 4 | ; LST=QuickLevel^ResponseID(ORIT;$H)^Dialog^Type^FormID^DGrp | 
|---|
| 5 | ; LST(n)=verify text or reject text | 
|---|
| 6 | ; ORIT= ptr to 101.41 for quick order, 100 for copy | 
|---|
| 7 | ;       1   2    3    4   5   6    7    8        11-20 | 
|---|
| 8 | ; FLDS=DFN^LOC^ORNP^INPT^SEX^AGE^EVENT^SC%^^^Key Variables... | 
|---|
| 9 | ; ORIT=+ORIT: ptr to 101.41, $E(ORIT)=C: copy $E(ORIT)=X: change | 
|---|
| 10 | ; !! SHOULD CHECK for PRE-CPRS ORDERS (treat as text?) | 
|---|
| 11 | K ^TMP("ORWDXMQ",$J) | 
|---|
| 12 | N ORWMODE ; 0:Dialog,Quick 1:copy order 2:change order | 
|---|
| 13 | N TEMPCAT ; patient category from DPT file | 
|---|
| 14 | N ISXFER ; Transfer order? | 
|---|
| 15 | N ORIMO ;If IMO(inpatient medication on outpatient) | 
|---|
| 16 | N TEMPORIT | 
|---|
| 17 | S ORIMO=$G(ISIMO) | 
|---|
| 18 | S ORWMODE=0,ISXFER="" | 
|---|
| 19 | S:$E(ORIT)="C" ORWMODE=1 S:$E(ORIT)="T" ORWMODE=1,ISXFER=";T" ;treat xfer as copy for now | 
|---|
| 20 | S:$E(ORIT)="X" ORWMODE=2 | 
|---|
| 21 | S TEMPORIT=ORIT | 
|---|
| 22 | I ORWMODE S ORIT=$E(ORIT,2,999) | 
|---|
| 23 | S LST(0)="" | 
|---|
| 24 | D CHKDSBL^ORWDXM3(.LST,ORIT,ORWMODE) Q:+LST(0)=8  ;disable | 
|---|
| 25 | D CHKVACT^ORWDXM3(.LST,ORIT,ORWMODE,$P(FLDS,U,3)) Q:+LST(0)=8  ;action | 
|---|
| 26 | I ORWMODE=1 D CHKCOPY^ORWDXM3(.LST,ORIT,FLDS) Q:+LST(0)=8  ;no copy | 
|---|
| 27 | I ORWMODE=2 D BLD4CHG^ORWDXM3(.LST,ORIT,FLDS) Q  ;change | 
|---|
| 28 | I 'ORWMODE,($P(^ORD(101.41,+ORIT,0),U,4)="D"),'($O(^DIC(9.4,"C","OR",0))[$P(^ORD(101.41,+ORIT,0),U,7)) S LST(0)="0^0^"_$$DLGINFO^ORWDXM3(ORIT,ORWMODE_ISXFER) Q | 
|---|
| 29 | ;radilogy vars | 
|---|
| 30 | N ORIMTYPE | 
|---|
| 31 | ;blood bank vars | 
|---|
| 32 | N ORCOMP,ORTAS | 
|---|
| 33 | ;lab vars | 
|---|
| 34 | N LRFZX,LRFSAMP,LRFSPEC,LRFDATE,LRFURG,LRFSCH | 
|---|
| 35 | N ORTIME,ORCOLLCT,ORMAX,ORTEST,ORIMTIME,ORSMAX,ORSTMS,ORSCH | 
|---|
| 36 | ;pharmacy vars | 
|---|
| 37 | N PSJNOPC,ORMORE,ORINPT,ORXNP,ORSCHED,ORQTY,ORNOUNS,ORXNP,OREFILLS | 
|---|
| 38 | N ORCOMPLX,ORQTY,ORCOPAY,ORDRUG,ORWPSPIK,ORWPSWRG,ORSD,ORDSUP,ORWP94 | 
|---|
| 39 | ;dietetics vars | 
|---|
| 40 | N ORPARAM,ORNPO,ORTIME,ORMEAL,ORTRAY,ORDATE | 
|---|
| 41 | ;consults vars | 
|---|
| 42 | N GMRCNOPD,GMRCNOAT,GMRCREAF | 
|---|
| 43 | ; setup general env | 
|---|
| 44 | N ORTYPE,ORVP,ORL,ORNP,ORSEX,ORAGE,ORWARD,OREVENT,ORDIV,ORSC,KEYVAR | 
|---|
| 45 | N ORDG,ORDIALOG,ORCAT,FIRST,ORQUIT,X,ORTRAIL,ORLEAD,RSPREF,AUTOACK | 
|---|
| 46 | N OREVNTYP | 
|---|
| 47 | S ORWP94=$O(^ORD(101.41,"AB","PS MEDS",0))>0 | 
|---|
| 48 | S ORVP=$P(FLDS,U,1)_";DPT(",ORNP=+$P(FLDS,U,3),ORSC=$P(FLDS,U,8) | 
|---|
| 49 | S ORL=$P(FLDS,U,2)_";SC(",ORL(2)=ORL | 
|---|
| 50 | S ORSEX=$P(FLDS,U,5),ORAGE=$P(FLDS,U,6),ORTYPE="Q",FIRST=1 | 
|---|
| 51 | I $P(FLDS,U,4),$G(^SC(+ORL,42)) S ORWARD=+^SC(+ORL,42) | 
|---|
| 52 | I $L($P(FLDS,U,7))  D | 
|---|
| 53 | . S OREVENT=$P(FLDS,U,7) | 
|---|
| 54 | . S OREVNTYP=$P(OREVENT,";",2) | 
|---|
| 55 | . S OREVENT("TS")=$P(OREVENT,";",3) | 
|---|
| 56 | . S OREVENT("EFFECTIVE")=$P(OREVENT,";",4) | 
|---|
| 57 | . S OREVENT=+$P(OREVENT,";",1) | 
|---|
| 58 | I 'ORWMODE D | 
|---|
| 59 | . D SETKEYV^ORWDXM3($P(FLDS,U,11,20)) ; from menu path | 
|---|
| 60 | . S KEYVAR=$$KEYVAR^ORWDXM3(ORIT) ; from entry action | 
|---|
| 61 | . D SETKEYV^ORWDXM3(KEYVAR) | 
|---|
| 62 | K ^TMP("ORWORD",$J) | 
|---|
| 63 | ; init return record based on auto-accept | 
|---|
| 64 | I ORWMODE S LST(0)="2^"_ORIT ;verify on copy | 
|---|
| 65 | E  S LST(0)=+$P($G(^ORD(101.41,ORIT,5)),U,8)_U_ORIT | 
|---|
| 66 | S TEMPCAT=$S($L($P($G(^DPT(+ORVP,.1)),U)):"I",1:"O") | 
|---|
| 67 | I TEMPCAT="I",+$P(FLDS,U,4)=1,$E(TEMPORIT)="C",$P($G(^ORD(100.98,$P($G(^OR(100,+ORIT,0)),U,11),0)),U)="OUTPATIENT MEDICATIONS" S TEMPCAT="O" | 
|---|
| 68 | I $L($G(OREVNTYP)) D | 
|---|
| 69 | . S ORCAT=$S(OREVNTYP="A":"I",OREVNTYP="T":"I",OREVNTYP="O":TEMPCAT,OREVNTYP="M":TEMPCAT,OREVNTYP="C":TEMPCAT,1:"O") I $G(OREVENT) D | 
|---|
| 70 | .. N X S X=$$EVT^OREVNTX(OREVENT),X=$P($G(^ORD(100.5,+X,0)),U,7) | 
|---|
| 71 | .. I OREVNTYP="T",X,X<4 S ORCAT="O" ;To pass=outpt | 
|---|
| 72 | .. I OREVNTYP="D",X=41 S ORCAT="I" ;From ASIH=inpt | 
|---|
| 73 | E  S ORCAT=TEMPCAT | 
|---|
| 74 | D SETUP^ORWDXM4 Q:+LST(0)=8 | 
|---|
| 75 | S X=$S($G(ORWP94):"OR GTX START DATE/TIME",1:"OR GTX START DATE") | 
|---|
| 76 | I ORWMODE,(ORDG=+$O(^ORD(100.98,"B","O RX",0))) K ORDIALOG($$PTR^ORCD(X),1) | 
|---|
| 77 | D SETUPS^ORWDXM4 ; moved to save space | 
|---|
| 78 | Q:+LST(0)=8 | 
|---|
| 79 | I $G(ORQUIT) S LST(0)="0^0^"_$$DLGINFO^ORWDXM3(ORIT,ORWMODE_ISXFER)_"^"_$G(KEYVAR) Q | 
|---|
| 80 | N SEQ,DA,XCODE,MUSTASK,PROMPT,INST,KEY,IVFID | 
|---|
| 81 | S IVFID=$O(^ORD(101.41,"B","PSJI OR PAT FLUID OE",0)) | 
|---|
| 82 | S AUTOACK=$S($D(ORWPSWRG):0,1:1) | 
|---|
| 83 | S SEQ=0 F  S SEQ=$O(^ORD(101.41,+ORDIALOG,10,"B",SEQ)) Q:'SEQ  D | 
|---|
| 84 | . S DA=0 F  S DA=$O(^ORD(101.41,+ORDIALOG,10,"B",SEQ,DA)) Q:'DA  D | 
|---|
| 85 | . . ; skip if this is a child prompt | 
|---|
| 86 | . . I $P(^ORD(101.41,+ORDIALOG,10,DA,0),U,11) Q | 
|---|
| 87 | . . ; set default for prompt, see if needs to be interactive | 
|---|
| 88 | . . S PROMPT=$P(^ORD(101.41,+ORDIALOG,10,DA,0),U,2) | 
|---|
| 89 | . . D SETITEM(DA,PROMPT,1,.MUSTASK) | 
|---|
| 90 | . . I MUSTASK S AUTOACK=0 Q | 
|---|
| 91 | . . ; iterate through the child items if parent and edit only | 
|---|
| 92 | . . Q:'$D(^ORD(101.41,+ORDIALOG,10,"DAD",PROMPT)) | 
|---|
| 93 | . . N CSEQ,CDA,CPROMPT,INST,ORQUIT | 
|---|
| 94 | . . S CSEQ=0 F  S CSEQ=$O(^ORD(101.41,+ORDIALOG,10,"DAD",PROMPT,CSEQ)) Q:'CSEQ  D  Q:$G(ORQUIT) | 
|---|
| 95 | . . . S CDA=$O(^ORD(101.41,+ORDIALOG,10,"DAD",PROMPT,CSEQ,0)) | 
|---|
| 96 | . . . S CPROMPT=$P(^ORD(101.41,+ORDIALOG,10,CDA,0),U,2) | 
|---|
| 97 | . . . ; if req & no instances then need interaction | 
|---|
| 98 | . . . I $P(^ORD(101.41,+ORDIALOG,10,CDA,0),U,6),ORDIALOG'=IVFID,'$O(ORDIALOG(CPROMPT,0)) S AUTOACK=0 | 
|---|
| 99 | . . . S INST=0 F  S INST=$O(ORDIALOG(CPROMPT,INST)) Q:'INST  D | 
|---|
| 100 | . . . . N ORASK D VBASK^ORWDXM4(INST) ; set ORASK for VBECS | 
|---|
| 101 | . . . . ; set default for each child prompt, if necessary | 
|---|
| 102 | . . . . D SETITEM(CDA,CPROMPT,INST,.MUSTASK) | 
|---|
| 103 | . . . . ; if no val & child prmpt required then need interaction | 
|---|
| 104 | . . . . I MUSTASK,$P(^ORD(101.41,+ORDIALOG,10,CDA,0),U,6) S AUTOACK=0 | 
|---|
| 105 | N IVDLG | 
|---|
| 106 | S IVDLG=$O(^ORD(101.41,"AB","PSJI OR PAT FLUID OE",0)) | 
|---|
| 107 | I $$ISMED(ORIT),(ORDIALOG'=IVDLG),(ORCAT="I") D | 
|---|
| 108 | . F P="PATIENT INSTRUCTIONS","START DATE/TIME","DAYS SUPPLY","QUANTITY","REFILLS","ROUTING","SERVICE CONNECTED" K ORDIALOG($$PTR(P),1) | 
|---|
| 109 | S KEY=$S(ORWMODE:"C",1:"")_ORIT_"-"_$P($H,",",2),SEQ=0 | 
|---|
| 110 | S PROMPT=0 F  S PROMPT=$O(ORDIALOG(PROMPT)) Q:'PROMPT  D | 
|---|
| 111 | . I '$D(^ORD(101.41,ORDIALOG,10,"D",PROMPT)) K ORDIALOG(PROMPT) Q | 
|---|
| 112 | . S INST=0 F  S INST=$O(ORDIALOG(PROMPT,INST)) Q:'INST  D | 
|---|
| 113 | . . S SEQ=SEQ+1,^TMP("ORWDXMQ",$J,KEY,SEQ,0)=U_PROMPT_U_INST | 
|---|
| 114 | . . ; save word processing value | 
|---|
| 115 | . . I $E(ORDIALOG(PROMPT,0))="W",$L(ORDIALOG(PROMPT,INST)) D | 
|---|
| 116 | . . .  M ^TMP("ORWDXMQ",$J,KEY,SEQ,2)=@ORDIALOG(PROMPT,INST) | 
|---|
| 117 | . . ; save other value types | 
|---|
| 118 | . . E  S ^TMP("ORWDXMQ",$J,KEY,SEQ,1)=ORDIALOG(PROMPT,INST) | 
|---|
| 119 | I AUTOACK D | 
|---|
| 120 | . I ORWMODE S AUTOACK=2 | 
|---|
| 121 | . I 'ORWMODE,($P(^ORD(101.41,ORIT,0),U,8)!'LST(0)) S AUTOACK=2 | 
|---|
| 122 | I ($$ISMED(ORIT)),'($$VALQO^ORWDXM3(ORIT)) S AUTOACK=0 | 
|---|
| 123 | I ORIMO,ORWMODE S AUTOACK=2 | 
|---|
| 124 | ; added to accept Herbal/OTC/NonVA Med quick orders | 
|---|
| 125 | I $L($G(^ORD(101.41,+ORIT,0))),($P(^ORD(100.98,$P(^ORD(101.41,+ORIT,0),U,5),0),U,3)="NV RX"),($P($G(^ORD(101.41,+ORIT,5)),U,8)) S AUTOACK=1 | 
|---|
| 126 | ;I $G(^OR(100,+ORIT,0)),$P($G(^ORD(101.41,+$P(^OR(100,+ORIT,0),U,5),0)),U,8),$D(ORDIALOG("B","HERBAL/OTC/NON VA MEDICATION")) S AUTOACK=1 | 
|---|
| 127 | I AUTOACK=2 D VERTXT^ORWDXM2 | 
|---|
| 128 | S LST(0)=AUTOACK_U_KEY_U_$$DLGINFO^ORWDXM3(ORIT,ORWMODE_ISXFER)_"^"_$G(KEYVAR) | 
|---|
| 129 | I $P(LST(0),U,4)="D" S $P(LST(0),U,4)="Q" | 
|---|
| 130 | I ORWMODE=1 S $P(LST(0),U,4)="C" | 
|---|
| 131 | K ^TMP("ORWORD",$J) | 
|---|
| 132 | K ^TMP("PSJINS",$J),^TMP("PSJMR",$J),^TMP("PSJNOUN",$J) | 
|---|
| 133 | Q | 
|---|
| 134 | SETITEM(DA,PROMPT,INST,MUSTASK) ; set default value & return if must prompt | 
|---|
| 135 | N EDITONLY,Y,XCODE | 
|---|
| 136 | S MUSTASK=0,EDITONLY=0 | 
|---|
| 137 | I $D(^TMP("ORWDHTM",$J,ORDIALOG,PROMPT)) D | 
|---|
| 138 | . I $E(ORDIALOG(PROMPT,0))="W" D | 
|---|
| 139 | . . S ^TMP("ORWORD",$J,PROMPT,INST,1,0)=^TMP("ORWDHTM",$J,ORDIALOG,PROMPT) | 
|---|
| 140 | . . S ORDIALOG(PROMPT,INST)="^TMP(""ORWORD"","_$J_","_PROMPT_","_INST_")" | 
|---|
| 141 | . E  S ORDIALOG(PROMPT,INST)=^TMP("ORWDHTM",$J,ORDIALOG,PROMPT) | 
|---|
| 142 | I $D(^TMP("ORWDHTM",$J,ORIT,PROMPT)) D | 
|---|
| 143 | . S ORDIALOG(PROMPT,INST)=^TMP("ORWDHTM",$J,ORIT,PROMPT) | 
|---|
| 144 | . ; NEED TO CLEAN UP ^TMP("ORWDHTM") after process order set!!! | 
|---|
| 145 | ; | 
|---|
| 146 | ; skip if a value already exists for this prompt and not WP | 
|---|
| 147 | Q:$D(ORDIALOG(PROMPT,INST))&($E(ORDIALOG(PROMPT,0))'="W") | 
|---|
| 148 | ; execute default action if no value in QO, checking EDITONLY afterwards | 
|---|
| 149 | I '$D(ORDIALOG(PROMPT,INST)) D | 
|---|
| 150 | . I $E(ORDIALOG(PROMPT,0))="W",$D(^ORD(101.41,+ORDIALOG,10,DA,8))>9 D | 
|---|
| 151 | . . M ^TMP("ORWORD",$J,PROMPT,INST)=^ORD(101.41,+ORDIALOG,10,DA,8) | 
|---|
| 152 | . . S ORDIALOG(PROMPT,INST)="^TMP(""ORWORD"","_$J_","_PROMPT_","_INST_")" | 
|---|
| 153 | . E  D | 
|---|
| 154 | . . S XCODE=$$SUBCODE($G(^ORD(101.41,+ORDIALOG,10,DA,7))) | 
|---|
| 155 | . . I $L(XCODE) X XCODE S:$D(Y) ORDIALOG(PROMPT,INST)=Y | 
|---|
| 156 | Q:$G(EDITONLY) | 
|---|
| 157 | I 'ORWMODE,$P($G(^ORD(101.41,+ORDIALOG,10,DA,0)),U,8) Q | 
|---|
| 158 | I ORWMODE,($P($G(^ORD(101.41,+ORDIALOG,10,DA,0)),U,9)'["W"),'$P($G(^ORD(101.41,+ORDIALOG,10,DA,0)),U,6)!$D(ORDIALOG(PROMPT,INST)) Q | 
|---|
| 159 | I 'ORWMODE,LST(0),$D(ORDIALOG(PROMPT,INST)),($E(ORDIALOG(PROMPT,0))="W") Q | 
|---|
| 160 | I 'ORWMODE,LST(0),'$P($G(^ORD(101.41,+ORDIALOG,10,DA,0)),U,6) Q | 
|---|
| 161 | S XCODE=$$SUBCODE($G(^ORD(101.41,+ORDIALOG,10,DA,3))) | 
|---|
| 162 | I $L(XCODE) X XCODE Q:'$T | 
|---|
| 163 | S MUSTASK=1 | 
|---|
| 164 | Q | 
|---|
| 165 | SUBCODE(X) ; substitute code | 
|---|
| 166 | I X["$$REQDCOMM^ORCDLR" Q "I $$LRRQCM^ORWDXM2" | 
|---|
| 167 | I X["$$ASKSAMP^ORCDLR" Q "I $$LRASMP^ORWDXM2" | 
|---|
| 168 | I X["$$SCHEDULD^ORCDRA1" Q "I $$SCHEDULD^ORWDXM2" | 
|---|
| 169 | I X["(^PSX(550,""C"")" Q "S Y=$E($$DEFPICK^ORWDPS32) K:'$L(Y) Y" | 
|---|
| 170 | I X["I $$ASKURG^ORCDVBEC" Q "I 1" | 
|---|
| 171 | I X["K:$G(ORASK)" Q "I $G(ORASK)" | 
|---|
| 172 | Q X | 
|---|
| 173 | PTR(NAME) ; -- Returns pointer to OR GTX NAME | 
|---|
| 174 | Q +$O(^ORD(101.41,"AB",$E("OR GTX "_NAME,1,63),0)) | 
|---|
| 175 | ; | 
|---|
| 176 | ISMED(IFN) ; return 1 if pharmacy order dlg used | 
|---|
| 177 | N PKG | 
|---|
| 178 | I 'ORWMODE S PKG=$P($G(^ORD(101.41,IFN,0)),U,7) | 
|---|
| 179 | E  S PKG=$P($G(^OR(100,+IFN,0)),U,14) | 
|---|
| 180 | Q $$NMSP^ORCD(PKG)="PS" | 
|---|