| [613] | 1 | PSBOMT1 ;BIRMINGHAM/TEJ-BCMA MEDICATION THERAPY REPORT ;Mar 2004
 | 
|---|
 | 2 |  ;;3.0;BAR CODE MED ADMIN;**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 |  ; File 50.7/2880
 | 
|---|
 | 7 |  ; File 52.6/436
 | 
|---|
 | 8 |  ; File 52.7/437
 | 
|---|
 | 9 |  ; File 200/10060
 | 
|---|
 | 10 |  ; EN^PSJBCMA1/2829
 | 
|---|
 | 11 |  ; IEN^PSN50P65/4543
 | 
|---|
 | 12 |  ; DRGIEN^PSS50P7/4662
 | 
|---|
 | 13 |  ; VAC^PSS50/4533
 | 
|---|
 | 14 | GETADSO ; GET ALL ADDITIVES FOR ALL ORDERABLE ITEMS
 | 
|---|
 | 15 |  K PSBAOUT,PSBSOUT
 | 
|---|
 | 16 |  S XA="" F  S XA=$O(PSBOIP("OIP",XA)) Q:XA=""  D
 | 
|---|
 | 17 |  .D LIST^DIC(52.6,"","@;15I","QPI","","","","AOI","","","PSBAOUT")
 | 
|---|
 | 18 |  .S XB=0 F  S XB=$O(PSBAOUT("DILIST",XB)) Q:XB=""  D
 | 
|---|
 | 19 |  ..I $P(PSBAOUT("DILIST",XB,0),"^",2)=XA D
 | 
|---|
 | 20 |  ...S TMP("PSBADDS",$J,$P(PSBAOUT("DILIST",XB,0),"^",1))=""
 | 
|---|
 | 21 |  K PSBAOUT
 | 
|---|
 | 22 |  ; GET ALL SOLUTIONS FOR ALL ORDERABLE ITEMS
 | 
|---|
 | 23 |  S XA="" F  S XA=$O(PSBOIP("OIP",XA)) Q:XA=""  D
 | 
|---|
 | 24 |  .D LIST^DIC(52.7,"","@;9I","QPI","","","","AOI","","","PSBSOUT")
 | 
|---|
 | 25 |  .S XB=0 F  S XB=$O(PSBSOUT("DILIST",XB)) Q:XB=""  D
 | 
|---|
 | 26 |  ..I $P(PSBSOUT("DILIST",XB,0),"^",2)=XA D
 | 
|---|
 | 27 |  ...S TMP("PSBSOLS",$J,$P(PSBSOUT("DILIST",XB,0),"^",1))=""
 | 
|---|
 | 28 |  K PSBSOUT
 | 
|---|
 | 29 |  Q
 | 
|---|
 | 30 | FINDIENS ; USE PSBOIS,PSBADDS AND PSBSOLS TO FIND ALL IENS FOR THE RPT
 | 
|---|
 | 31 |  ;SEARCH FOR UNIT DOSE IENS
 | 
|---|
 | 32 |  I $D(TMP("PSBOIS",$J)) S XA="" F  S XA=$O(TMP("PSBOIS",$J,XA)) Q:XA=""  D
 | 
|---|
 | 33 |  .S PSBDT=PSBSTRT F  S PSBDT=$O(^PSB(53.79,"AOIP",PSBXDFN,XA,PSBDT)) Q:PSBDT=""!(PSBDT>PSBSTOP)  D
 | 
|---|
 | 34 |  ..S PSBIEN="" F  S PSBIEN=$O(^PSB(53.79,"AOIP",PSBXDFN,XA,PSBDT,PSBIEN)) Q:PSBIEN=""  D
 | 
|---|
 | 35 |  ...Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N"
 | 
|---|
 | 36 |  ...S TMP("PSBIENS",$J,$$GET1^DIQ(53.79,PSBIEN_",",.06,"I"),PSBIEN)=""
 | 
|---|
 | 37 |  ;SEARCH FOR ADDITIVES
 | 
|---|
 | 38 |  I $D(TMP("PSBADDS",$J)) S XA="" F  S XA=$O(TMP("PSBADDS",$J,XA)) Q:XA=""  D
 | 
|---|
 | 39 |  .S PSBIEN="" F  S PSBIEN=$O(^PSB(53.79,"AOIP3",PSBXDFN,PSBIEN)) Q:PSBIEN=""  D
 | 
|---|
 | 40 |  ..S XB="" F  S XB=$O(^PSB(53.79,"AOIP3",PSBXDFN,PSBIEN,XB)) Q:XB=""  D
 | 
|---|
 | 41 |  ...Q:XB'=XA
 | 
|---|
 | 42 |  ...Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N"
 | 
|---|
 | 43 |  ...I $P(^PSB(53.79,PSBIEN,0),"^",6)>PSBSTRT,($P(^PSB(53.79,PSBIEN,0),"^",6)<PSBSTOP)  D
 | 
|---|
 | 44 |  ....S TMP("PSBIENS",$J,$$GET1^DIQ(53.79,PSBIEN_",",.06,"I"),PSBIEN)=""
 | 
|---|
 | 45 |  ;SEARCH FOR SOLUTIONS
 | 
|---|
 | 46 |  I $D(TMP("PSBSOLS",$J)) S XA="" F  S XA=$O(TMP("PSBSOLS",$J,XA)) Q:XA=""  D
 | 
|---|
 | 47 |  .S PSBIEN="" F  S PSBIEN=$O(^PSB(53.79,"AOIP4",PSBXDFN,PSBIEN)) Q:PSBIEN=""  D
 | 
|---|
 | 48 |  ..S XB="" F  S XB=$O(^PSB(53.79,"AOIP4",PSBXDFN,PSBIEN,XB)) Q:XB=""  D
 | 
|---|
 | 49 |  ...Q:XB'=XA
 | 
|---|
 | 50 |  ...Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N"
 | 
|---|
 | 51 |  ...I $P(^PSB(53.79,PSBIEN,0),"^",6)>PSBSTRT,($P(^PSB(53.79,PSBIEN,0),"^",6)<PSBSTOP)  D
 | 
|---|
 | 52 |  ....S TMP("PSBIENS",$J,$$GET1^DIQ(53.79,PSBIEN_",",.06,"I"),PSBIEN)=""
 | 
|---|
 | 53 |  Q
 | 
|---|
 | 54 | HDR ;  Header
 | 
|---|
 | 55 |  W:$Y>1 @IOF
 | 
|---|
 | 56 |  W:$X>1 !
 | 
|---|
 | 57 |  S PSBRPNM="BCMA MEDICATION THERAPY REPORT"
 | 
|---|
 | 58 |  S PSBPGNUM=1,PSBOUTP(0)="",PSBRPT(0)=""
 | 
|---|
 | 59 |  S PSBPG="Page: "_PSBPGNUM_" of "_$S($O(PSBOUTP(""),-1)=0:1,1:$O(PSBOUTP(""),-1))
 | 
|---|
 | 60 |  I $P(PSBRPT(0),U,4)="" S $P(PSBRPT(0),U,4)=DUZ(2)
 | 
|---|
 | 61 |  S PSBPGRM=IOM-($L(PSBPG))
 | 
|---|
 | 62 |  D:$P(PSBRPT(.1),U,1)="P"
 | 
|---|
 | 63 |  .K PSBHDR
 | 
|---|
 | 64 |  .S PSBHDR(1)="BCMA MEDICATION THERAPY REPORT for "
 | 
|---|
 | 65 |  .S Y=$P(PSBRPT(.1),U,6) D D^DIQ S PSBHDR(1)=PSBHDR(1)_Y_"@" S Y=$P(PSBRPT(.1),U,7) S PSBHDR(1)=PSBHDR(1)_$E(Y_"0000",2,5)_" to "
 | 
|---|
 | 66 |  .S Y=$P(PSBRPT(.1),U,8) D D^DIQ S PSBHDR(1)=PSBHDR(1)_Y_"@" S Y=$P(PSBRPT(.1),U,9) S PSBHDR(1)=PSBHDR(1)_$E(Y_"0000",2,5)
 | 
|---|
 | 67 |  .S PSBHDR(2)="Schedule Type(s): --"
 | 
|---|
 | 68 |  .F Y=1:1:4 I $P(PSBRPT(.2),U,Y) S $P(PSBHDR(2),": ",2)=$P(PSBHDR(2),": ",2)_$S(PSBHDR(2)["--":"",1:"/ ")_$P("Continuous^PRN^On-Call^One-Time",U,Y)_" " S PSBHDR(2)=$TR(PSBHDR(2),"-","")
 | 
|---|
 | 69 |  .I PSBCFLG S PSBHDR(3)="Include Comments" S PSBHDR(4)=" "
 | 
|---|
 | 70 |  .E  S PSBHDR(3)=" "
 | 
|---|
 | 71 |  Q
 | 
|---|
 | 72 | LEGEND ; Report Legend
 | 
|---|
 | 73 |  K PSBLGDO
 | 
|---|
 | 74 |  S PSBLGD("ORDER TYPES","C")="Continuous"
 | 
|---|
 | 75 |  S PSBLGD("ORDER TYPES","O")="One Time"
 | 
|---|
 | 76 |  S PSBLGD("ORDER TYPES","OC")="On Call"
 | 
|---|
 | 77 |  S PSBLGD("ORDER TYPES","P")="PRN (As Needed)"
 | 
|---|
 | 78 |  S PSB=0 F  S PSB=$O(PSBLGD("INITIALS",PSB)) Q:+PSB=0  D
 | 
|---|
 | 79 |  .S PSBINIT=$$GET1^DIQ(200,PSB_",","INITIAL"),PSBLGD("INITIALS",$S(PSBINIT']" ":"*n/a*",1:PSBINIT))=$$GET1^DIQ(200,PSB_",","NAME")
 | 
|---|
 | 80 |  .K PSBLGD("INITIALS",PSB)
 | 
|---|
 | 81 |  S PSBLGDO(0)="REPORT LEGEND"
 | 
|---|
 | 82 |  S PSBLGDO(1)=""
 | 
|---|
 | 83 |  S PSBLGDO(2)=$S($G(PSBNO,0):"",1:"SCHEDULE TYPES")
 | 
|---|
 | 84 |  S PSBLGDO(3)=""
 | 
|---|
 | 85 |  I '$G(PSBNO,0) S X1="",X2=3 F  S X1=$O(PSBLGD("ORDER TYPES",X1)) Q:X1=""  S X2=X2+1,PSBLGDO(X2)=X1,$E(PSBLGDO(X2),5)="- "_PSBLGD("ORDER TYPES",X1)
 | 
|---|
 | 86 |  I $D(PSBLGD("INITIALS")) S $E(PSBLGDO(2),35)="INITIALS" S X1="",X2=3 F  S X1=$O(PSBLGD("INITIALS",X1)) Q:X1=""  S X2=X2+1,$E(PSBLGDO(X2),35)=X1,$E(PSBLGDO(X2),40)="- "_PSBLGD("INITIALS",X1)
 | 
|---|
 | 87 |  I ($Y+$O(PSBLGDO(""),-1))>(IOSL-12) D
 | 
|---|
 | 88 |  .W $$PTFTR^PSBOHDR()
 | 
|---|
 | 89 |  .D PT^PSBOHDR(PSBXDFN,.PSBHDR)
 | 
|---|
 | 90 |  I IOSL<1000 F  Q:($Y+$O(PSBLGDO(""),-1)+12)>IOSL  W !
 | 
|---|
 | 91 |  W !,$TR($J("",IOM)," ","="),!
 | 
|---|
 | 92 |  F X1=$O(PSBLGDO("")):1:$O(PSBLGDO(""),-1) W !,PSBLGDO(X1)
 | 
|---|
 | 93 |  W !!,$TR($J("",IOM)," ","="),!
 | 
|---|
 | 94 |  Q
 | 
|---|
 | 95 | FTR ;
 | 
|---|
 | 96 |  I (IOSL<100) F  Q:$Y>(IOSL-6)  W !
 | 
|---|
 | 97 |  W !,$TR($J("",IOM)," ","=")
 | 
|---|
 | 98 |  S X="Ward: "_PSBHDR("WARD")_"  Room-Bed: "_PSBHDR("ROOM")
 | 
|---|
 | 99 |  W !,PSBHDR("NAME"),?(IOM-11\2),PSBHDR("SSN"),?(IOM-$L(X)),X
 | 
|---|
 | 100 |  W !,"BCMA MEDICATION THERAPY REPORT",?(IOM-$L(PSBDTTM)),PSBDTTM
 | 
|---|
 | 101 |  Q
 | 
|---|
 | 102 | MAKELINE(X,CNT) ;LINE OF WHAT'S PASSED IN CNT TIMES
 | 
|---|
 | 103 |  N Y,Z
 | 
|---|
 | 104 |  S Y=""
 | 
|---|
 | 105 |  F Z=1:1:CNT S Y=Y_X
 | 
|---|
 | 106 |  Q Y
 | 
|---|
 | 107 |  ;
 | 
|---|
 | 108 | PARSE(X,CNT) ;Split text for wrapping.
 | 
|---|
 | 109 |  S CNTX="UOA"_CNT,@CNTX=@CNTX_$E(X,CNT,(CNT+14)),UOAX=""
 | 
|---|
 | 110 |  F  S:$F(@CNTX,", ",+UOAX)>0 UOAX=$F(@CNTX,", ",+UOAX)  Q:'$F(@CNTX,", ",+UOAX)
 | 
|---|
 | 111 |  I UOAX<1 F  S:$F(@CNTX," ",+UOAX)>0 UOAX=$F(@CNTX," ",+UOAX)  Q:'$F(@CNTX," ",+UOAX)
 | 
|---|
 | 112 |  I UOAX>1,(($L(UOA)-(CNT+14))>0) S CNTXX=$E(@CNTX,1,UOAX-1),@("UOA"_(CNT+15))=$E(@CNTX,UOAX,UOAX+14),@CNTX=CNTXX
 | 
|---|
 | 113 |  Q
 | 
|---|
 | 114 |  ;
 | 
|---|
 | 115 | PAD(X,CNT) ;
 | 
|---|
 | 116 |  Q $E(X_$J("",CNT),1,CNT)
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 | CLEANALL ; KILL ALL TMP LEVELS USED VARIABLES
 | 
|---|
 | 119 |  K ^TMP("PSB",$J),^TMP("PSJ1",$J),PSBOIP,TMP("PSBADDS",$J),TMP("PSBSOLS",$J)
 | 
|---|
 | 120 |  K TMP("PSBIENS",$J)
 | 
|---|
 | 121 |  Q
 | 
|---|
 | 122 |  ;
 | 
|---|
 | 123 | CLEANSUM ; KILL ALL BUN THE "PSBIENS" LEVEL
 | 
|---|
 | 124 |  K ^TMP("PSB",$J),^TMP("PSJ1",$J),TMP("PSBIENS",$J),TMP("PSBOIS",$J),TMP("PSBADDS",$J),TMP("PSBSOLS",$J)
 | 
|---|
 | 125 |  Q
 | 
|---|