| 1 | PSBOMH1 ;BIRMINGHAM/EFC-MAH ;7:40 PM  30 Jan 2008 | 
|---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**6,3,9,11,26,38,VWEHR1**;WorldVistA 30-Jan-08 | 
|---|
| 3 | ;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ;Modified from FOIA VISTA, | 
|---|
| 6 | ;Copyright 2008 WorldVistA.  Licensed under the terms of the GNU | 
|---|
| 7 | ;General Public License See attached copy of the License. | 
|---|
| 8 | ; | 
|---|
| 9 | ;This program is free software; you can redistribute it and/or modify | 
|---|
| 10 | ;it under the terms of the GNU General Public License as published by | 
|---|
| 11 | ;the Free Software Foundation; either version 2 of the License, or | 
|---|
| 12 | ;(at your option) any later version. | 
|---|
| 13 | ; | 
|---|
| 14 | ;This program is distributed in the hope that it will be useful, | 
|---|
| 15 | ;but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 16 | ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
| 17 | ;GNU General Public License for more details. | 
|---|
| 18 | ; | 
|---|
| 19 | ;You should have received a copy of the GNU General Public License along | 
|---|
| 20 | ;with this program; if not, write to the Free Software Foundation, Inc., | 
|---|
| 21 | ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 
|---|
| 22 | ; | 
|---|
| 23 | ; Reference/IA | 
|---|
| 24 | ; ^DILF/2054 | 
|---|
| 25 | ; File 200/10060 | 
|---|
| 26 | ; | 
|---|
| 27 | EN ; | 
|---|
| 28 | ; Load administrations | 
|---|
| 29 | S (PSBORD,PSBIEN,PSBR1,PSBADIEN,PSBABR)="",PSBDT=PSBSTRT | 
|---|
| 30 | K PSBTSA | 
|---|
| 31 | F  S PSBDT=$O(^PSB(53.79,"AADT",DFN,PSBDT)) Q:'PSBDT!(PSBDT>PSBSTOP)  D | 
|---|
| 32 | .F  S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBDT,PSBIEN)) Q:'PSBIEN  Q:'$D(^PSB(53.79,PSBIEN))  L +^PSB(53.79,PSBIEN):3 I $P(^PSB(53.79,PSBIEN,0),U,9)]"" D  L -^PSB(53.79,PSBIEN) | 
|---|
| 33 | ..Q:'$P($G(^PSB(53.79,PSBIEN,0)),U,6)  ; Bad IEN -no evnt dt | 
|---|
| 34 | ..Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N"  ;NGiven | 
|---|
| 35 | ..S PSBORD=$P($G(^PSB(53.79,PSBIEN,.1)),U,1) | 
|---|
| 36 | ..; Continuous | 
|---|
| 37 | ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="C" | 
|---|
| 38 | ...S X=PSBDT D H^%DTC S PSBWEEK=PSBAR(%H) D CLEAN^PSBVT,PSJ1^PSBVT($P(^PSB(53.79,PSBIEN,0),U,1),$P(^PSB(53.79,PSBIEN,.1),U,1)) | 
|---|
| 39 | ...I $P(^PSB(53.79,PSBIEN,0),U,6)'=PSBDT,'$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBIVPSH) D  D CLEAN^PSBVT Q  ;chck IV audit | 
|---|
| 40 | ....S PSBSIEN=PSBIEN | 
|---|
| 41 | ....I $P(^PSB(53.79,PSBIEN,0),"^",10)]"" D BAGDTL^PSBRPC2(.PSBAUD,$P(^PSB(53.79,PSBIEN,0),U,10),$P(^PSB(53.79,PSBIEN,.1),U,1)) | 
|---|
| 42 | ....S PSBIEN=PSBSIEN K PSBSIEN | 
|---|
| 43 | ....S X=0 F  S X=$O(PSBAUD(X)) Q:X=""  I $P(PSBAUD(X),U,3)="" K PSBAUD(X) | 
|---|
| 44 | ....S X=0 F  S X=$O(PSBAUD(X)) Q:X=""  Q:$P(PSBAUD(X),U,1)=PSBDT | 
|---|
| 45 | ....I X="" K PSBAUD Q | 
|---|
| 46 | ....I '$D(PSBAUD(X)) K PSBAUD Q | 
|---|
| 47 | ....S PSBS=$P(PSBAUD(X),U,3) | 
|---|
| 48 | ....I PSBS="GIVEN",$P($G(PSBAUD(X-1)),U,3)="NOT GIVEN" Q | 
|---|
| 49 | ....I PSBS="NOT GIVEN" Q | 
|---|
| 50 | ....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NOACTION") | 
|---|
| 51 | ....D PSBSTIV^PSBOMH2 | 
|---|
| 52 | ....S X=PSBDT_U_$P(PSBAUD(X),U,2)_U_PSBS_U_PSBIEN | 
|---|
| 53 | ....S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1 | 
|---|
| 54 | ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X | 
|---|
| 55 | ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y | 
|---|
| 56 | ....D PSBOUT($P((X),"^",1),$P((X),"^",2)) | 
|---|
| 57 | ....K PSBAUD | 
|---|
| 58 | ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL") | 
|---|
| 59 | ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME") | 
|---|
| 60 | ...I PSBINIT="" S PSBINIT=99 | 
|---|
| 61 | ...;get instrc info - audt log | 
|---|
| 62 | ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D | 
|---|
| 63 | ....D INSTR^PSBOMH | 
|---|
| 64 | ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="" | 
|---|
| 65 | ...I PSBINIT[99 S PSBINIT="" | 
|---|
| 66 | ...I $P(^PSB(53.79,PSBIEN,0),U,9)="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6)  D PSBCK1^PSBOMH2("A") | 
|---|
| 67 | ...I $P(^PSB(53.79,PSBIEN,0),U,9)'="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6)  D PSBCK1^PSBOMH2("B") | 
|---|
| 68 | ...I PSBDT'=$P(^PSB(53.79,PSBIEN,0),U,6),$P(^PSB(53.79,PSBIEN,0),U,9)="RM" D | 
|---|
| 69 | ....D DDAUD | 
|---|
| 70 | ....S I="" F  S I=$O(PSBTAR(I),-1) Q:I=""  I $P(PSBTAR(I),U,1)=PSBDT D | 
|---|
| 71 | .....S PSBS=$P(PSBTAR(I),U,3) | 
|---|
| 72 | .....I PSBS="GIVEN",$P($G(PSBTAR(I-1)),U,3)="NOT GIVEN" Q  ; canceled - not given | 
|---|
| 73 | .....I PSBS="NOT GIVEN" Q | 
|---|
| 74 | .....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NO ACTION") | 
|---|
| 75 | .....D PSBCTAR^PSBOMH2 | 
|---|
| 76 | .....S X=$P(PSBTAR(I),U,1,2)_U_PSBS_U_PSBIEN | 
|---|
| 77 | ...S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1 | 
|---|
| 78 | ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X | 
|---|
| 79 | ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y | 
|---|
| 80 | ...D PSBOUT($P((X),"^",1),$P((X),"^",2)) | 
|---|
| 81 | ...Q | 
|---|
| 82 | ..; 1-Time On Call or PRN | 
|---|
| 83 | ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)'="C" | 
|---|
| 84 | ...I PSBDT'=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I") Q | 
|---|
| 85 | ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL") | 
|---|
| 86 | ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME") | 
|---|
| 87 | ...I PSBINIT="" S PSBINIT=99 | 
|---|
| 88 | ...S (PSBXA,PSBM)=1,(PSBZ,PSBT,PSBFLG)="" | 
|---|
| 89 | ...I $$GET1^DIQ(53.79,PSBIEN_",",.09)="REMOVED"  D | 
|---|
| 90 | ....F I=1:1 S PSBXA=$O(^PSB(53.79,PSBIEN,.9,PSBXA)) Q:PSBXA=""  I PSBXA?1.3N  S PSBZ=PSBZ+1,PSBT(PSBZ)=^PSB(53.79,PSBIEN,.9,PSBXA,0) | 
|---|
| 91 | ....F S=1:1 Q:PSBM<1  S PSBM=PSBZ-S  I (PSBM>0) I (PSBT(PSBM)["GIVEN")  S PSBFLG="1" S PRELINE1=$P(PSBT(PSBM),"'",2)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.04)_" "_$E($P(PSBT(PSBM),"'",4),1,3) Q | 
|---|
| 92 | ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D | 
|---|
| 93 | ....D INSTR^PSBOMH | 
|---|
| 94 | ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="" | 
|---|
| 95 | ...I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,".")))  D PSBOUT(PSBDT,PSBINIT) | 
|---|
| 96 | ...S PSBLINE1=$$GET1^DIQ(53.79,PSBIEN_",",.09)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.06)_" "_PSBINIT_"            "_$$GET1^DIQ(53.79,PSBIEN_",",.21),PSBLINE2="" | 
|---|
| 97 | ...I PSBINIT[99 S PSBINIT="" | 
|---|
| 98 | ...D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="P" | 
|---|
| 99 | ....I $P($G(^PSB(53.79,PSBIEN,.2)),U,2)="" S PSBLINE2="  Results: <No PRN Results On File>" | 
|---|
| 100 | ....E  D | 
|---|
| 101 | .....S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:INITIAL") | 
|---|
| 102 | .....S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:NAME") | 
|---|
| 103 | .....I PSBINIT="" S PSBINIT=99 | 
|---|
| 104 | .....I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D | 
|---|
| 105 | ......S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."),0),U,3)_"  "_$$GET1^DIQ(53.79,PSBIEN_",",.24) | 
|---|
| 106 | ......S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="" | 
|---|
| 107 | .....I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,".")))  D | 
|---|
| 108 | ......D:$D(^PSB(53.79,PSBIEN,.9,0)) | 
|---|
| 109 | .......S (PSBXA2,PSBFG)=0,PSBEFFDT=$P(^PSB(53.79,PSBIEN,.2),U,4) F  S PSBXA2=$O(^PSB(53.79,PSBIEN,.9,PSBXA2)) Q:+PSBXA2'>0  D  Q:PSBFG=1 | 
|---|
| 110 | ........D:($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U)=PSBEFFDT)&($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)["Instruct")&($P(^PSB(53.79,PSBIEN,.2),U,3)=$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,2)) | 
|---|
| 111 | .........S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)_"  "_$$GET1^DIQ(53.79,PSBIEN_",",.24) | 
|---|
| 112 | .........S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="",PSBFG=1 | 
|---|
| 113 | .....S PSBLINE2="  Results: "_$$GET1^DIQ(53.79,PSBIEN_",",.22) | 
|---|
| 114 | .....S PSBRTXTW="     Entered By "_PSBINIT_" on "_$$GET1^DIQ(53.79,PSBIEN_",",.24) | 
|---|
| 115 | .....I PSBINIT[99 S PSBINIT="" | 
|---|
| 116 | ...S X=PSBDT D H^%DTC F PSBWEEK=PSBAR(%H):-7 Q:$D(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",0))!('$D(PSBAR(PSBWEEK))) | 
|---|
| 117 | ...S X=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",""),-1)+1 | 
|---|
| 118 | ...I PSBFLG="1" S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X)=PRELINE1 | 
|---|
| 119 | ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+1)=PSBLINE1 | 
|---|
| 120 | ...I $G(PSBLINE2)]"" D | 
|---|
| 121 | ....I $L(PSBLINE2)<90 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=PSBLINE2 S:$$GET1^DIQ(53.79,PSBIEN_",",.24)'="" ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)="      "_PSBRTXTW | 
|---|
| 122 | ....I $L(PSBLINE2)>90 D | 
|---|
| 123 | .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=$E(PSBLINE2,1,90) | 
|---|
| 124 | .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)="           "_$E(PSBLINE2,91,161) | 
|---|
| 125 | .....I $L(PSBLINE2)'>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)="      "_PSBRTXTW | 
|---|
| 126 | .....I $L(PSBLINE2)>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)="     "_$E(PSBLINE2,162,200),^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+5)="     "_PSBRTXTW | 
|---|
| 127 | Q | 
|---|
| 128 | ; | 
|---|
| 129 | DDAUD ;  audits for dispen drugs | 
|---|
| 130 | ; | 
|---|
| 131 | M PSBMLA=^PSB(53.79,PSBIEN) | 
|---|
| 132 | S PSBGA="" I $D(PSBMLA(.9,0)) D | 
|---|
| 133 | .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX))  I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D  Q | 
|---|
| 134 | ..I $D(PSBMLA(.9,PSBX-2,0)) D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE) | 
|---|
| 135 | ..I '$D(PSBMLA(.9,PSBX-2,0)) S PSBDATE=$P(^PSB(53.79,PSBIEN,0),U,6) | 
|---|
| 136 | ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2) | 
|---|
| 137 | ..S PSBGA=1 | 
|---|
| 138 | .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX))  I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D | 
|---|
| 139 | ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL^PSBRPC2($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2) | 
|---|
| 140 | ..S PSBGA=1 | 
|---|
| 141 | I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,7)) | 
|---|
| 142 | S PSBQRY="PSBTMP",PSBCNT=1 F  S PSBQRY=$Q(@PSBQRY) Q:PSBQRY=""  D  ; does comment go with action | 
|---|
| 143 | .; | 
|---|
| 144 | .;WV/EHR REVERSE $Q REPLACEMENT; SO 01/12/08 ;VWEHR1 | 
|---|
| 145 | .; | 
|---|
| 146 | .;S PSBPQRY=$Q(@PSBQRY,-1) | 
|---|
| 147 | .S PSBPQRY=$$Q^VWUTIL($NA(@PSBQRY),-1) | 
|---|
| 148 | .; | 
|---|
| 149 | .;END CHANGE | 
|---|
| 150 | .; | 
|---|
| 151 | .I PSBPQRY="" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q  ; no prev action | 
|---|
| 152 | .I $QS(PSBPQRY,2)="C"  S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q  ; prev line = comment | 
|---|
| 153 | .I $QS(PSBQRY,2)="C",$E($P(@$Q(@PSBQRY,-1),U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@$Q(@PSBQRY,-1),U,2)=$P(@PSBQRY,U,2) D  Q | 
|---|
| 154 | ..S X=$P(@PSBQRY,U,4) S:X[":" X=$P(X,":",2) S $P(PSBTAR(PSBCNT-1),U,4)=X Q | 
|---|
| 155 | .S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 | 
|---|
| 156 | Q | 
|---|
| 157 | ; | 
|---|
| 158 | PSBOUT(PSBTET,PSBOT1) ; | 
|---|
| 159 | I '$D(^PSB(53.79,PSBIEN,.9,0))  D PSBENT^PSBOMH2(PSBOT1) | 
|---|
| 160 | S PSBIDA="" I $P(^PSB(53.79,PSBIEN,0),U,6)=PSBTET S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,7),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) | 
|---|
| 161 | S PSBXA1=0 | 
|---|
| 162 | F  S PSBXA1=$O(^PSB(53.79,PSBIEN,.9,PSBXA1)) Q:+PSBXA1'>0  I PSBXA1'=0  D  Q:$G(PSBOT1)["*" | 
|---|
| 163 | .I $L(PSBXA1)<4  D | 
|---|
| 164 | ..I $P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1)=PSBTET  D | 
|---|
| 165 | ...S:$G(PSBIDA)="" PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) | 
|---|
| 166 | ...I (PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2)),$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",3)["Instruct"  D | 
|---|
| 167 | ....S INSDD=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1),Y=INSDD D DD^%DT S INSDD=Y | 
|---|
| 168 | ....S PSBOT1=PSBOT1_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),U,3)_" "_INSDD | 
|---|
| 169 | I $G(PSBIDA)="",$P(^PSB(53.79,PSBIEN,0),U,4)=PSBTET D | 
|---|
| 170 | .S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) | 
|---|
| 171 | I $G(PSBNAME)="" D | 
|---|
| 172 | . S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) | 
|---|
| 173 | S ^TMP("PSB",$J,"LEGEND",$S($G(PSBOT1)="":99,1:PSBOT1),PSBNAME)="" | 
|---|
| 174 | Q | 
|---|
| 175 | ; | 
|---|