NHINVPSI ;SLC/MKB -- Inpatient Pharmacy extract
;;1.0;NHIN;**1**;Oct 25, 2010;Build 11
;
; External References DBIA#
; ------------------- -----
; ^SC 10040
; DIQ 2056
; ORX8 2467
; PSOORRL,^TMP("PS",$J) 2400
; PSS50P7 4662
; XLFSTR 10104
;
; ------------ Get medications from VistA ------------
;
EN(DFN,BEG,END,MAX,ID) ; -- find patient's UD/IV meds
N PS0,NHI,NHITM,IV K ^TMP("PS",$J)
S DFN=+$G(DFN) Q:DFN<1
S BEG=$G(BEG,1410101),END=$G(END,9999998),MAX=$G(MAX,999999)
;
; get one med
I $G(ID) D Q
. Q:ID["N" Q:ID["O" ;inpatient only
. D OEL^PSOORRL(DFN,ID)
. S IV=$S(ID["V":1,$G(^TMP("PS",$J,"B",0)):1,1:0)
. D @($S(IV:"IV1",1:"IN1")_"(ID,.NHITM)")
. I $D(NHITM)>9 D XML^NHINVPS(.NHITM)
. K ^TMP("PS",$J)
;
; get all meds
D OCL^PSOORRL(DFN,BEG,END)
S NHI=0 F S NHI=$O(^TMP("PS",$J,NHI)) Q:NHI<1!(NHI>MAX) S PS0=$G(^(NHI,0)) D
. S ID=$P(PS0,U) K NHITM
. Q:ID["N" Q:ID["O" ;inpatient only
. S IV=$S(ID["V":1,$G(^TMP("PS",$J,NHI,"B",0)):1,1:0)
. D @($S(IV:"IV",1:"IN")_"(ID,.NHITM)")
. I $D(NHITM)>9 D XML^NHINVPS(.NHITM)
K ^TMP("PS",$J)
Q
;
IN(ID,MED) ; -- return a medication in MED("attribute")=value
; [expects PS0,OCL^PSOORRL data]
N X,PS,ORDER,DOSE,UNTS,RTE,SCH,OI,PSOI,LOC K MED
M PS=^TMP("PS",$J,NHI)
S MED("id")=ID,MED("vaType")="I"
S X=$P(PS0,U,15) S:X MED("start")=X
S X=$P(PS0,U,4) S:X MED("stop")=X
S MED("name")=$P(PS0,U,2),X=$P(PS0,U,9),MED("vaStatus")=X,X=$E(X,1,3)
S MED("status")=$S(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="REN"):"historical",X="REI":"active",1:$$LOW^XLFSTR($P(PS0,U,9)))
S DOSE=$P(PS0,U,6) S:DOSE="" DOSE=$G(PS("SIG",1,0))
S RTE=$G(PS("MDR",1,0)),SCH=$P($G(PS("SCH",1,0)),U)
S MED("dose",1)=DOSE_"^^^^"_RTE_U_SCH
S MED("sig")="Give: "_DOSE_" "_RTE_" "_SCH I $G(PS("SIO",0)) D
. N SIO M SIO=PS("SIO")
. S MED("sig")=MED("sig")_$C(13,10)_$$STRING^NHINV(.SIO)
I $D(PS("P",0)) S MED("orderingProvider")=PS("P",0)
I $G(PS("CLINIC",0)) S MED("IMO")=1
S MED("facility")=$$FAC^NHINV ;local stn#^name
S ORDER=+$P(PS0,U,8) D:ORDER ORD
Q
;
IN1(ID,MED) ; -- return a medication in MED("attribute")=value
; [expects OEL^PSOORRL data]
N X,PS,PS0,ORDER,DOSE,UNTS,RTE,SCH,OI,PSOI,DRUG,LOC K MED
M PS=^TMP("PS",$J) S PS0=PS(0)
S MED("id")=ID,MED("vaType")="I"
S X=$P(PS0,U,5) S:X MED("start")=X
S X=$P(PS0,U,3) S:X MED("stop")=X
S MED("name")=$P(PS0,U),X=$P(PS0,U,6),MED("vaStatus")=X,X=$E(X,1,3)
S MED("status")=$S(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="REN"):"historical",X="REI":"active",1:$$LOW^XLFSTR($P(PS0,U,9)))
S DOSE=$P(PS0,U,9) S:DOSE="" DOSE=$G(PS("SIG",1,0))
S RTE=$G(PS("MDR",1,0)),SCH=$P($G(PS("SCH",1,0)),U)
S MED("dose",1)=DOSE_"^^^^"_RTE_U_SCH
S MED("sig")="Give: "_DOSE_" "_RTE_" "_SCH I $G(PS("SIO",0)) D
. N SIO M SIO=PS("SIO")
. S MED("sig")=MED("sig")_$C(13,10)_$$STRING^NHINV(.SIO)
I $D(PS("P",0)) S MED("orderingProvider")=PS("P",0)
S MED("facility")=$$FAC^NHINV ;local stn#^name
S ORDER=+$P(PS0,U,11) D:ORDER ORD
I $D(^SC("AE",1,+$G(LOC))) S MED("IMO")=1
Q
;
ORD ; get rest of inpatient data from ORDER
S OI=$$OI^ORX8(ORDER),PSOI=+$P(OI,U,3)
S MED("name")=$P(OI,U,2) I PSOI D
. D ZERO^PSS50P7(PSOI,,,"OI")
. S MED("form")=$P($G(^TMP($J,"OI",PSOI,.02)),U,2)
S X=$$VALUE^ORX8(ORDER,"DOSE"),DOSE=DOSE_"^^^"
S DRUG="" I X'="",X["&" D
. S DRUG=+$P(X,"&",6)
. S DOSE=$TR($P(X,"&",1,4),"&","^")
. S $P(MED("dose",1),U,1,4)=DOSE
S:'DRUG DRUG=+$$VALUE^ORX8(ORDER,"DRUG")
D:DRUG NDF^NHINVPS(DRUG)
K ^TMP($J,"OI")
ORDLOC ; enter here for just order# and location
S MED("orderID")=ORDER
S LOC=+$$GET1^DIQ(100,ORDER_",",6,"I") I LOC D
. S MED("location")=LOC_U_$P($G(^SC(LOC,0)),U)
. S MED("facility")=$$FAC^NHINV(LOC)
Q
;
IV(ID,MED) ; -- return an infusion in MED("attribute")=value
; [expects PS0,OCL^PSOORRL data]
N PS,X,ORDER,LOC K MED
M PS=^TMP("PS",$J,NHI)
S MED("id")=ID,MED("vaType")="V",MED("name")=$P(PS0,U,2)
S X=$P(PS0,U,15) S:X MED("start")=X
S X=$P(PS0,U,4) S:X MED("stop")=X
S MED("vaStatus")=$P(PS0,U,9),X=$E($P(PS0,U,9),1,3)
S MED("status")=$S(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="PUR"):"historical",X="HOL":"hold",1:"active")
S MED("dose",1)="^^^^"_$G(PS("MDR",1,0))_U_$P($G(PS("SCH",1,0)),U)
S MED("rate")=$P(PS0,U,3) D IVP
S X=$G(PS("IVLIM",0)) S:$L(X) MED("ivLimit")=$$IVLIM(X)
I $G(PS("CLINIC",0)) S MED("IMO")=1
I $G(PS("P",0)) S MED("orderingProvider")=PS("P",0)
S MED("facility")=$$FAC^NHINV ;local stn#^name
S ORDER=+$P(PS0,U,8) D:ORDER ORDLOC
Q
;
IV1(ID,MED) ; -- return an infusion in MED("attribute")=value
; [expects OEL^PSOORRL data]
N PS,PS0,X,ORDER,LOC K MED
M PS=^TMP("PS",$J) S PS0=PS(0)
S MED("id")=ID,MED("vaType")="V",MED("name")=$P(PS0,U)
S X=$P(PS0,U,5) S:X MED("start")=X
S X=$P(PS0,U,3) S:X MED("stop")=X
S MED("vaStatus")=$P(PS0,U,6),X=$E($P(PS0,U,6),1,3)
S MED("status")=$S(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="PUR"):"historical",X="HOL":"hold",1:"active")
S MED("dose",1)="^^^^"_$G(PS("MDR",1,0))_U_$P($G(PS("SCH",1,0)),U)
S MED("rate")=$P(PS0,U,2) D IVP
S X=$G(PS("IVLIM",0)) S:$L(X) MED("ivLimit")=$$IVLIM(X)
I $G(PS("P",0)) S MED("orderingProvider")=PS("P",0)
S MED("facility")=$$FAC^NHINV ;local stn#^name
S ORDER=+$P(PS0,U,11) D:ORDER ORDLOC
I $D(^SC("AE",1,+$G(LOC))) S MED("IMO")=1
Q
;
IVP ; -- add IV products for ID,DFN
N I,N,FILE,IENS,NHIN,LIST,IEN,DRUG,STR
S FILE=$S(ID["P":53.157,1:55.02),N=0
S IENS=","_+ID_","_$S(ID["P":"",1:DFN_",")
F I=1:1 K NHIN D GETS^DIQ(FILE,I_IENS,"*","IE","NHIN") Q:'$D(NHIN) D
. K LIST M LIST=NHIN(FILE,I_IENS)
. S IEN=LIST(.01,"I"),DRUG=$$GET1^DIQ(52.6,IEN_",",1,"I")
. D:DRUG NDF^NHINVPS(DRUG,.N) S:'DRUG N=N+1
. S STR=$S(FILE=53.157:LIST(1,"E"),1:LIST(.02,"E"))
. S MED("product",N)=IEN_U_LIST(.01,"E")_"^^A^"_STR
S FILE=$S(ID["P":53.158,1:55.11)
F I=1:1 K NHIN D GETS^DIQ(FILE,I_IENS,"*","IE","NHIN") Q:'$D(NHIN) D
. K LIST M LIST=NHIN(FILE,I_IENS)
. S IEN=LIST(.01,"I"),DRUG=$$GET1^DIQ(52.7,IEN_",",1,"I")
. D:DRUG NDF^NHINVPS(DRUG,.N) S:'DRUG N=N+1
. S MED("product",N)=IEN_U_LIST(.01,"E")_"^^B^"_LIST(1,"E")
Q
;
IVLIM(X) ; -- Return expanded version of IV Limit X
I '$L($G(X)) Q ""
N Y,VAL,UNT,I
S Y="",X=$$UP^XLFSTR(X)
I X?1"DOSES".E S X="A"_$P(X,"DOSES",2)
S UNT=$E(X),VAL=0 F I=2:1:$L(X) I $E(X,I) S VAL=$E(X,I,$L(X)) Q
I UNT="A" S Y=+VAL_$S(+VAL>1:" doses",1:" dose")
I UNT="D" S Y=+VAL_$S(+VAL>1:" days",1:" day")
I UNT="H" S Y=+VAL_$S(+VAL>1:" hours",1:" hour")
I UNT="C" S Y=+VAL_" CC"
I UNT="M" S Y=+VAL_" ml"
I UNT="L" S Y=+VAL_" L"
Q Y
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HNHINVPSI 6769 printed Apr 09, 2024@21:20:19 Page 2
NHINVPSI ;SLC/MKB -- Inpatient Pharmacy extract
+1 ;;1.0;NHIN;**1**;Oct 25, 2010;Build 11
+2 ;
+3 ; External References DBIA#
+4 ; ------------------- -----
+5 ; ^SC 10040
+6 ; DIQ 2056
+7 ; ORX8 2467
+8 ; PSOORRL,^TMP("PS",$J) 2400
+9 ; PSS50P7 4662
+10 ; XLFSTR 10104
+11 ;
+12 ; ------------ Get medications from VistA ------------
+13 ;
EN(DFN,BEG,END,MAX,ID) ; -- find patient's UD/IV meds
+1 NEW PS0,NHI,NHITM,IV
KILL ^TMP("PS",$JOB)
+2 SET DFN=+$GET(DFN)
if DFN<1
QUIT
+3 SET BEG=$GET(BEG,1410101)
SET END=$GET(END,9999998)
SET MAX=$GET(MAX,999999)
+4 ;
+5 ; get one med
+6 IF $GET(ID)
Begin DoDot:1
+7 ;inpatient only
if ID["N"
QUIT
if ID["O"
QUIT
+8 DO OEL^PSOORRL(DFN,ID)
+9 SET IV=$SELECT(ID["V":1,$GET(^TMP("PS",$JOB,"B",0)):1,1:0)
+10 DO @($SELECT(IV:"IV1",1:"IN1")_"(ID,.NHITM)")
+11 IF $DATA(NHITM)>9
DO XML^NHINVPS(.NHITM)
+12 KILL ^TMP("PS",$JOB)
End DoDot:1
QUIT
+13 ;
+14 ; get all meds
+15 DO OCL^PSOORRL(DFN,BEG,END)
+16 SET NHI=0
FOR
SET NHI=$ORDER(^TMP("PS",$JOB,NHI))
if NHI<1!(NHI>MAX)
QUIT
SET PS0=$GET(^(NHI,0))
Begin DoDot:1
+17 SET ID=$PIECE(PS0,U)
KILL NHITM
+18 ;inpatient only
if ID["N"
QUIT
if ID["O"
QUIT
+19 SET IV=$SELECT(ID["V":1,$GET(^TMP("PS",$JOB,NHI,"B",0)):1,1:0)
+20 DO @($SELECT(IV:"IV",1:"IN")_"(ID,.NHITM)")
+21 IF $DATA(NHITM)>9
DO XML^NHINVPS(.NHITM)
End DoDot:1
+22 KILL ^TMP("PS",$JOB)
+23 QUIT
+24 ;
IN(ID,MED) ; -- return a medication in MED("attribute")=value
+1 ; [expects PS0,OCL^PSOORRL data]
+2 NEW X,PS,ORDER,DOSE,UNTS,RTE,SCH,OI,PSOI,LOC
KILL MED
+3 MERGE PS=^TMP("PS",$JOB,NHI)
+4 SET MED("id")=ID
SET MED("vaType")="I"
+5 SET X=$PIECE(PS0,U,15)
if X
SET MED("start")=X
+6 SET X=$PIECE(PS0,U,4)
if X
SET MED("stop")=X
+7 SET MED("name")=$PIECE(PS0,U,2)
SET X=$PIECE(PS0,U,9)
SET MED("vaStatus")=X
SET X=$EXTRACT(X,1,3)
+8 SET MED("status")=$SELECT(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="REN"):"historical",X="REI":"active",1:$$LOW^XLFSTR($PIECE(PS0,U,9)))
+9 SET DOSE=$PIECE(PS0,U,6)
if DOSE=""
SET DOSE=$GET(PS("SIG",1,0))
+10 SET RTE=$GET(PS("MDR",1,0))
SET SCH=$PIECE($GET(PS("SCH",1,0)),U)
+11 SET MED("dose",1)=DOSE_"^^^^"_RTE_U_SCH
+12 SET MED("sig")="Give: "_DOSE_" "_RTE_" "_SCH
IF $GET(PS("SIO",0))
Begin DoDot:1
+13 NEW SIO
MERGE SIO=PS("SIO")
+14 SET MED("sig")=MED("sig")_$CHAR(13,10)_$$STRING^NHINV(.SIO)
End DoDot:1
+15 IF $DATA(PS("P",0))
SET MED("orderingProvider")=PS("P",0)
+16 IF $GET(PS("CLINIC",0))
SET MED("IMO")=1
+17 ;local stn#^name
SET MED("facility")=$$FAC^NHINV
+18 SET ORDER=+$PIECE(PS0,U,8)
if ORDER
DO ORD
+19 QUIT
+20 ;
IN1(ID,MED) ; -- return a medication in MED("attribute")=value
+1 ; [expects OEL^PSOORRL data]
+2 NEW X,PS,PS0,ORDER,DOSE,UNTS,RTE,SCH,OI,PSOI,DRUG,LOC
KILL MED
+3 MERGE PS=^TMP("PS",$JOB)
SET PS0=PS(0)
+4 SET MED("id")=ID
SET MED("vaType")="I"
+5 SET X=$PIECE(PS0,U,5)
if X
SET MED("start")=X
+6 SET X=$PIECE(PS0,U,3)
if X
SET MED("stop")=X
+7 SET MED("name")=$PIECE(PS0,U)
SET X=$PIECE(PS0,U,6)
SET MED("vaStatus")=X
SET X=$EXTRACT(X,1,3)
+8 SET MED("status")=$SELECT(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="REN"):"historical",X="REI":"active",1:$$LOW^XLFSTR($PIECE(PS0,U,9)))
+9 SET DOSE=$PIECE(PS0,U,9)
if DOSE=""
SET DOSE=$GET(PS("SIG",1,0))
+10 SET RTE=$GET(PS("MDR",1,0))
SET SCH=$PIECE($GET(PS("SCH",1,0)),U)
+11 SET MED("dose",1)=DOSE_"^^^^"_RTE_U_SCH
+12 SET MED("sig")="Give: "_DOSE_" "_RTE_" "_SCH
IF $GET(PS("SIO",0))
Begin DoDot:1
+13 NEW SIO
MERGE SIO=PS("SIO")
+14 SET MED("sig")=MED("sig")_$CHAR(13,10)_$$STRING^NHINV(.SIO)
End DoDot:1
+15 IF $DATA(PS("P",0))
SET MED("orderingProvider")=PS("P",0)
+16 ;local stn#^name
SET MED("facility")=$$FAC^NHINV
+17 SET ORDER=+$PIECE(PS0,U,11)
if ORDER
DO ORD
+18 IF $DATA(^SC("AE",1,+$GET(LOC)))
SET MED("IMO")=1
+19 QUIT
+20 ;
ORD ; get rest of inpatient data from ORDER
+1 SET OI=$$OI^ORX8(ORDER)
SET PSOI=+$PIECE(OI,U,3)
+2 SET MED("name")=$PIECE(OI,U,2)
IF PSOI
Begin DoDot:1
+3 DO ZERO^PSS50P7(PSOI,,,"OI")
+4 SET MED("form")=$PIECE($GET(^TMP($JOB,"OI",PSOI,.02)),U,2)
End DoDot:1
+5 SET X=$$VALUE^ORX8(ORDER,"DOSE")
SET DOSE=DOSE_"^^^"
+6 SET DRUG=""
IF X'=""
IF X["&"
Begin DoDot:1
+7 SET DRUG=+$PIECE(X,"&",6)
+8 SET DOSE=$TRANSLATE($PIECE(X,"&",1,4),"&","^")
+9 SET $PIECE(MED("dose",1),U,1,4)=DOSE
End DoDot:1
+10 if 'DRUG
SET DRUG=+$$VALUE^ORX8(ORDER,"DRUG")
+11 if DRUG
DO NDF^NHINVPS(DRUG)
+12 KILL ^TMP($JOB,"OI")
ORDLOC ; enter here for just order# and location
+1 SET MED("orderID")=ORDER
+2 SET LOC=+$$GET1^DIQ(100,ORDER_",",6,"I")
IF LOC
Begin DoDot:1
+3 SET MED("location")=LOC_U_$PIECE($GET(^SC(LOC,0)),U)
+4 SET MED("facility")=$$FAC^NHINV(LOC)
End DoDot:1
+5 QUIT
+6 ;
IV(ID,MED) ; -- return an infusion in MED("attribute")=value
+1 ; [expects PS0,OCL^PSOORRL data]
+2 NEW PS,X,ORDER,LOC
KILL MED
+3 MERGE PS=^TMP("PS",$JOB,NHI)
+4 SET MED("id")=ID
SET MED("vaType")="V"
SET MED("name")=$PIECE(PS0,U,2)
+5 SET X=$PIECE(PS0,U,15)
if X
SET MED("start")=X
+6 SET X=$PIECE(PS0,U,4)
if X
SET MED("stop")=X
+7 SET MED("vaStatus")=$PIECE(PS0,U,9)
SET X=$EXTRACT($PIECE(PS0,U,9),1,3)
+8 SET MED("status")=$SELECT(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="PUR"):"historical",X="HOL":"hold",1:"active")
+9 SET MED("dose",1)="^^^^"_$GET(PS("MDR",1,0))_U_$PIECE($GET(PS("SCH",1,0)),U)
+10 SET MED("rate")=$PIECE(PS0,U,3)
DO IVP
+11 SET X=$GET(PS("IVLIM",0))
if $LENGTH(X)
SET MED("ivLimit")=$$IVLIM(X)
+12 IF $GET(PS("CLINIC",0))
SET MED("IMO")=1
+13 IF $GET(PS("P",0))
SET MED("orderingProvider")=PS("P",0)
+14 ;local stn#^name
SET MED("facility")=$$FAC^NHINV
+15 SET ORDER=+$PIECE(PS0,U,8)
if ORDER
DO ORDLOC
+16 QUIT
+17 ;
IV1(ID,MED) ; -- return an infusion in MED("attribute")=value
+1 ; [expects OEL^PSOORRL data]
+2 NEW PS,PS0,X,ORDER,LOC
KILL MED
+3 MERGE PS=^TMP("PS",$JOB)
SET PS0=PS(0)
+4 SET MED("id")=ID
SET MED("vaType")="V"
SET MED("name")=$PIECE(PS0,U)
+5 SET X=$PIECE(PS0,U,5)
if X
SET MED("start")=X
+6 SET X=$PIECE(PS0,U,3)
if X
SET MED("stop")=X
+7 SET MED("vaStatus")=$PIECE(PS0,U,6)
SET X=$EXTRACT($PIECE(PS0,U,6),1,3)
+8 SET MED("status")=$SELECT(X="DIS"!(X="PEN"):"not active",X="EXP"!(X="PUR"):"historical",X="HOL":"hold",1:"active")
+9 SET MED("dose",1)="^^^^"_$GET(PS("MDR",1,0))_U_$PIECE($GET(PS("SCH",1,0)),U)
+10 SET MED("rate")=$PIECE(PS0,U,2)
DO IVP
+11 SET X=$GET(PS("IVLIM",0))
if $LENGTH(X)
SET MED("ivLimit")=$$IVLIM(X)
+12 IF $GET(PS("P",0))
SET MED("orderingProvider")=PS("P",0)
+13 ;local stn#^name
SET MED("facility")=$$FAC^NHINV
+14 SET ORDER=+$PIECE(PS0,U,11)
if ORDER
DO ORDLOC
+15 IF $DATA(^SC("AE",1,+$GET(LOC)))
SET MED("IMO")=1
+16 QUIT
+17 ;
IVP ; -- add IV products for ID,DFN
+1 NEW I,N,FILE,IENS,NHIN,LIST,IEN,DRUG,STR
+2 SET FILE=$SELECT(ID["P":53.157,1:55.02)
SET N=0
+3 SET IENS=","_+ID_","_$SELECT(ID["P":"",1:DFN_",")
+4 FOR I=1:1
KILL NHIN
DO GETS^DIQ(FILE,I_IENS,"*","IE","NHIN")
if '$DATA(NHIN)
QUIT
Begin DoDot:1
+5 KILL LIST
MERGE LIST=NHIN(FILE,I_IENS)
+6 SET IEN=LIST(.01,"I")
SET DRUG=$$GET1^DIQ(52.6,IEN_",",1,"I")
+7 if DRUG
DO NDF^NHINVPS(DRUG,.N)
if 'DRUG
SET N=N+1
+8 SET STR=$SELECT(FILE=53.157:LIST(1,"E"),1:LIST(.02,"E"))
+9 SET MED("product",N)=IEN_U_LIST(.01,"E")_"^^A^"_STR
End DoDot:1
+10 SET FILE=$SELECT(ID["P":53.158,1:55.11)
+11 FOR I=1:1
KILL NHIN
DO GETS^DIQ(FILE,I_IENS,"*","IE","NHIN")
if '$DATA(NHIN)
QUIT
Begin DoDot:1
+12 KILL LIST
MERGE LIST=NHIN(FILE,I_IENS)
+13 SET IEN=LIST(.01,"I")
SET DRUG=$$GET1^DIQ(52.7,IEN_",",1,"I")
+14 if DRUG
DO NDF^NHINVPS(DRUG,.N)
if 'DRUG
SET N=N+1
+15 SET MED("product",N)=IEN_U_LIST(.01,"E")_"^^B^"_LIST(1,"E")
End DoDot:1
+16 QUIT
+17 ;
IVLIM(X) ; -- Return expanded version of IV Limit X
+1 IF '$LENGTH($GET(X))
QUIT ""
+2 NEW Y,VAL,UNT,I
+3 SET Y=""
SET X=$$UP^XLFSTR(X)
+4 IF X?1"DOSES".E
SET X="A"_$PIECE(X,"DOSES",2)
+5 SET UNT=$EXTRACT(X)
SET VAL=0
FOR I=2:1:$LENGTH(X)
IF $EXTRACT(X,I)
SET VAL=$EXTRACT(X,I,$LENGTH(X))
QUIT
+6 IF UNT="A"
SET Y=+VAL_$SELECT(+VAL>1:" doses",1:" dose")
+7 IF UNT="D"
SET Y=+VAL_$SELECT(+VAL>1:" days",1:" day")
+8 IF UNT="H"
SET Y=+VAL_$SELECT(+VAL>1:" hours",1:" hour")
+9 IF UNT="C"
SET Y=+VAL_" CC"
+10 IF UNT="M"
SET Y=+VAL_" ml"
+11 IF UNT="L"
SET Y=+VAL_" L"
+12 QUIT Y