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

PSSDSEXC.m

Go to the documentation of this file.
  1. PSSDSEXC ;BIR/RTR-Exceptions for Dose call ;02/24/09
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**117,160,178,206,224**;9/30/97;Build 3
  1. ;
  1. ;Called from PSSDSAPD, this routine takes the results from the call to First DataBank and creates displayable TMP
  1. ;globals for the calling applications. Typically, PSSDBASA indicates a CPRS call, and PSSDBASB indicates a pharmacy call
  1. ;
  1. ;PSSDBCAR ARRAY pieces, set mostly in PSSDSAPD and a few other rotuines:
  1. ;1 = S for Single Dose, D for Daily Dose, B for Both
  1. ;2 = Drug Name
  1. ;3 = Drug Internal Entry Number
  1. ;4 = Frequency Flag
  1. ;5 = 1 for Maintenance Dose, 0 for Single Dose
  1. ;6 = 1 to only Show General information (Or General Dose error) and errors (No Single Dose or Daily DOse Messages)
  1. ;7 = 1 To NEVER show General Dosing information, overrides piece 8
  1. ;8 = 1 Show General Dosing Guidelines even though piece 1 = "S"
  1. ;9 = FDB ROUTE
  1. ;10 = 1 to show General Dosing exception in place of General Dosing information when no General Dosing Information exists
  1. ;11 = 1 to indicate to show the Daily Dose Error message, (generally screened out in this case)
  1. ; because you added up previous Dosages at this Dosing Sequence,
  1. ;12 = 1 to screen out frequency exceptions
  1. ;13 = 1, set in this routine and PSSDSAPD, to indicate the need to show the generic exception message
  1. ;14 = 1 to exclude from all Dose checks based on Schedule
  1. ;15 = 1 to exclude from Daily Dose check based on Schedule
  1. ;16 = 1 to indicate this Dosing sequence is part of a complex order
  1. ;17 = 1 to indicate a GCNSECNQ number problem
  1. ;18 = 1 to indicate there is an Input Exception
  1. ;19 = 1 to indicate missing age
  1. ;20 = 1 to indicate Free Text Dose can't be evaluated
  1. ;21 = 1 to indicate Free Text Infusion Rate exception
  1. ;22 = 1 to indicate FDB Warning exists
  1. ;23 = 1 for missing Dose Route or Dose Type
  1. ;24 = 1 Indicates Single Dose message or error/exception was shown, and no Daily message **Added for 2.1 **
  1. ;25 = 1 Indicates missing weight for drug requiring weight
  1. ;26 = 1 Indicates missing BSA for drug requiring BSA
  1. ;27 = 1 Indicates a 2.1 Drug or Order level message tweak was done in PSSDSEXD
  1. ;28 = 1 Indicates in 2.1 show custom max daily dose message
  1. ;29 = 1 Indicates in 2.1 max daily dose frequency out of range, show custom frequency message
  1. ;30 = 1 Indicates in 2.1 NotScreened message tweak in CHECKMSG^PSSDSEXD
  1. ;31 = 1 Indicates doseRouteDescription is null (Invalid Route passed into FDB)
  1. ;32 = Text to append to errors/exceptions if Piece 31 is 1
  1. ;33 = 1 Indicates in 2.1 Dummy Data is being used for call to FDB
  1. ;34 = 1 to indicate unableToCheck MaxSingleDose
  1. ;35 = 1 to indicate unableToCheck MaxDailyDose
  1. ;
  1. ;PSSDBCAX holds the errors to show
  1. ;
  1. ;2.1 PSSDBSNO checks added - if 0, all schedule are excluded from Doising checks
  1. FMT ;PSSDBDGO =1 if you went to interface, 0 if you did not go to interface; PSSDBSNO IS 0 if all schedules are excluded
  1. N PSSDWLP,PSSDWL1,PSSDWLPV,PSSDWRSN
  1. I PSSDBASA,PSSDBDGO,PSSDBSNO S ^TMP($J,PSSDBASF,"OUT",0)=^TMP($J,PSSDBASE,"OUT",0)
  1. I PSSDBASB,PSSDBDGO,PSSDBSNO S ^TMP($J,PSSDBASG,"OUT",0)=^TMP($J,PSSDBASE,"OUT",0)
  1. I $P($G(^TMP($J,PSSDBASE,"OUT",0)),"^")=-1 Q
  1. ;
  1. ;
  1. ;Set errors
  1. S PSSDWLP="" F S PSSDWLP=$O(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP)) Q:PSSDWLP="" D:'$P(PSSDWLP,";",5)&('$P(PSSDBCAR(PSSDWLP),"^",14)) ;2.1 piece 14 check added
  1. .D CKWRN^PSSDSAPK F PSSDWL1=0:0 S PSSDWL1=$O(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1)) Q:'PSSDWL1 D NOTS^PSSDSAPA D:'$$ERR1^PSSDSAPK
  1. ..I $P(PSSDBCAR(PSSDWLP),"^",22),$G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"SEV"))'="Warning" Q
  1. ..I '$P(PSSDBCAR(PSSDWLP),"^",22) I $P(PSSDBCAR(PSSDWLP),"^",19)!$P(PSSDBCAR(PSSDWLP),"^",20)!$P(PSSDBCAR(PSSDWLP),"^",21) Q
  1. ..S $P(PSSDBCAR(PSSDWLP),"^",24)=1 D RTEXT^PSSDSUTL(PSSDWLP,0) ;2.1
  1. ..I $G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"MSG"))'="" D
  1. ...I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"MSG")=$G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"MSG"))
  1. ...I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWLP,"ERROR",PSSDWL1,"MSG")=$G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"MSG"))
  1. ..I $G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"TEXT"))'="" S PSSDWLPV=$S($G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"SEV"))="Warning":0,1:1) D
  1. ...I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"TEXT")=$S(PSSDWLPV:PSSDWRSN,1:"")_$G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"TEXT")) D:'PSSDWLPV
  1. ....S ^TMP($J,PSSDBASF,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"WARN")="Warning"
  1. ...I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWLP,"ERROR",PSSDWL1,"TEXT")=$S(PSSDWLPV:PSSDWRSN,1:"")_$G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"TEXT")) D:'PSSDWLPV
  1. ....S ^TMP($J,PSSDBASG,"OUT",PSSDWLP,"ERROR",PSSDWL1,"WARN")="Warning"
  1. ;
  1. ;
  1. I PSSDBSNO D EXCP
  1. I PSSDBSNO D MESQ
  1. I 'PSSDBDGO!(PSSDBSNO) D
  1. .I PSSDBASA D Q
  1. ..I $D(^TMP($J,PSSDBASF,"OUT")) S ^TMP($J,PSSDBASF,"OUT",0)=1 Q
  1. ..S ^TMP($J,PSSDBASF,"OUT",0)=0
  1. .I PSSDBASB D Q
  1. ..I $D(^TMP($J,PSSDBASG,"OUT")) S ^TMP($J,PSSDBASG,"OUT",0)=1 Q
  1. ..S ^TMP($J,PSSDBASG,"OUT",0)=0
  1. Q
  1. ;
  1. ;
  1. EXCP ;Set Exceptions
  1. N PSSDWE1,PSSDWE2,PSSDWE3,PSSDWE4,PSSDWEE1,PSSDWEE2,PSSDWEX1,PSSDWEX2,PSSDWEX3,PSSDWEX4,PSSDWEX5,PSSDWEX6,PSSDWEX7,PSSDWSR1,PSSDWSR2,PSSDWSR3,PSSDWER1,PSSDWER2,PSSDWEGC,PSSDWER9,PSSNOE9,PSSDWEEX
  1. S PSSDWEX3="" F S PSSDWEX3=$O(PSSDBCAR(PSSDWEX3)) Q:PSSDWEX3="" D ADOSE^PSSDSAPK D:'$P(PSSDBCAR(PSSDWEX3),"^",14) ;2.1 Piece 14 check added
  1. .I '$O(PSSDBCAX(PSSDWEX3,0)) Q
  1. .S PSSDWEX4=0 F PSSDWEX7=0:0 S PSSDWEX7=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEX7)) Q:'PSSDWEX7 S PSSDWEX4=PSSDWEX7
  1. .S PSSDWEX4=PSSDWEX4+1
  1. .F PSSDWEX5=0:0 S PSSDWEX5=$O(PSSDBCAX(PSSDWEX3,PSSDWEX5)) Q:'PSSDWEX5 I PSSDWEX5=2!(PSSDWEX5=3)!(PSSDWEX5>11) D
  1. ..I $P(PSSDBCAR(PSSDWEX3),"^",19)!($P(PSSDBCAR(PSSDWEX3),"^",20)) Q
  1. ..I $P(PSSDBCAR(PSSDWEX3),"^",21) I PSSDWEX5'=3,PSSDWEX5'=12,PSSDWEX5'=13,PSSDWEX5'=14 Q
  1. ..S PSSDWEX6=$T(ERROR+PSSDWEX5) S PSSDWSR1=$P(PSSDWEX6,";;",4) S $P(PSSDBCAR(PSSDWEX3),"^",24)=1 ;piece 24 added for 2.1
  1. ..S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEX4)="^^^^^^"_$S(PSSDWSR1:"Daily Dose Range Check Error Summary for Drug: ",1:"Dosing Checks could not be performed for Drug: ")_$P(PSSDBCAR(PSSDWEX3),"^",2)_"^^^" D DSQ
  1. ..S PSSDWEX4=PSSDWEX4+1
  1. ;
  1. ;
  1. ;Loop through EXCEPTION global, call RESET if Free Text Dosage error exists and EXCEPTION from interface exists, then set 2 processing global outputs
  1. K PSSDWE3
  1. S PSSDWE1="" F S PSSDWE1=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1)) Q:PSSDWE1="" D NOEXP^PSSDSAPK I '$D(PSSNOE9(PSSDWE1)) S PSSDWEX1(PSSDWE1)="" D:$D(PSSDBCAX(PSSDWE1,1)) RESET D
  1. .I $P(PSSDBCAR(PSSDWE1),"^",22)!($P(PSSDBCAR(PSSDWE1),"^",14)) Q ;2.1 piece 14 check added
  1. .S PSSDWE4=1,(PSSDWSR3,PSSDWER1,PSSDWER2,PSSDWER9)=0
  1. .S PSSDWEE1=$P($G(PSSDBCAR(PSSDWE1)),"^",2),PSSDWEE2=$P($G(PSSDBCAR(PSSDWE1)),"^",3)
  1. .D RTEXT^PSSDSUTL(PSSDWE1,1)
  1. .F PSSDWE2=0:0 S PSSDWE2=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)) Q:'PSSDWE2 S PSSDWSR2=$S($P(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2),"^",7)["Summary":1,1:0) D
  1. ..S PSSDWEGC=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",10) I $$ERR2^PSSDSAPK Q
  1. ..I $P(PSSDBCAR(PSSDWE1),"^",19),PSSDWEGC'["patient parameters" Q
  1. ..I '$P(PSSDBCAR(PSSDWE1),"^",19),$P(PSSDBCAR(PSSDWE1),"^",23),PSSDWEGC'["Dose Type",PSSDWEGC'["Dose Route" Q
  1. ..S $P(PSSDBCAR(PSSDWE1),"^",24)=1 ;2.1
  1. ..I 'PSSDWSR2 D Q
  1. ...I PSSDWE4=1 D S PSSDWE4=2
  1. ....I PSSDBASA D HDER1
  1. ....I PSSDBASB D HDER2
  1. ...I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE4)=$S('PSSDWER1:PSSDWRSN,1:" ")_$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",10) I PSSDWEGC'["Frequency",PSSDWER9 D HDER3
  1. ...I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",PSSDWE4)=$S('PSSDWER1:PSSDWRSN,1:" ")_$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",10) I PSSDWEGC'["Frequency",PSSDWER9 D HDER4
  1. ...S PSSDWE4=PSSDWE4+1,PSSDWER1=1
  1. ..I 'PSSDWSR3 D S PSSDWE4=PSSDWE4+1
  1. ...S PSSDWSR3=1
  1. ...I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE4)=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",7)
  1. ...I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",PSSDWE4)=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",7)
  1. ..I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE4)=$S('PSSDWER2:PSSDWRSN,1:" ")_$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",10)
  1. ..I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",PSSDWE4)=$S('PSSDWER2:PSSDWRSN,1:" ")_$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE2)),"^",10)
  1. ..S PSSDWE4=PSSDWE4+1,PSSDWER2=1
  1. ;
  1. ;
  1. ;If Free Text error message existed, but no Exception came back from Interface set the Free Text exception
  1. S PSSDWEX2="" F S PSSDWEX2=$O(PSSDBCAR(PSSDWEX2)) Q:PSSDWEX2="" I '$P(PSSDBCAR(PSSDWEX2),"^",19),'$P(PSSDBCAR(PSSDWEX2),"^",22),'$P(PSSDBCAR(PSSDWEX2),"^",14) D ;2.1 piece 14 check added
  1. .I '$D(PSSDWEX1(PSSDWEX2)),$D(PSSDBCAX(PSSDWEX2,1)),'$D(PSSNOE9(PSSDWEX2)) D
  1. ..S $P(PSSDBCAR(PSSDWEX2),"^",24)=1,PSSDWEEX=$S('$P(PSSDBCAR(PSSDWEX2),"^",15)&('$P(PSSDBCAR(PSSDWEX2),"^",16))&($P(PSSDBCAR(PSSDWEX2),"^",5)):"Dosing Checks",1:"Maximum Single Dose Check") ;2.1
  1. ..D RTEXT^PSSDSUTL(PSSDWEX2,1)
  1. ..I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWEX2,1)=PSSDWEEX_" could not be done for Drug: "_$P(PSSDBCAR(PSSDWEX2),"^",2) ;2.1 change
  1. ..I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWEX2,"EXCEPTIONS",1)=PSSDWEEX_" could not be performed for Drug: "_$P(PSSDBCAR(PSSDWEX2),"^",2) ;2.1 change
  1. ..I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWEX2,2)=PSSDWRSN_"Free Text Dosage could not be evaluated"
  1. ..I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWEX2,"EXCEPTIONS",2)=PSSDWRSN_"Free Text Dosage could not be evaluated"
  1. ..S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX2,1)="^^^^^^Dosing Checks could not be performed for Drug: "_$P(PSSDBCAR(PSSDWEX2),"^",2)_"^^^"_"Free Text Dosage could not be evaluated"
  1. D CONTINUE^PSSDSEXD ;; Mocha 2.1 Drug Level Message tweaks ;;
  1. Q
  1. ;
  1. ;
  1. MESQ ;Set Messages
  1. N PSSDWE5,PSSDWDRG,PSSDWIEN,PSSDWGFB,PSSDWSPS,PSSDWADJ
  1. S PSSDWE5="" F S PSSDWE5=$O(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5)) Q:PSSDWE5="" I $D(PSSDBCAR(PSSDWE5)),'$P(PSSDBCAR(PSSDWE5),"^",14) D ;2.1 piece 14 check added
  1. .S PSSDWDRG=$P(PSSDBCAR(PSSDWE5),"^",2),PSSDWIEN=$P(PSSDBCAR(PSSDWE5),"^",3),PSSDWADJ=0 Q:PSSDWDRG=""!('PSSDWIEN)
  1. .I $G(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"SINGLE","STATUSCODE",PSSDWIEN))=5 S $P(PSSDBCAR(PSSDWE5),"^",13)=1
  1. .I $P(PSSDBCAR(PSSDWE5),"^")="S" D:'$P(PSSDBCAR(PSSDWE5),"^",6) SING D:$P(PSSDBCAR(PSSDWE5),"^",6)!($P(PSSDBCAR(PSSDWE5),"^",8)) GEN Q
  1. .S PSSDWGFB=0 I $P(PSSDBCAR(PSSDWE5),"^")="D" D:'$P(PSSDBCAR(PSSDWE5),"^",6) DAILY D Q ;line broken up and piece 24 check added at end
  1. ..I $$SHOGEN D GEN
  1. .D SING,DAILY I $$SHOGEN D GEN
  1. Q
  1. ;
  1. ;
  1. SHOGEN() ;General Dosing Guidelines - Piece 25 and piece 15 check added for 2.1
  1. I $P(PSSDBCAR(PSSDWE5),"^",16)!($P(PSSDWE5,";",5)) Q 0 ;complex orders, remove in 2.2
  1. I PSSDWGFB!('$P(PSSDBCAR(PSSDWE5),"^",4))!($D(PSSDBCAX(PSSDWE5,1)))!($P(PSSDBCAR(PSSDWE5),"^",8))!($P(PSSDBCAR(PSSDWE5),"^",6))!(($P(PSSDBCAR(PSSDWE5),"^",24))&($P(PSSDBCAR(PSSDWE5),"^",15))) Q 1
  1. Q 0
  1. ;
  1. ;
  1. SING ;Set Single Dose
  1. I $P(PSSDBCAR(PSSDWE5),"^",6) Q
  1. N PSSDWE6
  1. S PSSDWE6=$G(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"SINGLE","STATUSCODE",PSSDWIEN))
  1. S:PSSDWE6=5 $P(PSSDBCAR(PSSDWE5),U,34)=1
  1. I PSSDWE6=1 S PSSDWSPS=1 Q
  1. I PSSDWE6>1,PSSDWE6<5 D Q
  1. .S $P(PSSDBCAR(PSSDWE5),"^",24)=1 ;2.1
  1. .I PSSDBASA D
  1. ..S ^TMP($J,PSSDBASF,"OUT","DOSE",PSSDWE5,PSSDWDRG,"1_SINGLE","MESSAGE",PSSDWIEN)=PSSDWDRG_": "_^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"SINGLE","MESSAGE",PSSDWIEN)
  1. .I PSSDBASB D S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"MESSAGE","1_SINGLE",PSSDWIEN)=PSSDWDRG_": "_^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"SINGLE","MESSAGE",PSSDWIEN)
  1. ..I $G(PSSDBADJ(PSSDWE5))'="" D ADJUS S PSSDWADJ=1
  1. Q
  1. ;
  1. ;
  1. DAILY ;Set Daily (Range) Dose
  1. I $P(PSSDBCAR(PSSDWE5),"^",6)!($P(PSSDBCAR(PSSDWE5),"^",15)) Q ;2.1 piece 15 check added
  1. N PSSDWE9
  1. S PSSDWE9=$G(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"DAILYMAX","STATUSCODE",PSSDWIEN))
  1. S:PSSDWE9=5 $P(PSSDBCAR(PSSDWE5),U,35)=1
  1. Q:PSSDWE9=1
  1. ;I PSSDWE9=4,$G(PSSDBFRC(PSSDWE5,"CONJ"))="T" Q
  1. ; -- if status code is between (2 and 4) or ( in 2.1 if show custom max daily dose message flag=1)
  1. I (PSSDWE9>1&(PSSDWE9<5))!($P(PSSDBCAR(PSSDWE5),"^",28)) D S $P(PSSDBCAR(PSSDWE5),"^",24)="" D KGEN Q
  1. .I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","DOSE",PSSDWE5,PSSDWDRG,"2_RANGE","MESSAGE",PSSDWIEN)=PSSDWDRG_": "_$G(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"DAILYMAX","MESSAGE",PSSDWIEN))
  1. .I PSSDBASB D S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"MESSAGE","2_RANGE",PSSDWIEN)=PSSDWDRG_": "_$G(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"DAILYMAX","MESSAGE",PSSDWIEN))
  1. ..I $G(PSSDBADJ(PSSDWE5))'="",'PSSDWADJ D ADJUS
  1. I PSSDWE9=5,'$P(PSSDBCAR(PSSDWE5),"^",29) S PSSDWGFB=1
  1. Q
  1. ;
  1. ;
  1. GEN ;General Dosing Guidelines
  1. I $P(PSSDBCAR(PSSDWE5),"^",7) Q
  1. I $P(PSSDBCAR(PSSDWE5),"^",15),$G(PSSDWSPS) D KGEN Q
  1. I $P(PSSDBCAR(PSSDWE5),"^",16)!($P(PSSDWE5,";",5)) Q ;complex orders, remove in 2.2
  1. ;I $D(PSSDBCDP(PSSDWE5)) D SGEN^PSSDSAPA Q ; works with CRT+31^PSSDSAPD - add both back in 2.2
  1. I $G(^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"GENERAL","MESSAGE",PSSDWIEN))'="" D Q
  1. .I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","DOSE",PSSDWE5,PSSDWDRG,"3_GENERAL","MESSAGE",PSSDWIEN,1)=^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"GENERAL","MESSAGE",PSSDWIEN)
  1. .I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"MESSAGE","3_GENERAL",PSSDWIEN,1)=^TMP($J,PSSDBASE,"OUT","DOSE",PSSDWE5,PSSDWDRG,"GENERAL","MESSAGE",PSSDWIEN)
  1. Q
  1. ;
  1. ;
  1. KGEN ;Kill General Dosing
  1. I PSSDBASA K ^TMP($J,PSSDBASF,"OUT","DOSE",PSSDWE5,PSSDWDRG,"3_GENERAL","MESSAGE",PSSDWIEN,1)
  1. I PSSDBASB K ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"MESSAGE","3_GENERAL",PSSDWIEN,1)
  1. Q
  1. ;
  1. ;
  1. GENERR ;Set General Dosing Guidelines exception
  1. Q
  1. D GENERRX^PSSDSAPK
  1. Q
  1. ;
  1. ;
  1. RESET ;Reset main exception global if Free text dose could not be evaluated
  1. N PSSDWB1,PSSDWB2,PSSDWB3
  1. S PSSDWB1="" F S PSSDWB1=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWB1)) Q:PSSDWB1="" D
  1. .S PSSDWB2=$G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWB1))
  1. .I $P(PSSDWB2,"^",10)'="Invalid or Undefined Dose",$P(PSSDWB2,"^",10)'="Invalid or Undefined Dose Unit" S PSSDWB3(PSSDWB1)=^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWB1)
  1. .K ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWB1)
  1. S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,1)="^^^^^^Dosing Checks could not be performed for Drug: "_$P(PSSDBCAR(PSSDWE1),"^",2)_"^^^Free Text Dosage could not be evaluated"
  1. S PSSDWB2=2,PSSDWB1="" F S PSSDWB1=$O(PSSDWB3(PSSDWB1)) Q:PSSDWB1="" D
  1. .S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWB2)=PSSDWB3(PSSDWB1)
  1. .S PSSDWB2=PSSDWB2+1
  1. Q
  1. ;
  1. ;
  1. ERROR ;List of errors, for complex orders piece 3 = 1 if only for Daily Dose and adding previous Dosing sequences
  1. ;;1;;Free Text Dosage could not be evaluated
  1. ;;2;;Invalid or Undefined Frequency
  1. ;;3;;Free Text Infusion Rate could not be evaluated
  1. ;;4;;Not all Dose types are Maintenance;;1
  1. ;;5;;Not all Dose Units are defined or are the same;;1
  1. ;;6;;Not all Med Routes are defined or are the same;;1
  1. ;;7;;Not all Frequencies are valid;;1
  1. ;;8;;Not all Durations are the same;;1
  1. ;;9;;At least one Duration is less than one day;;1
  1. ;;10;;At least one Schedule is a Day of Week Schedule;;1
  1. ;;11;;One or more Free Text Dosages could not be evaluated;;1
  1. ;;12;;One or more required patient parameters unavailable: Height
  1. ;;13;;One or more required patient parameters unavailable: Weight
  1. ;;14;;One or more required patient parameters unavailable: Height, Weight
  1. ;;15;;Frequency greater than order duration
  1. Q
  1. ;
  1. ;
  1. DFM() ;get Dose Form Indicator
  1. N PSSDFDFK,PSSDFDFL
  1. I $G(PSSDBAR("UNIT"))="" Q 0
  1. S PSSDFDFL=0 F PSSDFDFK=0:0 S PSSDFDFK=$O(^PS(51.24,"C",PSSDBAR("UNIT"),PSSDFDFK)) Q:'PSSDFDFK!(PSSDFDFL) I '$$SCREEN^XTID(51.24,.01,PSSDFDFK_",") S PSSDFDFL=PSSDFDFK
  1. I PSSDFDFL,$P($G(^PS(51.24,PSSDFDFL,0)),"^",3) Q 1
  1. Q 0
  1. ;
  1. ;
  1. HDER1 ;Set header for exceptions for Output 1
  1. I PSSDWEGC["Frequency" D S PSSDWER9=1 Q
  1. .S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE4)="Max Daily Dose Check could not be performed for Drug: "_PSSDWEE1
  1. S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSDWE4)=$S('$P(PSSDBCAR(PSSDWE1),"^",15)&('$P(PSSDBCAR(PSSDWE1),"^",16)):"Dosing Checks",1:"Maximum Single Dose Check")_" could not be done for Drug: "_PSSDWEE1 Q
  1. Q
  1. ;
  1. ;
  1. HDER2 ;Set header for exceptions for Output 2
  1. I PSSDWEGC["Frequency" D S PSSDWER9=1 Q
  1. .S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",PSSDWE4)="Max Daily Dose Check could not be performed for Drug: "_PSSDWEE1
  1. S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",PSSDWE4)=$S('$P(PSSDBCAR(PSSDWE1),"^",15)&('$P(PSSDBCAR(PSSDWE1),"^",16)):"Dosing Checks",1:"Maximum Single Dose Check")_" could not be performed for Drug: "_PSSDWEE1 Q
  1. Q
  1. ;
  1. ;
  1. HDER3 ;Reset header node for Output 1 to Non-Frequency header
  1. S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,1)="Maximum Single Dose Check could not be done for Drug: "_PSSDWEE1 ;2.1 CHANGE
  1. Q
  1. ;
  1. ;
  1. HDER4 ;Reset header node for Output 2 to Non-frequency header
  1. S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",1)="Maximum Single Dose Check could not be performed for Drug: "_PSSDWEE1 ;2.1 CHANGE
  1. Q
  1. ;
  1. ;
  1. ADJU ;Set Adjusted Dose message
  1. S:$G(PSSDBFDB(PSSDBLP,"ADJ_MSG"))'="" PSSDBADJ(PSSDBFDB(PSSDBLP,"RX_NUM"))=$G(PSSDBFDB(PSSDBLP,"ADJ_MSG"))
  1. Q
  1. ;
  1. ;
  1. ADJUS ;Set Adjusted Dose message in Output
  1. S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"MESSAGE",".5_SINGLE",PSSDWIEN)=$G(PSSDBADJ(PSSDWE5))
  1. Q
  1. ;
  1. ;
  1. DSQ ;
  1. S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEX4)=^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEX4)_$P(PSSDWEX6,";;",3)
  1. I $G(PSSDBCAX(PSSDWEX3,PSSDWEX5))="" Q
  1. S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEX4)=^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEX4)_$G(PSSDBCAX(PSSDWEX3,PSSDWEX5))
  1. Q