| 1 | PSBCSUTL ;BIRMINGHAM/TEJ- BCMA-HSC COVER SHEET UTILITIES ;Mar 2004 | 
|---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**16,13,38,32**;Mar 2004;Build 32 | 
|---|
| 3 | ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; Reference/IA | 
|---|
| 6 | ; EN^PSJBCMA/2828 | 
|---|
| 7 | ; IN5^VADPT/10061 | 
|---|
| 8 | ; $$GET^XPAR/2263 | 
|---|
| 9 | ; ^%DTC/10000 | 
|---|
| 10 | ; $$FMADD^XLFDT/10103 | 
|---|
| 11 | ; $$GET1^DIQ/2056 | 
|---|
| 12 | RPC(RESULTS,DFN,EXPWIN) ; | 
|---|
| 13 | K RESULTS,^TMP("PSB",$J),^TMP("PSJ",$J) | 
|---|
| 14 | S PSBXWIN=$G(EXPWIN,24) | 
|---|
| 15 | S PSBTAB="CVRSHT" | 
|---|
| 16 | N PSBCNT S PSBTRFL=0,PSBDFNX=DFN | 
|---|
| 17 | S RESULTS=$NAME(^TMP("PSB",$J,PSBTAB)) | 
|---|
| 18 | K ^TMP("PSB",$J,PSBTAB) S ^TMP("PSB",$J,PSBTAB,0)=1 D LIGHTS(PSBDFNX) | 
|---|
| 19 | S ^TMP("PSB",$J,PSBTAB,0)=1,^TMP("PSB",$J,PSBTAB,1)=^TMP("PSB",$J,PSBTAB,1) | 
|---|
| 20 | Q:$P(^TMP("PSB",$J,PSBTAB,1),U,4)=-1 | 
|---|
| 21 | D NOW^%DTC S PSBNOW=+$E(%,1,10),PSBDT=$P(%,".",1) | 
|---|
| 22 | ;set range | 
|---|
| 23 | S PSBWBEG=$$FMADD^XLFDT(PSBNOW,"",-PSBXWIN),PSBWEND=$$FMADD^XLFDT(PSBNOW,"",PSBXWIN) | 
|---|
| 24 | S PSBTBEG=$$FMADD^XLFDT(PSBNOW,"",-12),PSBTEND=$$FMADD^XLFDT(PSBNOW,"",12) | 
|---|
| 25 | S PSBWADM=$$GET^XPAR("DIV","PSB ADMIN BEFORE"),PSBMHBCK=$$GET^XPAR("ALL","PSB MED HIST DAYS BACK",,"B") I +PSBMHBCK=0 S PSBMHBCK=30 | 
|---|
| 26 | D NOW^%DTC S PSBWADM=$$FMADD^XLFDT(%,"","",+PSBWADM),PSBMHBCK=$$FMADD^XLFDT(%,-1*(PSBMHBCK)) | 
|---|
| 27 | ;use lst movemnt for API | 
|---|
| 28 | S VAIP("D")="LAST" D IN5^VADPT S PSBTRDT=+VAIP(3),PSBTRTYP=$P(VAIP(2),U,2),PSBMVTYP=$P(VAIP(4),U,2) K VAIP | 
|---|
| 29 | S PSBPTTR=$$GET^XPAR("DIV","PSB PATIENT TRANSFER") I PSBPTTR="" S PSBPTTR=72 | 
|---|
| 30 | D NOW^%DTC S PSBNTDT=$$FMADD^XLFDT(%,"",-PSBPTTR) I PSBNTDT'>PSBTRDT S PSBTRFL=1 | 
|---|
| 31 | S X1=$P(PSBNOW,"."),X2=-3 D C^%DTC | 
|---|
| 32 | D EN^PSJBCMA(PSBDFNX,X,$S(PSBMHBCK<PSBWBEG:PSBMHBCK,PSBWBEG<PSBMHBCK:PSBWBEG,1:PSBMHBCK)) | 
|---|
| 33 | ;Devlop Outp | 
|---|
| 34 | S PSBTBOUT=0 | 
|---|
| 35 | I ^TMP("PSJ",$J,1,0)>0 F PSBX=0:0 S PSBX=$O(^TMP("PSJ",$J,PSBX)) Q:('PSBX)!(PSBTBOUT)  D | 
|---|
| 36 | .S:(PSBTAB'="CVRSHT")&($G(^TMP("PSB",$J,"CVRSHT",2))>0) PSBTBOUT=1 | 
|---|
| 37 | .D CLEAN^PSBVT,PSJ^PSBVT(PSBX),NOW^%DTC | 
|---|
| 38 | .Q:PSBONX["P"  Q:(PSBOSP<PSBWBEG)&'(PSBONX["V")  ;in rnge? | 
|---|
| 39 | .S (PSBREC,PSBONTAB)="" | 
|---|
| 40 | .S $P(PSBREC,U,1)=PSBDFN ;Dfn | 
|---|
| 41 | .S $P(PSBREC,U,2)=PSBONX ;OrdX | 
|---|
| 42 | .S $P(PSBREC,U,3)=PSBON ;Ord# | 
|---|
| 43 | .S $P(PSBREC,U,4)=PSBOTYP ;v/u/p | 
|---|
| 44 | .S $P(PSBREC,U,5)=PSBSCHT ;Schtyp | 
|---|
| 45 | .S $P(PSBREC,U,6)=PSBSCH ;Sch | 
|---|
| 46 | .S $P(PSBREC,U,7)=$S(PSBHSM:"HSM",PSBSM:"SM",1:"") ; slfmed | 
|---|
| 47 | .S $P(PSBREC,U,8)=PSBOITX ;Drgnm | 
|---|
| 48 | .S $P(PSBREC,U,9)=PSBDOSE_" "_PSBIFR ;Dose | 
|---|
| 49 | .S $P(PSBREC,U,10)=PSBMR ;med route | 
|---|
| 50 | .;Lst Gvn -AOIP xRef | 
|---|
| 51 | .S (PSBCNT,PSBFLAG)=0,(Y,PSBSTUS)="" K PSBHSTA,PSBHSTAX | 
|---|
| 52 | .F XZ=1:1:20 S Y=$O(^PSB(53.79,"AOIP",PSBDFN,PSBOIT,Y),-1),(PSBCNT,PSBFLAG)=0 Q:Y=""  D | 
|---|
| 53 | ..S:Y>0 $P(PSBREC,U,11)=Y | 
|---|
| 54 | ..S X="" F  S X=$O(^PSB(53.79,"AOIP",PSBDFN,PSBOIT,Y,X),-1) Q:X=""  D | 
|---|
| 55 | ...S PSBSTUS=$P(^PSB(53.79,X,0),U,9) S:$G(PSBSTUS)="" PSBSTUS="X" I (PSBSTUS'="N") S PSBFLAG=1,PSBHSTA(Y,$G(PSBSTUS))="ORIG"_U_X | 
|---|
| 56 | ...D:PSBSTUS="N" | 
|---|
| 57 | ....S ($P(PSBREC,U,11),Z)="" | 
|---|
| 58 | ....F  S Z=$O(^PSB(53.79,X,.9,Z),-1) Q:'Z  Q:PSBFLAG=1  S PSBDATA=$G(^(Z,0)) D | 
|---|
| 59 | .....I (PSBDATA["Set to 'NOT GIVEN'")!(PSBDATA["Set to 'GIVEN'")!(PSBDATA["Set to 'REFUSED'")!(PSBDATA["Set to 'HELD'")!(PSBDATA["Set to 'MISSING DOSE'")!(PSBDATA["Set to 'REMOVED'") S PSBCNT=PSBCNT+1 | 
|---|
| 60 | .....I (PSBDATA["STATUS 'HELD'")!(PSBDATA["STATUS 'GIVEN'")!(PSBDATA["STATUS 'REFUSED'")!(PSBDATA["STATUS 'MISSING DOSE'")!(PSBDATA["STATUS 'REMOVED'") S PSBCNT=PSBCNT+1 | 
|---|
| 61 | .....I PSBCNT#2=0,PSBDATA["'REFUSED'" S PSBSTUS="R" D LAST^PSBVDLU1 | 
|---|
| 62 | .....I PSBCNT#2=0,PSBDATA["'HELD'" S PSBSTUS="H" D LAST^PSBVDLU1 | 
|---|
| 63 | .....I PSBCNT#2=0,PSBDATA["'MISSING DOSE'" S PSBSTUS="M" D LAST^PSBVDLU1 | 
|---|
| 64 | .....I PSBCNT#2=0,PSBDATA["'REMOVED'" S PSBSTUS="RM" D LAST^PSBVDLU1 | 
|---|
| 65 | .....I PSBFLAG=1,'$D(PSBHSTA($P(PSBREC,U,11),$G(PSBSTUS))) S PSBHSTA($P(PSBREC,U,11),$G(PSBSTUS))=Z_U_X | 
|---|
| 66 | .I $D(PSBHSTA) S $P(PSBREC,U,11)=$O(PSBHSTA(""),-1),PSBSTUS=$O(PSBHSTA($P(PSBREC,U,11),""),-1) M PSBHSTAX(PSBOIT)=PSBHSTA K PSBHSTA  ;last action date/time | 
|---|
| 67 | .S $P(PSBREC,U,12)="" ;ien - below | 
|---|
| 68 | .S $P(PSBREC,U,13)="" ;sttus - below | 
|---|
| 69 | .S $P(PSBREC,U,14)="" ;admn dte - below | 
|---|
| 70 | .S $P(PSBREC,U,15)=PSBOIT ;OI Pointer | 
|---|
| 71 | .S $P(PSBREC,U,16)=PSBNJECT  ;njctble med route flag | 
|---|
| 72 | .;Var dosg | 
|---|
| 73 | .I $P(PSBREC,U,9)?1.4N1"-"1.4N.E S $P(PSBREC,U,17)=1 | 
|---|
| 74 | .E  S $P(PSBREC,U,17)=0 | 
|---|
| 75 | .S:PSBDOSEF?1"CAP".E!(PSBDOSEF?1"TAB".E)!(PSBDOSEF="PATCH") $P(PSBREC,U,18)=PSBDOSEF ;DosgFrm | 
|---|
| 76 | .D PSJ1^PSBVT(PSBDFN,PSBONX) | 
|---|
| 77 | .S PSBPB=$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,+$G(PSBIVPSH)),PSBLVIV=0 | 
|---|
| 78 | .Q:PSBPB&(PSBOSP<PSBWBEG) | 
|---|
| 79 | .S:(PSBONX["V"&'PSBPB) PSBLVIV=1 | 
|---|
| 80 | .S $P(PSBREC,U,19)=$S(PSBVNI]"":PSBVNI,PSBVNI']"":"***") ;VerfNrsInts | 
|---|
| 81 | .S $P(PSBREC,U,20)=PSBSTUS S:$P(PSBREC,U,11)="" $P(PSBREC,U,20)=""  ;LstActn | 
|---|
| 82 | .S $P(PSBREC,U,21)=PSBOST | 
|---|
| 83 | .S $P(PSBREC,U,22)=PSBOSTS | 
|---|
| 84 | .S $P(PSBREC,U,25)=0 I $G(PSBTRFL),$P(PSBREC,U,11)]"",$P(PSBREC,U,11)'<$G(PSBNTDT),$P(PSBREC,U,11)'>$G(PSBTRDT) S $P(PSBREC,U,25)=1 | 
|---|
| 85 | .S $P(PSBREC,U,26)=PSBOSP  ;OrdStpDt/Tm | 
|---|
| 86 | .S $P(PSBREC,U,27)=$$LASTG($P(PSBREC,U,1),$P(PSBREC,U,15)) | 
|---|
| 87 | .S $P(PSBREC,U,28)=$S((PSBONX["U")&('PSBPB):1,PSBPB:2,(PSBONX["V")&'PSBPB:3,1:"") | 
|---|
| 88 | .;get all Admn(s) - DD info. | 
|---|
| 89 | .S (PSBDDS,PSBSOLS,PSBADDS,PSBFLAG)="0" | 
|---|
| 90 | .I PSBLVIV D XFERBAGS^PSBCSUTY,LVIV^PSBCSUTY I $G(PSBEXPRD) S X1=$O(^TMP("PSB",$J,PSBTAB,""),-1) S:^TMP("PSB",$J,PSBTAB,X1)'="END" ^TMP("PSB",$J,PSBTAB,X1+1)="END" Q | 
|---|
| 91 | .D GETADMX^PSBCSUTY | 
|---|
| 92 | .F Y=0:0 S Y=$O(PSBDDA(Y)) Q:'Y  D | 
|---|
| 93 | ..I $P(PSBDDA(Y),U,5)=$P(%,".") S PSBFLAG=1  ;drug nactvt | 
|---|
| 94 | ..Q:$P(PSBDDA(Y),U,5)&($P(PSBDDA(Y),U,5)<%)  ;nactv | 
|---|
| 95 | ..S:$P(PSBDDA(Y),U,4)="" $P(PSBDDA(Y),U,4)=1 | 
|---|
| 96 | ..S PSBDDS=PSBDDS_U_$P(PSBDDA(Y),U,1,4),$P(PSBDDS,U,1)=PSBDDS+1 | 
|---|
| 97 | .;OnCa O PRN | 
|---|
| 98 | .I ("^O^OC^P^"[(U_PSBSCHT_U))!(PSBLVIV) D  S ($P(PSBREC,U,12),$P(PSBREC,U,14))=""  Q | 
|---|
| 99 | ..S (PSBIENX,PSBGOT1)="",PSBADMTM="" F  S PSBADMTM=$O(^PSB(53.79,"AORDX",PSBDFNX,PSBONX,PSBADMTM)) Q:(PSBADMTM="")  D | 
|---|
| 100 | ...Q:(PSBADMTM<PSBMHBCK)&'PSBLVIV | 
|---|
| 101 | ...F  S PSBIENX=$O(^PSB(53.79,"AORDX",PSBDFNX,PSBONX,PSBADMTM,PSBIENX)) Q:PSBIENX=""  D | 
|---|
| 102 | ....S $P(PSBREC,U,12)=PSBIENX,$P(PSBREC,U,14)=PSBADMTM,$P(PSBREC,U,23)=$$GET1^DIQ(53.79,PSBIENX_",","IV UNIQUE ID") | 
|---|
| 103 | ....S PSBQRR=1 D ADD^PSBVDLU1(PSBREC,PSBOTXT,PSBADMTM,PSBDDS,PSBSOLS,PSBADDS,"CVRSHT") S PSBGOT1=1 | 
|---|
| 104 | ..I ('+PSBGOT1)&(PSBOSP'<PSBWBEG) D ADD^PSBVDLU1(PSBREC,PSBOTXT,PSBNOW\1_".",PSBDDS,PSBSOLS,PSBADDS,"CVRSHT") S PSBGOT1=1 | 
|---|
| 105 | ..I ('+PSBGOT1)&($D(PSBADMX(PSBONX))) D ADD^PSBVDLU1(PSBREC,PSBOTXT,PSBNOW\1_".",PSBDDS,PSBSOLS,PSBADDS,"CVRSHT") | 
|---|
| 106 | ..S PSBGLBX=$O(^TMP("PSB",$J,PSBTAB,""),-1) S:^TMP("PSB",$J,PSBTAB,PSBGLBX)'="END" ^TMP("PSB",$J,PSBTAB,PSBGLBX+1)="END" | 
|---|
| 107 | .;cont - proces AdmnTm | 
|---|
| 108 | .S (PSBYES,PSBODD,PSBYTF)=0 S:$$PSBDCHK1^PSBVT1(PSBSCH) PSBYES=1 | 
|---|
| 109 | .I PSBYES,PSBADST="" Q | 
|---|
| 110 | .F I=1:1 Q:$P(PSBSCH,"-",I)=""  I $P(PSBSCH,"-",I)?2N!($P(PSBSCH,"-",I)?4N) S PSBYES=1,PSBYTF=1 | 
|---|
| 111 | .I PSBSCHT="C",PSBYTF="1",PSBADST="" Q | 
|---|
| 112 | .S PSBFREQ=$$GETFREQ^PSBVDLU1(DFN,PSBONX) | 
|---|
| 113 | .I PSBFREQ="O" S PSBFREQ=1440 | 
|---|
| 114 | .I PSBFREQ="D" S PSBFREQ="" | 
|---|
| 115 | .S:PSBLVIV PSBYES=1 | 
|---|
| 116 | .I 'PSBYES,PSBFREQ<1 Q | 
|---|
| 117 | .I (PSBADST="")&(+PSBFREQ>0) D ODDSCH^PSBVDLU1(PSBTAB) Q | 
|---|
| 118 | .I +PSBFREQ>0 I (PSBFREQ#1440'=0),(1440#PSBFREQ'=0) S PSBODD=1 | 
|---|
| 119 | .I PSBODD,PSBADST'="" Q | 
|---|
| 120 | .S PSBDTX=PSBWBEG\1,PSBGOT1=0 | 
|---|
| 121 | .F PSBXX=1:1:2 D  S PSBDTX=$$FMADD^XLFDT(PSBDTX,"",24)  ;incrmnt 1 day! | 
|---|
| 122 | ..F PSBY=1:1:$L(PSBADST,"-") Q:$P(PSBADST,"-",PSBY)=""  D | 
|---|
| 123 | ...S PSB=+(PSBDTX_"."_$P(PSBADST,"-",PSBY)) | 
|---|
| 124 | ...I (PSB'<PSBWBEG)&(PSB'>PSBWEND) D  ;wndow? | 
|---|
| 125 | ....D:(PSB'<PSBOST)&(PSB<PSBOSP)    ;actv? | 
|---|
| 126 | .....D:$$OKAY^PSBVDLU1(PSBOST,PSB,PSBSCH,PSBONX,PSBOITX,PSBFREQ,PSBOSTS)  ;dt? | 
|---|
| 127 | ......D ADD^PSBVDLU1(PSBREC,PSBOTXT,PSB,PSBDDS,PSBSOLS,PSBADDS,"CVRSHT") S PSBGOT1=1 | 
|---|
| 128 | ...S PSB=+(PSBWEND\1_"."_$P(PSBADST,"-",PSBY)) | 
|---|
| 129 | ...I (PSB'<PSBWBEG)&(PSB'>PSBWEND) D  ;wndow? | 
|---|
| 130 | ....D:(PSB'<PSBOST)&(PSB<PSBOSP)    ;actv? | 
|---|
| 131 | .....D:$$OKAY^PSBVDLU1(PSBOST,PSB,PSBSCH,PSBONX,PSBOITX,PSBFREQ,PSBOSTS)  ;dt? | 
|---|
| 132 | ......D ADD^PSBVDLU1(PSBREC,PSBOTXT,PSB,PSBDDS,PSBSOLS,PSBADDS,"CVRSHT") S PSBGOT1=1 | 
|---|
| 133 | .I ('PSBGOT1)&(PSBOSP'<PSBWBEG) D ADD^PSBVDLU1(PSBREC,PSBOTXT,+(PSBWEND\1_"."_$P(PSBADST,"-")),PSBDDS,PSBSOLS,PSBADDS,"CVRSHT") | 
|---|
| 134 | .K PSBSTUS | 
|---|
| 135 | D EN^PSBVDLPA | 
|---|
| 136 | I $G(^TMP("PSB",$J,PSBTAB,2))]"" S PSBI1=$O(^TMP("PSB",$J,PSBTAB,""),-1) I ^TMP("PSB",$J,PSBTAB,PSBI1)'="END" S ^TMP("PSB",$J,PSBTAB,PSBI1+1)="END" | 
|---|
| 137 | S ^TMP("PSB",$J,PSBTAB,0)=$O(^TMP("PSB",$J,PSBTAB,""),-1) | 
|---|
| 138 | I $G(^TMP("PSB",$J,PSBTAB,2))']"" S $P(^TMP("PSB",$J,PSBTAB,1),U,4)="-1^No orders To display on Coversheet" | 
|---|
| 139 | I $G(^TMP("PSB",$J,PSBTAB,2))]"" S $P(^TMP("PSB",$J,PSBTAB,1),U,4)="1^COVERSHEET DATA FOLLOWS" D ADD^PSBCSUTX | 
|---|
| 140 | D CLEAN | 
|---|
| 141 | Q | 
|---|
| 142 | LASTG(PSBPATPT,PSBOIPT) ;LstGvn-(inpt: DFN,OrItm IEN) | 
|---|
| 143 | K PSBHSTG S Y="",LASTG="" F XZ=1:1:20 S Y=$O(^PSB(53.79,"AOIP",PSBPATPT,PSBOIPT,Y),-1),(PSBCNT,PSBFLAG)=0 Q:Y=""  D | 
|---|
| 144 | .S:Y>0 LASTG="",X="" F  S X=$O(^PSB(53.79,"AOIP",PSBPATPT,PSBOIPT,Y,X),-1) Q:X=""  D | 
|---|
| 145 | ..S PSBSTX=$P(^PSB(53.79,X,0),U,9) S:PSBSTX']"" PSBHSTG(Y)=-1 I PSBSTX="G"  S PSBHSTG(Y)="G" | 
|---|
| 146 | ..Q:PSBSTX="N" | 
|---|
| 147 | ..D:(PSBSTX'="G") | 
|---|
| 148 | ...S Z="" F  S Z=$O(^PSB(53.79,X,.9,Z),-1) Q:'Z  Q:PSBFLAG=1  S PSBDATA=$G(^(Z,0)) D | 
|---|
| 149 | ....I (PSBDATA["Set to 'GIVEN'") S PSBCNT=PSBCNT+1 | 
|---|
| 150 | ....I (PSBDATA["STATUS 'GIVEN'") S PSBCNT=PSBCNT+1 | 
|---|
| 151 | ....I PSBCNT#2=0,PSBDATA'["'GIVEN'" Q | 
|---|
| 152 | ....I '$D(PSBHSTG($P(PSBDATA,U))) S PSBFLAG=1,PSBHSTG($P(PSBDATA,U))="" | 
|---|
| 153 | I $D(PSBHSTG) S LASTG="" F  S LASTG=$O(PSBHSTG(LASTG),-1) Q:+LASTG=0  Q:PSBHSTG(LASTG)="G"  I PSBHSTG(LASTG)=-1 S LASTG="" Q | 
|---|
| 154 | Q LASTG | 
|---|
| 155 | LIGHTS(PSBDFN) ; | 
|---|
| 156 | D RPC^PSBVDLTB(,PSBDFN,"NO TAB",) S PSBTAB="CVRSHT" | 
|---|
| 157 | M ^TMP("PSB",$J,PSBTAB,1)=^TMP("PSB",$J,"NO TAB",1) K ^TMP("PSB",$J,"NO TAB") | 
|---|
| 158 | Q | 
|---|
| 159 | CLEAN ; | 
|---|
| 160 | D CLEAN^PSBVT | 
|---|
| 161 | K PSBACT,PSBACTBY,PSBACTDT,PSBACTPT,PSBADDS,PSBBAGID,PSBCHDT,PSBCHKV,PSBCNT1,PSBCNT2,PSBDDS,PSBDFNX,PSBWEND | 
|---|
| 162 | K PSBDT,PSBFLAG,PSBHSTAX,PSBI1,PSBIEN,PSBIENX,PSBLSTS,PSBMAUD,PSBMVTYP,PSBMWC,PSBNOW,PSBNTDT,PSBONMBR,PSBY,PSBXX | 
|---|
| 163 | K PSBONXS,PSBORREC,PSBPDT,PSBPRNRE,PSBPTTR,PSBQR,PSBRDOW,PSBREC,PSBRECHD,PSBSCHBR,PSBSCHTM,PSBSOLS,PSBTAB,PSBADMTM,PSBDTX | 
|---|
| 164 | K PSBTBOUT,PSBTRDT,PSBTRFL,PSBTRTYP,PSBUID,PSBUIDS,PSBX,PSBXIEN,PSBX2,PSBYEA,PSBYEA1,PSBYTF,PSBYES,VAIP,PSBWADM,PSBWBEG | 
|---|
| 165 | K PSBXREC,PSBGOT1,PSBCDT,PSBQUIT,PSBUSED,PSBLST4X,PSBADMX,PSBI2,PSBXXX,PSBI,PSBPB,PSBSHWTB,PSBONTAB,PSBDONE,^TMP("PSJ",$J) | 
|---|
| 166 | K PSBNXTDU,LASTG,LSTTIME,PSBMHBCK,PSBHSTG,PSBNXTDT,NEXTADM,PSBLVIV | 
|---|
| 167 | Q | 
|---|