| 1 | PSBVT ;BIRMINGHAM/EFC-BCMA ORDER VARIABLES UTILITY ; 8/4/05 8:05am
 | 
|---|
| 2 |  ;;3.0;BAR CODE MED ADMIN;**6,3,38**;Mar 2004;Build 8
 | 
|---|
| 3 |  ;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ; Reference/IA
 | 
|---|
| 6 |  ; EN^PSJBCMA1/2829
 | 
|---|
| 7 |  ; ^TMP("PSJ",$J/2828
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | PSJ(PSBX1) ;
 | 
|---|
| 10 |  S ^TMP("TK PSJ",PSBX1)=""
 | 
|---|
| 11 |  S PSBSCRT="^TMP(""PSB"",$J,""PSBORDA"")"
 | 
|---|
| 12 |  K @PSBSCRT M @PSBSCRT=^TMP("PSJ",$J,PSBX1)
 | 
|---|
| 13 |  S PSBDFN=DFN
 | 
|---|
| 14 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",0))
 | 
|---|
| 15 |  S PSBON=+$P(PSBSCRT,U,3)  ; ord num w/o type
 | 
|---|
| 16 |  S PSBONX=$P(PSBSCRT,U,3)  ; ord num w/  type "U" or "V"
 | 
|---|
| 17 |  S PSBOTYP=$E(PSBONX,$L(PSBONX))
 | 
|---|
| 18 |  S PSBPONX=$P(PSBSCRT,U,4)  ; prev ord num
 | 
|---|
| 19 |  S PSBFON=$P(PSBSCRT,U,5)  ; foll ord num
 | 
|---|
| 20 |  S PSBIVT=$P(PSBSCRT,U,6)  ; IV type
 | 
|---|
| 21 |  S PSBISYR=$P(PSBSCRT,U,7)  ; intermit syrg
 | 
|---|
| 22 |  S PSBCHEMT=$P(PSBSCRT,U,8)  ; chemo type
 | 
|---|
| 23 |  S PSBCPRS=$P(PSBSCRT,U,9)  ; ords file entry (CPRS order #)
 | 
|---|
| 24 |  S PSBFOR=$P(PSBSCRT,U,10)  ; reason for foll order
 | 
|---|
| 25 |  Q:PSBSCRT=-1
 | 
|---|
| 26 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",1))
 | 
|---|
| 27 |  S PSBMR=$P($G(^TMP("PSB",$J,"PSBORDA",1,0)),U,2) ;med rt
 | 
|---|
| 28 |  S PSBMRAB=$P(PSBSCRT,U,1) ;med rt abbr
 | 
|---|
| 29 |  S PSBNJECT=+$G(^TMP("PSB",$J,"PSBORDA",1,0))  ;Inj site
 | 
|---|
| 30 |  S PSBIVPSH=+$P($G(^TMP("PSB",$J,"PSBORDA",1,0)),U,3) ;IV PUSH
 | 
|---|
| 31 |  S PSBSCHT=$P(PSBSCRT,U,2)  ; sched type conversion
 | 
|---|
| 32 |  S PSBSCH=$P(PSBSCRT,U,3)  ; sched
 | 
|---|
| 33 |  S PSBOST=$P(PSBSCRT,U,4)  ; strt dte FM
 | 
|---|
| 34 |  S PSBOSP=$P(PSBSCRT,U,5)  ; stp dte FM
 | 
|---|
| 35 |  S PSBADST=$P(PSBSCRT,U,6)  ; admin times strin in NNNN- format
 | 
|---|
| 36 |  S PSBOSTS=$P(PSBSCRT,U,7)  ; status
 | 
|---|
| 37 |  S PSBNGF=$P(PSBSCRT,U,8)  ; not to be given flag
 | 
|---|
| 38 |  S PSBOSCHT=$P(PSBSCRT,U,9)  ; origin sched type
 | 
|---|
| 39 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",2))
 | 
|---|
| 40 |  S PSBDOSE=$P(PSBSCRT,U,1)  ; dosage ordered
 | 
|---|
| 41 |  S PSBIFR=$P(PSBSCRT,U,2)  ; infusn rate
 | 
|---|
| 42 |  S PSBSM=$P(PSBSCRT,U,3)  ; self med
 | 
|---|
| 43 |  S PSBHSM=$P(PSBSCRT,U,4)  ; hospital supplied self med
 | 
|---|
| 44 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",3))
 | 
|---|
| 45 |  S PSBOIT=$P(PSBSCRT,U,1)  ; order item IEN - > ^ORD(101.43)
 | 
|---|
| 46 |  S PSBOITX=$P(PSBSCRT,U,2)  ; order item (expanded)_" "_dosage form
 | 
|---|
| 47 |  I PSBOITX="" S PSBOITX="ZZZZ NO ORDERABLE ITEM"
 | 
|---|
| 48 |  S PSBDOSEF=$P(PSBSCRT,U,3)  ; dosage form
 | 
|---|
| 49 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",4))
 | 
|---|
| 50 |  S PSBOTXT=PSBSCRT  ; special inst/other print info
 | 
|---|
| 51 |  ; get disp drug
 | 
|---|
| 52 |  I $G(^TMP("PSB",$J,"PSBORDA",700,0)) F PSBX2=1:1:^TMP("PSB",$J,"PSBORDA",700,0) M PSBDDA(PSBX2)=^TMP("PSB",$J,"PSBORDA",700,PSBX2,0) S PSBDDA(PSBX2)="DD^"_PSBDDA(PSBX2) ; # of DDrug
 | 
|---|
| 53 |  ;     "DD"^dispensed drug IEN -> ^PSDRUG() DRUG^dispensed drug name^units per dose^inactive date
 | 
|---|
| 54 |  ; build unique id list
 | 
|---|
| 55 |  ; add addits
 | 
|---|
| 56 |  I $D(^TMP("PSB",$J,"PSBORDA",800)) S PSBX2="" F  S PSBX2=$O(^TMP("PSB",$J,"PSBORDA",800,PSBX2)) Q:PSBX2=""!(PSBX2="ERROR")  D
 | 
|---|
| 57 |  .S PSBUIDA(PSBX2)="ID^"_PSBX2 F J=1:1:^TMP("PSB",$J,"PSBORDA",800,PSBX2,0) S PSBUIDA(PSBX2)=PSBUIDA(PSBX2)_"^"_"ADD;"_$P(^TMP("PSB",$J,"PSBORDA",800,PSBX2,J),U,1)
 | 
|---|
| 58 |  ; add solutions
 | 
|---|
| 59 |  I $D(^TMP("PSB",$J,"PSBORDA",900)) S PSBX2="" F  S PSBX2=$O(^TMP("PSB",$J,"PSBORDA",900,PSBX2)) Q:PSBX2=""!(PSBX2="ERROR")  D
 | 
|---|
| 60 |  .I '$D(PSBUIDA(PSBX2)) S PSBUIDA(PSBX2)="ID^"_PSBX2
 | 
|---|
| 61 |  .F J=1:1:^TMP("PSB",$J,"PSBORDA",900,PSBX2,0) S PSBUIDA(PSBX2)=PSBUIDA(PSBX2)_"^"_"SOL;"_$P(^TMP("PSB",$J,"PSBORDA",900,PSBX2,J),U,1)
 | 
|---|
| 62 |  ;     "ID"   ^   (piece 2,3,)... = type;IEN of each add/sol for this ID ex. "SOL;4"
 | 
|---|
| 63 |  ; get addits
 | 
|---|
| 64 |  I $G(^TMP("PSB",$J,"PSBORDA",850,0)) F PSBX2=1:1:^TMP("PSB",$J,"PSBORDA",850,0) D
 | 
|---|
| 65 |  .M PSBADA(PSBX2)=^TMP("PSB",$J,"PSBORDA",850,PSBX2,0)  ; number od additives (exists only for IV)
 | 
|---|
| 66 |  .S PSBADA(PSBX2)="ADD^"_PSBADA(PSBX2)
 | 
|---|
| 67 |  .S PSBBAGS=$P(PSBADA(PSBX2),U,5) I PSBBAGS'="" S PSBBAG=" IN BAG "_$P(PSBBAGS,",",1) F I=2:1 S X=$P(PSBBAGS,",",I) Q:X=""  S PSBBAG=PSBBAG_" AND "_X
 | 
|---|
| 68 |  .S:PSBBAGS'="" $P(PSBADA(PSBX2),U,5)=PSBBAG,$P(PSBADA(PSBX2),U,6)=PSBBAGS
 | 
|---|
| 69 |  ;     "ADD"^additive IEN -> ^PS(52.6) IV ADDITIVES^additive name^strength ^bottle
 | 
|---|
| 70 |  ; get soluts
 | 
|---|
| 71 |  I $G(^TMP("PSB",$J,"PSBORDA",950,0)) F PSBX2=1:1:^TMP("PSB",$J,"PSBORDA",950,0) M PSBSOLA(PSBX2)=^TMP("PSB",$J,"PSBORDA",950,PSBX2,0) S PSBSOLA(PSBX2)="SOL^"_PSBSOLA(PSBX2)  ; # of SOL
 | 
|---|
| 72 |  ;   "SOL"^solution IEN -> ^PS(52.7) IV SOLUTIONS^solution name^volume
 | 
|---|
| 73 |  K ^TMP("PSB",$J,"PSBORDA"),PSBX1,PSBX2
 | 
|---|
| 74 |  Q
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | PSJ1(PSBPAR1,PSBPAR2) ; set the variables for an individual order
 | 
|---|
| 77 |  S ^TMP("TK PSJ1",PSBPAR1,PSBPAR2)=""
 | 
|---|
| 78 |  ;     PSBPAR1 = DFN
 | 
|---|
| 79 |  ;     PSBPAR2 = ORDNER NUMBER 
 | 
|---|
| 80 |  S PSBSCRT="^TMP(""PSB"",$J,""PSBORDA"")"
 | 
|---|
| 81 |  K @PSBSCRT
 | 
|---|
| 82 |  N PSBX
 | 
|---|
| 83 |  K ^TMP("PSJ1",$J) D EN^PSJBCMA1(PSBPAR1,PSBPAR2,1)
 | 
|---|
| 84 |  M @PSBSCRT=^TMP("PSJ1",$J) K ^TMP("PSJ1",$J)
 | 
|---|
| 85 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",0))
 | 
|---|
| 86 |  S PSBDFN=PSBPAR1
 | 
|---|
| 87 |  S PSBON=+$P(PSBSCRT,U,3)  ; ord num w/o type
 | 
|---|
| 88 |  S PSBONX=$P(PSBSCRT,U,3)  ; ord num w/  type "U" or "V"
 | 
|---|
| 89 |  S PSBOTYP=$E(PSBONX,$L(PSBONX))
 | 
|---|
| 90 |  S PSBPONX=$P(PSBSCRT,U,4)  ; prev ord num
 | 
|---|
| 91 |  S PSBFON=$P(PSBSCRT,U,5)  ; foll ord num
 | 
|---|
| 92 |  S PSBIVT=$P(PSBSCRT,U,6)  ; IV type
 | 
|---|
| 93 |  S PSBISYR=$P(PSBSCRT,U,7)  ; intermit syrg
 | 
|---|
| 94 |  S PSBCHEMT=$P(PSBSCRT,U,8)  ; chemo type
 | 
|---|
| 95 |  S PSBCPRS=$P(PSBSCRT,U,0)  ; ord file entry (CPRS order #)
 | 
|---|
| 96 |  Q:PSBSCRT=-1
 | 
|---|
| 97 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",1))
 | 
|---|
| 98 |  S PSBMD=$P(PSBSCRT,U,1)  ; prov IEN -> ^VA(200)
 | 
|---|
| 99 |  S PSBMDX=$P(PSBSCRT,U,2)  ; prov name
 | 
|---|
| 100 |  S PSBMR=$P(PSBSCRT,U,3)  ; med rt IEN -> ^PS(51.2)
 | 
|---|
| 101 |  I $G(PSBMR)'="" S PSBMR=$P(PSBSCRT,U,13)  ;med rt
 | 
|---|
| 102 |  S PSBMRAB=$P(PSBSCRT,U,4)  ;med rt abbr
 | 
|---|
| 103 |  S PSBNJECT=+$G(^TMP("PSB",$J,"PSBORDA",1,0))  ;Inj site
 | 
|---|
| 104 |  S PSBIVPSH=+$P($G(^TMP("PSB",$J,"PSBORDA",1,0)),U,2)  ;IV PUSH
 | 
|---|
| 105 |  S PSBSM=$P(PSBSCRT,U,5)  ; self med
 | 
|---|
| 106 |  S PSBSMX=$P(PSBSCRT,U,6)  ; expnd to YES/NO
 | 
|---|
| 107 |  S PSBHSM=$P(PSBSCRT,U,7)  ; hospital supplied self med
 | 
|---|
| 108 |  S PSBHSMX=$P(PSBSCRT,U,8)  ; expnd to YES/NO
 | 
|---|
| 109 |  S PSBNGF=$P(PSBSCRT,U,9)  ; not to be given flag
 | 
|---|
| 110 |  S PSBOSTS=$P(PSBSCRT,U,10)  ; ord status
 | 
|---|
| 111 |  S PSBOSTSX=$P(PSBSCRT,U,11)  ; ord status expans
 | 
|---|
| 112 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",2))
 | 
|---|
| 113 |  S PSBOIT=$P(PSBSCRT,U,1)  ; orderable item IEN -> ^ORD(101.43) ORDERABLE ITEM
 | 
|---|
| 114 |  S PSBOITX=$P(PSBSCRT,U,2)  ; orderable item (expaned)_" "_ dosage form
 | 
|---|
| 115 |  I PSBOITX="" S PSBOITX="ZZZZ NO ORDERABLE ITEM"
 | 
|---|
| 116 |  S PSBDOSE=$P(PSBSCRT,U,3)  ; dosage ordered
 | 
|---|
| 117 |  S PSBIFR=$P(PSBSCRT,U,4)  ; infusion rate
 | 
|---|
| 118 |  S PSBSCH=$P(PSBSCRT,U,5)  ; sched
 | 
|---|
| 119 |  S PSBDOSEF=$P(PSBSCRT,U,6)  ; dosage form
 | 
|---|
| 120 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",3))
 | 
|---|
| 121 |  S PSBOTXT=$P(PSBSCRT,U,1)  ; UD special inst or IV other print info
 | 
|---|
| 122 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",4))
 | 
|---|
| 123 |  S PSBSCHT=$P(PSBSCRT,U,1)  ; sched type conversion
 | 
|---|
| 124 |  S PSBSCHTX=$P(PSBSCRT,U,2)  ; sched type expansion
 | 
|---|
| 125 |  S PSBLDT=$P(PSBSCRT,U,3)  ; log-in date FM
 | 
|---|
| 126 |  S PSBLDTX=$P(PSBSCRT,U,4)  ; exp MM/DD/YYYY HH:MM
 | 
|---|
| 127 |  S PSBOST=$P(PSBSCRT,U,5)  ; start date FM
 | 
|---|
| 128 |  S PSBOSTX=$P(PSBSCRT,U,6)  ; exp MM/DD/YYYY HH:MM
 | 
|---|
| 129 |  S PSBOSP=$P(PSBSCRT,U,7)  ; stop date FM
 | 
|---|
| 130 |  S PSBOSPX=$P(PSBSCRT,U,8) ; exp MM/DD/YYYY HH:MM
 | 
|---|
| 131 |  S PSBADST=$P(PSBSCRT,U,9)  ; admin times string in NNNN- format
 | 
|---|
| 132 |  S PSBOSCHT=$P(PSBSCRT,U,10)  ; original schedule type
 | 
|---|
| 133 |  S PSBFREQ=$P(PSBSCRT,U,11)  ; frequency
 | 
|---|
| 134 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",5))
 | 
|---|
| 135 |  S PSBVN=$P(PSBSCRT,U,1)  ; verify nurse IEN -> ^VA(200)
 | 
|---|
| 136 |  S PSBVNX=$P(PSBSCRT,U,2)  ; nurse name
 | 
|---|
| 137 |  S PSBVNI=$P(PSBSCRT,U,3) ; nurse initials
 | 
|---|
| 138 |  S PSBVPH=$P(PSBSCRT,U,4)  ; verify pharm IEN -> ^VA(200)
 | 
|---|
| 139 |  S PSBVPHX=$P(PSBSCRT,U,5)  ; pharm name
 | 
|---|
| 140 |  S PSBVPHI=$P(PSBSCRT,U,6)  ; pharm initials
 | 
|---|
| 141 |  S PSBSCRT=$G(^TMP("PSB",$J,"PSBORDA",6))
 | 
|---|
| 142 |  S PSBRMRK=$G(PSBSCRT)
 | 
|---|
| 143 |  ;If DayOFWeek set frequen to NULL
 | 
|---|
| 144 |  I $$PSBDCHK1^PSBVT1(PSBSCH) S PSBFREQ=""
 | 
|---|
| 145 |  ; get dispensed drug
 | 
|---|
| 146 |  I $G(^TMP("PSB",$J,"PSBORDA",700,0)) F PSBX=1:1:^TMP("PSB",$J,"PSBORDA",700,0) M PSBDDA(PSBX)=^TMP("PSB",$J,"PSBORDA",700,PSBX,0) S PSBDDA(PSBX)="DD^"_PSBDDA(PSBX) ; # of DDrug
 | 
|---|
| 147 |  ;     "DD"^dispensed drug IEN -> ^PSDRUG() DRUG^dispensed drug name^units per dose^inactive date
 | 
|---|
| 148 |  ; build unique id list
 | 
|---|
| 149 |  ; add addits
 | 
|---|
| 150 |  I $D(^TMP("PSB",$J,"PSBORDA",800)) S PSBX2="" F  S PSBX2=$O(^TMP("PSB",$J,"PSBORDA",800,PSBX2)) Q:PSBX2=""!(PSBX2="ERROR")  D
 | 
|---|
| 151 |  .S PSBUIDA(PSBX2)="ID^"_PSBX2 F J=1:1:^TMP("PSB",$J,"PSBORDA",800,PSBX2,0) S PSBUIDA(PSBX2)=PSBUIDA(PSBX2)_"^"_"ADD;"_$P(^TMP("PSB",$J,"PSBORDA",800,PSBX2,J),U,1)
 | 
|---|
| 152 |  ; add soluts
 | 
|---|
| 153 |  I $D(^TMP("PSB",$J,"PSBORDA",900)) S PSBX2="" F  S PSBX2=$O(^TMP("PSB",$J,"PSBORDA",900,PSBX2)) Q:PSBX2=""!(PSBX2="ERROR")  D
 | 
|---|
| 154 |  .I '$D(PSBUIDA(PSBX2)) S PSBUIDA(PSBX2)="ID^"_PSBX2
 | 
|---|
| 155 |  .F J=1:1:^TMP("PSB",$J,"PSBORDA",900,PSBX2,0) S PSBUIDA(PSBX2)=PSBUIDA(PSBX2)_"^"_"SOL;"_$P(^TMP("PSB",$J,"PSBORDA",900,PSBX2,J),U,1)
 | 
|---|
| 156 |  ;     "ID"   ^   (piece 2,3),... = type;IEN of each add/sol for this ID ex. "SOL;4"
 | 
|---|
| 157 |  ; get addits
 | 
|---|
| 158 |  I $G(^TMP("PSB",$J,"PSBORDA",850,0)) F PSBX=1:1:^TMP("PSB",$J,"PSBORDA",850,0) D
 | 
|---|
| 159 |  .M PSBADA(PSBX)=^TMP("PSB",$J,"PSBORDA",850,PSBX,0)  ; num of addits
 | 
|---|
| 160 |  .S PSBADA(PSBX)="ADD^"_PSBADA(PSBX)
 | 
|---|
| 161 |  .S PSBBAGS=$P(PSBADA(PSBX),U,5) I PSBBAGS'="" S PSBBAG=" IN BAG "_$P(PSBBAGS,",",1) D
 | 
|---|
| 162 |  ..F I=2:1 S X=$P(PSBBAGS,",",I) Q:X=""  S PSBBAG=PSBBAG_" AND "_X
 | 
|---|
| 163 |  .S:PSBBAGS'="" $P(PSBADA(PSBX),U,5)=PSBBAG
 | 
|---|
| 164 |  ;     "ADD"^additive IEN -> ^PS(52.6) IV ADDITIVES^additive name^strength^bottle
 | 
|---|
| 165 |  ; get soluts
 | 
|---|
| 166 |  I $G(^TMP("PSB",$J,"PSBORDA",950,0)) F PSBX=1:1:^TMP("PSB",$J,"PSBORDA",950,0) M PSBSOLA(PSBX)=^TMP("PSB",$J,"PSBORDA",950,PSBX,0) S PSBSOLA(PSBX)="SOL^"_PSBSOLA(PSBX)  ; # of SOLs
 | 
|---|
| 167 |  ;   "SOL"   ^   solution IEN -> ^PS(52.7) IV SOLUTIONS^solution name^volume
 | 
|---|
| 168 |  ; get label
 | 
|---|
| 169 |  I $D(^TMP("PSB",$J,"PSBORDA",1000)) M PSBLBLA=^TMP("PSB",$J,"PSBORDA",1000)
 | 
|---|
| 170 |  K ^TMP("PSB",$J,"PSBORDA")
 | 
|---|
| 171 |  Q
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 | LACTION ; get last action info
 | 
|---|
| 174 |  S (PSBLADT,PSBLAIEN,PSBLASTS)=""
 | 
|---|
| 175 |  I '$D(^PSB(53.79,"AORDX",PSBDFN,PSBONX)) Q
 | 
|---|
| 176 |  S PSBLADT=$O(^PSB(53.79,"AORDX",PSBDFN,PSBONX,""),-1)
 | 
|---|
| 177 |  S PSBLAIEN=$O(^PSB(53.79,"AORDX",PSBDFN,PSBONX,PSBLADT,""))
 | 
|---|
| 178 |  S PSBLASTS=$P(^PSB(53.79,PSBLAIEN,0),U,9)
 | 
|---|
| 179 |  Q
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 | CLEAN ;
 | 
|---|
| 182 |  K PSBONX,PSBPONX,PSBFON,PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBMD,PSBMDX,PSBMR,PSBMRAB,PSBSM,PSBSMX,PSBHSM,PSBHSMX
 | 
|---|
| 183 |  K PSBDFN,PSBNGF,PSBOSTS,PSBOSTSX,PSBOIT,PSBOITX,PSBDOSE,PSBIFR,PSBSCH,PSBDOSEF,PSBOTXT,PSBSCHT,PSBSCHTX
 | 
|---|
| 184 |  K PSBLDT,PSBLDTX,PSBOST,PSBOSTX,PSBOSP,PSBOSPX,PSBADST,PSBOSCHT,PSBFREQ,PSBVN,PSBVNX,PSBVNI
 | 
|---|
| 185 |  K PSBVPH,PSBVPHX,PSBVPHI,PSBDDA,PSBADA,PSBSOLA,PSBUIDA,PSBCPRS,PSBON,PSBRMRK,PSBNJECT,PSBIVPSH
 | 
|---|
| 186 |  K PSBLADT,PSBLAIEN,PSBLASTS,PSBBAG,PSBBAGS,PSBLBLA,PSBFOR,PSBSCRT
 | 
|---|
| 187 |  Q
 | 
|---|