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

PSJHL4A.m

Go to the documentation of this file.
  1. PSJHL4A ;BIR/RLW - CONTINUE DECODE HL7 /MESSSAGE FROM OE/RR ;Mar 05, 2020@08:52:28
  1. ;;5.0;INPATIENT MEDICATIONS ;**105,111,154,170,159,134,197,226,263,313,331,399,442**;16 DEC 97;Build 1
  1. ;
  1. ; Reference to ^PS(52.6 is supported by DBIA# 1231.
  1. ; Reference to ^PS(52.7 is supported by DBIA# 2173.
  1. ; Reference to ^PS(55 is supported by DBIA# 2191.
  1. ; Reference to ^PS(59.7 supported by DBIA #2181.
  1. ; Reference to ^ORHLESC is supported by DBIA# 4922.
  1. ; Reference to ^SC( is supported by DBIA# 10040.
  1. ; Reference to ^PS(51.1 is supported by DBIA# 2177.
  1. ; Reference to ^PS(50.7 is supported by DBIA #2180.
  1. ; Reference to ^PS(51.2 is supported by DBIA 2178.
  1. ;
  1. RXC ; IV order
  1. N IVFL,INACT,I,SELECTED,STRGTH
  1. S APPL=FIELD(1)
  1. I APPL["B" S SOLCNT=SOLCNT+1,PTR=$P(FIELD(2),"^",4) Q:'PTR S VOLUME=FIELD(3)_" ML" D I '$D(^TMP("PSJNVO",$J,"SOL",SOLCNT,0)) D SOLSRCH
  1. .S SOLUTION=""
  1. .F S SOLUTION=$O(^PS(52.7,"AOI",PTR,SOLUTION)) Q:'SOLUTION D
  1. ..S INACT=+$G(^PS(52.7,SOLUTION,"I")) I INACT,'(INACT>DT) Q ; IV Solution is INACTIVE
  1. ..I +VOLUME'=+$P(^PS(52.7,SOLUTION,0),U,3) Q ; IV Solution Volume does not Match
  1. ..S IVFL=$P($G(^PS(52.7,SOLUTION,0)),"^",13) I 'IVFL Q ; IV Solution Not Used in the IV Fluid Order
  1. ..S ^TMP("PSJNVO",$J,"SOL",0)=SOLCNT
  1. ..S ^TMP("PSJNVO",$J,"SOL",SOLCNT,0)=SOLUTION_"^"_VOLUME,TVOLUME=TVOLUME+(+VOLUME)
  1. I $G(INFRT)]"" S X=INFRT D ENI^PSJHLU S INFRT=$G(X)
  1. I APPL="A" S ADCNT=ADCNT+1,PTR=$P(FIELD(2),"^",4) Q:'PTR D
  1. .S STRENGTH=$G(FIELD(3))_" "_$P($G(FIELD(4)),"^",5) D
  1. .S ADDITIVE="",SELECTED=0
  1. .F S ADDITIVE=$O(^PS(52.6,"AOI",PTR,ADDITIVE)) Q:'ADDITIVE D
  1. ..I $G(PSITEM)="" S PSITEM=PTR
  1. ..I $G(^PS(52.6,ADDITIVE,0))']"" Q
  1. ..S INACT=$G(^PS(52.6,ADDITIVE,"I")) I INACT,'(INACT>DT) Q ; IV Additive is INACTIVE
  1. ..S IVFL=$P($G(^PS(52.6,ADDITIVE,0)),"^",13) I 'IVFL Q ; IV Additive Not Used in the IV Fluid Order
  1. ..S STRGTH=$P($G(^PS(52.6,ADDITIVE,0)),"^",15)
  1. ..I 'SELECTED!(+$G(FIELD(3))&(+$G(FIELD(3))=+STRGTH)) S SELECTED=ADDITIVE
  1. ..;Store the bag data ("" = all bag, "S" = See comment, Numeric valure = bottle #)
  1. .I SELECTED D
  1. ..S ^TMP("PSJNVO",$J,"AD",0)=ADCNT
  1. ..S ^TMP("PSJNVO",$J,"AD",ADCNT,0)=SELECTED_"^"_STRENGTH_"^"_$S($P($G(FIELD(5)),U)="S":"See Comments",('+$P($G(FIELD(5)),U)):"",1:$P($G(FIELD(5)),U))
  1. I APPL="A",'$D(^TMP("PSJNVO",$J,"AD",ADCNT,0)) S PSREASON="Can't find matching additive" D ERROR^PSJHL9 Q
  1. Q
  1. ;
  1. RXO ;
  1. I $O(PSJMSG(II,0)) D
  1. .K SEGMENT
  1. .N KK,JJ,XX
  1. .S SEGMENT(1)=$G(PSJMSG(II))
  1. .S KK=1,JJ="" F S JJ=$O(PSJMSG(II,JJ)) Q:'JJ S KK=KK+1,SEGMENT(KK)=$G(PSJMSG(II,JJ))
  1. .S KK=1,JJ=0
  1. .F Q:'$D(SEGMENT(KK)) D
  1. ..I SEGMENT(KK)["|" S FIELD(JJ)=$P(SEGMENT(KK),"|"),SEGMENT(KK)=$E(SEGMENT(KK),$L(FIELD(JJ))+2,$L(SEGMENT(KK))),JJ=JJ+1 Q
  1. ..I SEGMENT(KK)'["|" S FIELD(JJ)=SEGMENT(KK),KK=KK+1 Q:'$D(SEGMENT(KK)) D
  1. ...S XX=$P(SEGMENT(KK),"|"),SEGMENT(KK)=$E(SEGMENT(KK),$L(X)+2,$L(SEGMENT(KK))),FIELD(JJ)=FIELD(JJ)_XX,JJ=JJ+1
  1. S APPL="",PSITEM=$S($P(FIELD(1),"^",5)="IV":"",1:$P(FIELD(1),"^",4))
  1. S:$P(FIELD(1),"^",6)="ORD" PSITEM=""
  1. S:$P(FIELD(1),"^",5)="IV" IVTYP="A",SCHTYP="C",INFRT=$G(FIELD(2))
  1. S DISPENSE=$P($G(FIELD(10)),"^",4)
  1. S PSJINDI=$$UNESC^ORHLESC($G(FIELD(20))) ;*399-IND
  1. S IVLIMIT=$P($G(PSJMSG(II)),"^",3)
  1. S:IVLIMIT["doses" IVLIMIT=$TR(IVLIMIT,"doses","a")
  1. Q
  1. ;
  1. OBX ;
  1. S OBXFL=1,OCNARR=FIELD(5),OCPROV=CLERK,OCCNT=OCCNT+1
  1. S ^TMP("PSJNVO",$J,10,0)=OCCNT
  1. S ^TMP("PSJNVO",$J,10,OCCNT,0)=OCNARR
  1. S ^TMP("PSJNVO",$J,10,OCCNT,1)=$$UNESC^ORHLESC($P($G(^VA(200,+OCPROV,0)),"^"))
  1. Q
  1. ;
  1. NTE ;
  1. S TEXT=$S((FIELD(1)=6)&('OBXFL):"PROCOM",(FIELD(1)=7)&('OBXFL):"ADMINSTR",1:"OCRSN")
  1. S @TEXT@(1)=$$UNESC^ORHLESC($G(FIELD(3)))
  1. S K=1,J="" F S J=$O(PSJMSG(II,J)) Q:'J S K=K+1,@TEXT@(K)=$G(PSJMSG(II,J))
  1. D:$D(OCRSN)
  1. .S QQ=0 F S QQ=$O(OCRSN(QQ)) Q:'QQ S ^TMP("PSJNVO",$J,10,OCCNT,2,QQ,0)=OCRSN(QQ)
  1. S OBXFL=0
  1. Q
  1. ;
  1. ZRX ;
  1. N ND,ND2,CHK,FOLOR,STDT
  1. S PREON=$G(FIELD(1)),ROC=$G(FIELD(3)),IVCAT=$G(FIELD(6))
  1. S IVCAT=$S(",I,C,"[(","_IVCAT_","):IVCAT,1:"") S IVTYP=$S($G(PSGS0XT):"P",1:"A") S IVTYP=$S(IVCAT="I":"P",IVCAT="C":"A",1:$G(IVTYP))
  1. ; HD281238 - No longer checked for PREON before setting IVTYP
  1. S ND=$S((PREON["N")!(PREON["P"):$G(^PS(53.1,+PREON,0)),PREON["V":$G(^PS(55,PSJHLDFN,"IV",+PREON,0)),1:$G(^PS(55,PSJHLDFN,5,+PREON,0)))
  1. S ND2=$S((PREON["N")!(PREON["P"):$G(^PS(53.1,+PREON,2)),PREON["V":$G(^PS(55,PSJHLDFN,"IV",+PREON,2)),1:$G(^PS(55,PSJHLDFN,5,+PREON,2)))
  1. I 'ND I ROC'="N" S PSREASON="Invalid Pharmacy order number" D ERROR^PSJHL9 Q
  1. I ND I ROC="R" S FOLOR=$S(PREON["V":$P(ND2,U,6),1:$P(ND,U,26)) I FOLOR S PSREASON="Duplicate Renewal Request" D ERROR^PSJHL9 Q
  1. I ND I ROC="R" S CHK=$S(PREON["V":$P(ND,U,17),1:$P(ND,U,9)) I "AE"'[CHK S PSREASON="Pharmacy orders with a status of "_CHK_" may not be renewed" D ERROR^PSJHL9 Q
  1. I $G(CHK)="E" I PREON'["V" D NOW^%DTC S X1=+$E(%,1,12),X2=-4 D C^%DTC S STDT=$S(PREON["V":$P(ND,U,3),1:$P(ND2,U,4)) I STDT'>X S PSREASON="Pharmacy orders expired longer than 4 days may not be renewed" D ERROR^PSJHL9 Q
  1. I ND I ROC="E" S FOLOR=$S(PREON["V":$P(ND2,U,6),1:$P(ND,U,26)) I FOLOR S PSREASON="Pharmacy orders may only be edited ONCE" D ERROR^PSJHL9 Q
  1. I ND I ROC="E" S CHK=$S(PREON["V":$P(ND,U,17),1:$P(ND,U,9)) I "DEHO"[CHK N CHKRTN S CHKRTN=CHK_"^PSJHL6" D @CHKRTN S PSREASON=PSREASON_" orders may not be edited" D ERROR^PSJHL9 Q
  1. D:ROC'="R" VALID^PSJHL9 Q:QFLG
  1. I $G(PSITEM)="",$D(^TMP("PSJNVO",$J,"SOL",1,0)) S PSITEM=$P($G(^PS(52.7,+^TMP("PSJNVO",$J,"SOL",1,0),0)),"^",11)
  1. I PRIORITY="ZD" D VALID^PSJHL10 S QFLG=1 Q
  1. I (PREON]"")&(ROC="E") D EDITCK^PSJHL5 Q:QFLG
  1. D NVO^PSJHL9
  1. I (PREON]"")&(ROC="R") D RENEW^PSJHL7 Q
  1. I (PREON]"")&(ROC="E") D EDIT^PSJHL5
  1. Q
  1. ;
  1. SOLSRCH ;Find solution
  1. N SSSS,SEG,ON,ROC,SOL,SOL2
  1. F SSSS=II:0 S SSSS=$O(PSJMSG(SSSS)) Q:'SSSS I $P(PSJMSG(SSSS),"|")="ZRX" D Q
  1. .S SEG=$G(PSJMSG(SSSS)),ON=$P(SEG,"|",2),ROC=$P(SEG,"|",4)
  1. I $G(ROC)'="N" F SOL=0:0 S SOL=$O(^PS(55,PSJHLDFN,"IV",+ON,"SOL",SOL)) Q:'SOL S SOL2=$G(^PS(55,PSJHLDFN,"IV",+ON,"SOL",SOL,0)) I $D(^PS(52.7,"AOI",PTR,+SOL2))&($P(SOL2,U,2)=VOLUME) S SOLUTION=+SOL2 D SET Q
  1. I 'SOLUTION S SOLUTION=$O(^PS(52.7,"AOI",PTR,SOLUTION)) D SET
  1. Q
  1. SET ;Set solution tmp nodes
  1. Q:'+SOLUTION
  1. S ^TMP("PSJNVO",$J,"SOL",0)=SOLCNT
  1. S ^TMP("PSJNVO",$J,"SOL",SOLCNT,0)=SOLUTION_"^"_VOLUME,TVOLUME=TVOLUME+(+VOLUME)
  1. Q
  1. ;
  1. SNDTSTW(PRIO,PSJSCHED,WARD) ; Test to determine if mail message should be sent.
  1. N SNPRIO,SNSCHD,SNOPT
  1. S SNPRIO=$S(PRIO="S":"S",PRIO="A":"A",1:"R")
  1. S SNSCHD=$S(PSJSCHED="STAT":"S",PSJSCHED="NOW":"N",1:"R")
  1. S SNOPT=$P($G(^PS(59.6,WARD,0)),"^",32)
  1. S:SNOPT="" SNOPT=$P($G(^PS(59.7,1,27)),"^",1)
  1. Q:SNOPT="" 0
  1. Q:SNOPT[SNPRIO 0
  1. Q:SNOPT[SNSCHD 0
  1. Q 1
  1. ;
  1. SNDTSTP(PRIO,PSJSCHED) ; Test to determine if mail message should be sent.
  1. N SNPRIO,SNSCHD,SNOPT
  1. S SNPRIO=$S(PRIO="S":"S",PRIO="A":"A",1:"R")
  1. S SNSCHD=$S(PSJSCHED="STAT":"S",PSJSCHED="NOW":"N",1:"R")
  1. S SNOPT=$P($G(^PS(59.7,1,27)),"^",1)
  1. Q:SNOPT="" 1
  1. Q:SNOPT[SNPRIO 0
  1. Q:SNOPT[SNSCHD 0
  1. Q 1
  1. ;
  1. SNDTSTA(PRIO,PSJSCHED) ; Test to determine if mail message should be sent.
  1. N SNPRIO,SNSCHD,SNOPT
  1. S SNPRIO=$S(PRIO="S":"S",PRIO="A":"A",1:"R")
  1. S SNSCHD=$S(PSJSCHED="STAT":"S",PSJSCHED="NOW":"N",1:"R")
  1. S SNOPT=$P($G(^PS(59.7,1,27)),"^",2)
  1. S:SNOPT="" SNOPT=$P($G(^PS(59.7,1,27)),"^",1)
  1. Q:SNOPT="" 1
  1. Q:SNOPT[SNPRIO 0
  1. Q:SNOPT[SNSCHD 0
  1. Q 1
  1. ;
  1. TMPAT(SCHEDULE) ; Extract admin times from schedule in format schedule@schedule
  1. S TMPAT="" I SCHEDULE'["@" Q TMPAT
  1. S TMPAT=$P(SCHEDULE,"@",2) I TMPAT]"" D
  1. .N WARD S WARD=$G(^DPT(PSJHLDFN,.1)) I WARD]"" D
  1. ..N DIC,X,Y S DIC="^DIC(42,",DIC(0)="BOXZ",X=WARD D ^DIC S WARD=+Y Q:WARD=0
  1. ..;p442 S WARD=$O(^PS(59.6,"B",WARD,0))
  1. .I '$D(^PS(51.1,"AC","PSJ",TMPAT)) S TMPAT="" Q
  1. .N II I '$$DOW^PSIVUTL($P(SCHEDULE,"@")) S TMPAT="" Q
  1. .N TMPIEN S TMPIEN=$O(^PS(51.1,"AC","PSJ",TMPAT,0)),TMPAT=$P($G(^PS(51.1,+TMPIEN,0)),"^",2) D
  1. ..I $P($G(^PS(51.1,+TMPIEN,1,+$G(WARD),0)),"^",2) S TMPAT=$P($G(^(0)),"^",2)
  1. Q TMPAT
  1. ;
  1. XMD ; Mailman call for NOTIFY^PSJHL4
  1. ; Input - PNAME = Patient Name
  1. ; RTE = Route
  1. ; DRUG = Drug Name
  1. ; WARD = Ward Name
  1. ; CLINIC = Clinic Location Name
  1. ; PRIO = CPRS Order Priority
  1. S PNAME=$P($G(^DPT(+PSJHLDFN,0)),"^") S:$G(RTE) RTE=$P(^PS(51.2,+RTE,0),"^",3)
  1. S DRUG=$S(DRIEN:$P($G(^PS(50.7,+DRIEN,0)),"^"),1:""),WARD=$G(^DPT(PSJHLDFN,.1))
  1. I $G(CLINIC)'="" S CLINIC=$P($G(^SC(CLINIC,0)),"^",2) I CLINIC'="" S WARD=CLINIC
  1. S XMDUZ="MEDICATIONS,INPATIENT",XMSUB=$G(WARD)
  1. S XMSUB=XMSUB_"-"_NTFSTAT_" "_$S($G(PRIO)="A":"ASAP",$G(PRIO)="S":"STAT",$G(NTFYREAS)=2:"NOW",$G(NTFYREAS)=3:"STAT",1:"")_"-"
  1. S XMSUB=XMSUB_$E(PNAME,1,65-$L(XMSUB))
  1. S XMTEXT="PSG("
  1. S PSG(1,0)="Inpatient Medications has received the following "_$S($G(PRIO)="A":"ASAP",$G(PRIO)="S":"STAT",$G(NTFYREAS)=2:"NOW",1:"")_" order ("_NTFSTAT_")"
  1. S PSG(2,0)=""
  1. S PSG(3,0)=" Patient: "_PNAME I $G(LASTFOUR) S PSG(3,0)=PSG(3,0)_" ("_LASTFOUR_")"
  1. S PSG(4,0)="Order Information: "_DRUG_" "_DO_" "_RTE_" "_$G(PSJSCHED)
  1. S PSG(5,0)=" Order Date: "_$$ENDTC^PSGMI(ORDATE)
  1. D ^XMD
  1. Q