PSGOU ;BIR/CML3,MV-PROFILE UTILITIES ;19 SEP 96 / 3:59 PM
;;5.0; INPATIENT MEDICATIONS ;**34,110**;16 DEC 97
;
; Reference to ^PS(51.1 is supported by DBIA# 2177
; Reference to ^PS(55 is supported by DBIA# 2191.
;
ECHK ;
D NOW^%DTC N PSGDT S PSGDT=% ;***Store PSGDT with seconds.
S C="A",ON=O_"U" G:SD>PSGDT DS S ND=$G(^PS(55,PSGP,5,O,0)) G:$S($P(ND,"^",9)="":1,1:"DE"'[$P(ND,"^",9)) DS S ND4=$G(^(4))
I ST'="O",SD'<PSGODT,$P(ND,"^",9)="E",$P(ND4,"^",16) G DS
I ST="O",$P(ND,"^",9)'["D",$S('$P(ND4,"^",UDU):1,SD<PSGODT:0,1:$P(ND4,"^",16)) G DS
Q:PSGOL="S" S C="O"
;
DS ;
NEW DRUGNAME D DRGDISP^PSJLMUT1(PSGP,+O_"U",80,0,.DRUGNAME,1) S DRG=DRUGNAME(1)
;
SET ;
I ON["P",$G(P("PRNTON"))]"",$G(PRNTON)=+P("PRNTON") Q
I ON["P",$G(P("PRNTON"))]"" S PRNTON=+P("PRNTON"),ON=+P("PRNTON")
S ^TMP("PSG",$J,C,ST,DRG_"^"_ON)=$G(NF)
Q
;
ENS F S=0:0 R !!,"Sort by DATE or MEDICATION: M// ",PSGOS:DTIME D SCHK Q:CHK
Q
;
ENL ;
F W !!,"SHORT, LONG, or NO Profile? ",$S('$D(PSJPDD):"SHORT",'PSJPDD:"SHORT",1:"LONG"),"// " R PSGOL:DTIME W:'$T $C(7) S:'$T PSGOL="^" Q:PSGOL="^" D LCHK Q:"^SLN"[PSGOL&($L(PSGOL)=1)
Q
;
SCHK ;
I '$T!(PSGOS["^") S PSGOS="^",CHK=1 Q
S CHK=0 D:PSGOS["?" SM Q:PSGOS["?" I PSGOS="" S PSGOS="M",CHK=1 W "MEDICATION" Q
F X="DATE","MEDICATION" I $P(X,PSGOS)="" W $P(X,PSGOS,2) S PSGOS=$E(PSGOS),CHK=1 Q
W:'CHK $C(7)," ??" Q
;
SM W !!?3,"Enter 'MEDICATION' (or 'M', or press the RETURN key to have this patient's orders shown alphabetically by drug name. Enter 'DATE' (or 'D') to have this patient's orders shown by start date (the newest orders showing first)."
W " Enter a '^' to not show this patient's orders." Q
;
LCHK ;
I PSGOL?1."?" D LM Q
I PSGOL="" S PSGOL=$S('$D(PSJPDD):"S",'PSJPDD:"S",1:"L") W $S('$D(PSJPDD):" SHORT",'PSJPDD:" SHORT",1:" LONG") Q
I PSGOL?.E1L.E F Q=1:1:$L(PSGOL) I $E(PSGOL,Q)?1L S PSGOL=$E(PSGOL,1,Q-1)_$C($A(PSGOL,Q)-32)_$E(PSGOL,Q+1,$L(PSGOL))
F X="NO PROFILE","LONG","SHORT" I $P(X,PSGOL)="" W $P(X,PSGOL,2) S PSGOL=$E(PSGOL) Q
W:'$T $C(7)," ??" Q
;
LM W !!?3,"Enter 'SHORT' (or 'S', or press the RETURN key) to exclude this patient's",!,"discontinued and expired orders in the following profile. Enter 'LONG' (or 'L') to include those orders."
W " Enter 'NO' (or 'N') to bypass the profile com-",!,"pletely. Enter '^' if you wish to go no further with this patient." Q
;
ENU ; update staus field to reflect expired orders, if necessary
W !!,"...a few moments, I have some updating to do..."
ENUNM ;
D NOW^%DTC S PSGDT=%
F PSGO2=+PSJPAD:0 S PSGO2=$O(^PS(55,PSGP,5,"AUS",PSGO2)) Q:'PSGO2 Q:PSGO2>PSGDT F PSGO3=0:0 S PSGO3=$O(^PS(55,PSGP,5,"AUS",PSGO2,PSGO3)) Q:'PSGO3 S PSGO4=$G(^PS(55,PSGP,5,PSGO3,0)) D
.I PSGO4]"",$S($E($G(PSGALO),1,2)="10":"AHR"[$E($P(PSGO4,"^",9)),1:"AR"[$E($P(PSGO4,"^",9))) D ENUH
K PSGO1,PSGO2,PSGO3,PSGO4,UD Q
;
ENGORD ; get and sort orders
D NOW^%DTC S PSGDT=%,X1=$P(%,"."),X2=-2 D C^%DTC S PSGODT=X_(PSGDT#1),HDT=$$ENDTC^PSGMI(PSGDT),UDU=$S($P(PSJSYSU,";",3)>1:3,1:1) K ^TMP("PSG",$J)
W:'$D(PSGPR) !!,"...a few moments, please..." D ENUNM
F ST="C","O","OC","P","R" F SD=+PSJPAD:0 S SD=$O(^PS(55,PSGP,5,"AU",ST,SD)) Q:'SD F O=0:0 S O=$O(^PS(55,PSGP,5,"AU",ST,SD,O)) Q:'O D ECHK
Q:$D(PSGONNV)
NEW DRUGNAME
N PRNTON F SD="I","N" S (PRNTON,O)=0 F S O=$O(^PS(53.1,"AS",SD,PSGP,O)) Q:'O S ON=+O_"P",ND=$G(^PS(53.1,O,0)) I $P(ND,"^",4)="U" D
. S ST=$P(ND,"^",7),P("PRNTON")=$P($G(^PS(53.1,O,.2)),"^",8) S:ST="" ST="z"
. D DRGDISP^PSJLMUT1(PSGP,+O_"P",80,0,.DRUGNAME,1) S DRG=DRUGNAME(1)
. S C=$S(P("PRNTON")]"":"BD",1:"BA") D SET
Q:+PSJSYSU'=3 S SD="P",O=0
N PRNTON F S (PRNTON,O)=$O(^PS(53.1,"AS",SD,PSGP,O)) Q:'O S ON=+O_"P",ND=$G(^PS(53.1,O,0)) I $P(ND,"^",4)="U" D
. S ST=$P(ND,"^",7),P("PRNTON")=$P($G(^PS(53.1,O,.2)),"^",8) S:ST="" ST="z"
. D DRGDISP^PSJLMUT1(PSGP,+O_"P",80,0,.DRUGNAME,1) S DRG=DRUGNAME(1)
. S C=$$CKPC^PSGOU(PSGP,$P(ND,U,25),O)
. I C="CB",$P($G(^PS(53.1,O,.2)),U,4)="S" S C="CA"
. I P("PRNTON")]"" S C="CD"
. D SET
Q
;
MAE ; change status to expired
ENUH ;
S $P(^PS(55,PSGP,5,PSGO3,0),"^",9)="E",ORIFN=$P(PSGO4,"^",21) I ORIFN D EN1^PSJHL2(PSGP,"SC",PSGO3_"U")
Q
;
CKPC(DFN,OLDON,NEWON) ; Compare old provider comments to new for speed finish.
N X,Y,Q,QQ,PSGOEEWF,PSJFLAG
I $P($G(^PS(53.1,+NEWON,0)),U,24)'="R" Q "CB"
S PSJFLAG=0,PSGOEEWF="^PS(55,"_DFN_","_$S(OLDON["V":"""IV""",1:5)_","_+OLDON_","
S (Q,QQ)=0 F S Q=$O(^PS(53.1,NEWON,12,Q)) Q:'Q S QQ=Q,X=$G(^(Q,0)),Y=$G(@(PSGOEEWF_"12,"_Q_",0)")) I X'=Y S PSJFLAG=1 Q
I PSJFLAG!$O(@(PSGOEEWF_"12,"_QQ_")")) Q "CB"
S (Q,QQ)=0 F S Q=$O(@(PSGOEEWF_"12,"_Q_")")) Q:'Q S QQ=Q,X=$G(^(Q,0)),Y=$G(^PS(53.1,NEWON,12,Q,0)) I X'=Y S PSJFLAG=1 Q
I PSJFLAG!$O(^PS(53.1,+NEWON,12,QQ)) Q "CB"
Q "CC"
;
ENRNAT(OWD,NWD,SC,OAT) ; Determine admin times for renewal orders.
;OWD=ORIGINAL W, NWD=NEW WD LOCATION, SC=SCHEDULE, OAT=ORDER ADMIN TIMES
N OWAT,SCP,X,Y
S OOAT=OAT,SCP=+$O(^PS(51.1,"APPSJ",+SC,0)),WAT=$P($G(^PS(51.1,SCP,1,+$G(OWD),0)),U,2)
F X="WAT","OAT" F Y=1:1 Q:$L(@X)>240!($P(@X,"-",Y)="") S $P(@X,"-",Y)=$P(@X,"-",Y)_$E("0000",1,4-$L($P(@X,"-",Y)))
I OAT'=WAT Q OOAT
S X=$P($G(^PS(51.1,+SCP,1,NWD,0)),U,2) I X Q X
Q OOAT
PSGOU ;BIR/CML3,MV-PROFILE UTILITIES ;19 SEP 96 / 3:59 PM
+1 ;;5.0; INPATIENT MEDICATIONS ;**34,110**;16 DEC 97
+2 ;
+3 ; Reference to ^PS(51.1 is supported by DBIA# 2177
+4 ; Reference to ^PS(55 is supported by DBIA# 2191.
+5 ;
ECHK ;
+1 ;***Store PSGDT with seconds.
DO NOW^%DTC
NEW PSGDT
SET PSGDT=%
+2 SET C="A"
SET ON=O_"U"
IF SD>PSGDT
GOTO DS
SET ND=$GET(^PS(55,PSGP,5,O,0))
IF $SELECT($PIECE(ND,"^",9)=""
GOTO DS
SET ND4=$GET(^(4))
+3 IF ST'="O"
IF SD'<PSGODT
IF $PIECE(ND,"^",9)="E"
IF $PIECE(ND4,"^",16)
GOTO DS
+4 IF ST="O"
IF $PIECE(ND,"^",9)'["D"
IF $SELECT('$PIECE(ND4,"^",UDU):1,SD<PSGODT:0,1:$PIECE(ND4,"^",16))
GOTO DS
+5 IF PSGOL="S"
QUIT
SET C="O"
+6 ;
DS ;
+1 NEW DRUGNAME
DO DRGDISP^PSJLMUT1(PSGP,+O_"U",80,0,.DRUGNAME,1)
SET DRG=DRUGNAME(1)
+2 ;
SET ;
+1 IF ON["P"
IF $GET(P("PRNTON"))]""
IF $GET(PRNTON)=+P("PRNTON")
QUIT
+2 IF ON["P"
IF $GET(P("PRNTON"))]""
SET PRNTON=+P("PRNTON")
SET ON=+P("PRNTON")
+3 SET ^TMP("PSG",$JOB,C,ST,DRG_"^"_ON)=$GET(NF)
+4 QUIT
+5 ;
ENS FOR S=0:0
READ !!,"Sort by DATE or MEDICATION: M// ",PSGOS:DTIME
DO SCHK
IF CHK
QUIT
+1 QUIT
+2 ;
ENL ;
+1 FOR
WRITE !!,"SHORT, LONG, or NO Profile? ",$SELECT('$DATA(PSJPDD):"SHORT",'PSJPDD:"SHORT",1:"LONG"),"// "
READ PSGOL:DTIME
IF '$TEST
WRITE $CHAR(7)
IF '$TEST
SET PSGOL="^"
IF PSGOL="^"
QUIT
DO LCHK
IF "^SLN"[PSGOL&($LENGTH(PSGOL)=1)
QUIT
+2 QUIT
+3 ;
SCHK ;
+1 IF '$TEST!(PSGOS["^")
SET PSGOS="^"
SET CHK=1
QUIT
+2 SET CHK=0
IF PSGOS["?"
DO SM
IF PSGOS["?"
QUIT
IF PSGOS=""
SET PSGOS="M"
SET CHK=1
WRITE "MEDICATION"
QUIT
+3 FOR X="DATE","MEDICATION"
IF $PIECE(X,PSGOS)=""
WRITE $PIECE(X,PSGOS,2)
SET PSGOS=$EXTRACT(PSGOS)
SET CHK=1
QUIT
+4 IF 'CHK
WRITE $CHAR(7)," ??"
QUIT
+5 ;
SM WRITE !!?3,"Enter 'MEDICATION' (or 'M', or press the RETURN key to have this patient's orders shown alphabetically by drug name. Enter 'DATE' (or 'D') to have this patient's orders shown by start date (the newest orders showing first)."
+1 WRITE " Enter a '^' to not show this patient's orders."
QUIT
+2 ;
LCHK ;
+1 IF PSGOL?1."?"
DO LM
QUIT
+2 IF PSGOL=""
SET PSGOL=$SELECT('$DATA(PSJPDD):"S",'PSJPDD:"S",1:"L")
WRITE $SELECT('$DATA(PSJPDD):" SHORT",'PSJPDD:" SHORT",1:" LONG")
QUIT
+3 IF PSGOL?.E1L.E
FOR Q=1:1:$LENGTH(PSGOL)
IF $EXTRACT(PSGOL,Q)?1L
SET PSGOL=$EXTRACT(PSGOL,1,Q-1)_$CHAR($ASCII(PSGOL,Q)-32)_$EXTRACT(PSGOL,Q+1,$LENGTH(PSGOL))
+4 FOR X="NO PROFILE","LONG","SHORT"
IF $PIECE(X,PSGOL)=""
WRITE $PIECE(X,PSGOL,2)
SET PSGOL=$EXTRACT(PSGOL)
QUIT
+5 IF '$TEST
WRITE $CHAR(7)," ??"
QUIT
+6 ;
LM WRITE !!?3,"Enter 'SHORT' (or 'S', or press the RETURN key) to exclude this patient's",!,"discontinued and expired orders in the following profile. Enter 'LONG' (or 'L') to include those orders."
+1 WRITE " Enter 'NO' (or 'N') to bypass the profile com-",!,"pletely. Enter '^' if you wish to go no further with this patient."
QUIT
+2 ;
ENU ; update staus field to reflect expired orders, if necessary
+1 WRITE !!,"...a few moments, I have some updating to do..."
ENUNM ;
+1 DO NOW^%DTC
SET PSGDT=%
+2 FOR PSGO2=+PSJPAD:0
SET PSGO2=$ORDER(^PS(55,PSGP,5,"AUS",PSGO2))
IF 'PSGO2
QUIT
IF PSGO2>PSGDT
QUIT
FOR PSGO3=0:0
SET PSGO3=$ORDER(^PS(55,PSGP,5,"AUS",PSGO2,PSGO3))
IF 'PSGO3
QUIT
SET PSGO4=$GET(^PS(55,PSGP,5,PSGO3,0))
Begin DoDot:1
+3 IF PSGO4]""
IF $SELECT($EXTRACT($GET(PSGALO),1,2)="10":"AHR"[$EXTRACT($PIECE(PSGO4,"^",9)),1:"AR"[$EXTRACT($PIECE(PSGO4,"^",9)))
DO ENUH
End DoDot:1
+4 KILL PSGO1,PSGO2,PSGO3,PSGO4,UD
QUIT
+5 ;
ENGORD ; get and sort orders
+1 DO NOW^%DTC
SET PSGDT=%
SET X1=$PIECE(%,".")
SET X2=-2
DO C^%DTC
SET PSGODT=X_(PSGDT#1)
SET HDT=$$ENDTC^PSGMI(PSGDT)
SET UDU=$SELECT($PIECE(PSJSYSU,";",3)>1:3,1:1)
KILL ^TMP("PSG",$JOB)
+2 IF '$DATA(PSGPR)
WRITE !!,"...a few moments, please..."
DO ENUNM
+3 FOR ST="C","O","OC","P","R"
FOR SD=+PSJPAD:0
SET SD=$ORDER(^PS(55,PSGP,5,"AU",ST,SD))
IF 'SD
QUIT
FOR O=0:0
SET O=$ORDER(^PS(55,PSGP,5,"AU",ST,SD,O))
IF 'O
QUIT
DO ECHK
+4 IF $DATA(PSGONNV)
QUIT
+5 NEW DRUGNAME
+6 NEW PRNTON
FOR SD="I","N"
SET (PRNTON,O)=0
FOR
SET O=$ORDER(^PS(53.1,"AS",SD,PSGP,O))
IF 'O
QUIT
SET ON=+O_"P"
SET ND=$GET(^PS(53.1,O,0))
IF $PIECE(ND,"^",4)="U"
Begin DoDot:1
+7 SET ST=$PIECE(ND,"^",7)
SET P("PRNTON")=$PIECE($GET(^PS(53.1,O,.2)),"^",8)
IF ST=""
SET ST="z"
+8 DO DRGDISP^PSJLMUT1(PSGP,+O_"P",80,0,.DRUGNAME,1)
SET DRG=DRUGNAME(1)
+9 SET C=$SELECT(P("PRNTON")]"":"BD",1:"BA")
DO SET
End DoDot:1
+10 IF +PSJSYSU'=3
QUIT
SET SD="P"
SET O=0
+11 NEW PRNTON
FOR
SET (PRNTON,O)=$ORDER(^PS(53.1,"AS",SD,PSGP,O))
IF 'O
QUIT
SET ON=+O_"P"
SET ND=$GET(^PS(53.1,O,0))
IF $PIECE(ND,"^",4)="U"
Begin DoDot:1
+12 SET ST=$PIECE(ND,"^",7)
SET P("PRNTON")=$PIECE($GET(^PS(53.1,O,.2)),"^",8)
IF ST=""
SET ST="z"
+13 DO DRGDISP^PSJLMUT1(PSGP,+O_"P",80,0,.DRUGNAME,1)
SET DRG=DRUGNAME(1)
+14 SET C=$$CKPC^PSGOU(PSGP,$PIECE(ND,U,25),O)
+15 IF C="CB"
IF $PIECE($GET(^PS(53.1,O,.2)),U,4)="S"
SET C="CA"
+16 IF P("PRNTON")]""
SET C="CD"
+17 DO SET
End DoDot:1
+18 QUIT
+19 ;
MAE ; change status to expired
ENUH ;
+1 SET $PIECE(^PS(55,PSGP,5,PSGO3,0),"^",9)="E"
SET ORIFN=$PIECE(PSGO4,"^",21)
IF ORIFN
DO EN1^PSJHL2(PSGP,"SC",PSGO3_"U")
+2 QUIT
+3 ;
CKPC(DFN,OLDON,NEWON) ; Compare old provider comments to new for speed finish.
+1 NEW X,Y,Q,QQ,PSGOEEWF,PSJFLAG
+2 IF $PIECE($GET(^PS(53.1,+NEWON,0)),U,24)'="R"
QUIT "CB"
+3 SET PSJFLAG=0
SET PSGOEEWF="^PS(55,"_DFN_","_$SELECT(OLDON["V":"""IV""",1:5)_","_+OLDON_","
+4 SET (Q,QQ)=0
FOR
SET Q=$ORDER(^PS(53.1,NEWON,12,Q))
IF 'Q
QUIT
SET QQ=Q
SET X=$GET(^(Q,0))
SET Y=$GET(@(PSGOEEWF_"12,"_Q_",0)"))
IF X'=Y
SET PSJFLAG=1
QUIT
+5 IF PSJFLAG!$ORDER(@(PSGOEEWF_"12,"_QQ_")"))
QUIT "CB"
+6 SET (Q,QQ)=0
FOR
SET Q=$ORDER(@(PSGOEEWF_"12,"_Q_")"))
IF 'Q
QUIT
SET QQ=Q
SET X=$GET(^(Q,0))
SET Y=$GET(^PS(53.1,NEWON,12,Q,0))
IF X'=Y
SET PSJFLAG=1
QUIT
+7 IF PSJFLAG!$ORDER(^PS(53.1,+NEWON,12,QQ))
QUIT "CB"
+8 QUIT "CC"
+9 ;
ENRNAT(OWD,NWD,SC,OAT) ; Determine admin times for renewal orders.
+1 ;OWD=ORIGINAL W, NWD=NEW WD LOCATION, SC=SCHEDULE, OAT=ORDER ADMIN TIMES
+2 NEW OWAT,SCP,X,Y
+3 SET OOAT=OAT
SET SCP=+$ORDER(^PS(51.1,"APPSJ",+SC,0))
SET WAT=$PIECE($GET(^PS(51.1,SCP,1,+$GET(OWD),0)),U,2)
+4 FOR X="WAT","OAT"
FOR Y=1:1
IF $LENGTH(@X)>240!($PIECE(@X,"-",Y)="")
QUIT
SET $PIECE(@X,"-",Y)=$PIECE(@X,"-",Y)_$EXTRACT("0000",1,4-$LENGTH($PIECE(@X,"-",Y)))
+5 IF OAT'=WAT
QUIT OOAT
+6 SET X=$PIECE($GET(^PS(51.1,+SCP,1,NWD,0)),U,2)
IF X
QUIT X
+7 QUIT OOAT