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

PSJIBAG.m

Go to the documentation of this file.
  1. PSJIBAG ;BIR/JCH - IV PARAMETER VALIDATION ; 08/10/12 12:26pm
  1. ;;5.0;INPATIENT MEDICATIONS;**279,326**;16 DEC 97;Build 1
  1. ;;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified.
  1. ;
  1. ; Reference to ^PSBPOIV is supported by DBIA #5434
  1. ;
  1. PSBPOIV(DFN,ORDER,PSJQT,PSJINIV) ; Check BCMA IV Parameters, invalidate labels
  1. ; DFN - Patient IEN
  1. ; ORDER - Inpatient IV order
  1. ; PSJQT - Quiet (no display)
  1. ; - 100 = called from Label Log
  1. ; PSJINIV - Were any labels invalidated?
  1. ; 0=NO, 1=YES
  1. ;
  1. Q:'$G(DFN)!'$G(ORDER)!'($G(ORDER)["V")
  1. K ^TMP("PSBAR",$J),^TMP("PSJINBAG",$J,DFN,+ORDER)
  1. I '$G(PSJQT) W !,"Checking IV Labels..."
  1. D EN^PSBPOIV(DFN,ORDER)
  1. N INVDT,PSJAVAIL,Y,COU,PSJDOLJ D NOW^%DTC S INVDT=%,PSJAVAIL=0,PSJDOLJ=$J
  1. N LBLID S LBLID=0 F S LBLID=$O(^TMP("PSBAR",$J,LBLID)) Q:'LBLID D
  1. .N LBLNUM,INVBCMA S INVBCMA=$P($G(^TMP("PSBAR",$J,LBLID)),"^")
  1. .I (INVBCMA'="I"),'$G(PSJAVAIL) K ^TMP("PSJINBAG",$J),^TMP("PSBAR",$J,"I") S PSJAVAIL=1,INVDT=""
  1. .S LBLNUM=$P(LBLID,"V",2) Q:'LBLNUM
  1. .N INVIPM S INVIPM=$P($G(^PS(55,DFN,"IVBCMA",LBLNUM,0)),"^",9) Q:INVIPM
  1. .S ^TMP("PSJINBAG",$J,DFN,ORDER,LBLID)=INVDT
  1. I $D(^TMP("PSJINBAG",$J,DFN,ORDER)) D
  1. .I ($G(PSJQT)) D DATA(DFN,+ORDER,,,$G(PSJAVAIL),,1),EXIT Q
  1. .D VFY(DFN,ORDER,INVDT,$G(PSJAVAIL)),EXIT
  1. Q
  1. ;
  1. VFY(DFN,PSIVON55,INVDT,PSJAVAIL) ; If AUTO-VERIFY turned off, veryifying pharmacist needs to be reminded about invalidated labels before being prompted to print labels
  1. N PSJIAL,PSJIACT,PSJBLN,PSJDNE,PSIVTMP,Y S PSJBLN=0,PSJDNE=0,PSJINIV="",PSJDOLJ=$J
  1. N BCINVF S BCINVF=$G(^TMP("PSBAR",$J,"I")) I BCINVF]"" D
  1. .N TMPINFLD S TMPINFLD=$P(BCINVF,"invalid",2) S TMPINFLD=$TR(TMPINFLD,".") I $E(TMPINFLD)=" " S TMPINFLD=$E(TMPINFLD,2,99)
  1. .S BCINVF=TMPINFLD
  1. I '$G(PSJAVAIL)&(BCINVF="") Q
  1. D FULL^VALM1
  1. I '$G(PSJAVAIL),($G(BCINVF)]"") W !!!?6,"** Edit to ",BCINVF," has invalidated the following IV labels **" D
  1. .W !?4,"(Invalid IV labels cannot be reprinted or marked as Infusing in BCMA)"
  1. I $G(PSJAVAIL) W !!!?12,"** The following labels are available **"
  1. D DATA(DFN,PSIVON55,,$S($G(PSJAVAIL):"",1:INVDT),$S($G(PSJAVAIL):PSJAVAIL,1:""),.PSJINIV)
  1. I '$G(PSJAVAIL) D
  1. .N DIR,DA S DIR(0)="SAO^P:PRINT",DIR("A")="Enter 'P' to print list of Invalidated Labels or RETURN to continue: " D ^DIR
  1. .I '($G(Y)="P") K ^TMP("PSJINBAG",$J) Q
  1. .D DEV(DFN,PSIVON55,INVDT)
  1. I $G(PSJAVAIL) D CONT^PSJOE0 K ^TMP("PSJINBAG",$J)
  1. Q
  1. ;
  1. DATA(DFN,ON,PSJIPRNT,PSJIINV,PSJAVAIL,PSJINIV,PSJQT) ;Get the Information
  1. N PSJINVDT
  1. EN2 ; Queued entry point
  1. N TMPON55,PSJBLN,PSJD1,X,DA,DR,DIQ,DIC,PSJD2,LLCNT,PSJBLNL,TMPON,PSIVSCR,PSGP
  1. K PSJDNE S PSIVSCR=$E(IOST)="C",COU=0,LLCNT=0
  1. I ($G(ON)["P") S TMPON=ON N HDR531 S HDR531=$G(^PS(53.1,+ON,0)) S HDR531=$P(HDR531,"^",25) I HDR531["V" S ON=HDR531
  1. S ON=+ON
  1. S ^TMP("PSJINBAG",PSJDOLJ,DFN,ON_"V")=$S($G(PSJAVAIL):"AVAILABLE",1:"INVALID")
  1. I $G(PSJIPRNT) D ENIV^PSJAC D
  1. .N LOC,PN,AI,ADCNT,SOLCNT S LOC=$P($G(VAIN(4)),"^",2) I LOC="" S LOC=+$G(^PS(55,DFN,"IV",+ON,"DSS")) D
  1. ..S LOC=$S($G(LOC):$P($G(^SC(+LOC,0)),"^"),1:"NOT FOUND")
  1. .S PN=$S(($G(PSGP(0))]""):PSGP(0),1:$P($G(^DPT(DFN,0)),"^"))
  1. .U IO W !!?23,"* Invalidated IV Labels *",!!?5,"Patient: ",PN,?50,"Location: ",LOC
  1. .S ADCNT=0 F AI=1:1 S ADCNT=$O(^PS(55,DFN,"IV",+ON,"AD",ADCNT)) Q:'ADCNT D
  1. ..N IVND0,IVSTR S IVND0=$G(^PS(55,DFN,"IV",+ON,"AD",ADCNT,0)),IVSTR=$P(IVND0,"^",2)
  1. ..I AI=1 W !?1,"Additive(s) (current order): ",?14,$P($G(^PS(52.6,+IVND0,0)),"^") Q
  1. ..W !?14,$P($G(^PS(52.6,+IVND0,0)),"^")
  1. .S SOLCNT=0 F AI=1:1 S SOLCNT=$O(^PS(55,DFN,"IV",+ON,"SOL",SOLCNT)) Q:'SOLCNT D
  1. ..N IVND0,IVOL S IVND0=$G(^PS(55,DFN,"IV",+ON,"SOL",SOLCNT,0)),IVOL=$P(IVND0,"^",2)
  1. ..I AI=1 W !?1,"Solution(s) (current order): ",?14,$P($G(^PS(52.7,+IVND0,0)),"^") Q
  1. ..W !?14,$P($G(^PS(52.6,+$G(^PS(55,DFN,"IV",+ON,"SOL",SOLCNT,0)),0)),"^")
  1. I '$G(PSJQT) U IO W ! D H2 S PSJBLN=0,LLCNT=1
  1. I $G(PSJIINV) D NOW^%DTC S (PSJIINV,PSJINVDT)=$S($G(PSJIINV)>200000:PSJIINV,1:%) D UPD(DFN,ON,PSJINVDT,.PSJINIV)
  1. I '$G(PSJQT) S ON=ON_"V" S PSJBLNL=0 F S PSJBLNL=$O(^TMP("PSJINBAG",PSJDOLJ,DFN,ON,PSJBLNL)) Q:'PSJBLNL D DISPLAY
  1. ;
  1. K ;
  1. K NUMLAB,TRA,CD,DATE,DIR,DIC,%
  1. Q
  1. ;
  1. DISPLAY ; Display or Print labels
  1. K DA,DR,DIQ,DIC,PSJD2 N IVALID,LBST,BCST,LSTAT,PSJBLN
  1. S PSJBLN=$P(PSJBLNL,"V",2)
  1. S DIC="^PS(55,"_DFN_",""IVBCMA"",",DA=PSJBLN,DR=".01;.02;1;2;3;4;5;9",DIQ="PSJD2",DIQ(0)="IE" D EN^DIQ1
  1. S BCST=$G(PSJD2(55.0105,PSJBLN,2,"E")) Q:(BCST="COMPLETED")!(BCST="GIVEN")
  1. Q:($G(PSJD2(55.0105,PSJBLN,5,"E"))]"")
  1. S IVALID=$P($G(^PS(55,DFN,"IVBCMA",+PSJBLN,0)),"^",9)
  1. I IVALID Q:($G(PSJIINV))&(IVALID'=$G(PSJIINV))
  1. I PSIVSCR,($Y#IOSL)>23 D PAUSE,H2 S LLCNT=$G(LLCNT)+3
  1. W $$ENDTC1^PSGMI($G(PSJD2(55.0105,PSJBLN,4,"I"))),?17,$G(PSJD2(55.0105,PSJBLN,.01,"I")) S LLCNT=$G(LLCNT)+1 I $X>39 W ! S LLCNT=$G(LLCNT)+1
  1. S LBST=$G(PSJD2(55.0105,PSJBLN,5,"E"))
  1. W ?39,LBST S LLCNT=$G(LLCNT)+1
  1. S X=$G(PSJD2(55.0105,PSJBLN,3,"I")) W ?51,$S(X:"YES",1:"NO")
  1. W ?57,$G(PSJD2(55.0105,PSJBLN,2,"E")) S LLCNT=$G(LLCNT)+1
  1. I $G(PSJD2(55.0105,PSJBLN,1,"I"))]"" W ?66,$$ENDTC1^PSGMI($G(PSJD2(55.0105,PSJBLN,1,"I"))) S LLCNT=$G(LLCNT)+1
  1. W ! S LLCNT=$G(LLCNT)
  1. I $G(LLCNT)>40 D PAUSE W !! S LLCNT=2
  1. Q
  1. PAUSE ;
  1. Q:'($E(IOST)="C")
  1. N DIR S DIR(0)="E" D ^DIR S:$D(DTOUT)!($D(DUOUT)) PSJDNE=1
  1. Q
  1. H ;Header
  1. N I
  1. W !!,"LABEL LOG:",!!,"#",?3,"DATE/TIME",?18,"ACTION",?32,"USER",?47,"#LABELS",?60,"TRACK",?75,"COUNT",! F I=1:1:80 W "=" W:I=80 !
  1. Q
  1. H2 ;Header for Unique ID #s
  1. W !,"Label Date/Time",?17,"Unique ID",?39,"Status",?51,"Count",?57,"BCMA Action-Date/Time"
  1. W !,"---------------",?17,"--------",?39,"---------",?51,"-----",?57,"-----------------------",!
  1. Q
  1. DEV(DFN,ON55,INVDT) ;Device
  1. K %ZIS,IOP,POP,ZTSK,IO("Q") S PSJION=$I,%ZIS="QM"
  1. N ZTDESC,ZTRTN,ZTSAVE,G
  1. D ^%ZIS K %ZIS S PSJIPRNT=1,PSJIINV=""
  1. I POP S IOP=PSJION S %ZIS("A")="Select DEVICE:" D ^%ZIS K IOP,PSJION W !,"Please try later!" G EXIT
  1. K PSJION I $D(IO("Q")) D G EXIT
  1. .S ZTDESC="Invalidated IV Labels Report",ZTRTN="EN2^PSJIBAG"
  1. .F G="DFN","ON55","PSJIPRNT","INVDT","PSJDOLJ","ON","PSJSYSU" S:$D(@G) ZTSAVE(G)=""
  1. .K IO("Q") D ^%ZTLOAD W:$D(ZTSK) !,"Report is Queued to print!" K ZTSK
  1. D EN2 W ! D PAUSE^PSJLMUT1
  1. EXIT ;
  1. W ! D ^%ZISC K DIR,DTOUT,DUOUT,DIROUT,DIRUT
  1. K ^TMP("PSBAR",$J)
  1. Q
  1. UPD(DFN,ON,PSJINVDT,PSJINIV) ; Go through labels, invalidate each
  1. S ON=ON_"V"
  1. N PSJBLN S PSJBLN=0 F S PSJBLN=$O(^TMP("PSJINBAG",$J,DFN,ON,PSJBLN)) Q:'PSJBLN D
  1. .K DA,DR,DIQ,DIC,PSJD2 N IVALID,LBST,BCST
  1. .S DIC="^PS(55,"_DFN_",""IVBCMA"",",DA=PSJBLN,DR=".01;.02;1;2;3;4;5",DIQ="PSJD2",DIQ(0)="IE" D EN^DIQ1
  1. .Q:$P($G(^PS(55,DFN,"IVBCMA",+PSJBLN,0)),"^",9)
  1. .S BCST=$G(PSJD2(55.0105,PSJBLN,2,"E")) Q:(BCST="COMPLETED")!(BCST="GIVEN")
  1. .D UP1(DFN,ON,$P(PSJBLN,"V",2),PSJINVDT,.PSJINIV)
  1. S ^TMP("PSJINBAG",$J,DFN,ON)=PSJINVDT
  1. Q
  1. UP1(DFN,ON,PSJBLN,PSJINVDT,PSJINIV) ; invalidate one label
  1. ;Input: DFN - patient's IEN
  1. ; ON - Order number for this bar code ID
  1. ; PSJBLN - Label index number from PS(55,DFN,"IVBCMA".
  1. ; PSJINVDT- Invalidation Date
  1. ;
  1. Q:'$G(PSJBLN)!'$G(DFN)!'$G(ON)
  1. Q:'$G(^PS(55,DFN,"IVBCMA",+PSJBLN,0))
  1. N PSJBCID,NOW S PSJBCID=DFN_"V"_PSJBLN
  1. S DA(1)=DFN,X=PSJBCID,DIC="^PS(55,"_DA(1)_",""IVBCMA"","
  1. K DA,DR,DIE S DIE=DIC,DA=PSJBLN,DA(1)=DFN D NOW^%DTC S NOW=$S($G(PSJINVDT):PSJINVDT,1:%)
  1. S DR="9////"_+PSJINVDT D ^DIE
  1. K DIC,DIE,D0,DA,DR
  1. I '$G(PSJINIV) S PSJINIV=1
  1. Q