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

PSSHRQ24.m

Go to the documentation of this file.
  1. PSSHRQ24 ;WOIFO/AV,TS,SG,CF - Parses out drugsNotChecked and DrugDoseCheck XML (cont) ;09/20/07
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**178,206,224**;9/30/97;Build 3
  1. ;
  1. ; @authors - Alex Vazquez, Tim Sabat, Steve Gordon, Chris Flegel
  1. ; @date - June 23, 2014
  1. ; @version - 1.0
  1. ;
  1. QUIT
  1. ;
  1. DOSEWRIT(HASH,BASE) ;
  1. ; @DESC Handles writing the drug dose output global
  1. ;
  1. ; @HASH Variable containing drug dose values
  1. ; @BASE Base of output global
  1. ;
  1. ; @RETURNS Nothing
  1. ;
  1. NEW I,NODE,QT,IEN,PSSFSCO,PSSFSCB,PSSFSCN,PSSFSCI
  1. ;get dose form flag
  1. ;
  1. SET QT=""""
  1. SET I=""
  1. FOR SET I=$ORDER(HASH(I)) QUIT:I=""!('I) DO
  1. . SET NODE="^TMP($JOB,BASE,""OUT"",""DOSE"",HASH(I,""orderNumber""),HASH(I,""drugName""))"
  1. . SET IEN=HASH(I,"ien")
  1. . ;
  1. . ; Single values
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"singleDoseStatus") SET @NODE@("SINGLE","STATUS",IEN)=HASH(I,"singleDoseStatus")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"singleDoseStatusCode") SET @NODE@("SINGLE","STATUSCODE",IEN)=HASH(I,"singleDoseStatusCode")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"singleDoseMessage") SET @NODE@("SINGLE","MESSAGE",IEN)=HASH(I,"singleDoseMessage")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"singleDoseMax") SET @NODE@("SINGLE","MAX",IEN)=HASH(I,"singleDoseMax")
  1. . ; Range values
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"rangeDoseLow") SET @NODE@("RANGE","LOW",IEN)=HASH(I,"rangeDoseLow")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"rangeDoseHigh") SET @NODE@("RANGE","HIGH",IEN)=HASH(I,"rangeDoseHigh")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"rangeDoseStatus") SET @NODE@("RANGE","STATUS",IEN)=HASH(I,"rangeDoseStatus")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"rangeDoseStatusCode") SET @NODE@("RANGE","STATUSCODE",IEN)=HASH(I,"rangeDoseStatusCode")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"rangeDoseMessage") SET @NODE@("RANGE","MESSAGE",IEN)=HASH(I,"rangeDoseMessage")
  1. . ;set general dose form data
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"doseFormHigh") SET @NODE@("GENERAL","DOSEFORMHIGH",IEN)=HASH(I,"doseFormHigh")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"doseFormHighUnit") SET @NODE@("GENERAL","DOSEFORMHIGHUNIT",IEN)=HASH(I,"doseFormHighUnit")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"doseFormLow") SET @NODE@("GENERAL","DOSEFORMLOW",IEN)=HASH(I,"doseFormLow")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"doseFormLowUnit") SET @NODE@("GENERAL","DOSEFORMLOWUNIT",IEN)=HASH(I,"doseFormLowUnit")
  1. . ; General subscript values
  1. . SET @NODE@("GENERAL","DOSEHIGH",IEN)=HASH(I,"doseHigh")
  1. . SET @NODE@("GENERAL","DOSEHIGHUNIT",IEN)=HASH(I,"doseHighUnit")
  1. . SET @NODE@("GENERAL","DOSELOW",IEN)=HASH(I,"doseLow")
  1. . SET @NODE@("GENERAL","DOSELOWUNIT",IEN)=HASH(I,"doseLowUnit")
  1. . SET @NODE@("GENERAL","DOSEROUTEDESCRIPTION",IEN)=HASH(I,"doseRouteDescription")
  1. . SET @NODE@("GENERAL","MESSAGE",IEN)=$$BUILDMSG^PSSHRQ25(I,.HASH)
  1. . ; "CHEMO" value, if any
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"chemoInjectable") SET @NODE@("CHEMO")=HASH(I,"chemoInjectable")
  1. . ; Daily values
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"dailyDoseStatus") SET @NODE@("DAILY","STATUS",IEN)=HASH(I,"dailyDoseStatus")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"dailyDoseStatusCode") SET @NODE@("DAILY","STATUSCODE",IEN)=HASH(I,"dailyDoseStatusCode")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"dailyDoseMessage") SET @NODE@("DAILY","MESSAGE",IEN)=HASH(I,"dailyDoseMessage")
  1. . ; Max Daily values
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDoseStatus") SET @NODE@("DAILYMAX","STATUS",IEN)=HASH(I,"maxDailyDoseStatus")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDoseStatusCode") SET @NODE@("DAILYMAX","STATUSCODE",IEN)=HASH(I,"maxDailyDoseStatusCode")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDoseMessage") SET @NODE@("DAILYMAX","MESSAGE",IEN)=HASH(I,"maxDailyDoseMessage")
  1. . ; general maximum life time dose
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"maxLifetimeDose") SET @NODE@("MAXLIFETIME","DOSE",IEN)=HASH(I,"maxLifetimeDose")
  1. . ; Frequency values, if any
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"frequencyStatus") SET @NODE@("FREQ","FREQUENCYSTATUS",IEN)=HASH(I,"frequencyStatus")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"frequencyStatusCode") SET @NODE@("FREQ","FREQUENCYSTATUSCODE",IEN)=HASH(I,"frequencyStatusCode")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"frequencyMessage") SET @NODE@("FREQ","FREQUENCYMESSAGE",IEN)=HASH(I,"frequencyMessage")
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"frequencyHigh") SET @NODE@("FREQ","FREQUENCYHIGH",IEN)=HASH(I,"frequencyHigh") D CSTMFREQ(.HASH,I,NODE,IEN)
  1. . I $$CHKVAL^PSSHRQ23(.HASH,I,"frequencyLow") SET @NODE@("FREQ","FREQUENCYLOW",IEN)=HASH(I,"frequencyLow") D CSTMFREQ(.HASH,I,NODE,IEN)
  1. . ; dose percent elements
  1. . D:$D(HASH(I,"single"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"single","","")
  1. . D:$D(HASH(I,"rangeLow"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"rangeLow","","")
  1. . D:$D(HASH(I,"rangeHigh"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"rangeHigh","","")
  1. . D:$D(HASH(I,"daily"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"daily","","")
  1. . D:$D(HASH(I,"maxDaily"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"maxDaily","DAILYMAX","")
  1. . D:$D(HASH(I,"maxLifetime"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"maxLifetime","","")
  1. . D:$D(HASH(I,"maxLifetimeOrder"))=10 WRITEDSP^PSSHRQ2D(NODE,.HASH,I,IEN,"maxLifetimeOrder","","")
  1. . ;;
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxLifetimeOrderMessage") @NODE@("MAXLIFETIMEORDER","MESSAGE",IEN)=HASH(I,"maxLifetimeOrderMessage")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxLifetimeOrderStatus") @NODE@("MAXLIFETIMEORDER","STATUS",IEN)=HASH(I,"maxLifetimeOrderStatus")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxLifetimeOrderStatusCode") @NODE@("MAXLIFETIMEORDER","STATUSCODE",IEN)=HASH(I,"maxLifetimeOrderStatusCode")
  1. . ;;
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxSingleNTEDose") @NODE@("MAXSINGLENTE","DOSE",IEN)=HASH(I,"maxSingleNTEDose")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxSingleNTEDoseUnit") @NODE@("MAXSINGLENTE","DOSEUNIT",IEN)=HASH(I,"maxSingleNTEDoseUnit")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxSingleNTEDoseForm") @NODE@("MAXSINGLENTE","DOSEFORM",IEN)=HASH(I,"maxSingleNTEDoseForm")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxSingleNTEDoseFormUnit") @NODE@("MAXSINGLENTE","DOSEFORMUNIT",IEN)=HASH(I,"maxSingleNTEDoseFormUnit")
  1. . ;;
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDose") @NODE@("DAILYMAX","DOSE",IEN)=HASH(I,"maxDailyDose")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDoseUnit") @NODE@("DAILYMAX","DOSEUNIT",IEN)=HASH(I,"maxDailyDoseUnit")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDoseForm") @NODE@("DAILYMAX","DOSEFORM",IEN)=HASH(I,"maxDailyDoseForm")
  1. . S:$$CHKVAL^PSSHRQ23(.HASH,I,"maxDailyDoseFormUnit") @NODE@("DAILYMAX","DOSEFORMUNIT",IEN)=HASH(I,"maxDailyDoseFormUnit")
  1. . ;;
  1. .;
  1. .; -- in 2.1 if max daily dose frequency out of range flag=1 perform max daily dose check
  1. . I $G(HASH(I,"orderNumber"))]"",$P($G(PSSDBCAR($G(HASH(I,"orderNumber")))),"^",29) D
  1. . . S PSSFSCO=HASH(I,"orderNumber"),PSSFSCB=BASE,PSSFSCN=HASH(I,"drugName"),PSSFSCI=HASH(I,"ien") D MAXD^PSSDSUTA(PSSFSCO,PSSFSCB,PSSFSCN,PSSFSCI,.PSSDBCAR)
  1. . QUIT
  1. ;
  1. QUIT
  1. ;;
  1. CSTMFREQ(HASH,I,NODE,IEN) ;; build customized frequency message
  1. N MSG,LOW,LOWI,LOWS,LOWR,LOWSWAP,HIGH,HIGHI,HIGHS,HIGHR,HIGHSWAP
  1. Q:$D(@NODE@("FREQ","FREQUENCYCUSTOMMESSAGE",IEN))
  1. S (LOWS,HIGHS)=0
  1. S MSG="Recommended frequency of "_$G(HASH(I,"drugName"))
  1. S LOW=$G(HASH(I,"frequencyLow"))
  1. S:+$P(LOW,".",2)=0 LOW=$P(LOW,".")
  1. S HIGH=$G(HASH(I,"frequencyHigh"))
  1. S:+$P(HIGH,".",2)=0 HIGH=$P(HIGH,".")
  1. I (LOW="")!(HIGH="")!(+LOW=0)!(+HIGH=0)!(+LOW<0)!(+HIGH<0) S @NODE@("FREQ","FREQUENCYCUSTOMMESSAGE",IEN)=MSG_" is unavailable." Q
  1. D:LOW<1
  1. .S LOWI=+$P(1/LOW,".",1)
  1. .S LOWR=$E(+$P(1/LOW,".",2),1)
  1. .S LOWR=$S(LOWR>4:1,1:0)
  1. .S LOW=LOWI+LOWR
  1. .S LOWS=1
  1. D:HIGH<1
  1. .S HIGHI=+$P(1/HIGH,".",1)
  1. .S HIGHR=$E(+$P(1/HIGH,".",2),1)
  1. .S HIGHR=$S(HIGHR>4:1,1:0)
  1. .S HIGH=HIGHI+HIGHR
  1. .S HIGHS=1
  1. D:(HIGH<LOW)&(LOWS=1)&(HIGHS=1)
  1. .S HIGHSWAP=HIGH
  1. .S LOWSWAP=LOW
  1. .S LOW=HIGHSWAP
  1. .S HIGH=LOWSWAP
  1. I HIGH=LOW D
  1. .I HIGHS=0 S MSG=MSG_" is "_HIGH_" time(s) per day."
  1. .E S MSG=MSG_" is every "_HIGH_" days."
  1. .Q
  1. I HIGH'=LOW D
  1. .I LOWS+HIGHS=0 S MSG=MSG_" is "_LOW_" to "_HIGH_" times per day." Q
  1. .I (LOWS=1)&(HIGHS=0) D Q
  1. ..S:LOW'=1 MSG=MSG_" is every "_LOW_" day(s) to "_HIGH_" time(s) per day."
  1. ..S:LOW=1 MSG=MSG_" is "_LOW_" to "_HIGH_" time(s) per day."
  1. .S MSG=MSG_" is every "_LOW_" day(s) to "_HIGH_" days."
  1. .Q
  1. S @NODE@("FREQ","FREQUENCYCUSTOMMESSAGE",IEN)=MSG
  1. Q
  1. ;;