PSOQMCAL ; SEA/HAM3 PMI - PHARMACY MEDICATION INSTRUCTION ; 30 Nov 2007 7:55 AM
;;7.0;OUTPATIENT PHARMACY;**294**;DEC 1997;Build 13
;
;Reference to CKP^GMTSUP supported by DBIA 4231
;Reference to COVER^ORWPS supported by DBIA 4954
;Credit to Herb Morriss and Al Hernandez for the original design
;Puget Sound Health Care System, Seattle WA
EN N PSOQPEND,DAYSEP,DRUGHDR1,DRUGHDR2,DRUGSEP,INSTSEP1,INSTSEP2,INSTSEP3
N EMPTYLN,PRETYPE,SUPTYPE,ADDR,AL,ALFLAG,ARLDASH
N ARLDATE,ARLDFN,ARLDOB,ARLNAME,ARLSITE,ARLSN
N BLANKLN,BLNKLN,DRUG1,FOOD,GMRAL,IDRUG,ISIG,ITYPE
N NVA,NONE,PAGE,PGWIDTH,PGLENGTH,PHONE
N RXIEN,SIGCNT,SIGPOS,XPOS1,XPOS2,XPOS3,XPOS4
N FN,HP,IA,RPTDATE,TYPE,WP,ST,SUPCNT,SUPDRUG,X,X1,X2,ADDRFL
N DIWF,DIWL,DIWR,INSTSEP1,INSTSEP2,INSTSEP3,DRUGHDR1,DRUGHDR2,DRUGSEP
S PGWIDTH=IOM-5,PGLENGTH=IOSL-9
Q:PGWIDTH<48 ;ensure that the IOM variable is wide enough
S RPTDATE=$$FMTE^XLFDT($$NOW^XLFDT,"1D")
S XPOS1=(PGWIDTH-26)\2 ;title
S XPOS2=PGWIDTH-6 ;page number
S XPOS3=(PGWIDTH-29)\2 ;site
S XPOS4=(PGWIDTH-53)\2 ;refill info
S BLANKLN="",$P(BLNKLN," ",PGWIDTH)=" "
S EMPTYLN="!,""|"_$E(BLNKLN,1,PGWIDTH-2)_"|"""
S DAYSEP="| | | | |"
S DRUGHDR1="| |MORNING| NOON |EVENING|BEDTIME| COMMENTS"
S DRUGHDR1=DRUGHDR1_$E(BLNKLN,$L(DRUGHDR1),PGWIDTH-2)_"|"
S DRUGHDR2="| "_DAYSEP
S DRUGHDR2=DRUGHDR2_$E(BLNKLN,$L(DRUGHDR2),PGWIDTH-2)_"|"
S $P(DRUGSEP,"~",PGWIDTH-2)="~"
S DRUGSEP="|"_DRUGSEP_"|"
S $P(INSTSEP1,"-",PGWIDTH-2)="-"
S INSTSEP1="|"_INSTSEP1_"|"
S INSTSEP2="| UNITS PER DOSE: "_DAYSEP
S INSTSEP2=INSTSEP2_$E(BLNKLN,$L(INSTSEP2),PGWIDTH-2)_"|"
S INSTSEP3="| "_DAYSEP
S INSTSEP3=INSTSEP3_$E(BLNKLN,$L(INSTSEP3),PGWIDTH-2)_"|"
S X1=DT,X2=-45 D C^%DTC S ARLDATE=X
1 ;Patient
S ARLDFN=""
F IA=1:1 S ARLDFN=$P(ARLPAT,";",IA) Q:ARLDFN="" D
. S PAGE=1
. D HD,SHOW(ARLDFN)
Q
SHOW(PTIEN) ;
N LIST,NVA
D COVER^ORWPS(.LIST,PTIEN)
D GETOPORD(.LIST)
D GETRXDAT(.LIST)
S SUPTYPE=0,PRETYPE="D"
S ITYPE="@"
F S ITYPE=$O(LIST(ITYPE)) Q:ITYPE]"ZZZ" Q:ITYPE="" D
. I PRETYPE'=ITYPE D
. . W !,DRUGSEP
. . W @EMPTYLN
. . W !,"|","SUPPLY ITEMS:"_$E(BLNKLN,14,PGWIDTH-2)_"|"
. . S PRETYPE=ITYPE
. . I (ITYPE="S")&(SUPTYPE=0) D
. . . S SUPTYPE=1,SUPCNT=0,SUPDRUG=""
. . . F S SUPDRUG=$O(LIST(ITYPE,SUPDRUG)) Q:SUPDRUG="" D
. . . . S SUPCNT=SUPCNT+1
. . . I $Y>(PGLENGTH-SUPCNT) W !,DRUGSEP,@IOF D HD3
. S IDRUG=""
. F S IDRUG=$O(LIST(ITYPE,IDRUG)) Q:IDRUG="" D
. . I 'SUPTYPE D
. . S SIGCNT=0,SIGPOS=""
. . F S SIGPOS=$O(LIST(ITYPE,IDRUG,SIGPOS)) Q:SIGPOS="" D
. . . S SIGCNT=SIGCNT+1
. . I $Y>(PGLENGTH-SIGCNT) W !,DRUGSEP,@IOF D HD3
. . W:'SUPTYPE !,DRUGSEP,@EMPTYLN
. . W !,"|",IDRUG_$E(BLNKLN,$L(IDRUG),PGWIDTH-3)_"|"
. . Q:SUPTYPE
. . S ISIG=0
. . F S ISIG=$O(LIST(ITYPE,IDRUG,ISIG)) Q:ISIG<1 D
. . . W !,"| ",LIST(ITYPE,IDRUG,ISIG),$E(BLNKLN,$L(LIST(ITYPE,IDRUG,ISIG)),PGWIDTH-8),"|"
. . W !,INSTSEP1,!,INSTSEP2 W:'$G(PSOQHS) !,INSTSEP3
NVA ;NVA MEDS ADDED 5/6/05
I $D(NVA) D
. N NVACNT,NVADRUG
. W !,DRUGSEP
. W @EMPTYLN
. W !,"|","NON-VA Medications:"_$E(BLNKLN,20,PGWIDTH-2)_"|"
. W @EMPTYLN
. S NVACNT=0
. S NVADRUG=""
. F S NVADRUG=$O(NVA(NVADRUG)) Q:NVADRUG="" D
. . S NVACNT=NVACNT+1
. . I $Y>(PGLENGTH-NVACNT) W !,DRUGSEP,@IOF D HD3
. . W !,"|",NVADRUG_$E(BLNKLN,$L(NVADRUG),PGWIDTH-3)_"|"
K NVACNT,NVADRUG
W !,INSTSEP1
D
. Q:'$G(PSOQPEND)
. W !!,"Any medication items listed as ""pending"" are those that have just been" D PGE Q:$D(GMTSQIT)
. W !,"written by your provider(s). These medication orders will be reviewed" D PGE Q:$D(GMTSQIT)
. W !,"by your pharmacist, prior to the prescription(s) being dispensed. When" D PGE Q:$D(GMTSQIT)
. W !,"you receive your new prescription(s), by mail or from the pharmacy window," D PGE Q:$D(GMTSQIT)
. W !,"be sure to follow the instructions on the prescription label. If you" D PGE Q:$D(GMTSQIT)
. W !,"have any question about your medication, please call your provider or " D PGE Q:$D(GMTSQIT)
. W !,"your pharmacist." D PGE Q:$D(GMTSQIT)
Q
PGE D:$G(PSOQHS) CKP^GMTSUP
Q
GETOPORD(ORDLIST) ;
N LISTIEN,KILLORD
S LISTIEN=0
F S LISTIEN=$O(ORDLIST(LISTIEN)) Q:LISTIEN<1 D
. S KILLORD=$$IPORD(ORDLIST(LISTIEN))
. I 'KILLORD S KILLORD=$$CKSTATUS(ORDLIST(LISTIEN)) D
. K:KILLORD ORDLIST(LISTIEN)
Q
IPORD(LISTNODE) ;
N RETURN,PKG
S RETURN=0
S PKG=$P($P(LISTNODE,"^",1),";",2)
I "UI"[PKG S RETURN=1
I $P(LISTNODE,"^",1)["N;" D
. S:$P(LISTNODE,"^",4)="ACTIVE" NVA($P(LISTNODE,"^",2),+LISTNODE)=LISTNODE
. S RETURN=1
Q RETURN
CKSTATUS(LISTNODE) ;
N RETURN,RXIEN
S RETURN=0 ; ASSUME ACTIVE AND NOT PASS MED
S:$P(LISTNODE,"^",4)["DISCONTINUED" RETURN=1
S:$P(LISTNODE,"^",4)["EXPIRED" RETURN=1
Q RETURN
GETRXDAT(RXS) ;
N RXSIEN,DRUGNAME,FSIG,RXTYPE
S RXSIEN=0
F S RXSIEN=$O(RXS(RXSIEN)) Q:RXSIEN<1 D
. I $P(RXS(RXSIEN),";")["P" D GETPEND(RXSIEN) S PSOQPEND=1 Q ;->
. S RXIEN=+RXS(RXSIEN)
. S DRUGNAME=$$ZZ^PSOSUTL(RXIEN)
. D FSIG^PSOUTLA("R",RXIEN,PGWIDTH-8)
. S RXTYPE=$$GETTYPE(RXIEN)
. M RXS(RXTYPE,DRUGNAME)=FSIG
. N PSOQSUB
. S PSOQSUB=$O(RXS(RXTYPE,DRUGNAME,":"),-1)+1
. S RXS(RXTYPE,DRUGNAME,PSOQSUB)=$$REFILLS^PSOQ0076(RXIEN)_" refill(s) remaining prior to "_$$FMTE^XLFDT($$EXPDATE^PSOQ0076(RXIEN))
Q
GETPEND(RXSIEN) ;RMS/HINES 8-16-07 ADD PENDING RX'S
N PSOQPDN,PSOQDIND,PSOQOIND,PSOQ100,PSOQSIND,PSOQSCT,PSOQRAW,SUB
S PSOQ100=$P(RXS(RXSIEN),U,3) Q:'+PSOQ100
S PSOQOIND=$O(^OR(100,PSOQ100,4.5,"ID","ORDERABLE",0)) Q:'+PSOQOIND
S PSOQPDN=$P($G(^ORD(101.43,+$G(^OR(100,PSOQ100,4.5,PSOQOIND,1)),0)),U)
S PSOQDIND=$O(^OR(100,PSOQ100,4.5,"ID","DRUG",0)) D
. Q:'+PSOQDIND
. S PSOQPDN=$P($G(^PSDRUG(+$G(^OR(100,PSOQ100,4.5,PSOQDIND,1)),0)),U)
S PSOQSIND=$O(^OR(100,PSOQ100,8,":"),-1) Q:'+PSOQSIND
F PSOQSCT=2:1:$O(^OR(100,PSOQ100,8,PSOQSIND,.1,":"),-1) D
. S PSOQRAW=$G(^OR(100,PSOQ100,8,PSOQSIND,.1,PSOQSCT,0))
. N WORDS,COUNT,LINE,NEXTWORD
. S WORDS=$L(PSOQRAW," "),SUB=$G(SUB,0)+1
. F COUNT=1:1:WORDS D
.. S NEXTWORD=$P(PSOQRAW," ",COUNT)
.. Q:NEXTWORD=""
.. S LINE=$G(LINE)_NEXTWORD_" "
.. I $L($G(LINE))>65&(COUNT'=WORDS) K LINE S SUB=SUB+1
.. S RXS("D","**PENDING**"_PSOQPDN,SUB)=$G(RXS("D","**PENDING**"_PSOQPDN,SUB))_NEXTWORD_" "
Q
GETTYPE(IEN52) ;
N RETURN,CLASS
S RETURN="D"
S CLASS=$$GETCLASS(IEN52)
S:$E(CLASS,1,1)="X" RETURN="S"
S:$E(CLASS,1,2)="DX" RETURN="S"
Q RETURN
GETCLASS(IENRX) ;
N RETURN,NODE0RX,IENDRUG,NODE0DRG,NODEND50,IENCLASS,NODE0CLS,VACLASS
S RETURN=""
S NODE0RX=$G(^PSRX(IENRX,0))
S IENDRUG=$P(NODE0RX,"^",6)
Q:+IENDRUG=0 RETURN
S NODE0DRG=$G(^PSDRUG(IENDRUG,0))
S NODEND50=$G(^PSDRUG(IENDRUG,"ND"))
S IENCLASS=$P(NODEND50,"^",6)
Q:+IENCLASS=0 RETURN
S NODE0CLS=$G(^PS(50.605,IENCLASS,0))
S VACLASS=$P(NODE0CLS,"^",1)
S RETURN=VACLASS
Q RETURN
HD ;
S FN=ARLDFN
S ARLNAME=$E($P(^DPT(ARLDFN,0),"^",1),1,28)
S ARLSN=$P(^(0),"^",9),ARLDOB=$P(^(0),"^",3)
S PHONE=$S($D(^DPT(ARLDFN,.13)):^(.13),1:"")
S HP=$P(PHONE,"^",1),WP=$P(PHONE,"^",2)
S ADDR=$S($D(^DPT(ARLDFN,.11)):^(.11),1:"")
I $D(^DPT(ARLDFN,.121)),$P(^(.121),"^",9)="Y" D
. S X=$S($P(^(.121),"^",8):$P(^(.121),"^",8),1:9999999)
. I DT'<$P(^(.121),"^",7),DT'>X D
. . S ADDR=^(.121)
. . S ADDRFL="(temporary)"
. . S HP=$P(ADDR,"^",10)
S ST=$S($D(^DIC(5,+$P(ADDR,"^",5),0)):$P(^(0),"^",2),1:"UNKNOWN")
S ADDR(4)=$P(ADDR,"^",4)_", "_ST_" "_$P(ADDR,"^",6)
S ADDR(3)=$P(ADDR,"^",3),ADDR(2)=$P(ADDR,"^",2),ADDR(1)=$P(ADDR,"^",1)
I ADDR(2)']"" D
. S ADDR(2)=ADDR(3)
. S ADDR(3)=""
HD1 ; Header for 1st page
S ARLSITE=^PS(59,PSOSITE,0)
D PGE Q:$D(GMTSQIT)
W !,"Date: ",RPTDATE,?XPOS1,"PATIENT MEDICATION INFORMATION"
I $D(PAGE) D
. W ?XPOS2,"Page: ",PAGE
. S PAGE=PAGE+1
W !,?XPOS4,"PRINTED BY THE VA MEDICAL CENTER AT: "_$P($G(^DIC(4,+$G(^PS(59,PSOSITE,"INI")),0)),U,1)
W !,?XPOS4,"FOR PRESCRIPTION REFILLS CALL ("_$P(ARLSITE,U,3)_") "_$P(ARLSITE,U,4)
HD2 W !!,"Name: ",$E(ARLNAME,1,40)," - ",$E(ARLSN,6,9)
W ?30," PHARMACY - ",$P(ARLSITE,"^",7)," DIVISION (",$P(ARLSITE,"^",3),"-",$P(ARLSITE,"^",4),")",!
W !,INSTSEP1,!,DRUGHDR1 ;!,DRUGHDR2
Q
HD3 ;Header for subsequent pages
W !,"Date: ",RPTDATE,?XPOS1,"PATIENT MEDICATION INFORMATION"
I $D(PAGE) W ?XPOS2,"Page: ",PAGE S PAGE=PAGE+1
W !,?XPOS4,"PRINTED BY THE VA MEDICAL CENTER AT: "_$P($G(^DIC(4,+$G(^PS(59,PSOSITE,"INI")),0)),U,1)
W !,?XPOS4,"FOR PRESCRIPTION REFILLS CALL ("_$P(ARLSITE,U,3)_") "_$P(ARLSITE,U,4),!
W !?1,"Name: ",$E(ARLNAME,1,40)," - ",$E(ARLSN,6,9)
W ?30," PHARMACY - ",$P(ARLSITE,"^",7)," DIVISION (",$P(ARLSITE,"^",3),"-",$P(ARLSITE,"^",4),")",!
W !,INSTSEP1
W:$G(SUPCNT)&'$G(NVACNT) !,"|","SUPPLY ITEMS:"_$E(BLNKLN,14,PGWIDTH-2)_"|",@EMPTYLN
W:$G(NVACNT) @EMPTYLN,!,"|","NON-VA Medications:"_$E(BLNKLN,20,PGWIDTH-2)_"|",@EMPTYLN
W:'$G(NVACNT)&'$G(SUPCNT) !,DRUGHDR1
Q
RE ;Allergies
S ARLDASH="",$P(ARLDASH,"=",$E(BLNKLN,1,PGWIDTH-10))=ARLDASH W !,ARLDASH,!!
S NONE="NO INFORMATION (COMPLETE SECTION BELOW)",ALFLAG=0 D ALL
W "REACTIONS/ALLERGIES currently on file : ",$S($D(GMRAL):"",1:NONE) Q:'$D(GMRAL)
S X=DRUG1_FOOD,DIWL=5,DIWR=PGWIDTH-5,DIWF="W" D ^DIWP,^DIWW
Q
ALL ;Gets allergy info
K GMRA,GMRAL
N IFN,DATA,VER,ARLEND
S ARLEND=0,DFN=ARLDFN,GMRA="0^0^011" D ^GMRADPT S (DRUG1,FOOD)=""
I $D(GMRAL),GMRAL=0 S DRUG1="NO KNOWN ALLERGIES"
I $D(GMRAL),GMRAL=1 S IFN="" F S IFN=$O(GMRAL(IFN)) Q:IFN=""!(ARLEND) S DATA=GMRAL(IFN),AL=$P(DATA,U,2),TYPE=$P(DATA,U,3),VER=$S($P(DATA,U,4)=1:"V",1:"NV") D
.I $L(DRUG1)>300 S DRUG1="TOO MANY TO LIST",ARLEND=1
.S:TYPE="D" DRUG1=AL_" ("_VER_"),"_DRUG1
.S:TYPE="F" FOOD="Food Allergies on File"
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOQMCAL 9801 printed Dec 13, 2024@02:33:21 Page 2
PSOQMCAL ; SEA/HAM3 PMI - PHARMACY MEDICATION INSTRUCTION ; 30 Nov 2007 7:55 AM
+1 ;;7.0;OUTPATIENT PHARMACY;**294**;DEC 1997;Build 13
+2 ;
+3 ;Reference to CKP^GMTSUP supported by DBIA 4231
+4 ;Reference to COVER^ORWPS supported by DBIA 4954
+5 ;Credit to Herb Morriss and Al Hernandez for the original design
+6 ;Puget Sound Health Care System, Seattle WA
EN NEW PSOQPEND,DAYSEP,DRUGHDR1,DRUGHDR2,DRUGSEP,INSTSEP1,INSTSEP2,INSTSEP3
+1 NEW EMPTYLN,PRETYPE,SUPTYPE,ADDR,AL,ALFLAG,ARLDASH
+2 NEW ARLDATE,ARLDFN,ARLDOB,ARLNAME,ARLSITE,ARLSN
+3 NEW BLANKLN,BLNKLN,DRUG1,FOOD,GMRAL,IDRUG,ISIG,ITYPE
+4 NEW NVA,NONE,PAGE,PGWIDTH,PGLENGTH,PHONE
+5 NEW RXIEN,SIGCNT,SIGPOS,XPOS1,XPOS2,XPOS3,XPOS4
+6 NEW FN,HP,IA,RPTDATE,TYPE,WP,ST,SUPCNT,SUPDRUG,X,X1,X2,ADDRFL
+7 NEW DIWF,DIWL,DIWR,INSTSEP1,INSTSEP2,INSTSEP3,DRUGHDR1,DRUGHDR2,DRUGSEP
+8 SET PGWIDTH=IOM-5
SET PGLENGTH=IOSL-9
+9 ;ensure that the IOM variable is wide enough
if PGWIDTH<48
QUIT
+10 SET RPTDATE=$$FMTE^XLFDT($$NOW^XLFDT,"1D")
+11 ;title
SET XPOS1=(PGWIDTH-26)\2
+12 ;page number
SET XPOS2=PGWIDTH-6
+13 ;site
SET XPOS3=(PGWIDTH-29)\2
+14 ;refill info
SET XPOS4=(PGWIDTH-53)\2
+15 SET BLANKLN=""
SET $PIECE(BLNKLN," ",PGWIDTH)=" "
+16 SET EMPTYLN="!,""|"_$EXTRACT(BLNKLN,1,PGWIDTH-2)_"|"""
+17 SET DAYSEP="| | | | |"
+18 SET DRUGHDR1="| |MORNING| NOON |EVENING|BEDTIME| COMMENTS"
+19 SET DRUGHDR1=DRUGHDR1_$EXTRACT(BLNKLN,$LENGTH(DRUGHDR1),PGWIDTH-2)_"|"
+20 SET DRUGHDR2="| "_DAYSEP
+21 SET DRUGHDR2=DRUGHDR2_$EXTRACT(BLNKLN,$LENGTH(DRUGHDR2),PGWIDTH-2)_"|"
+22 SET $PIECE(DRUGSEP,"~",PGWIDTH-2)="~"
+23 SET DRUGSEP="|"_DRUGSEP_"|"
+24 SET $PIECE(INSTSEP1,"-",PGWIDTH-2)="-"
+25 SET INSTSEP1="|"_INSTSEP1_"|"
+26 SET INSTSEP2="| UNITS PER DOSE: "_DAYSEP
+27 SET INSTSEP2=INSTSEP2_$EXTRACT(BLNKLN,$LENGTH(INSTSEP2),PGWIDTH-2)_"|"
+28 SET INSTSEP3="| "_DAYSEP
+29 SET INSTSEP3=INSTSEP3_$EXTRACT(BLNKLN,$LENGTH(INSTSEP3),PGWIDTH-2)_"|"
+30 SET X1=DT
SET X2=-45
DO C^%DTC
SET ARLDATE=X
1 ;Patient
+1 SET ARLDFN=""
+2 FOR IA=1:1
SET ARLDFN=$PIECE(ARLPAT,";",IA)
if ARLDFN=""
QUIT
Begin DoDot:1
+3 SET PAGE=1
+4 DO HD
DO SHOW(ARLDFN)
End DoDot:1
+5 QUIT
SHOW(PTIEN) ;
+1 NEW LIST,NVA
+2 DO COVER^ORWPS(.LIST,PTIEN)
+3 DO GETOPORD(.LIST)
+4 DO GETRXDAT(.LIST)
+5 SET SUPTYPE=0
SET PRETYPE="D"
+6 SET ITYPE="@"
+7 FOR
SET ITYPE=$ORDER(LIST(ITYPE))
if ITYPE]"ZZZ"
QUIT
if ITYPE=""
QUIT
Begin DoDot:1
+8 IF PRETYPE'=ITYPE
Begin DoDot:2
+9 WRITE !,DRUGSEP
+10 WRITE @EMPTYLN
+11 WRITE !,"|","SUPPLY ITEMS:"_$EXTRACT(BLNKLN,14,PGWIDTH-2)_"|"
+12 SET PRETYPE=ITYPE
+13 IF (ITYPE="S")&(SUPTYPE=0)
Begin DoDot:3
+14 SET SUPTYPE=1
SET SUPCNT=0
SET SUPDRUG=""
+15 FOR
SET SUPDRUG=$ORDER(LIST(ITYPE,SUPDRUG))
if SUPDRUG=""
QUIT
Begin DoDot:4
+16 SET SUPCNT=SUPCNT+1
End DoDot:4
+17 IF $Y>(PGLENGTH-SUPCNT)
WRITE !,DRUGSEP,@IOF
DO HD3
End DoDot:3
End DoDot:2
+18 SET IDRUG=""
+19 FOR
SET IDRUG=$ORDER(LIST(ITYPE,IDRUG))
if IDRUG=""
QUIT
Begin DoDot:2
+20 IF 'SUPTYPE
Begin DoDot:3
End DoDot:3
+21 SET SIGCNT=0
SET SIGPOS=""
+22 FOR
SET SIGPOS=$ORDER(LIST(ITYPE,IDRUG,SIGPOS))
if SIGPOS=""
QUIT
Begin DoDot:3
+23 SET SIGCNT=SIGCNT+1
End DoDot:3
+24 IF $Y>(PGLENGTH-SIGCNT)
WRITE !,DRUGSEP,@IOF
DO HD3
+25 if 'SUPTYPE
WRITE !,DRUGSEP,@EMPTYLN
+26 WRITE !,"|",IDRUG_$EXTRACT(BLNKLN,$LENGTH(IDRUG),PGWIDTH-3)_"|"
+27 if SUPTYPE
QUIT
+28 SET ISIG=0
+29 FOR
SET ISIG=$ORDER(LIST(ITYPE,IDRUG,ISIG))
if ISIG<1
QUIT
Begin DoDot:3
+30 WRITE !,"| ",LIST(ITYPE,IDRUG,ISIG),$EXTRACT(BLNKLN,$LENGTH(LIST(ITYPE,IDRUG,ISIG)),PGWIDTH-8),"|"
End DoDot:3
+31 WRITE !,INSTSEP1,!,INSTSEP2
if '$GET(PSOQHS)
WRITE !,INSTSEP3
End DoDot:2
End DoDot:1
NVA ;NVA MEDS ADDED 5/6/05
+1 IF $DATA(NVA)
Begin DoDot:1
+2 NEW NVACNT,NVADRUG
+3 WRITE !,DRUGSEP
+4 WRITE @EMPTYLN
+5 WRITE !,"|","NON-VA Medications:"_$EXTRACT(BLNKLN,20,PGWIDTH-2)_"|"
+6 WRITE @EMPTYLN
+7 SET NVACNT=0
+8 SET NVADRUG=""
+9 FOR
SET NVADRUG=$ORDER(NVA(NVADRUG))
if NVADRUG=""
QUIT
Begin DoDot:2
+10 SET NVACNT=NVACNT+1
+11 IF $Y>(PGLENGTH-NVACNT)
WRITE !,DRUGSEP,@IOF
DO HD3
+12 WRITE !,"|",NVADRUG_$EXTRACT(BLNKLN,$LENGTH(NVADRUG),PGWIDTH-3)_"|"
End DoDot:2
End DoDot:1
+13 KILL NVACNT,NVADRUG
+14 WRITE !,INSTSEP1
+15 Begin DoDot:1
+16 if '$GET(PSOQPEND)
QUIT
+17 WRITE !!,"Any medication items listed as ""pending"" are those that have just been"
DO PGE
if $DATA(GMTSQIT)
QUIT
+18 WRITE !,"written by your provider(s). These medication orders will be reviewed"
DO PGE
if $DATA(GMTSQIT)
QUIT
+19 WRITE !,"by your pharmacist, prior to the prescription(s) being dispensed. When"
DO PGE
if $DATA(GMTSQIT)
QUIT
+20 WRITE !,"you receive your new prescription(s), by mail or from the pharmacy window,"
DO PGE
if $DATA(GMTSQIT)
QUIT
+21 WRITE !,"be sure to follow the instructions on the prescription label. If you"
DO PGE
if $DATA(GMTSQIT)
QUIT
+22 WRITE !,"have any question about your medication, please call your provider or "
DO PGE
if $DATA(GMTSQIT)
QUIT
+23 WRITE !,"your pharmacist."
DO PGE
if $DATA(GMTSQIT)
QUIT
End DoDot:1
+24 QUIT
PGE if $GET(PSOQHS)
DO CKP^GMTSUP
+1 QUIT
GETOPORD(ORDLIST) ;
+1 NEW LISTIEN,KILLORD
+2 SET LISTIEN=0
+3 FOR
SET LISTIEN=$ORDER(ORDLIST(LISTIEN))
if LISTIEN<1
QUIT
Begin DoDot:1
+4 SET KILLORD=$$IPORD(ORDLIST(LISTIEN))
+5 IF 'KILLORD
SET KILLORD=$$CKSTATUS(ORDLIST(LISTIEN))
Begin DoDot:2
End DoDot:2
+6 if KILLORD
KILL ORDLIST(LISTIEN)
End DoDot:1
+7 QUIT
IPORD(LISTNODE) ;
+1 NEW RETURN,PKG
+2 SET RETURN=0
+3 SET PKG=$PIECE($PIECE(LISTNODE,"^",1),";",2)
+4 IF "UI"[PKG
SET RETURN=1
+5 IF $PIECE(LISTNODE,"^",1)["N;"
Begin DoDot:1
+6 if $PIECE(LISTNODE,"^",4)="ACTIVE"
SET NVA($PIECE(LISTNODE,"^",2),+LISTNODE)=LISTNODE
+7 SET RETURN=1
End DoDot:1
+8 QUIT RETURN
CKSTATUS(LISTNODE) ;
+1 NEW RETURN,RXIEN
+2 ; ASSUME ACTIVE AND NOT PASS MED
SET RETURN=0
+3 if $PIECE(LISTNODE,"^",4)["DISCONTINUED"
SET RETURN=1
+4 if $PIECE(LISTNODE,"^",4)["EXPIRED"
SET RETURN=1
+5 QUIT RETURN
GETRXDAT(RXS) ;
+1 NEW RXSIEN,DRUGNAME,FSIG,RXTYPE
+2 SET RXSIEN=0
+3 FOR
SET RXSIEN=$ORDER(RXS(RXSIEN))
if RXSIEN<1
QUIT
Begin DoDot:1
+4 ;->
IF $PIECE(RXS(RXSIEN),";")["P"
DO GETPEND(RXSIEN)
SET PSOQPEND=1
QUIT
+5 SET RXIEN=+RXS(RXSIEN)
+6 SET DRUGNAME=$$ZZ^PSOSUTL(RXIEN)
+7 DO FSIG^PSOUTLA("R",RXIEN,PGWIDTH-8)
+8 SET RXTYPE=$$GETTYPE(RXIEN)
+9 MERGE RXS(RXTYPE,DRUGNAME)=FSIG
+10 NEW PSOQSUB
+11 SET PSOQSUB=$ORDER(RXS(RXTYPE,DRUGNAME,":"),-1)+1
+12 SET RXS(RXTYPE,DRUGNAME,PSOQSUB)=$$REFILLS^PSOQ0076(RXIEN)_" refill(s) remaining prior to "_$$FMTE^XLFDT($$EXPDATE^PSOQ0076(RXIEN))
End DoDot:1
+13 QUIT
GETPEND(RXSIEN) ;RMS/HINES 8-16-07 ADD PENDING RX'S
+1 NEW PSOQPDN,PSOQDIND,PSOQOIND,PSOQ100,PSOQSIND,PSOQSCT,PSOQRAW,SUB
+2 SET PSOQ100=$PIECE(RXS(RXSIEN),U,3)
if '+PSOQ100
QUIT
+3 SET PSOQOIND=$ORDER(^OR(100,PSOQ100,4.5,"ID","ORDERABLE",0))
if '+PSOQOIND
QUIT
+4 SET PSOQPDN=$PIECE($GET(^ORD(101.43,+$GET(^OR(100,PSOQ100,4.5,PSOQOIND,1)),0)),U)
+5 SET PSOQDIND=$ORDER(^OR(100,PSOQ100,4.5,"ID","DRUG",0))
Begin DoDot:1
+6 if '+PSOQDIND
QUIT
+7 SET PSOQPDN=$PIECE($GET(^PSDRUG(+$GET(^OR(100,PSOQ100,4.5,PSOQDIND,1)),0)),U)
End DoDot:1
+8 SET PSOQSIND=$ORDER(^OR(100,PSOQ100,8,":"),-1)
if '+PSOQSIND
QUIT
+9 FOR PSOQSCT=2:1:$ORDER(^OR(100,PSOQ100,8,PSOQSIND,.1,":"),-1)
Begin DoDot:1
+10 SET PSOQRAW=$GET(^OR(100,PSOQ100,8,PSOQSIND,.1,PSOQSCT,0))
+11 NEW WORDS,COUNT,LINE,NEXTWORD
+12 SET WORDS=$LENGTH(PSOQRAW," ")
SET SUB=$GET(SUB,0)+1
+13 FOR COUNT=1:1:WORDS
Begin DoDot:2
+14 SET NEXTWORD=$PIECE(PSOQRAW," ",COUNT)
+15 if NEXTWORD=""
QUIT
+16 SET LINE=$GET(LINE)_NEXTWORD_" "
+17 IF $LENGTH($GET(LINE))>65&(COUNT'=WORDS)
KILL LINE
SET SUB=SUB+1
+18 SET RXS("D","**PENDING**"_PSOQPDN,SUB)=$GET(RXS("D","**PENDING**"_PSOQPDN,SUB))_NEXTWORD_" "
End DoDot:2
End DoDot:1
+19 QUIT
GETTYPE(IEN52) ;
+1 NEW RETURN,CLASS
+2 SET RETURN="D"
+3 SET CLASS=$$GETCLASS(IEN52)
+4 if $EXTRACT(CLASS,1,1)="X"
SET RETURN="S"
+5 if $EXTRACT(CLASS,1,2)="DX"
SET RETURN="S"
+6 QUIT RETURN
GETCLASS(IENRX) ;
+1 NEW RETURN,NODE0RX,IENDRUG,NODE0DRG,NODEND50,IENCLASS,NODE0CLS,VACLASS
+2 SET RETURN=""
+3 SET NODE0RX=$GET(^PSRX(IENRX,0))
+4 SET IENDRUG=$PIECE(NODE0RX,"^",6)
+5 if +IENDRUG=0
QUIT RETURN
+6 SET NODE0DRG=$GET(^PSDRUG(IENDRUG,0))
+7 SET NODEND50=$GET(^PSDRUG(IENDRUG,"ND"))
+8 SET IENCLASS=$PIECE(NODEND50,"^",6)
+9 if +IENCLASS=0
QUIT RETURN
+10 SET NODE0CLS=$GET(^PS(50.605,IENCLASS,0))
+11 SET VACLASS=$PIECE(NODE0CLS,"^",1)
+12 SET RETURN=VACLASS
+13 QUIT RETURN
HD ;
+1 SET FN=ARLDFN
+2 SET ARLNAME=$EXTRACT($PIECE(^DPT(ARLDFN,0),"^",1),1,28)
+3 SET ARLSN=$PIECE(^(0),"^",9)
SET ARLDOB=$PIECE(^(0),"^",3)
+4 SET PHONE=$SELECT($DATA(^DPT(ARLDFN,.13)):^(.13),1:"")
+5 SET HP=$PIECE(PHONE,"^",1)
SET WP=$PIECE(PHONE,"^",2)
+6 SET ADDR=$SELECT($DATA(^DPT(ARLDFN,.11)):^(.11),1:"")
+7 IF $DATA(^DPT(ARLDFN,.121))
IF $PIECE(^(.121),"^",9)="Y"
Begin DoDot:1
+8 SET X=$SELECT($PIECE(^(.121),"^",8):$PIECE(^(.121),"^",8),1:9999999)
+9 IF DT'<$PIECE(^(.121),"^",7)
IF DT'>X
Begin DoDot:2
+10 SET ADDR=^(.121)
+11 SET ADDRFL="(temporary)"
+12 SET HP=$PIECE(ADDR,"^",10)
End DoDot:2
End DoDot:1
+13 SET ST=$SELECT($DATA(^DIC(5,+$PIECE(ADDR,"^",5),0)):$PIECE(^(0),"^",2),1:"UNKNOWN")
+14 SET ADDR(4)=$PIECE(ADDR,"^",4)_", "_ST_" "_$PIECE(ADDR,"^",6)
+15 SET ADDR(3)=$PIECE(ADDR,"^",3)
SET ADDR(2)=$PIECE(ADDR,"^",2)
SET ADDR(1)=$PIECE(ADDR,"^",1)
+16 IF ADDR(2)']""
Begin DoDot:1
+17 SET ADDR(2)=ADDR(3)
+18 SET ADDR(3)=""
End DoDot:1
HD1 ; Header for 1st page
+1 SET ARLSITE=^PS(59,PSOSITE,0)
+2 DO PGE
if $DATA(GMTSQIT)
QUIT
+3 WRITE !,"Date: ",RPTDATE,?XPOS1,"PATIENT MEDICATION INFORMATION"
+4 IF $DATA(PAGE)
Begin DoDot:1
+5 WRITE ?XPOS2,"Page: ",PAGE
+6 SET PAGE=PAGE+1
End DoDot:1
+7 WRITE !,?XPOS4,"PRINTED BY THE VA MEDICAL CENTER AT: "_$PIECE($GET(^DIC(4,+$GET(^PS(59,PSOSITE,"INI")),0)),U,1)
+8 WRITE !,?XPOS4,"FOR PRESCRIPTION REFILLS CALL ("_$PIECE(ARLSITE,U,3)_") "_$PIECE(ARLSITE,U,4)
HD2 WRITE !!,"Name: ",$EXTRACT(ARLNAME,1,40)," - ",$EXTRACT(ARLSN,6,9)
+1 WRITE ?30," PHARMACY - ",$PIECE(ARLSITE,"^",7)," DIVISION (",$PIECE(ARLSITE,"^",3),"-",$PIECE(ARLSITE,"^",4),")",!
+2 ;!,DRUGHDR2
WRITE !,INSTSEP1,!,DRUGHDR1
+3 QUIT
HD3 ;Header for subsequent pages
+1 WRITE !,"Date: ",RPTDATE,?XPOS1,"PATIENT MEDICATION INFORMATION"
+2 IF $DATA(PAGE)
WRITE ?XPOS2,"Page: ",PAGE
SET PAGE=PAGE+1
+3 WRITE !,?XPOS4,"PRINTED BY THE VA MEDICAL CENTER AT: "_$PIECE($GET(^DIC(4,+$GET(^PS(59,PSOSITE,"INI")),0)),U,1)
+4 WRITE !,?XPOS4,"FOR PRESCRIPTION REFILLS CALL ("_$PIECE(ARLSITE,U,3)_") "_$PIECE(ARLSITE,U,4),!
+5 WRITE !?1,"Name: ",$EXTRACT(ARLNAME,1,40)," - ",$EXTRACT(ARLSN,6,9)
+6 WRITE ?30," PHARMACY - ",$PIECE(ARLSITE,"^",7)," DIVISION (",$PIECE(ARLSITE,"^",3),"-",$PIECE(ARLSITE,"^",4),")",!
+7 WRITE !,INSTSEP1
+8 if $GET(SUPCNT)&'$GET(NVACNT)
WRITE !,"|","SUPPLY ITEMS:"_$EXTRACT(BLNKLN,14,PGWIDTH-2)_"|",@EMPTYLN
+9 if $GET(NVACNT)
WRITE @EMPTYLN,!,"|","NON-VA Medications:"_$EXTRACT(BLNKLN,20,PGWIDTH-2)_"|",@EMPTYLN
+10 if '$GET(NVACNT)&'$GET(SUPCNT)
WRITE !,DRUGHDR1
+11 QUIT
RE ;Allergies
+1 SET ARLDASH=""
SET $PIECE(ARLDASH,"=",$EXTRACT(BLNKLN,1,PGWIDTH-10))=ARLDASH
WRITE !,ARLDASH,!!
+2 SET NONE="NO INFORMATION (COMPLETE SECTION BELOW)"
SET ALFLAG=0
DO ALL
+3 WRITE "REACTIONS/ALLERGIES currently on file : ",$SELECT($DATA(GMRAL):"",1:NONE)
if '$DATA(GMRAL)
QUIT
+4 SET X=DRUG1_FOOD
SET DIWL=5
SET DIWR=PGWIDTH-5
SET DIWF="W"
DO ^DIWP
DO ^DIWW
+5 QUIT
ALL ;Gets allergy info
+1 KILL GMRA,GMRAL
+2 NEW IFN,DATA,VER,ARLEND
+3 SET ARLEND=0
SET DFN=ARLDFN
SET GMRA="0^0^011"
DO ^GMRADPT
SET (DRUG1,FOOD)=""
+4 IF $DATA(GMRAL)
IF GMRAL=0
SET DRUG1="NO KNOWN ALLERGIES"
+5 IF $DATA(GMRAL)
IF GMRAL=1
SET IFN=""
FOR
SET IFN=$ORDER(GMRAL(IFN))
if IFN=""!(ARLEND)
QUIT
SET DATA=GMRAL(IFN)
SET AL=$PIECE(DATA,U,2)
SET TYPE=$PIECE(DATA,U,3)
SET VER=$SELECT($PIECE(DATA,U,4)=1:"V",1:"NV")
Begin DoDot:1
+6 IF $LENGTH(DRUG1)>300
SET DRUG1="TOO MANY TO LIST"
SET ARLEND=1
+7 if TYPE="D"
SET DRUG1=AL_" ("_VER_"),"_DRUG1
+8 if TYPE="F"
SET FOOD="Food Allergies on File"
End DoDot:1
+9 QUIT