Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSSHRQ25

PSSHRQ25.m

Go to the documentation of this file.
  1. PSSHRQ25 ;BIR/RTR-Create General Dosing Guidelines ;04/25/17
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**178**;9/30/97;Build 14
  1. ;External reference to $$SCREEN^XTID supported by DBIA 4631
  1. ;
  1. BUILDMSG(COUNT,HASH) ; Build General Dosing Guidelines
  1. ;
  1. ; COUNT = Counter used to access values in hash
  1. ; HASH = Variable containing drug dose values
  1. ;
  1. ; Returns Message in format:
  1. ; General dosing range for '[DRUG NAME]' [ROUTE DESCRIPTION]:
  1. ; low dose (unit) to high dose (unit).
  1. ; Maximum daily dose is (max daily dose).
  1. ;
  1. N PSSGXMSG,PSSGXDFT,PSSGX1,PSSGX2,PSSGX3,PSSGX4,PSSGX8,PSSGXDU,PSSHXA
  1. S PSSGXDFT=$P(^TMP($J,BASE,"IN","DOSE",HASH(COUNT,"orderNumber")),U,14)
  1. S PSSGXDU=$P(^TMP($J,BASE,"IN","DOSE",HASH(COUNT,"orderNumber")),U,6)
  1. ;
  1. ;Non-Dose Form Unit
  1. I 'PSSGXDFT D Q PSSGXMSG
  1. .D CNV(0),INTRO S PSSGX1=PSSHXA("doseLow")
  1. .S PSSGX2=PSSHXA("doseHigh")
  1. .I $E(PSSGX1)="." S PSSGX1=0_PSSGX1
  1. .I $E(PSSGX2)="." S PSSGX2=0_PSSGX2
  1. .S PSSGXMSG=PSSGXMSG_" "_PSSGX1_" "_PSSHXA("doseLowUnit") D
  1. ..I PSSGX1=PSSGX2 S PSSGXMSG=PSSGXMSG_"." Q
  1. ..S PSSGXMSG=PSSGXMSG_" to "_PSSGX2_" "_PSSHXA("doseHighUnit")_"."
  1. .S PSSGX3=PSSHXA("maxDailyDose"),PSSGX8=0
  1. .I PSSGX3=" **unknown** "!('PSSGX3)!(PSSHXA("maxDailyDoseUnit")=" **unknown** ") S PSSGX3="unavailable.",PSSGX8=1
  1. .S PSSGX4=$$CONRT() I $E(PSSGX3)="." S PSSGX3=0_PSSGX3
  1. .S PSSGXMSG=PSSGXMSG_$S(PSSGX4:" Maximum dose rate is ",1:" Maximum daily dose is ")_$S(PSSGX8:PSSGX3,1:PSSGX3_" "_PSSHXA("maxDailyDoseUnit")_".")
  1. ;
  1. ;Dose Form Unit
  1. D CNV(1),INTRO S PSSGX1=PSSHXA("doseFormLow")
  1. S PSSGX2=PSSHXA("doseFormHigh")
  1. I $E(PSSGX1)="." S PSSGX1=0_PSSGX1
  1. I $E(PSSGX2)="." S PSSGX2=0_PSSGX2
  1. S PSSGXMSG=PSSGXMSG_" "_PSSGX1_" "_PSSHXA("doseFormLowUnit") D
  1. .I PSSGX1=PSSGX2 S PSSGXMSG=PSSGXMSG_"." Q
  1. .S PSSGXMSG=PSSGXMSG_" to "_PSSGX2_" "_PSSHXA("doseFormHighUnit")_"."
  1. S PSSGX3=PSSHXA("maxDailyDoseForm"),PSSGX8=0
  1. I PSSGX3=" **unknown** "!('PSSGX3)!(PSSHXA("maxDailyDoseFormUnit")=" **unknown** ") S PSSGX3="unavailable.",PSSGX8=1
  1. S PSSGX4=$$CONRT() I $E(PSSGX3)="." S PSSGX3=0_PSSGX3
  1. S PSSGXMSG=PSSGXMSG_$S(PSSGX4:" Maximum dose rate is ",1:" Maximum daily dose is ")_$S(PSSGX8:PSSGX3,1:PSSGX3_" "_PSSHXA("maxDailyDoseFormUnit")_".")
  1. Q PSSGXMSG
  1. ;
  1. ;
  1. CASE(PSSLWR) ;Translate to uppercase
  1. Q $$UP^XLFSTR(PSSLWR)
  1. ;
  1. ;
  1. CONRT() ;Look for continuous route
  1. N PSSGX9
  1. S PSSGX9=$P(^TMP($J,BASE,"IN","DOSE",HASH(COUNT,"orderNumber")),U,11)
  1. I PSSGX9="CONTINUOUS EPIDURAL" Q 1
  1. I PSSGX9="CONT INTRAARTER INF" Q 1
  1. I PSSGX9="CONTINUOUS INFILTRAT" Q 1
  1. I PSSGX9="CONT CAUDAL INFUSION" Q 1
  1. I PSSGX9="CONT INTRAOSSEOUS" Q 1
  1. I PSSGX9="CONT INTRATHECAL INF" Q 1
  1. I PSSGX9="CONTINUOUS INFUSION" Q 1
  1. I PSSGX9="CONT NEBULIZATION" Q 1
  1. I PSSGX9="CONT SUBCUTAN INFUSI" Q 1
  1. Q 0
  1. ;
  1. ;
  1. INTRO ;Start message
  1. S PSSGXMSG="General dosing range for "_PSSHXA("drugName")
  1. I $G(HASH(COUNT,"doseRouteDescription"))'="" S PSSGXMSG=PSSGXMSG_" ("_HASH(COUNT,"doseRouteDescription")_")"
  1. S PSSGXMSG=PSSGXMSG_":"
  1. Q
  1. ;
  1. ;
  1. CNV(PSSHXTYP) ;Reset display array and convert Dose Units if necessary
  1. N PSSHX4,PSSHX5,PSSHX6,PSSHX8,PSSHX9,PSSHXL,PSSHXFL,PSSHXNM,PSSHXIEN,PSSHXNUL,PSSHXMCH,PSSHXOLD,PSSUNARA,PSSUNARF,PSSHXFND
  1. S (PSSHXFL,PSSHXNUL,PSSHXIEN)=0
  1. I PSSGXDU'="" S PSSHXIEN=$O(^PS(51.24,"C",PSSGXDU,0)) I PSSHXIEN D SUNIT(.PSSUNARA,PSSHXIEN)
  1. I PSSHXTYP D DFT1
  1. I 'PSSHXTYP F PSSHXL="doseLowUnit","doseHighUnit","maxDailyDoseUnit" D
  1. .S (PSSHXA(PSSHXL),PSSHX5)=$G(HASH(COUNT,PSSHXL)) I PSSHX5="" S PSSHXA(PSSHXL)=" **unknown** " S:PSSHXL["dose" PSSHXNUL=1 Q
  1. .I PSSHXIEN D FDUNIT(PSSHX5)
  1. I PSSHXIEN S PSSHXNM=$P($G(^PS(51.24,PSSHXIEN,0)),"^") S:PSSHXNM="" PSSHXFL=0
  1. D @$S(PSSHXTYP:"DFT3",1:"CONDU") ;reset remaining variables
  1. I PSSGXDU=""!('PSSHXFL)!(PSSHXNUL)!('PSSHXIEN) Q
  1. ;
  1. ;Find mismatched Unit and set array of values
  1. S PSSHXL="" F S PSSHXL=$O(PSSHXMCH("MISMATCH",PSSHXL)) Q:'PSSHXFL!(PSSHXL="") D
  1. .K PSSUNARF D
  1. ..S PSSHX9=PSSHXA(PSSHXL)
  1. ..S PSSHX9=$$CASE(PSSHX9)
  1. ..S PSSHX8=$$LKUN(PSSHX9) I PSSHX8 D SUNIT(.PSSUNARF,PSSHX8) Q
  1. ..I PSSHX9'[" " S PSSHXFL=0 Q
  1. ..S PSSHX9=$P(PSSHX9," ") I PSSHX9="" S PSSHXFL=0 Q
  1. ..S PSSHX8=$$LKUN(PSSHX9) I PSSHX8 D SUNIT(.PSSUNARF,PSSHX8),PRS Q
  1. ..S PSSHXFL=0
  1. .Q:'PSSHXFL
  1. .S PSSHXFND=0,PSSHX6="" F S PSSHX6=$O(PSSUNARF(PSSHX6)) Q:PSSHX6=""!(PSSHXFND) D
  1. ..I $$FNCV(PSSHX6) S PSSHXFND=1
  1. .I 'PSSHXFND S PSSHXFL=0
  1. Q:'PSSHXFL
  1. ;
  1. ;Set each unit name to Dose Unit name, and convert numeric values
  1. I PSSHXTYP D Q
  1. .F PSSHXL="doseFormLowUnit","doseFormHighUnit","maxDailyDoseFormUnit" D
  1. ..S PSSHXA(PSSHXL)=PSSHXNM S:$D(PSSHXNM(PSSHXL)) PSSHXA(PSSHXL)=PSSHXA(PSSHXL)_PSSHXNM(PSSHXL)
  1. ..I $D(PSSHXMCH("MISMATCH",PSSHXL)) D
  1. ...S PSSHXOLD=$S(PSSHXL="doseFormLowUnit":"doseFormLow",PSSHXL="doseFormHighUnit":"doseFormHigh",1:"maxDailyDoseForm")
  1. ...S PSSHXA(PSSHXOLD)=PSSHXA(PSSHXOLD)*PSSHX4(PSSHXL)
  1. ...S PSSHXA(PSSHXOLD)=$$FMTNUM^PSSDSUTA(PSSHXA(PSSHXOLD),1)
  1. F PSSHXL="doseLowUnit","doseHighUnit","maxDailyDoseUnit" D
  1. .S PSSHXA(PSSHXL)=PSSHXNM S:$D(PSSHXNM(PSSHXL)) PSSHXA(PSSHXL)=PSSHXA(PSSHXL)_PSSHXNM(PSSHXL)
  1. .I $D(PSSHXMCH("MISMATCH",PSSHXL)) D
  1. ..S PSSHXOLD=$S(PSSHXL="doseLowUnit":"doseLow",PSSHXL="doseHighUnit":"doseHigh",1:"maxDailyDose")
  1. ..S PSSHXA(PSSHXOLD)=PSSHXA(PSSHXOLD)*PSSHX4(PSSHXL)
  1. ..S PSSHXA(PSSHXOLD)=$$FMTNUM^PSSDSUTA(PSSHXA(PSSHXOLD),1)
  1. Q
  1. ;
  1. ;
  1. LKUN(PSSLUNV) ;Look for Unit
  1. N PSSLNUNI
  1. S PSSLNUNI=$O(^PS(51.24,"B",PSSLUNV,0)) I PSSLNUNI,'$$SCREEN^XTID(51.24,.01,PSSLNUNI_",") Q PSSLNUNI
  1. S PSSLNUNI=$O(^PS(51.24,"C",PSSLUNV,0)) I PSSLNUNI,'$$SCREEN^XTID(51.24,.01,PSSLNUNI_",") Q PSSLNUNI
  1. S PSSLNUNI=$O(^PS(51.24,"D",PSSLUNV,0)) I PSSLNUNI,'$$SCREEN^XTID(51.24,.01,PSSLNUNI_",") Q PSSLNUNI
  1. Q 0
  1. ;
  1. ;
  1. SUNIT(PSSUNARG,PSSUNARR) ;Set Unit arrays
  1. N PSSUNARN,PSSUNARL
  1. S PSSUNARN=$$CASE($G(^PS(51.24,PSSUNARR,0)))
  1. S:$P(PSSUNARN,"^")'="" PSSUNARG($P(PSSUNARN,"^"))=""
  1. S:$P(PSSUNARN,"^",2)'="" PSSUNARG($P(PSSUNARN,"^",2))=""
  1. S PSSUNARL="" F S PSSUNARL=$O(^PS(51.24,PSSUNARR,1,"B",PSSUNARL)) Q:PSSUNARL="" S PSSUNARG($$CASE(PSSUNARL))=""
  1. Q
  1. ;
  1. ;
  1. PRS ;Look for any verbage to add to Name using 'per' as the key
  1. N PSSPER1,PSSPER2
  1. S PSSPER1=$$CASE(PSSHXA(PSSHXL))
  1. Q:PSSPER1'[" PER "
  1. S PSSPER2=$F(PSSPER1," PER ")
  1. S PSSPER2=PSSPER2-5
  1. S PSSHXNM(PSSHXL)=$E(PSSHXA(PSSHXL),PSSPER2,$L(PSSPER1))
  1. Q
  1. ;
  1. ;
  1. FNCV(PSSLUNFN) ;Find conversion value
  1. N PSSHX2,PSSHX3,PSSHXQ,PSSHXCV1,PSSHXCV2
  1. S (PSSHX3,PSSHXQ)=0
  1. S PSSHX2=$O(^PS(51.25,"B",PSSLUNFN,0)) I PSSHX2 D
  1. .S PSSHX3="" F S PSSHX3=$O(^PS(51.25,PSSHX2,1,"B",PSSHX3)) Q:PSSHX3=""!(PSSHXQ) D
  1. ..I '$D(PSSUNARA(PSSHX3)) Q
  1. ..S PSSHXCV1=$O(^PS(51.25,PSSHX2,1,"B",PSSHX3,0)) Q:'PSSHXCV1
  1. ..S PSSHXCV2=$P($G(^PS(51.25,PSSHX2,1,PSSHXCV1,0)),"^",2) Q:'PSSHXCV2
  1. ..S PSSHX4(PSSHXL)=PSSHXCV2,PSSHXQ=1
  1. Q PSSHXQ
  1. ;
  1. ;
  1. FDUNIT(PSSKQ1) ;Determine match from Order Unit to FDB units
  1. ;Set PSSHXFL TO 1 if at least one mismatch, and set PSSHXMCH array
  1. N PSSKQ2
  1. S PSSKQ2=$$CASE(PSSKQ1)
  1. I $D(PSSUNARA(PSSKQ2)) S PSSHXMCH("MATCH",PSSHXL)="" Q
  1. I PSSKQ2'[" " D FDSET Q
  1. S PSSKQ2=$P(PSSKQ2," ") I PSSKQ2="" D FDSET Q
  1. I $D(PSSUNARA(PSSKQ2)) S PSSHXMCH("MATCH",PSSHXL)="" Q
  1. D FDSET
  1. Q
  1. FDSET ;
  1. S PSSHXMCH("MISMATCH",PSSHXL)="",PSSHXFL=1
  1. Q
  1. ;
  1. ;
  1. CONDU ;Convert last three Non-Dose Form values, no conversion of data
  1. F PSSHXL="doseLow","doseHigh","maxDailyDose","drugName" D
  1. .S PSSHXA(PSSHXL)=$G(HASH(COUNT,PSSHXL)) I PSSHXA(PSSHXL)="" S PSSHXA(PSSHXL)=" **unknown** " S:PSSHXL["dose" PSSHXNUL=1
  1. Q
  1. ;
  1. ;
  1. DFT1 ;Initialize variables for Dose Form Type
  1. F PSSHXL="doseFormLowUnit","doseFormHighUnit","maxDailyDoseFormUnit" D
  1. .S (PSSHXA(PSSHXL),PSSHX5)=$G(HASH(COUNT,PSSHXL)) I PSSHX5="" S PSSHXA(PSSHXL)=" **unknown** " S:PSSHXL["dose" PSSHXNUL=1 Q
  1. .I PSSHXIEN D FDUNIT(PSSHX5)
  1. Q
  1. ;
  1. ;
  1. DFT3 ;Convert last three Dose Form values, no conversion of data
  1. F PSSHXL="doseFormLow","doseFormHigh","maxDailyDoseForm","drugName" D
  1. .S PSSHXA(PSSHXL)=$G(HASH(COUNT,PSSHXL)) I PSSHXA(PSSHXL)="" S PSSHXA(PSSHXL)=" **unknown** " S:PSSHXL["dose" PSSHXNUL=1
  1. Q