PSBOPE ;BIRMINGHAM/EFC-PRN EFFECTIVENESS WORKSHEET ;8/12/12 10:57pm
;;3.0;BAR CODE MED ADMIN;**5,23,32,70,78,72**;Mar 2004;Build 16
;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified.
;
; Reference/IA
; ^DPT/10035
; EN^PSJBCMA/2828
;
;*70 - reset PSBCLINORD = 2 to signify combined orders report
;
EN ; Called from DQ^PSBO
N PSBSTRT,PSBSTOP,DFN
K ^TMP("PSB",$J)
S PSBSTRT=$P(PSBRPT(.1),U,6)+$P(PSBRPT(.1),U,7)
S PSBSTOP=$P(PSBRPT(.1),U,8)+$P(PSBRPT(.1),U,9)
F DFN=0:0 S DFN=$O(^TMP("PSBO",$J,DFN)) Q:'DFN D EN1
D PRINT
K ^TMP("PSJ",$J),^TMP("PSB",$J)
Q
;
EN1 ; Expects DFN,PSBSTRT,PSBSTOP from EN
N PSBGBL,PSBHDR,PSBX,PSBADMIN,PSBDFN,PSBDT,PSBMED,PSBORD,PSBOSTRT,PSBSCHED
K ^TMP("PSJ",$J)
S PSBDT=PSBSTRT-.0000001
F S PSBDT=$O(^PSB(53.79,"AADT",DFN,PSBDT)) Q:'PSBDT!(PSBDT>PSBSTOP) D
.S PSBIEN=0
.F S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBDT,PSBIEN)) Q:'PSBIEN D
..Q:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)'="P" ; Not a PRN Administration
..Q:$P($G(^PSB(53.79,PSBIEN,.2)),U,2)]"" ; Effectiveness entered
..Q:($P($G(^PSB(53.79,PSBIEN,0)),U,9)'="G")&($P($G(^PSB(53.79,PSBIEN,0)),U,9)'="RM") ;Allow only entries with at status of "GIVEN" and "REMOVED"
..Q:$P($G(^PSB(53.79,PSBIEN,0)),U,6)<PSBDT
..Q:$P($G(^PSB(53.79,PSBIEN,0)),U,6)>PSBSTOP
..S ^TMP("PSB",$J,DFN,PSBIEN)=""
Q
PRINT ; Print meds stored in ^TMP("PSB",$J,DFN,....
N PSBHDR,PSBDT,PSBMED,DFN
;
; Print by Patient
;
D:$P(PSBRPT(.1),U,1)="P"
.S PSBHDR(1)="PRN EFFECTIVENESS LIST for "_$$FMTE^XLFDT(PSBSTRT)_" to "_$$FMTE^XLFDT(PSBSTOP)
.S DFN=$P(PSBRPT(.1),U,2)
.W $$PTHDR()
.I '$O(^TMP("PSB",$J,DFN,0)) W !,"No PRN Medications Found",$$PTFTR^PSBOHDR() Q
.W ! ; Line Break Between Admin Times
.S PSBIEN=""
.F S PSBIEN=$O(^TMP("PSB",$J,DFN,PSBIEN)) Q:PSBIEN="" D
..S PSBIENS=PSBIEN_","
..I $Y>(IOSL-5) W $$PTFTR^PSBOHDR(),$$PTHDR()
..W !,$$GET1^DIQ(53.79,PSBIENS,.06),?30,$$GET1^DIQ(53.79,PSBIENS,.08),?64,$$GETINIT^PSBCSUTX(PSBIEN,"N") ;*70 - Get name of who took action, PSB*3*72
..W ?102,$$GET1^DIQ(53.79,PSBIENS,"PATIENT LOCATION") ;*70
..W !,?5,"PRN Reason: ",$$GET1^DIQ(53.79,PSBIENS,.21)
.W $$PTFTR^PSBOHDR()
.Q
;
; Print by Ward
;
D:$P(PSBRPT(.1),U,1)="W"
.S PSBHDR(1)="PRN EFFECTIVENESS LIST from "_$$FMTE^XLFDT(PSBSTRT)_" thru "_$$FMTE^XLFDT(PSBSTOP)
.S PSBWARD=$P(PSBRPT(.1),U,3)
.W $$WRDHDR()
.I '$O(^TMP("PSB",$J,0)) W !,"No PRN Medications Found" Q
.S PSBSORT=$P(PSBRPT(.1),U,5)
.F DFN=0:0 S DFN=$O(^TMP("PSB",$J,DFN)) Q:'DFN D
..S PSBINDX=$S(PSBSORT="P":$P(^DPT(DFN,0),U),1:$G(^DPT(DFN,.1))_" "_$G(^DPT(DFN,.101))) ;PSB*3*23
..S:PSBINDX="" PSBINDX=$P(^DPT(DFN,0),U)
..S ^TMP("PSB",$J,"B",PSBINDX,DFN)=""
.S PSBINDX=""
.F S PSBINDX=$O(^TMP("PSB",$J,"B",PSBINDX)) Q:PSBINDX="" D
..F DFN=0:0 S DFN=$O(^TMP("PSB",$J,"B",PSBINDX,DFN)) Q:'DFN D
...W ! ; Line Break Between Pt's
...W:$P(PSBRPT(.1),U,5)="P" !,$$GET1^DIQ(2,DFN_",",.01),?32,$$GET1^DIQ(2,DFN_",",.1)," ",$$GET1^DIQ(2,DFN_",",.101)
...W:$P(PSBRPT(.1),U,5)="B" !,$$GET1^DIQ(2,DFN_",",.1)," ",$$GET1^DIQ(2,DFN_",",.101),?20,$$GET1^DIQ(2,DFN_",",.01)
...W ! ; Line Break Between Admin Times
...S PSBIEN=""
...F S PSBIEN=$O(^TMP("PSB",$J,DFN,PSBIEN)) Q:PSBIEN="" D
....I $Y>(IOSL-5) W $$WRDHDR()
....W !?5,$$GET1^DIQ(53.79,PSBIEN_",",.06),?35,$$GET1^DIQ(53.79,PSBIEN_",",.08),?68,$$GETINIT^PSBCSUTX(PSBIEN,"N") ;*70 - Get name of who took action, PSB*3*72
....W ?102,$$GET1^DIQ(53.79,PSBIEN_",","PATIENT LOCATION") ;*70
....W !?10,"PRN Reason: ",$$GET1^DIQ(53.79,PSBIEN_",",.21)
Q
;
WRDHDR() ; Ward Header
N PSBSRCHL ;Add PSBSRCHL variable and additional PSBHDR array spacers for PSBOHDR call, PSB*3*78
S PSBSRCHL=$$SRCHLIST^PSBOHDR()
S PSBHDR(2)="",PSBHDR(3)="",PSBHDR(4)="Ward Location: "
N PSBCLINORD S PSBCLINORD=2 ;2 = both order types *70
D WARD^PSBOHDR(PSBWRD,.PSBHDR,,,PSBSRCHL)
W:$P(PSBRPT(.1),U,5)="B" !,"Ward Rm-Bed",?20,"Patient"
W:$P(PSBRPT(.1),U,5)="P" !,"Patient",?32,"Ward Rm-Bed"
;adjust name of headings and colums to make room for Location ;*70
W !?5,"Admin Date/Time",?35,"Medication",?68,"Administered By" ;*70
W ?102,"Location" ;*70
W !,$TR($J("",IOM)," ","-")
Q ""
;
PTHDR() ; Patient Header
N PSBCLINORD S PSBCLINORD=2 ;2 = both order types *70
D PT^PSBOHDR(DFN,.PSBHDR)
W !,"Admin Date/Time",?30,"Medication",?64,"Administered By"
W ?102,"Location"
W !,$TR($J("",IOM)," ","-")
Q ""
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSBOPE 4594 printed Mar 13, 2024@22:48:56 Page 2
PSBOPE ;BIRMINGHAM/EFC-PRN EFFECTIVENESS WORKSHEET ;8/12/12 10:57pm
+1 ;;3.0;BAR CODE MED ADMIN;**5,23,32,70,78,72**;Mar 2004;Build 16
+2 ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified.
+3 ;
+4 ; Reference/IA
+5 ; ^DPT/10035
+6 ; EN^PSJBCMA/2828
+7 ;
+8 ;*70 - reset PSBCLINORD = 2 to signify combined orders report
+9 ;
EN ; Called from DQ^PSBO
+1 NEW PSBSTRT,PSBSTOP,DFN
+2 KILL ^TMP("PSB",$JOB)
+3 SET PSBSTRT=$PIECE(PSBRPT(.1),U,6)+$PIECE(PSBRPT(.1),U,7)
+4 SET PSBSTOP=$PIECE(PSBRPT(.1),U,8)+$PIECE(PSBRPT(.1),U,9)
+5 FOR DFN=0:0
SET DFN=$ORDER(^TMP("PSBO",$JOB,DFN))
if 'DFN
QUIT
DO EN1
+6 DO PRINT
+7 KILL ^TMP("PSJ",$JOB),^TMP("PSB",$JOB)
+8 QUIT
+9 ;
EN1 ; Expects DFN,PSBSTRT,PSBSTOP from EN
+1 NEW PSBGBL,PSBHDR,PSBX,PSBADMIN,PSBDFN,PSBDT,PSBMED,PSBORD,PSBOSTRT,PSBSCHED
+2 KILL ^TMP("PSJ",$JOB)
+3 SET PSBDT=PSBSTRT-.0000001
+4 FOR
SET PSBDT=$ORDER(^PSB(53.79,"AADT",DFN,PSBDT))
if 'PSBDT!(PSBDT>PSBSTOP)
QUIT
Begin DoDot:1
+5 SET PSBIEN=0
+6 FOR
SET PSBIEN=$ORDER(^PSB(53.79,"AADT",DFN,PSBDT,PSBIEN))
if 'PSBIEN
QUIT
Begin DoDot:2
+7 ; Not a PRN Administration
if $PIECE($GET(^PSB(53.79,PSBIEN,.1)),U,2)'="P"
QUIT
+8 ; Effectiveness entered
if $PIECE($GET(^PSB(53.79,PSBIEN,.2)),U,2)]""
QUIT
+9 ;Allow only entries with at status of "GIVEN" and "REMOVED"
if ($PIECE($GET(^PSB(53.79,PSBIEN,0)),U,9)'="G")&($PIECE($GET(^PSB(53.79,PSBIEN,0)),U,9)'="RM")
QUIT
+10 if $PIECE($GET(^PSB(53.79,PSBIEN,0)),U,6)<PSBDT
QUIT
+11 if $PIECE($GET(^PSB(53.79,PSBIEN,0)),U,6)>PSBSTOP
QUIT
+12 SET ^TMP("PSB",$JOB,DFN,PSBIEN)=""
End DoDot:2
End DoDot:1
+13 QUIT
PRINT ; Print meds stored in ^TMP("PSB",$J,DFN,....
+1 NEW PSBHDR,PSBDT,PSBMED,DFN
+2 ;
+3 ; Print by Patient
+4 ;
+5 if $PIECE(PSBRPT(.1),U,1)="P"
Begin DoDot:1
+6 SET PSBHDR(1)="PRN EFFECTIVENESS LIST for "_$$FMTE^XLFDT(PSBSTRT)_" to "_$$FMTE^XLFDT(PSBSTOP)
+7 SET DFN=$PIECE(PSBRPT(.1),U,2)
+8 WRITE $$PTHDR()
+9 IF '$ORDER(^TMP("PSB",$JOB,DFN,0))
WRITE !,"No PRN Medications Found",$$PTFTR^PSBOHDR()
QUIT
+10 ; Line Break Between Admin Times
WRITE !
+11 SET PSBIEN=""
+12 FOR
SET PSBIEN=$ORDER(^TMP("PSB",$JOB,DFN,PSBIEN))
if PSBIEN=""
QUIT
Begin DoDot:2
+13 SET PSBIENS=PSBIEN_","
+14 IF $Y>(IOSL-5)
WRITE $$PTFTR^PSBOHDR(),$$PTHDR()
+15 ;*70 - Get name of who took action, PSB*3*72
WRITE !,$$GET1^DIQ(53.79,PSBIENS,.06),?30,$$GET1^DIQ(53.79,PSBIENS,.08),?64,$$GETINIT^PSBCSUTX(PSBIEN,"N")
+16 ;*70
WRITE ?102,$$GET1^DIQ(53.79,PSBIENS,"PATIENT LOCATION")
+17 WRITE !,?5,"PRN Reason: ",$$GET1^DIQ(53.79,PSBIENS,.21)
End DoDot:2
+18 WRITE $$PTFTR^PSBOHDR()
+19 QUIT
End DoDot:1
+20 ;
+21 ; Print by Ward
+22 ;
+23 if $PIECE(PSBRPT(.1),U,1)="W"
Begin DoDot:1
+24 SET PSBHDR(1)="PRN EFFECTIVENESS LIST from "_$$FMTE^XLFDT(PSBSTRT)_" thru "_$$FMTE^XLFDT(PSBSTOP)
+25 SET PSBWARD=$PIECE(PSBRPT(.1),U,3)
+26 WRITE $$WRDHDR()
+27 IF '$ORDER(^TMP("PSB",$JOB,0))
WRITE !,"No PRN Medications Found"
QUIT
+28 SET PSBSORT=$PIECE(PSBRPT(.1),U,5)
+29 FOR DFN=0:0
SET DFN=$ORDER(^TMP("PSB",$JOB,DFN))
if 'DFN
QUIT
Begin DoDot:2
+30 ;PSB*3*23
SET PSBINDX=$SELECT(PSBSORT="P":$PIECE(^DPT(DFN,0),U),1:$GET(^DPT(DFN,.1))_" "_$GET(^DPT(DFN,.101)))
+31 if PSBINDX=""
SET PSBINDX=$PIECE(^DPT(DFN,0),U)
+32 SET ^TMP("PSB",$JOB,"B",PSBINDX,DFN)=""
End DoDot:2
+33 SET PSBINDX=""
+34 FOR
SET PSBINDX=$ORDER(^TMP("PSB",$JOB,"B",PSBINDX))
if PSBINDX=""
QUIT
Begin DoDot:2
+35 FOR DFN=0:0
SET DFN=$ORDER(^TMP("PSB",$JOB,"B",PSBINDX,DFN))
if 'DFN
QUIT
Begin DoDot:3
+36 ; Line Break Between Pt's
WRITE !
+37 if $PIECE(PSBRPT(.1),U,5)="P"
WRITE !,$$GET1^DIQ(2,DFN_",",.01),?32,$$GET1^DIQ(2,DFN_",",.1)," ",$$GET1^DIQ(2,DFN_",",.101)
+38 if $PIECE(PSBRPT(.1),U,5)="B"
WRITE !,$$GET1^DIQ(2,DFN_",",.1)," ",$$GET1^DIQ(2,DFN_",",.101),?20,$$GET1^DIQ(2,DFN_",",.01)
+39 ; Line Break Between Admin Times
WRITE !
+40 SET PSBIEN=""
+41 FOR
SET PSBIEN=$ORDER(^TMP("PSB",$JOB,DFN,PSBIEN))
if PSBIEN=""
QUIT
Begin DoDot:4
+42 IF $Y>(IOSL-5)
WRITE $$WRDHDR()
+43 ;*70 - Get name of who took action, PSB*3*72
WRITE !?5,$$GET1^DIQ(53.79,PSBIEN_",",.06),?35,$$GET1^DIQ(53.79,PSBIEN_",",.08),?68,$$GETINIT^PSBCSUTX(PSBIEN,"N")
+44 ;*70
WRITE ?102,$$GET1^DIQ(53.79,PSBIEN_",","PATIENT LOCATION")
+45 WRITE !?10,"PRN Reason: ",$$GET1^DIQ(53.79,PSBIEN_",",.21)
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+46 QUIT
+47 ;
WRDHDR() ; Ward Header
+1 ;Add PSBSRCHL variable and additional PSBHDR array spacers for PSBOHDR call, PSB*3*78
NEW PSBSRCHL
+2 SET PSBSRCHL=$$SRCHLIST^PSBOHDR()
+3 SET PSBHDR(2)=""
SET PSBHDR(3)=""
SET PSBHDR(4)="Ward Location: "
+4 ;2 = both order types *70
NEW PSBCLINORD
SET PSBCLINORD=2
+5 DO WARD^PSBOHDR(PSBWRD,.PSBHDR,,,PSBSRCHL)
+6 if $PIECE(PSBRPT(.1),U,5)="B"
WRITE !,"Ward Rm-Bed",?20,"Patient"
+7 if $PIECE(PSBRPT(.1),U,5)="P"
WRITE !,"Patient",?32,"Ward Rm-Bed"
+8 ;adjust name of headings and colums to make room for Location ;*70
+9 ;*70
WRITE !?5,"Admin Date/Time",?35,"Medication",?68,"Administered By"
+10 ;*70
WRITE ?102,"Location"
+11 WRITE !,$TRANSLATE($JUSTIFY("",IOM)," ","-")
+12 QUIT ""
+13 ;
PTHDR() ; Patient Header
+1 ;2 = both order types *70
NEW PSBCLINORD
SET PSBCLINORD=2
+2 DO PT^PSBOHDR(DFN,.PSBHDR)
+3 WRITE !,"Admin Date/Time",?30,"Medication",?64,"Administered By"
+4 WRITE ?102,"Location"
+5 WRITE !,$TRANSLATE($JUSTIFY("",IOM)," ","-")
+6 QUIT ""
+7 ;