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

PSSDSAPK.m

Go to the documentation of this file.
  1. PSSDSAPK ;BIR/RTR-Miscellaneous APIs for Dose Call ;09/02/09
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**117,168,160,178**;9/30/97;Build 14
  1. ;
  1. ;
  1. ;Disregard Package Use and Inactive Date in File 50, so you can still get General Dosing Guidelines
  1. ;Return Dispense Drug for Orderable Item
  1. ;PSSGTOI = Orderable Item
  1. ;PSSGTPK = Package O for Outpatient, N for Non-VA Med, I for Inpatient
  1. ;PSSGTRTE = Med Route Internal Entry Number
  1. ;PSSGTAB = String containing A for Additive, B for Solution
  1. ;PSSGTRES = result - 0 for No Drug found, or File 50 Internal Entry Number
  1. DRG(PSSGTOI,PSSGTPK,PSSGTRTE,PSSGTAB) ;
  1. I '$G(PSSGTOI) Q 0
  1. I $G(PSSGTPK)'="O",$G(PSSGTPK)'="X",$G(PSSGTPK)'="I" Q 0
  1. N PSSGTRES,PSSGTPM,PSSGT1,PSSGT2,PSSGT3,PSSGT4,PSSGT5,PSSGTHL1,PSSGTHL2
  1. S PSSGTPM=$S(PSSGTPK="I":"U",1:PSSGTPK)
  1. S (PSSGTRES,PSSGTHL1,PSSGTHL2)=0
  1. I PSSGTPK="I",$G(PSSGTRTE),$P($G(^PS(51.2,PSSGTRTE,0)),"^",6)=1 I $G(PSSGTAB)["A"!($G(PSSGTAB)["B") G DRGINP
  1. F PSSGT1=0:0 S PSSGT1=$O(^PSDRUG("ASP",PSSGTOI,PSSGT1)) Q:'PSSGT1!(PSSGTHL2) D
  1. .S PSSGT3=$P($G(^PSDRUG(PSSGT1,"ND")),"^"),PSSGT4=$P($G(^PSDRUG(PSSGT1,"ND")),"^",3)
  1. .I 'PSSGT3!('PSSGT4) Q
  1. .S PSSGT5=$P($$PROD0^PSNAPIS(PSSGT3,PSSGT4),"^",7) I +$G(PSSGT5)'>0 Q
  1. .I $$EXMT^PSSDSAPI(PSSGT1) Q
  1. .S:'PSSGTHL1 PSSGTHL1=PSSGT1
  1. .I $P($G(^PSDRUG(PSSGT1,2)),"^",3)'[PSSGTPM Q
  1. .S PSSGT2=$P($G(^PSDRUG(PSSGT1,"I")),"^") I PSSGT2,PSSGT2<DT Q
  1. .S PSSGTHL2=PSSGT1
  1. S PSSGTRES=$S(PSSGTHL2:PSSGTHL2,PSSGTHL1:PSSGTHL1,1:0)
  1. Q PSSGTRES
  1. ;
  1. ;
  1. DRGINP ;Inpatient Order with IV Route
  1. S PSSDSIVF=1 ;Added in 2.0 to set Input exception if no drug found
  1. N PSSGT6,PSSGT7,PSSGT8,PSSGTN1,PSSGTN3,PSSGTN4
  1. I PSSGTAB["A" D
  1. .F PSSGT6=0:0 S PSSGT6=$O(^PS(52.6,"AOI",PSSGTOI,PSSGT6)) Q:'PSSGT6!(PSSGTRES) D
  1. ..S PSSGT7=$P($G(^PS(52.6,PSSGT6,"I")),"^") I PSSGT7,PSSGT7'>DT Q
  1. ..S PSSGT8=$P($G(^PS(52.6,PSSGT6,0)),"^",2) I 'PSSGT8 Q
  1. ..;Dispense Drug can be inactive, and no need to check package use
  1. ..S PSSGTN1=$P($G(^PSDRUG(PSSGT8,"ND")),"^"),PSSGTN3=$P($G(^PSDRUG(PSSGT8,"ND")),"^",3)
  1. ..I 'PSSGTN1!('PSSGTN3) Q
  1. ..S PSSGTN4=$P($$PROD0^PSNAPIS(PSSGTN1,PSSGTN3),"^",7) I +$G(PSSGTN4)'>0 Q
  1. ..I $$EXMT^PSSDSAPI(PSSGT8) Q
  1. ..S PSSGTRES=PSSGT8
  1. I PSSGTRES Q PSSGTRES
  1. I PSSGTAB["B" D
  1. .F PSSGT6=0:0 S PSSGT6=$O(^PS(52.7,"AOI",PSSGTOI,PSSGT6)) Q:'PSSGT6!(PSSGTRES) D
  1. ..I $P($G(^PS(52.7,PSSGT6,0)),"^",14)'=1 Q
  1. ..S PSSGT7=$P($G(^PS(52.7,PSSGT6,"I")),"^") I PSSGT7,PSSGT7'>DT Q
  1. ..S PSSGT8=$P($G(^PS(52.7,PSSGT6,0)),"^",2) I 'PSSGT8 Q
  1. ..;Dispense Drug can be inactive, and no need to check package use
  1. ..S PSSGTN1=$P($G(^PSDRUG(PSSGT8,"ND")),"^"),PSSGTN3=$P($G(^PSDRUG(PSSGT8,"ND")),"^",3)
  1. ..I 'PSSGTN1!('PSSGTN3) Q
  1. ..S PSSGTN4=$P($$PROD0^PSNAPIS(PSSGTN1,PSSGTN3),"^",7) I +$G(PSSGTN4)'>0 Q
  1. ..I $$EXMT^PSSDSAPI(PSSGT8) Q
  1. ..S PSSGTRES=PSSGT8
  1. Q PSSGTRES
  1. ;
  1. ;
  1. PRE(PSSLGTOI,PSSDIAG) ;Determine if CPRS needs to do order checks
  1. ;PSSLGTOI = File 50.7 Internal Entry Number
  1. ;PSSDIAG = CPRS order dialog (U:Inpatient; I:IV Fluids; O:Outpatient; N:Non-VA Meds)
  1. ; If PSSDIAG is "I" then DO NOT use this call for additve entries.
  1. ;If 1 is returned then CPRS needs to do enhanced order checks. This means it is either a UD,
  1. ; Outpatient, Non-VA, additive, or a premix solution.
  1. ;If 0 is returned then enhanced order check is not needed to perform.
  1. ;
  1. I '+$G(PSSLGTOI) Q 0
  1. I $G(PSSDIAG)="" Q 1
  1. I PSSDIAG="O" Q 1
  1. I PSSDIAG="N" Q 1
  1. I PSSDIAG="I" Q +$$SOL^PSSDSAPA(PSSLGTOI)
  1. I PSSDIAG="U" Q $$IPM^PSSDSAPA(PSSLGTOI)
  1. Q 1
  1. ;
  1. ;
  1. CONV(PSSCVTVL) ;Convert hours into format for Dose API for Inpatient Medications
  1. N PSSCVTRS,PSSCVT1,PSSCVT2,PSSCVT3
  1. S PSSCVTRS=""
  1. I '$G(PSSCVTVL) Q PSSCVTRS
  1. S PSSCVT1=+PSSCVTVL
  1. I PSSCVT1<1 S PSSCVT2=PSSCVT1*60 S PSSCVT3=1440/PSSCVT2 S PSSCVTRS=$J(PSSCVT3,0,0) S:PSSCVTRS=24 PSSCVTRS="Q1H" Q PSSCVTRS
  1. S PSSCVT2=$J(PSSCVT1,0,0) S PSSCVTRS="Q"_PSSCVT2_"H"
  1. Q PSSCVTRS
  1. ;
  1. ;
  1. ITEM ;Only Orderable Item passed in, no Dispense Drug
  1. N PSSDBI1,PSSDBI2,PSSDBI3,PSSDBI4,PSSDBI5,PSSDBI6,PSSDBI7,PSSDBI8,PSSDBI9,PSSDBI91,PSSDBI92,PSSDBI93,PSSDBI94
  1. S PSSDBI1=$G(PSSDSLCL)
  1. I $L(PSSDBI1)'>0 Q
  1. S PSSDBI1=$$UP^XLFSTR(PSSDBI1)
  1. ;Strip out commas up until first character that's not a number, or a decimal
  1. S PSSDBI6=0 F PSSDBI7=1:1:$L(PSSDBI1) Q:PSSDBI6 S PSSDBI8=$E(PSSDBI1,PSSDBI7) I PSSDBI8'?1N,PSSDBI8'?1".",PSSDBI8'?1"," S PSSDBI6=PSSDBI7
  1. I PSSDBI6=1 Q
  1. S PSSDBI9=$S('PSSDBI6:$L(PSSDBI1),1:(PSSDBI6-1))
  1. S PSSDBI91=$E(PSSDBI1,1,PSSDBI9),PSSDBI92=$E(PSSDBI1,(PSSDBI9+1),$L(PSSDBI1))
  1. S PSSDBI93=$TR(PSSDBI91,",","")
  1. S PSSDBI1=PSSDBI93_PSSDBI92
  1. I $E(PSSDBI1)=0 S PSSDBI1=$E(PSSDBI1,2,$L(PSSDBI1))
  1. I $L(PSSDBI1)'>0 Q
  1. S PSSDBI2=+PSSDBI1
  1. I 'PSSDBI2!($L(PSSDBI2)=$L(PSSDBI1)) Q
  1. S PSSDBI3=$E(PSSDBI1,($L(PSSDBI2)+1),$L(PSSDBI1))
  1. S PSSDBI4=$S($E(PSSDBI3)=" ":$E(PSSDBI3,2,$L(PSSDBI3)),1:PSSDBI3)
  1. I PSSDBI4="" Q
  1. I PSSDBIFL S PSSDBI5=$$UNITD^PSSDSAPI(PSSDBI4)
  1. I 'PSSDBIFL S PSSDBI5=$$UNIT^PSSDSAPI(PSSDBI4)
  1. I PSSDBI5="" Q
  1. S PSSDBAR("AMN")=PSSDBI2,PSSDBAR("UNIT")=PSSDBI5,PSSDBFAL=1
  1. Q
  1. ;
  1. ;
  1. FRCON(PSSCFQ1) ;Convert frequency into a number for complex dose additions
  1. N PSSCFQRS,PSSCFQ2,PSSCFQ3,PSSCFQ4
  1. S PSSCFQRS=0
  1. I PSSCFQ1?1N.N!(PSSCFQ1?1N.N1"."1N.N) S PSSCFQRS=PSSCFQ1 Q PSSCFQRS
  1. I PSSCFQ1?1"Q"1N.N1"H" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQ3=60*PSSCFQ2
  1. .S PSSCFQRS=1440/PSSCFQ3
  1. I PSSCFQ1?1"Q"1N.N1"D" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQRS=1/PSSCFQ2 I PSSCFQRS["." S PSSCFQRS=$J(PSSCFQRS,0,4)
  1. I PSSCFQ1?1"Q"1N.N1"W" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQ3=7*PSSCFQ2
  1. .S PSSCFQ4=PSSCFQ3*1440
  1. .S PSSCFQRS=1440/PSSCFQ4 I PSSCFQRS["." S PSSCFQRS=$J(PSSCFQRS,0,4)
  1. I PSSCFQ1?1"Q"1N.N1"L" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQ3=30*PSSCFQ2
  1. .S PSSCFQ4=PSSCFQ3*1440
  1. .S PSSCFQRS=1440/PSSCFQ4 I PSSCFQRS["." S PSSCFQRS=$J(PSSCFQRS,0,4)
  1. I PSSCFQ1?1"X"1N.N1"D" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQRS=PSSCFQ2 I PSSCFQRS["." S PSSCFQRS=$J(PSSCFQRS,0,4)
  1. I PSSCFQ1?1"X"1N.N1"W" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQRS=PSSCFQ2/7
  1. .I PSSCFQRS["." S PSSCFQRS=$J(PSSCFQRS,0,4)
  1. I PSSCFQ1?1"X"1N.N1"L" D Q PSSCFQRS
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQ2=$E(PSSCFQ1,2,($L(PSSCFQ1)-1))
  1. .S PSSCFQRS=PSSCFQ2/30
  1. .I PSSCFQRS["." S PSSCFQRS=$J(PSSCFQRS,0,4)
  1. I PSSCFQ1="QOD" S PSSCFQRS=.5 Q PSSCFQRS
  1. Q 0
  1. ;
  1. ;
  1. SING ;
  1. S $P(PSSDBCAR(PSSDBEB1),"^")="S"
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",8)=1
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",9)=1
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",10)=$P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",7)
  1. S $P(PSSDBCAR(PSSDBEB1),"^",7)=1
  1. Q
  1. ;
  1. ;
  1. DOWN ;
  1. S:PSSDBASA ^TMP($J,PSSDBASF,"OUT",0)=^TMP($J,PSSDBASE,"OUT",0) S:PSSDBASB ^TMP($J,PSSDBASG,"OUT",0)=^TMP($J,PSSDBASE,"OUT",0)
  1. Q
  1. ;
  1. ;
  1. BDOSE ;Missing Numeric Dose or Dose Unit
  1. I 'PSSDBEB3!($P(PSSDBEB2,"^",11)="") D EXCPS^PSSDSAPD(1) D:$D(PSSDBCAZ(PSSDBEB1,"FRQ_ERROR")) EXCPS^PSSDSAPD(2) S PSSDBDGO=1 Q
  1. S $P(PSSDBCAR(PSSDBEB1),"^",20)=1 I '$P(PSSDBCAR(PSSDBEB1),"^",5) D EXCPS^PSSDSAPD(1) D:$D(PSSDBCAZ(PSSDBEB1,"FRQ_ERROR")) EXCPS^PSSDSAPD(2) S PSSDBFTX(PSSDBEB1,"FTX_ERROR")="" Q
  1. S PSSDBDGO=1
  1. D EXCPS^PSSDSAPD(1)
  1. I $D(PSSDBCAZ(PSSDBEB1,"FRQ_ERROR")) D EXCPS^PSSDSAPD(2)
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",5)=1
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",8)=1
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",9)=1
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",7)="DAY"
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",10)="DAY"
  1. S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",6)=$$DUNIT^PSSDSAPA S PSSDBAR("UNIT")=$P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",6) S $P(^TMP($J,PSSDBASE,"IN","DOSE",PSSDBEB1),"^",14)=$$DFM^PSSDSEXC
  1. S $P(PSSDBCAR(PSSDBEB1),"^",6)=1 S $P(PSSDBCAR(PSSDBEB1),"^",10)=1
  1. ; -- in 2.1 set Dummy Data flag
  1. S $P(PSSDBCAR(PSSDBEB1),"^",33)=1
  1. Q
  1. ;
  1. ;
  1. FTX ;Pull Dosing sequences out of Input for complex orders where Free Text Dosage could not be evaluated
  1. N PSSDTX1
  1. S PSSDTX1="" F S PSSDTX1=$O(PSSDBFTX(PSSDTX1)) Q:PSSDTX1="" D
  1. .S PSSDBFTX(PSSDTX1,"NODE1")=$G(^TMP($J,PSSDBASE,"IN","DOSE",PSSDTX1))
  1. .S PSSDBFTX(PSSDTX1,"NODE2")=$G(^TMP($J,PSSDBASE,"IN","PROSPECTIVE",PSSDTX1))
  1. .K ^TMP($J,PSSDBASE,"IN","DOSE",PSSDTX1)
  1. .K ^TMP($J,PSSDBASE,"IN","PROSPECTIVE",PSSDTX1)
  1. Q
  1. ;
  1. ;
  1. FTXRS ;Reset input globals that were pulled because of invalid dosage
  1. N PSSDTX2
  1. S PSSDTX2="" F S PSSDTX2=$O(PSSDBFTX(PSSDTX2)) Q:PSSDTX2="" D
  1. .S ^TMP($J,PSSDBASE,"IN","DOSE",PSSDTX2)=PSSDBFTX(PSSDTX2,"NODE1")
  1. .S ^TMP($J,PSSDBASE,"IN","PROSPECTIVE",PSSDTX2)=PSSDBFTX(PSSDTX2,"NODE2")
  1. Q
  1. ;
  1. ;
  1. ERR1() ;Screen out Daily Dose errors for Single Dose Sequences, unless New Daily Dose created based on previous Dosing sequences
  1. ;Called from PSSDSEXC
  1. N PSSERS,PSSERSU
  1. S PSSERS=$G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSDWL1,"MSG"))
  1. S PSSERSU=$$UP^XLFSTR(PSSERS)
  1. I PSSERSU["DAILY DOSE",$P($G(PSSDBCAR(PSSDWLP)),"^",15) Q 1 ; 2.1 change to not show Daily Dose is Schedule indicates so
  1. I $P($G(PSSDBCAR(PSSDWLP)),"^")'="S"!($P($G(PSSDBCAR(PSSDWLP)),"^",11)) Q 0
  1. I PSSERSU'["DAILY DOSE" Q 0
  1. Q 1
  1. ;
  1. ;
  1. ERR2() ;Screen out Frequency errors if Dosing Sequence is flagged for Single Dose only
  1. ;Called from PSSDSEXC
  1. N PSSERH,PSSERHU,PSSERHRS
  1. S PSSERHRS=0
  1. I $P($G(PSSDBCAR(PSSDWE1)),"^",12)!($P($G(PSSDBCAR(PSSDWE1)),"^",5)=0) D
  1. .S PSSERH=PSSDWEGC
  1. .S PSSERHU=$$UP^XLFSTR(PSSERH)
  1. .I PSSERHU["UNDEFINED FREQUENCY"!(PSSERHU["FREQUENCY GREATER") S PSSERHRS=1
  1. Q PSSERHRS
  1. ;
  1. ;
  1. INFERR ;Infusion Rate Height and Weight Errors
  1. I $D(PSSDBFDB(PSSDBLP,"HT_ERROR")) S PSSDBCAZ(PSSDBFDB(PSSDBLP,"RX_NUM"),"HT_ERROR")=""
  1. I $D(PSSDBFDB(PSSDBLP,"WT_ERROR")) S PSSDBCAZ(PSSDBFDB(PSSDBLP,"RX_NUM"),"WT_ERROR")=""
  1. Q
  1. ;
  1. ;
  1. INFERRS ;
  1. I '$D(PSSDBCAZ(PSSDBEB1,"HT_ERROR")),'$D(PSSDBCAZ(PSSDBEB1,"WT_ERROR")) Q
  1. I $D(PSSDBCAZ(PSSDBEB1,"WT_ERROR")),$D(PSSDBCAZ(PSSDBEB1,"HT_ERROR")) D EXCPS^PSSDSAPD(14) Q
  1. I '$D(PSSDBCAZ(PSSDBEB1,"HT_ERROR")) D EXCPS^PSSDSAPD(13) Q
  1. D EXCPS^PSSDSAPD(12)
  1. Q
  1. ;
  1. ;
  1. GENERRX ;Set General Dosing Guidelines exception
  1. ;This code, not being used, was moved from PSSDSEXC to have a record of old functionality, in case we need it again
  1. Q
  1. ;
  1. N PSSDWF1,PSSDWF2,PSSDWF3,PSSDWF4
  1. S PSSDWF2=0 F PSSDWF1=0:0 S PSSDWF1=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE5,PSSDWF1)) Q:'PSSDWF1 S PSSDWF2=PSSDWF1
  1. I 'PSSDWF2 D Q
  1. .I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE5,1)="Dosing Checks could not be performed for Drug: "_$P(PSSDBCAR(PSSDWE5),"^",2)
  1. .I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"EXCEPTIONS",1)="Dosing Checks could not be performed for Drug: "_$P(PSSDBCAR(PSSDWE5),"^",2)
  1. .I PSSDBASA S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE5,2)=" General Dosing guidelines are not available"
  1. .I PSSDBASB S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"EXCEPTIONS",2)=" General Dosing guidelines are not available"
  1. .S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE5,1)="^^^^^^Dosing Checks could not be performed for Drug: "_$P(PSSDBCAR(PSSDWE5),"^",2)_"^^^"_"General Dosing guidelines are not available"
  1. S PSSDWF2=PSSDWF2+1
  1. S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE5,PSSDWF2)="^^^^^^Dosing Checks could not be performed for Drug: "_$P(PSSDBCAR(PSSDWE5),"^",2)_"^^^"_"General Dosing guidelines are not available"
  1. I PSSDBASA D
  1. .S PSSDWF3=0
  1. .F PSSDWF4=0:0 S PSSDWF4=$O(^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE5,PSSDWF4)) Q:'PSSDWF4 S PSSDWF3=PSSDWF4
  1. .S PSSDWF3=PSSDWF3+1
  1. .S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE5,PSSDWF3)=" General Dosing guidelines are not available"
  1. I PSSDBASB D
  1. .S PSSDWF3=0
  1. .F PSSDWF4=0:0 S PSSDWF4=$O(^TMP($J,PSSDBASG,"OUT",PSSDWE5,"EXCEPTIONS",PSSDWF4)) Q:'PSSDWF4 S PSSDWF3=PSSDWF4
  1. .S PSSDWF3=PSSDWF3+1
  1. .S ^TMP($J,PSSDBASG,"OUT",PSSDWE5,"EXCEPTIONS",PSSDWF3)=" General Dosing guidelines are not available"
  1. Q
  1. ;
  1. ;
  1. MTCH() ;Called from PSSDSAPD, looking for Local Possible Dosages Match
  1. N PSSDSLTM
  1. I $P(PSSDBNOD,"^")=PSSDSLCL Q 1
  1. I $E(PSSDSLCL)=0 S PSSDSLTM=$E(PSSDSLCL,2,$L(PSSDSLCL)) I $L(PSSDSLTM)>0,PSSDSLTM=$P(PSSDBNOD,"^") Q 1
  1. I $E(PSSDSLCL)'=0 S PSSDSLTM=0_PSSDSLCL I PSSDSLTM=$P(PSSDBNOD,"^") Q 1
  1. Q 0
  1. ;
  1. ;
  1. DPOP ;Use Pre release logic to find Dose unit and Numeric Dose
  1. N PSSDDPOP,PSSDSLPO
  1. S PSSDDPOP=$$EN^PSSDSBBP(PSSDBFDB(PSSDBLP,"DRUG_IEN"),PSSDSLCL)
  1. I PSSDDPOP S PSSDBAR("AMN")=$P(PSSDDPOP,"^",2),PSSDBAR("UNIT")=$P($G(^PS(51.24,+$P(PSSDDPOP,"^"),0)),"^",2) S PSSDBFAL=1 Q
  1. I $E(PSSDSLCL)=0 S PSSDSLPO=$E(PSSDSLCL,2,$L(PSSDSLCL)) I $L(PSSDSLPO)>0 D I PSSDDPOP S PSSDBAR("AMN")=$P(PSSDDPOP,"^",2),PSSDBAR("UNIT")=$P($G(^PS(51.24,+$P(PSSDDPOP,"^"),0)),"^",2) S PSSDBFAL=1 Q
  1. .S PSSDDPOP=$$EN^PSSDSBBP(PSSDBFDB(PSSDBLP,"DRUG_IEN"),PSSDSLPO)
  1. I $E(PSSDSLCL)'=0 S PSSDSLPO=0_PSSDSLCL D I PSSDDPOP S PSSDBAR("AMN")=$P(PSSDDPOP,"^",2),PSSDBAR("UNIT")=$P($G(^PS(51.24,+$P(PSSDDPOP,"^"),0)),"^",2) S PSSDBFAL=1 Q
  1. .S PSSDDPOP=$$EN^PSSDSBBP(PSSDBFDB(PSSDBLP,"DRUG_IEN"),PSSDSLPO)
  1. Q
  1. ;
  1. ;
  1. FRDR ;Check if Duration exists, and is less than Duration of Schedule
  1. I $G(PSSDBAR("TYPE"))="SINGLE DOSE" Q
  1. N PSSDRSC1,PSSDRSC2,PSSDRSC3,PSSDRSC4,PSSDRSC5
  1. S PSSDRSC1=PSSDBFRB(PSSDBFDB(PSSDBLP,"RX_NUM"),"DRATE") I PSSDRSC1="" Q
  1. S PSSDRSC3=$$DRT^PSSDSAPD(PSSDRSC1) I PSSDRSC3'>0 Q
  1. S PSSDRSC4=1440/PSSDRSC3
  1. S PSSDRSC5=$S($P($G(PSSDBAR("FREQZZ")),"^",2)'="":$P(PSSDBAR("FREQZZ"),"^",2),1:PSSDBAR("FREQ"))
  1. I PSSDRSC5="" Q
  1. S PSSDRSC2=$$FRCON(PSSDRSC5)
  1. I PSSDRSC2,PSSDRSC4,PSSDRSC4>PSSDRSC2 D
  1. .S PSSDBCAZ(PSSDBFDB(PSSDBLP,"RX_NUM"),"FRQD_ERROR")=""
  1. .S PSSDBCAZ(PSSDBFDB(PSSDBLP,"RX_NUM"),"FRQ_ERROR")=""
  1. Q
  1. ;
  1. ;
  1. NOEXP ;Don't show any exceptions for a drug level error
  1. N PSSNOE1,PSSNOE2
  1. F PSSNOE1=0:0 S PSSNOE1=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)) Q:'PSSNOE1 D
  1. .S PSSNOE2=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",10) I PSSNOE2=""!(PSSNOE2["GCNSEQNO") S PSSNOE9(PSSDWE1)="" D NOEXPG Q
  1. .I PSSNOE2["Drug not matched to NDF"!(PSSNOE2["No active IV Additive/Solution marked for IV fluid order entry") S PSSNOE9(PSSDWE1)="" D NOEXPS
  1. Q
  1. ;
  1. ;
  1. NOEXPS ;Set Drug level error
  1. I PSSNOE2["Drug not matched to NDF" S PSSENHKZ(PSSDWE1)=1
  1. I PSSDBASA D
  1. .S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,1)=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",7)
  1. .S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,2)=" Reason(s): "_$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",10)
  1. I PSSDBASB D
  1. .S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",1)=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",7)
  1. .S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",2)=" Reason(s): "_$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",10)
  1. Q
  1. ;
  1. ;
  1. NOEXPG ;Set GCNSEQNO exception
  1. S PSSENHKZ(PSSDWE1)=1
  1. I PSSDBASA D
  1. .S ^TMP($J,PSSDBASF,"OUT","EXCEPTIONS","DOSE",PSSDWE1,1)=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",7)
  1. I PSSDBASB D
  1. .S ^TMP($J,PSSDBASG,"OUT",PSSDWE1,"EXCEPTIONS",1)=$P($G(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWE1,PSSNOE1)),"^",7)
  1. Q
  1. ;
  1. ;
  1. DPL ;Set Dose display text, called from PSSDSAPD
  1. S PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM"))=""
  1. I $D(PSSDBFDB(PSSDBLP,"DOSE_AMT")),$D(PSSDBFDB(PSSDBLP,"DOSE_UNIT")) S PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM"))=PSSDBFDB(PSSDBLP,"DOSE_AMT")_" "_PSSDBFDB(PSSDBLP,"DOSE_UNIT") D DPLZ Q
  1. I $G(PSSDBDS(PSSDBLP,"DRG_AMT")),$G(PSSDBDS(PSSDBLP,"DRG_UNIT"))'="" S PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM"))=$G(PSSDBDS(PSSDBLP,"DRG_AMT"))_" "_$G(PSSDBDS(PSSDBLP,"DRG_UNIT")) D DPLZ Q
  1. S PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM"))=$S($G(PSSDBDS(PSSDBLP,"DOSE"))'="":$P($G(PSSDBDS(PSSDBLP,"DOSE")),"&",5),1:$G(PSSDBDS(PSSDBLP,"DO")))
  1. Q
  1. ;
  1. ;
  1. DPLZ ;
  1. I $E(PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM")))="." S PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM"))="0"_PSSDSDPL(PSSDBFDB(PSSDBLP,"RX_NUM"))
  1. Q
  1. ;
  1. COMMENT ;
  1. ;The following line at DRG+12 was commented out, but needed to uncomment for CCR 4971, but other changes seemed to
  1. ;resolve this issue
  1. ;.S:'PSSGTHL1 PSSGTHL1=PSSGT1
  1. ;Original reason for comment:
  1. ;Commented the Package Use and Inactive Date check out in 2.0 because of the logic failure of a Drug Level error from
  1. ;CPRS, we check the Drug level error and don't return to error to CPRS if the enhanced order check was shown, to avoid
  1. ;duplicate "dosing" error messages. But we need to restore in 2.1 to get General Dosing Guidelines, and look at another
  1. ;way to handle the duplicate "dosing" drug level error messages.
  1. Q
  1. ;
  1. ;
  1. CKWRN ;Set flag indicating a warning exists
  1. N PSSWAF1,PSSWAF2,PSSWAF3
  1. S PSSWAF3=0 F PSSWAF1=0:0 S PSSWAF1=$O(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSWAF1)) Q:'PSSWAF1!(PSSWAF3) D
  1. .I $G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSWAF1,"TEXT"))'="" D
  1. ..S PSSWAF2=$S($G(^TMP($J,PSSDBASE,"OUT","DOSE","ERROR",PSSDWLP,PSSWAF1,"SEV"))="Warning":0,1:1)
  1. ..I 'PSSWAF2 S $P(PSSDBCAR(PSSDWLP),"^",22)=1,PSSWAF3=1
  1. Q
  1. ;
  1. ;
  1. ADOSE ;Add DOSE subscript to any EXCEPTION from interface without DOSE subscript
  1. I '$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS",PSSDWEX3,"")) Q
  1. N PSSDWEZ4,PSSDWEZ5,PSSDWEZ6,PSSDWEZ7
  1. S PSSDWEZ4=0 F PSSDWEZ7=0:0 S PSSDWEZ7=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEZ7)) Q:'PSSDWEZ7 S PSSDWEZ4=PSSDWEZ7
  1. S PSSDWEZ4=PSSDWEZ4+1
  1. F PSSDWEZ5=0:0 S PSSDWEZ5=$O(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS",PSSDWEX3,PSSDWEZ5)) Q:'PSSDWEZ5 D
  1. .S PSSDWEZ6=^TMP($J,PSSDBASE,"OUT","EXCEPTIONS",PSSDWEX3,PSSDWEZ5)
  1. .S ^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEZ4)=PSSDWEZ6
  1. .I $P(PSSDWEZ6,"^",10)'="" S $P(^TMP($J,PSSDBASE,"OUT","EXCEPTIONS","DOSE",PSSDWEX3,PSSDWEZ4),"^",7)="Maximum Single Dose Check could not be performed for Drug: "_$P(PSSDBCAR(PSSDWEX3),"^",2) ;Changed for 2.0
  1. .S PSSDWEZ4=PSSDWEZ4+1
  1. Q