| 1 | ORWDXR ; SLC/KCM/JDL - Utilites for Order Actions ;5/6/04  14:50 | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,125,131,134,141,149,187,190,213**;Dec 17, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | ISREL(VAL,ORIFN) ; Return true if an order has been released | 
|---|
| 5 | N STS S STS=$P(^OR(100,+ORIFN,3),U,3) | 
|---|
| 6 | S VAL=$S(STS=10:0,STS=11:0,1:1)  ; false if delayed or unreleased order | 
|---|
| 7 | Q | 
|---|
| 8 | RENEW(REC,ORIFN,ORVP,ORNP,ORL,FLDS,CPLX,ORAPPT) ; Renew an order | 
|---|
| 9 | N ORDG | 
|---|
| 10 | N ORDUZ,ORSTS,OREVENT,ORCAT,ORDA,ORTS,ORNEW,ORCHECK,ORLOG,ORPKG | 
|---|
| 11 | N ORDIALOG,PRMT,X0 | 
|---|
| 12 | N FSTDOSE,FST | 
|---|
| 13 | S (FSTDOSE,FST)=0 | 
|---|
| 14 | I '$D(CPLX) S CPLX=0 | 
|---|
| 15 | I '$G(ORAPPT) S ORAPPT="" | 
|---|
| 16 | S ORVP=ORVP_";DPT(",ORL(2)=ORL_";SC(",ORL=ORL(2) | 
|---|
| 17 | S X0=^OR(100,+ORIFN,0) | 
|---|
| 18 | S ORDG=$P(X0,U,11) | 
|---|
| 19 | S ORPKG=$P(X0,U,14) | 
|---|
| 20 | I $D(FLDS("ORCHECK")) M ORCHECK=FLDS("ORCHECK") | 
|---|
| 21 | I $P(X0,U,5)["101.41," D                        ; version 3 | 
|---|
| 22 | . S ORDIALOG=+$P(X0,U,5),ORCAT=$P(^OR(100,+ORIFN,0),U,12) | 
|---|
| 23 | . D GETDLG^ORCD(ORDIALOG),GETORDER^ORCD(+ORIFN) | 
|---|
| 24 | . I CPLX S FSTDOSE=$P($G(ORDIALOG("B","FIRST DOSE")),U,2) S:'FSTDOSE FSTDOSE=$$PTR^ORCD("OR GTX NOW") | 
|---|
| 25 | . I FSTDOSE,$G(ORDIALOG(FSTDOSE,1)) K ORDIALOG(FSTDOSE,1) | 
|---|
| 26 | E  D                                            ; version 2.5 generic | 
|---|
| 27 | . S ORDIALOG=$O(^ORD(101.41,"B","OR GXTEXT WORD PROCESSING ORDE",0)) | 
|---|
| 28 | . D GETDLG^ORCD(ORDIALOG) | 
|---|
| 29 | . S PRMT=$O(^ORD(101.41,"B","OR GTX WORD PROCESSING 1",0)) | 
|---|
| 30 | . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1)) | 
|---|
| 31 | . M ^TMP("ORWORD",$J,PRMT,1)=^OR(100,+ORIFN,1) | 
|---|
| 32 | . S PRMT=$O(^ORD(101.41,"B","OR GTX START DATE/TIME",0)) | 
|---|
| 33 | . I $P(X0,U,9) S ORDIALOG(PRMT,1)=$P(X0,U,9) | 
|---|
| 34 | I +FLDS(1)=999 D  ; generic order | 
|---|
| 35 | . S ORDIALOG($$PTR^ORCD("OR GTX START DATE/TIME"),1)=$P(FLDS(1),U,2) | 
|---|
| 36 | . S ORDIALOG($$PTR^ORCD("OR GTX STOP DATE/TIME"),1)=$P(FLDS(1),U,3) | 
|---|
| 37 | I ($O(^ORD(101.41,"AB","PS MEDS",0))>0),(+FLDS(1)=130)!(+FLDS(1)=135)!(+FLDS(1)=140),'$L($G(ORDIALOG($$PTR^ORCD("OR GTX SIG"),1))) D | 
|---|
| 38 | . N ORDOSE,ORDRUG,ORCAT,ORWPSOI,PROMPT,DRUG | 
|---|
| 39 | . S ORCAT=$P($G(^OR(100,+ORIFN,0)),U,12) | 
|---|
| 40 | . S PROMPT=$$PTR^ORCD("OR GTX INSTRUCTIONS") | 
|---|
| 41 | . S ORDRUG=$G(ORDIALOG($$PTR^ORCD("OR GTX DISPENSE DRUG"),1)) | 
|---|
| 42 | . S ORWPSOI=+$G(ORDIALOG($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1)) | 
|---|
| 43 | . I ORWPSOI S ORWPSOI=+$P($G(^ORD(101.43,+ORWPSOI,0)),U,2) | 
|---|
| 44 | . D DOSE^PSSORUTL(.ORDOSE,ORWPSOI,$S(ORCAT="I":"U",1:"O"),ORVP)       ; dflt doses | 
|---|
| 45 | . D D1^ORCDPS2  ; set up ORDOSE | 
|---|
| 46 | . S DRUG=$G(ORDOSE("DD",+ORDRUG)) | 
|---|
| 47 | . I DRUG,ORCAT="O" D RESETID^ORCDPS | 
|---|
| 48 | . D SIG^ORCDPS2 | 
|---|
| 49 | I +FLDS(1)=140 D  ; outpatient meds | 
|---|
| 50 | . K ORDIALOG($$PTR^ORCD("OR GTX START DATE"),1) ; remove effective dt | 
|---|
| 51 | . S ORDIALOG($$PTR^ORCD("OR GTX REFILLS"),1)=$P(FLDS(1),U,4) | 
|---|
| 52 | . S ORDIALOG($$PTR^ORCD("OR GTX ROUTING"),1)=$P(FLDS(1),U,5) | 
|---|
| 53 | . S PRMT=$$PTR^ORCD("OR GTX WORD PROCESSING 1") | 
|---|
| 54 | . K ^TMP("ORWORD",$J,PRMT,1) | 
|---|
| 55 | . S I=1 F  S I=$O(FLDS(I)) Q:'I  S ^TMP("ORWORD",$J,PRMT,1,I-1,0)=FLDS(I) | 
|---|
| 56 | . S ^TMP("ORWORD",$J,PRMT,1,0)=U_U_(I-1)_U_(I-1)_U_DT_U | 
|---|
| 57 | . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1)) | 
|---|
| 58 | D RN^ORCSAVE | 
|---|
| 59 | S REC="" S ORIFN=+ORIFN_";"_ORDA D GETBYIFN^ORWORR(.REC,ORIFN) | 
|---|
| 60 | Q | 
|---|
| 61 | RNWFLDS(LST,ORIFN)      ; Return fields for renew action | 
|---|
| 62 | ; LST(0)=RenewType^Start^Stop^Refills^Pickup  LST(n)=Comments | 
|---|
| 63 | N X0,DG,PKG,RNWTYPE,START,STOP,REFILLS | 
|---|
| 64 | S ORIFN=+ORIFN,X0=^OR(100,ORIFN,0),DG=$P(X0,U,11),PKG=$P(X0,U,14) | 
|---|
| 65 | S PKG=$E($P(^DIC(9.4,PKG,0),U,2),1,2),DG=$P(^ORD(100.98,DG,0),U,3) | 
|---|
| 66 | S LST(0)=$S(PKG="OR":999,PKG="PS"&(DG="O RX"):140,PKG="PS"&(DG="UD RX"):130,PKG="PS"&(DG="NV RX"):145,1:0) | 
|---|
| 67 | I +LST(0)=140 D | 
|---|
| 68 | . S LST(0)=LST(0)_U_U_U_+$$VAL(ORIFN,"REFILLS")_U_$$VAL(ORIFN,"PICKUP") | 
|---|
| 69 | . D WPVAL(.LST,ORIFN,"COMMENT") | 
|---|
| 70 | I +LST(0)=999 S LST(0)=LST(0)_U_$$VAL(ORIFN,"START")_U_$$VAL(ORIFN,"STOP") | 
|---|
| 71 | ; make sure start/stop times are relative times, otherwise use NOW, no Stop | 
|---|
| 72 | I +$P(LST(0),U,2) S $P(LST(0),U,2)="NOW" | 
|---|
| 73 | I +$P(LST(0),U,3)!($P(LST(0),U,3)="0") S $P(LST(0),U,3)="" | 
|---|
| 74 | Q | 
|---|
| 75 | VAL(ORIFN,ID)   ; Return value for order response | 
|---|
| 76 | N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0)) | 
|---|
| 77 | Q $G(^OR(100,ORIFN,4.5,DA,1)) | 
|---|
| 78 | WPVAL(TXT,ORIFN,ID)    ; Return word processing value | 
|---|
| 79 | N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0)) | 
|---|
| 80 | S I=0 F  S I=$O(^OR(100,ORIFN,4.5,DA,2,I)) Q:'I  S TXT(I)=^(I,0) | 
|---|
| 81 | Q | 
|---|
| 82 | CHKACT(ORDERID,ORWSIG,ORWREL,ORWNATR) ; Return error if can't sign/release order | 
|---|
| 83 | N ORACT,ORWERR | 
|---|
| 84 | ; begin case | 
|---|
| 85 | S ORACT="" | 
|---|
| 86 | I (ORWSIG=1),$D(^XUSEC("ORES",DUZ)) S ORACT="ES" G XC1 | 
|---|
| 87 | I (ORWSIG=7),$D(^XUSEC("ORES",DUZ)) S ORACT="DS" G XC1 | 
|---|
| 88 | I ORWREL,(ORWNATR="W") S ORACT="OC" G XC1 | 
|---|
| 89 | I ORWREL S ORACT="RS" S:$P($G(^OR(100,+ORDERID,0)),U,16)<2 ORACT="ES" | 
|---|
| 90 | XC1 ; end case | 
|---|
| 91 | S ORWERR="" | 
|---|
| 92 | I $L(ORACT),$$VALID^ORCACT0(ORDERID,ORACT,.ORWERR,ORWNATR) S ORWERR="" | 
|---|
| 93 | Q ORWERR | 
|---|
| 94 | GTORITM(Y,ORIFN)        ;-- Get back the orderable item IEN | 
|---|
| 95 | S ORIFN=+ORIFN | 
|---|
| 96 | S Y=$$VALUE^ORCSAVE2(ORIFN,"ORDERABLE") | 
|---|
| 97 | Q | 
|---|
| 98 | GETPKG(Y,IFN) ;Get package for an order | 
|---|
| 99 | N ORDERID,PKGID | 
|---|
| 100 | Q:+IFN<1 | 
|---|
| 101 | S ORDERID=+IFN,Y="" | 
|---|
| 102 | S PKGID=$P(^OR(100,ORDERID,0),U,14) | 
|---|
| 103 | S:PKGID>0 Y=$P(^DIC(9.4,PKGID,0),U,2) | 
|---|
| 104 | Q | 
|---|
| 105 | ISCPLX(ORY,ORID) ; 1: is complex order 0: is not | 
|---|
| 106 | Q:'$D(^OR(100,+ORID,0)) | 
|---|
| 107 | N PKG | 
|---|
| 108 | S PKG=$P($G(^OR(100,+ORID,0)),U,14) | 
|---|
| 109 | S PKG=$$NMSP^ORCD(PKG) | 
|---|
| 110 | I PKG'="PS" Q | 
|---|
| 111 | N NUMCHDS,NOWID,NOWVAL | 
|---|
| 112 | S (NOWVAL,NOWID)=0 | 
|---|
| 113 | S NUMCHDS=$P($G(^OR(100,+ORID,2,0)),U,4) | 
|---|
| 114 | I NUMCHDS>2 S ORY=1 Q | 
|---|
| 115 | I NUMCHDS=2 D | 
|---|
| 116 | . S ORY=1 | 
|---|
| 117 | . S:$D(^OR(100,+ORID,4.5,"ID","NOW")) NOWID=$O(^("NOW",0)) | 
|---|
| 118 | . S:NOWID NOWVAL=$G(^OR(100,+ORID,4.5,NOWID,1)) | 
|---|
| 119 | I NOWVAL=1 S ORY=0 Q | 
|---|
| 120 | Q | 
|---|
| 121 | ORCPLX(ORY,ORID,ORACT) ;Return children orders of the complex order | 
|---|
| 122 | Q:'$D(^OR(100,+ORID,0)) | 
|---|
| 123 | N PKG,LACT,OELACT,ISNOW | 
|---|
| 124 | S PKG=$P($G(^OR(100,+ORID,0)),U,14) | 
|---|
| 125 | S PKG=$$NMSP^ORCD(PKG) | 
|---|
| 126 | I PKG'="PS" Q | 
|---|
| 127 | N CHLDCNT,IDX,X3 | 
|---|
| 128 | S (CHLDCNT,IDX)=0 | 
|---|
| 129 | S:$L($G(^OR(100,+ORID,2,0))) CHLDCNT=$P(^(0),U,4) | 
|---|
| 130 | I 'CHLDCNT Q | 
|---|
| 131 | F  S IDX=$O(^OR(100,+ORID,2,IDX)) Q:'IDX  D | 
|---|
| 132 | . S (LACT,OELACT,ISNOW)=0 | 
|---|
| 133 | . D ISNOW(.ISNOW,IDX) | 
|---|
| 134 | . Q:ISNOW | 
|---|
| 135 | . S X3=$G(^OR(100,IDX,3)) | 
|---|
| 136 | . S LACT=$P(X3,U,7) | 
|---|
| 137 | . F  S OELACT=$O(^OR(100,IDX,8,OELACT),-1) Q:OELACT | 
|---|
| 138 | . S:OELACT>LACT LACT=OELACT | 
|---|
| 139 | . S ORY(IDX)=IDX_";"_LACT | 
|---|
| 140 | Q | 
|---|
| 141 | CANRN(ORY,ORID) ; Check conjunction for renew. | 
|---|
| 142 | ; All conjunctioni = "And" return 1 | 
|---|
| 143 | ; Has a "Then" return 0 | 
|---|
| 144 | Q:'$G(^OR(100,+ORID,0)) | 
|---|
| 145 | N PKG | 
|---|
| 146 | S PKG=$P($G(^OR(100,+ORID,0)),U,14) | 
|---|
| 147 | S PKG=$$NMSP^ORCD(PKG) | 
|---|
| 148 | I PKG'="PS" Q | 
|---|
| 149 | N INDX,INDY,CANRENEW | 
|---|
| 150 | S INDX=0 | 
|---|
| 151 | S CANRENEW=1 | 
|---|
| 152 | N CHID | 
|---|
| 153 | S CHID=0 F  S CHID=$O(^OR(100,+ORID,2,CHID)) Q:'CHID  D | 
|---|
| 154 | . N ORSTS,ACTIVE S ORSTS=0 | 
|---|
| 155 | . S ORSTS=$P($G(^OR(100,CHID,3)),U,3) | 
|---|
| 156 | . S ACTIVE=$O(^ORD(100.01,"B","ACTIVE",0)) | 
|---|
| 157 | . I ACTIVE'=ORSTS S CANRENEW=0 | 
|---|
| 158 | I 'CANRENEW S ORY=CANRENEW Q | 
|---|
| 159 | F  S INDX=$O(^OR(100,+ORID,4.5,"ID","CONJ",INDX)) Q:'INDX  D | 
|---|
| 160 | . S INDY=0 F  S INDY=$O(^OR(100,+ORID,4.5,INDX,INDY)) Q:'INDY  D | 
|---|
| 161 | . . I $G(^(INDY))="T" S CANRENEW=0 Q | 
|---|
| 162 | . I CANRENEW=0 Q | 
|---|
| 163 | S ORY=CANRENEW | 
|---|
| 164 | Q | 
|---|
| 165 | ISNOW(ORY,ORID) ; Is first time now order? | 
|---|
| 166 | N SCH | 
|---|
| 167 | Q:'$D(^OR(100,+ORID,0)) | 
|---|
| 168 | S SCH="" | 
|---|
| 169 | S SCH=$O(^OR(100,+ORID,4.5,"ID","SCHEDULE",0)) | 
|---|
| 170 | S:SCH SCH=$G(^OR(100,+ORID,4.5,SCH,1)) | 
|---|
| 171 | S:SCH="NOW" ORY=1 | 
|---|
| 172 | Q | 
|---|