| 1 | ORCSEND3        ;SLC/MKB,AGP-Release cont ;05/20/2008
 | 
|---|
| 2 |         ;;3.0;ORDER ENTRY/RESULTS REPORTING;**243**;Dec 17, 1997;Build 242
 | 
|---|
| 3 |         ;
 | 
|---|
| 4 | CHILD(STRT)     ; Create child order, send to package
 | 
|---|
| 5 |         N ORAPPT
 | 
|---|
| 6 |         K ORIFN D EN^ORCSAVE Q:'$G(ORIFN)  D STARTDT^ORCSAVE2(ORIFN)
 | 
|---|
| 7 |         I $G(STRT) D DATES^ORCSAVE2(ORIFN,STRT)
 | 
|---|
| 8 |         S ORCHLD=+$G(ORCHLD)+1,^OR(100,ORPARENT,2,ORIFN,0)=ORIFN,ORLAST=ORIFN
 | 
|---|
| 9 |         S ORAPPT=$P($G(^OR(100,ORPARENT,0)),U,18)
 | 
|---|
| 10 |         S $P(^OR(100,ORIFN,0),U,18)=ORAPPT,$P(^(3),U,9)=ORPARENT
 | 
|---|
| 11 |         I $G(PKG)="LR" S $P(^OR(100,ORIFN,8,1,0),U,4)=8 K ^OR(100,"AS",ORVP,9999999-ORLOG,ORIFN,1) ;signature tracked on parent order only, for Labs
 | 
|---|
| 12 |         I $G(PKG)?1"PS".E D
 | 
|---|
| 13 |         . N X0 S X0=$G(^OR(100,ORPARENT,8,1,0))
 | 
|---|
| 14 |         . I $P(X0,U,4)'=2 D SIGN^ORCSAVE2(ORIFN,+$P(X0,U,5),ORNOW,$P(X0,U,4),1)
 | 
|---|
| 15 |         . I $D(^OR(100,ORPARENT,9)) M ^OR(100,ORIFN,9)=^OR(100,ORPARENT,9)
 | 
|---|
| 16 |         . I $G(ORENEW) S OLD=$O(ORENEW(0)) I OLD S $P(^OR(100,OLD,3),U,6)=ORIFN,$P(^OR(100,ORIFN,3),U,5)=OLD,$P(^(3),U,11)=2 K ORENEW(OLD)
 | 
|---|
| 17 |         D RELEASE^ORCSAVE2(ORIFN,1,ORNOW,DUZ,$G(NATURE)),NEW^ORMBLD(ORIFN)
 | 
|---|
| 18 |         Q
 | 
|---|
| 19 |         ;
 | 
|---|
| 20 | DOSES(IFN)      ;
 | 
|---|
| 21 |         N I,CNT S CNT=0
 | 
|---|
| 22 |         S I=+$O(^OR(100,+$G(IFN),4.5,"ID","NOW",0)) I I,$G(^OR(100,+$G(IFN),4.5,I,1)) S CNT=CNT+1
 | 
|---|
| 23 |         Q CNT
 | 
|---|
| 24 |         ;
 | 
|---|
| 25 | GETORDER(IFN)   ; Set ORX(Inst,Ptr)=Value
 | 
|---|
| 26 |         N I,X,Y,PTR,INST,TYPE,SOLCNT,ADDCNT
 | 
|---|
| 27 |         S (SOLCNT,ADDCNT)=0
 | 
|---|
| 28 |         S I=0 F  S I=$O(^OR(100,IFN,4.5,I)) Q:I'>0  S X=$G(^(I,0)),Y=$G(^(1)) D
 | 
|---|
| 29 |         . S PTR=+$P(X,U,2),INST=+$P(X,U,3),TYPE=$P($G(^ORD(101.41,PTR,1)),U)
 | 
|---|
| 30 |         . I TYPE'="W" S ORX(PTR,INST)=Y Q
 | 
|---|
| 31 |         . ;S ORX(INST,PTR)="^OR(100,"_IFN_",4.5,"_I_",2)"
 | 
|---|
| 32 |         . S ORX(PTR,INST)="^OR(100,"_IFN_",4.5,"_I_",2)"
 | 
|---|
| 33 |         Q
 | 
|---|
| 34 | PSJI    ;
 | 
|---|
| 35 |         ;IV dialog
 | 
|---|
| 36 |         N ORPARENT,OR0,ORNP,ORDIALOG,ORDUZ,ORLOG,ORL,ORDG,ORCAT,ORX,ORP,ORI,STS
 | 
|---|
| 37 |         N ORDOSE,ORT,ORSCH,ORDUR,ORSTRT,ORFRST,ORCONJ,ORID,ORDD,ORSTR,ORDGNM
 | 
|---|
| 38 |         N ORSTART,ORCHLD,ORLAST,ORSIG,OROI,ID,OR3,ORIG,CODE,PKG,ORENEW,I,ORADMIN
 | 
|---|
| 39 |         N ORDUR
 | 
|---|
| 40 |         N CNT
 | 
|---|
| 41 |         S ORPARENT=+ORIFN,OR0=$G(^OR(100,ORPARENT,0)),OR3=$G(^OR(100,ORPARENT,3))
 | 
|---|
| 42 |         S ORCAT="I",ORNP=+$P(OR0,U,4)
 | 
|---|
| 43 |         ;Q:$P(OR0,U,12)'="I"  S ORCAT="I",ORNP=+$P(OR0,U,4)
 | 
|---|
| 44 |         S ORDIALOG=+$P(OR0,U,5),ORDUZ=+$P(OR0,U,6),ORLOG=$P(OR0,U,7)
 | 
|---|
| 45 |         S ORL=$P(OR0,U,10),ORDG=+$P(OR0,U,11),PKG=$$GET1^DIQ(9.4,+$P(OR0,U,14)_",",1)
 | 
|---|
| 46 |         ;Build ORDIALOG Array and ORX local array
 | 
|---|
| 47 |         D GETDLG1^ORCD(ORDIALOG),GETORDER(ORPARENT)
 | 
|---|
| 48 |         ;
 | 
|---|
| 49 |         S ORSCH=$$PTR("SCHEDULE"),ORDUR=$$PTR("DURATION")
 | 
|---|
| 50 |         D STRT S ORSTART=$G(ORSTRT("BEG"))
 | 
|---|
| 51 |         S ORADMIN=$$PTR("ADMIN TIMES")
 | 
|---|
| 52 |         D DATES^ORCSAVE2(ORPARENT,ORSTART) Q:$$DOSES(ORPARENT)<1
 | 
|---|
| 53 |         S ORFRST=$$PTR("NOW"),ORSIG=$$PTR("SIG")
 | 
|---|
| 54 |         ;
 | 
|---|
| 55 |         I $P(OR3,U,11)=2,$O(^OR(100,+$P(OR3,U,5),2,0)) D
 | 
|---|
| 56 |         . S ORENEW=+$P(OR3,U,5),I=0
 | 
|---|
| 57 |         . I $$VALUE^ORX8(ORENEW,"NOW") S I=$O(^OR(100,ORENEW,2,0))
 | 
|---|
| 58 |         . F  S I=$O(^OR(100,ORENEW,2,I)) Q:I<1  S ORENEW(I)=""
 | 
|---|
| 59 |         ;
 | 
|---|
| 60 | PSJI1   ;
 | 
|---|
| 61 |         ;Build Order Dialog Prompts that can have Multiple Responses
 | 
|---|
| 62 |         F ORP="ADDITIVE","ORDERABLE ITEM","STRENGTH PSIV","UNITS","VOLUME" D
 | 
|---|
| 63 |         . N PTR S PTR=$$PTR(ORP) Q:PTR'>0  Q:'$D(ORX(PTR,1))
 | 
|---|
| 64 |         . S CNT=0 F  S CNT=$O(ORX(PTR,CNT)) Q:CNT'>0  S ORDIALOG(PTR,CNT)=ORX(PTR,CNT)
 | 
|---|
| 65 |         ;
 | 
|---|
| 66 |         ;Build Order Dialog Responses that should be in both Child Orders
 | 
|---|
| 67 |         F ORP="INFUSION RATE","IV TYPE","ROUTE","URGENCY","WORD PROCESSING 1" D
 | 
|---|
| 68 |         . N PTR S PTR=$$PTR(ORP) Q:PTR'>0  Q:'$D(ORX(PTR,1))
 | 
|---|
| 69 |         . S ORDIALOG(PTR,1)=ORX(PTR,1) S:$E(ORP)="O" OROI=ORX(PTR,1) Q
 | 
|---|
| 70 |         ;
 | 
|---|
| 71 |         ;If NOW order create NOW Child Order
 | 
|---|
| 72 |         I $G(ORX(ORFRST,1)) D
 | 
|---|
| 73 |         . S:$D(ORX(ORP,1)) ORDIALOG(ORP,1)=ORX(ORP,1)
 | 
|---|
| 74 |         . ;S ID=$G(ORX(ORI,ORID)) S:$P(ID,"&",6) ORDIALOG(ORDD,1)=$P(ID,"&",6)
 | 
|---|
| 75 |         . S ORDIALOG(ORSCH,1)="NOW",ORSTART=$$NOW^XLFDT
 | 
|---|
| 76 |         . D CHILD(ORSTART)
 | 
|---|
| 77 |         ;
 | 
|---|
| 78 |         ;Build Order Fields for non-NOW Child Order
 | 
|---|
| 79 |         F ORP=ORSCH,ORADMIN,ORDUR S:$D(ORX(ORP,1)) ORDIALOG(ORP,1)=ORX(ORP,1) K:'$D(ORX(ORP,1)) ORDIALOG(ORP,1)
 | 
|---|
| 80 |         S ORSTART=$G(ORSTRT(1))
 | 
|---|
| 81 |         D CHILD(ORSTART)
 | 
|---|
| 82 |         ;
 | 
|---|
| 83 |         S:$G(ORCHLD) ^OR(100,ORPARENT,2,0)="^100.002PA^"_ORLAST_U_ORCHLD
 | 
|---|
| 84 |         S ORIFN=ORPARENT,ORQUIT=1,OR3=$G(^OR(100,ORIFN,3)),STS=$P(OR3,U,3)
 | 
|---|
| 85 |         I (STS=1)!(STS=13)!(STS=11) S ORERR="1^Unable to release orders"
 | 
|---|
| 86 |         D RELEASE^ORCSAVE2(ORIFN,1,ORNOW,DUZ,$G(NATURE)) K ^TMP("ORWORD",$J)
 | 
|---|
| 87 |         S $P(^OR(100,ORIFN,3),U,8)=1 ;veil parent order - set stop date/time?
 | 
|---|
| 88 |         Q:(STS=1)!(STS=13)!(STS=11)  ;unsuccessful
 | 
|---|
| 89 | PSJI2   ; ck if parent is unsigned or edit
 | 
|---|
| 90 |         I $P($G(^OR(100,ORIFN,8,1,0)),U,4)=2 S $P(^(0),U,4)="" K ^OR(100,"AS",ORVP,9999999-ORLOG,ORIFN,1) ;clear ES
 | 
|---|
| 91 |         Q:$P(OR3,U,11)'=1  S ORIG=$P(OR3,U,5) Q:ORIG'>0
 | 
|---|
| 92 |         S CODE=$S($P($G(^OR(100,ORIG,3)),U,3)=5:"CA",1:"DC")
 | 
|---|
| 93 |         D MSG^ORMBLD(ORIG,CODE) I "^1^13^"[(U_$P($G(^OR(100,ORIG,3)),U,3)_U) D
 | 
|---|
| 94 |         . N NATR S NATR=+$O(^ORD(100.02,"C","C",0))
 | 
|---|
| 95 |         . S $P(^OR(100,ORIG,3),U,3)=12,$P(^(3),U,7)=0,^(6)=NATR_U_DUZ_U_ORNOW
 | 
|---|
| 96 |         . D CANCEL^ORCSEND(ORIG) ;ck for unrel actions
 | 
|---|
| 97 |         Q
 | 
|---|
| 98 | PTR(X)  ; Returns ptr of prompt X in Order Dialog file
 | 
|---|
| 99 |         Q +$O(^ORD(101.41,"AB",$E("OR GTX "_X,1,63),0))
 | 
|---|
| 100 |         ;
 | 
|---|
| 101 | STRT    ; Build ORSTRT(inst)=date.time array of start times by dose
 | 
|---|
| 102 |         N OI,PSOI,XD,XH,XM,XS,ORWD,ORI,SCH,ORSD,X,ORD K ORSTRT
 | 
|---|
| 103 |         S OI=$G(ORX($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1))
 | 
|---|
| 104 |         ;if OI is null assume Intermittent IV order this does not required a 
 | 
|---|
| 105 |         ;solution check for an additive only value
 | 
|---|
| 106 |         I OI="" S OI=$G(ORX($$PTR^ORCD("OR GTX ADDITIVE"),1))
 | 
|---|
| 107 |         S PSOI=+$P($G(^ORD(101.43,+OI,0)),U,2),(XD,XH,XM,XS)=0
 | 
|---|
| 108 |         S ORWD=+$G(^SC(+$G(ORL),42)) ;ward
 | 
|---|
| 109 |         ;S ORI=0 F  S ORI=$O(ORX(ORI)) Q:ORI<1  D
 | 
|---|
| 110 |         S SCH=$G(ORX(ORSCH,1)),ORSD="" S:'$L(SCH) X=$$NOW^XLFDT
 | 
|---|
| 111 |         S:$L(SCH) ORSD=$$STARTSTP^PSJORPOE(+ORVP,SCH,PSOI,ORWD),X=$P(ORSD,U,4)
 | 
|---|
| 112 |         S ORSTRT(1)=$$FMADD^XLFDT(X,XD,XH,XM,XS) ;START+OFFSET
 | 
|---|
| 113 |         ; find beginning date.time for parent
 | 
|---|
| 114 |         S ORI=0,X=9999999 F  S ORI=$O(ORSTRT(ORI)) Q:ORI<1  I ORSTRT(ORI)<X S X=ORSTRT(ORI)
 | 
|---|
| 115 |         S ORSTRT("BEG")=X
 | 
|---|
| 116 |         Q
 | 
|---|