ORMPS ; SLC/MKB - Process Pharmacy ORM msgs ;12/3/03 10:32 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**3,54,62,86,92,94,116,138,152,141,165,149,213,195**;Dec 17, 1997 ; EN ; -- entry point I '$L($T(@ORDCNTRL)) Q ;S ORERR="Invalid order control code" Q I ORDCNTRL'="SN",ORDCNTRL'="ZC",ORDCNTRL'="ZP",'ORIFN!('$D(^OR(100,+ORIFN,0))) S ORERR="Invalid OE/RR order number" Q N ORSTS,RXE,ZRX,ORWHO,ORNOW S ORSTS=$$STATUS(ORDSTS),RXE=$$RXE,ZRX=$$ZRX D QT^ORMPS1 ;QT in RXE S ORNOW=+$E($$NOW^XLFDT,1,12),ORWHO=+$P(ZRX,"|",6) S:'ORWHO ORWHO=DUZ S:ORLOG ORLOG=+$E(ORLOG,1,12) ;no seconds S:'$L(ORNATR) ORNATR=$P(ZRX,"|",3) S:OREASON["^" OREASON=$P(OREASON,U,5) I ORNATR="D",'$L(OREASON) S OREASON="DUPLICATE" D @ORDCNTRL Q ; ZV ; -- Verified N ORUSR,ORVER,ORDA,ORES,ORI S ORUSR=+$P(ORC,"|",12),ORVER="N" Q:'ORUSR S ORDA=+$P($G(^OR(100,+ORIFN,3)),U,7),ORES(+ORIFN_";"_ORDA)="" Q:$P($G(^OR(100,+ORIFN,8,ORDA,0)),U,8) ;already verified D REPLCD^ORCACT1 ;get unverified replaced orders S ORI="" F S ORI=$O(ORES(ORI)) Q:ORI="" D . S ORDA=+$P(ORI,";",2) . D VERIFY^ORCSAVE2(+ORI,ORDA,"N",ORUSR,ORLOG) Q ; ZP ; -- Purged Q:'ORIFN Q:'$D(^OR(100,+ORIFN,0)) K ^OR(100,+ORIFN,4) I "^3^5^6^15^"[(U_$P($G(^(3)),U,3)_U) D STATUS^ORCSAVE2(+ORIFN,14) ;Remove pkg reference, sts=lapsed if still active Q ; ZR ; -- Purged as requested [ack] D DELETE^ORCSAVE2(+ORIFN) Q ; ZU ; -- Unable to purge [ack] S $P(^OR(100,+ORIFN,3),U)=$$NOW^XLFDT ;update Last Activity Q ; XR ; -- Changed as requested [ack] N ORIG S ORIG=$P(^OR(100,+ORIFN,3),U,5) I ORIG,$P(^OR(100,ORIG,3),U,3)'=12 D STATUS^ORCSAVE2(ORIG,12) OK ; -- Order accepted, PS order # assigned [ack] S ^OR(100,+ORIFN,4)=PKGIFN ;PS identifier D:ORSTS STATUS^ORCSAVE2(+ORIFN,ORSTS) Q ; ZC ; -- convert orders N RXO,RXC,ORDIALOG,ORDG,ORPKG,ORP,ORSIG,ORIG,TYPE,EVNT I '$D(^VA(200,ORDUZ,0)) S ORERR="Missing or invalid entering person" Q I '$D(^VA(200,ORNP,0)) S ORERR="Missing or invalid ordering provider" Q I 'RXE S ORERR="Missing or invalid RXE segment" Q S RXO=$$RXO,RXC=$$RXC K ^TMP("ORWORD",$J) D @($S(RXC:"IV",$G(ORCAT)="I":"UDOSE",1:"OUT")_"^ORMPS1") ZC1 ; continue Q:$D(ORERR) I 'ORIFN!('$D(^OR(100,+ORIFN,0))) D Q ;create . K ORIFN D SN1 Q:'$G(ORIFN) S ORDCNTRL="SN" . I ORSTOP,ORSTOPORNOW ORSTOP=ORNOW D UPDATE(ORSTS,"DC") Q ; CR ; -- Cancelled [ack] D STATUS^ORCSAVE2(+ORIFN,13) S ^OR(100,+ORIFN,4)=PKGIFN Q ; OD ; -- Discontinued (cancelled after pharmacist's verification) S:'ORSTS ORSTS=1 S:ORSTS=12 ORNATR="C" I ORNATR="A" S ORWHO="" I $G(DGPMT)=3,$$MVT^DGPMOBS(DGPMDA) D XTMP^ORMEVNT ;save order# S ^OR(100,+ORIFN,6)=$S($L(ORNATR):$O(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORWHO_U_ORNOW_U_U_OREASON S ^OR(100,+ORIFN,4)=PKGIFN S:ORSTOP>ORNOW ORSTOP=ORNOW D UPDATE(ORSTS,"DC") Q ; DR ; -- Discontinued [ack] D STATUS^ORCSAVE2(+ORIFN,1) S ^OR(100,+ORIFN,4)=PKGIFN Q ; OH ; -- Held S:'ORSTS ORSTS=3 D UPDATE(ORSTS,"HD") Q ; HR ; -- Held [ack] D STATUS^ORCSAVE2(+ORIFN,3) Q ; RL ; -- Released hold OE ; -- Released hold N ORDA S ORDA=+$P(^OR(100,+ORIFN,3),U,7) I $P($G(^OR(100,+ORIFN,8,ORDA,0)),U,2)="HD" S $P(^(2),U,1,2)=ORNOW_U_ORWHO S:'$G(ORSTS) ORSTS=6 D UPDATE(ORSTS,"RL") Q ; OR ; -- Released / [ack] S:'ORSTS ORSTS=6 D STATUS^ORCSAVE2(+ORIFN,ORSTS) D:ORSTRT!ORSTOP DATES^ORCSAVE2(+ORIFN,ORSTRT,ORSTOP) Q ; UPDATE(ORSTS,ORACT) ; -- continue N ORX,ORDA,ORP D:$G(ORSTS) STATUS^ORCSAVE2(+ORIFN,ORSTS) D:ORSTRT!ORSTOP DATES^ORCSAVE2(+ORIFN,ORSTRT,ORSTOP) S ORX=$$CREATE^ORX1(ORNATR) D:ORX . S ORDA=$$ACTION^ORCSAVE(ORACT,+ORIFN,ORNP,OREASON,ORNOW,ORWHO) . I ORDA'>0 S ORERR="Cannot create new order action" Q . D RELEASE^ORCSAVE2(+ORIFN,ORDA,ORNOW,ORWHO,ORNATR) . D SIGSTS^ORCSAVE2(+ORIFN,ORDA) . I $G(ORL) S ORP(1)=+ORIFN_";"_ORDA_"^1" D PRINTS^ORWD1(.ORP,+ORL) . S $P(^OR(100,+ORIFN,3),U,7)=ORDA I 'ORX,ORACT="DC",'$$ACTV^ORX1(ORNATR) S $P(^OR(100,+ORIFN,3),U,7)=0 D:$G(ORACT)="DC" CANCEL^ORCSEND(+ORIFN) Q ; RXO() ; -- RXO segment N I,X S X="",I=$O(@ORMSG@(+ORC)) I I,$E(@ORMSG@(I),1,3)="RXO" S X=I_U_@ORMSG@(I) Q X ; RXE() ; -- RXE segment N X,I,SEG S X="",I=+ORC F S I=$O(@ORMSG@(I)) Q:I'>0 S SEG=$E(@ORMSG@(I),1,3) Q:SEG="ORC" I SEG="RXE" S X=I_U_@ORMSG@(I) Q Q X ; RXR() ; -- RXR segment N X,I,SEG S X="",I=+RXE F S I=$O(@ORMSG@(I)) Q:I'>0 S SEG=$E(@ORMSG@(I),1,3) Q:SEG="ORC" I SEG="RXR" S X=I_U_@ORMSG@(I) Q Q X ; RXC() ; -- [First] RXC segment N X,I,SEG S X="",I=+RXE F S I=$O(@ORMSG@(I)) Q:I'>0 S SEG=$E(@ORMSG@(I),1,3) Q:SEG="ORC" I SEG="RXC" S X=I Q Q X ; ZRX() ; -- ZRX segment N X,I,SEG S X="",I=+ORC F S I=$O(@ORMSG@(I)) Q:I'>0 S SEG=$E(@ORMSG@(I),1,3) Q:SEG="ORC" I SEG="ZRX" S X=I_U_@ORMSG@(I) Q Q X