APCHS9M3 ; IHS/CMI/LAB - MEDICATION TURN AROUND SUPPLEMENT ;
;;2.0;IHS PCC SUITE;**7**;MAY 14, 2009
;
;
EP ;EP - called from component
Q:'$G(APCHSPAT)
Q:'$D(^AUPNVMED("AC",APCHSPAT))
I $E(IOST)="C",IO=IO(0) W !! S DIR("A")="CHRONIC MEDICATION RE-ORDER DOCUMENT (^ TO EXIT, RETURN TO CONTINUE)",DIR(0)="E" D ^DIR K DIR I $D(DIRUT) S APCHSQIT=1 Q ;IHS/CMI/LAB fixed for slave printing
WR ;write out array
K APCHQUIT
S APCHPAGE=0,APCHQUIT=0
D EP2 ;write out document
I APCHQUIT S APCHSQIT=1
D EOJ
Q
;
EOJ ;
K APCHCLN,APCHDATM,APCHDIEN,APCHIPRV,APCHMIEN,APCHNARC,APCHPAGE,APCHPROV,APCHQUIT,APCHRTN,APCHTXRF,APCHSBEG,APCHSCRN,APCHSDC,APCHSDLM,APCHSDOO,APCHSDTM,APCHSDYS,APCHSED,APCHSEXP
K APCHSICL,APCHSIG,APCHSITE,APCHSIVD,APCHSM0,APCHSNAM,APCHSNRQ,APCHSP,APCHSQTY,APCHSREF,APCHSRFL,APCHSRX,APCHSSGY,APCHSTEX,APCHSTOB,APCHSTOP,APCHSTXT,APCHSUPI,APCHTC,APCHTILN,APCHTOB,APCHTOBN,APCHTQ,APCHTYPE,APCHVIEN,APCHX,APCHXRX,APCHY
K DIR,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,V,X,Y,Z,W,X1,X2
Q
G:APCHPAGE=0 HEAD1
K DIR I $E(IOST)="C",IO=IO(0) W ! S DIR(0)="EO" D ^DIR K DIR I Y=0!(Y="^")!($D(DTOUT)) S APCHQUIT=1 Q
HEAD1 ;
S APCHPAGE=APCHPAGE+1
W:$D(IOF) @IOF
W !,APCHSHDR,!
W !,"MEDICATION REORDER DOCUMENT Date: "_$$FMTE^XLFDT(DT)_" Page: "_APCHPAGE
W !,"Patient: ",$P(^DPT(APCHSPAT,0),U)," HRN: ",$$HRN^AUPNPAT(APCHSPAT,DUZ(2)),!
Q
EP2 ;PEP - PASS DFN get back array of patient care summary
;at this point you are stuck with ^TMP("APCHS",$J,"DCS"
K ^TMP($J,"APCHMEDS")
K ^TMP($J,"APCHCOUNT")
K ^TMP($J,"APCHMEDSA")
K ^TMP($J,"APCHMEDSG")
S APCHSDLM=""
I $G(APCHSTYP) S APCHSDLM=$P(^APCHSCTL(APCHSTYP,12,APCHSFOR,0),U,3)
I APCHSDLM="" S APCHSDLM="1Y"
I APCHSDLM?1N.N!(APCHSDLM?1N.N1"D") S APCHSDLS=+APCHSDLM_" day"
S:APCHSDLM?1N.N1"M" APCHSDLS=+APCHSDLM_" month",APCHSDLM=+APCHSDLM*30
S:APCHSDLM?1N.N1"Y" APCHSDLS=+APCHSDLM_" year",APCHSDLM=+APCHSDLM*365
S APCHSDLM=+APCHSDLM
S:+APCHSDLS>1 APCHSDLS=APCHSDLS_"s"
K APCHSDLS
I APCHSDLM'>0 S APCHSDLM=9999999
E S X1=DT,X2=-APCHSDLM D C^%DTC S APCHSDLM=9999999-X K X1,X2
S APCHSMSD=$$FMTE^XLFDT(X),APCHSMSI=X
D SETARRAY
Q
SETARRAY ;set up array containing dm care summary
D GETMEDS
Q
GETMEDS ;
;gather up in ^TMP all meds in past year that are current or Chronic
S APCHSTOP=$$FMADD^XLFDT(APCHSMSI,-1030)
S APCHSTOP=9999999-APCHSTOP
Q:'$D(^AUPNVMED("AC",APCHSPAT)) ;patient has no meds
S APCHSIVD=0 F S APCHSIVD=$O(^AUPNVMED("AA",APCHSPAT,APCHSIVD)) Q:APCHSIVD=""!(APCHSIVD>APCHSTOP) D
.S APCHMIEN=0 F S APCHMIEN=$O(^AUPNVMED("AA",APCHSPAT,APCHSIVD,APCHMIEN)) Q:APCHMIEN'=+APCHMIEN D
..S APCHSM0=^AUPNVMED(APCHMIEN,0)
..Q:$P(APCHSM0,U)=""
..Q:'$D(^PSDRUG($P(APCHSM0,U),0))
..S APCHDATM=9999999-$P(APCHSIVD,".")
..S APCHSDC=$P(APCHSM0,U,8)
..S APCHSDYS=$P(APCHSM0,U,7) S:APCHSDYS=0 APCHSDYS=30
..S APCHSNAM=$S($P(APCHSM0,U,4)]"":$P(APCHSM0,U,4),1:$P(^PSDRUG($P(APCHSM0,U),0),U))
..S APCHDIEN=$P(APCHSM0,U,1)
..S $P(^TMP($J,"APCHCOUNT",APCHSNAM,APCHDIEN),U)=$P($G(^TMP($J,"APCHCOUNT",APCHSNAM,APCHDIEN)),U)+1
..S X=$P(^TMP($J,"APCHCOUNT",APCHSNAM,APCHDIEN),U)
..I X<10 S $P(^TMP($J,"APCHCOUNT",APCHSNAM,APCHDIEN),U,(X+1))=$$DATE((9999999-APCHSIVD))
..I $$CHRONIC(APCHMIEN) D Q
...Q:$D(^TMP($J,"APCHMEDSG","CHRONIC",APCHSNAM,APCHDIEN)) ;already have this one
...S ^TMP($J,"APCHMEDS","CHRONIC",APCHSIVD,APCHSNAM,APCHDIEN,APCHMIEN)="",^TMP($J,"APCHMEDSG","CHRONIC",APCHSNAM,APCHDIEN)=""
..;S X=$$FMDIFF^XLFDT(DT,APCHDATM) Q:X>60&(X>(2*APCHSDYS))
..Q:$D(^TMP($J,"APCHMEDSG","CURRENT",APCHSNAM,APCHDIEN)) ;already have this one
..S ^TMP($J,"APCHMEDS","CURRENT",APCHSIVD,APCHSNAM,APCHDIEN,APCHMIEN)="",^TMP($J,"APCHMEDSG","CURRENT",APCHSNAM,APCHDIEN)=""
.Q
I '$D(^TMP($J,"APCHMEDS","CURRENT")),'$D(^TMP($J,"APCHMEDS","CHRONIC")) Q ;no meds to display
;NOW GET RID OF ALL DISCONTINUED MEDS BY .08 OF VMED OR BY STATUS IN FILE 52
S I=0 F S I=$O(^TMP($J,"APCHMEDS","CURRENT",I)) Q:I'=+I S N="" F S N=$O(^TMP($J,"APCHMEDS","CURRENT",I,N)) Q:N="" S D=0 F S D=$O(^TMP($J,"APCHMEDS","CURRENT",I,N,D)) Q:D'=+D D
.S M=0 F S M=$O(^TMP($J,"APCHMEDS","CURRENT",I,N,D,M)) Q:M'=+M I $$DC(M) K ^TMP($J,"APCHMEDS","CURRENT",I,N,D,M)
S I=0 F S I=$O(^TMP($J,"APCHMEDS","CHRONIC",I)) Q:I'=+I S N="" F S N=$O(^TMP($J,"APCHMEDS","CHRONIC",I,N)) Q:N="" S D=0 F S D=$O(^TMP($J,"APCHMEDS","CHRONIC",I,N,D)) Q:D'=+D D
.S M=0 F S M=$O(^TMP($J,"APCHMEDS","CHRONIC",I,N,D,M)) Q:M'=+M I $$DC(M) K ^TMP($J,"APCHMEDS","CHRONIC",I,N,D,M)
;S C=1,X=$O(^TMP($J,"APCHMEDS","CHRONIC",0)) D
;.I X="" S C=0 Q
;.S X=9999999-X I X<$$FMADD^XLFDT(DT,-366) S C=0
;S R=1,X=$O(^TMP($J,"APCHMEDS","CURRENT",0)) D
;.I X="" S R=0 Q
;.S X=9999999-X I X<$$FMADD^XLFDT(DT,-366) S R=0
;I 'C,'R Q ;no meds in past year
D HEADER
;K APCHSCRN S APCHTYPE="CURRENT" D MEDDSP ;IHS/CMI/GRL suppress non-chronic meds
S APCHSCRN=1 S APCHTYPE="CHRONIC" D MEDDSP
I 'APCHQUIT W !!!,"DISPENSE UNTIL NEXT SCHEDULED EVALUATION: ________",!!,"SIGNATURE: ________________________________ DATE: ________________",!
K ^TMP($J,"APCHMEDS")
K ^TMP($J,"APCHCOUNT")
K ^TMP($J,"APCHMEDSA")
K ^TMP($J,"APCHMEDSG")
Q
MEDDSP ;
S X=""
Q:'$D(^TMP($J,"APCHMEDS",APCHTYPE)) ;NO MEDS TO DISPLAY
I APCHTYPE="CURRENT" S X="CURRENT MEDICATIONS - (TWICE DURATION OF RX - MINIMUM 60 DAYS)" D W(X,1)
I APCHTYPE="CHRONIC" S X="LATEST OF EACH CHRONIC MEDICATION DISPENSED IN THE PAST YEAR" D W(X,1)
;S APCHSTOP=$$FMADD^XLFDT(DT,-366),APCHSTOP=9999999-APCHSTOP
S APCHSIVD=0 F S APCHSIVD=$O(^TMP($J,"APCHMEDS",APCHTYPE,APCHSIVD)) Q:APCHSIVD'=+APCHSIVD!(APCHSIVD>APCHSDLM)!(APCHQUIT) D
.S APCHSNAM="" F S APCHSNAM=$O(^TMP($J,"APCHMEDS",APCHTYPE,APCHSIVD,APCHSNAM)) Q:APCHSNAM=""!(APCHQUIT) D
..S APCHDIEN=0 F S APCHDIEN=$O(^TMP($J,"APCHMEDS",APCHTYPE,APCHSIVD,APCHSNAM,APCHDIEN)) Q:APCHDIEN'=+APCHDIEN!(APCHQUIT) D
...S APCHMIEN=0 S APCHMIEN=$O(^TMP($J,"APCHMEDS",APCHTYPE,APCHSIVD,APCHSNAM,APCHDIEN,APCHMIEN)) D MEDDSP1
...Q
..Q
.Q
Q
MEDDSP1 ;
S APCHSM0=^AUPNVMED(APCHMIEN,0)
S APCHSRX=$O(^PSRX("APCC",APCHMIEN,0)) I 'APCHSRX S APCHXRX=0
S APCHRXRF=""
I APCHSRX S APCHRXRF=$O(^PSRX("APCC",APCHMIEN,APCHSRX,"")) S:APCHRXRF="" APCHRXRF=0
S (Y,APCHSDTM)=9999999-$P(APCHSIVD,".")
;S APCHSDTM=$$DATE(APCHSDTM)
S APCHSDC=$P(APCHSM0,U,8)
S APCHSDYS=$P(APCHSM0,U,7) S:APCHSDYS=0 APCHSDYS=30
S APCHSNAM=$S($P(APCHSM0,U,4)]"":$P(APCHSM0,U,4),1:$P(^PSDRUG($P(APCHSM0,U),0),U))
S APCHSQTY=$P(APCHSM0,U,6)
S APCHSIG=$P(APCHSM0,U,5)
S APCHVIEN=$P(APCHSM0,U,3)
S APCHDIEN=+APCHSM0
S X1=DT,X2=APCHSDTM D ^%DTC
S APCHSEXP=""
I X>APCHSDYS S X1=APCHSDTM,X2=APCHSDYS D C^%DTC S APCHSEXP="-- Ran out "_$$DATE(X)
S APCHNARC=+$P(^PSDRUG(APCHDIEN,0),U,3)
;ADDED RETURNED TO STOCK FLAG FOR NEXT 4 LINES IHS/OKCAO/POC 12/19/97
IF $P($G(^AUPNVMED(APCHMIEN,11)),U)="RETURNED TO STOCK" S APCHRTN="R"
I APCHSDC,$G(APCHRTN)="R" S Y=APCHSDC X APCHSCVD S APCHSEXP="--Returned to Stock "_Y
I APCHSDC,$G(APCHRTN)="" S Y=APCHSDC X APCHSCVD S APCHSEXP="-- D/C "_Y
K APCHRTN
D SIG S APCHSIG=APCHSSGY
D REF
I APCHSREF S APCHSREF=APCHSREF_$S(APCHSREF=1:" refill",1:" refills")_" left."
S APCHSITE=$P(^AUPNVSIT(APCHVIEN,0),U,6)
D PROV
D CLN
D SITE
D WRITE
Q
DC(V) ;is this d/c'ed
I '$D(^AUPNVMED(V,0)) Q 0
I $P(^AUPNVMED(V,0),U,8)]"" Q 1
NEW P,S
S P=$S($D(^PSRX("APCC",N)):$O(^(N,0)),1:0)
I 'P Q 0
S X=$P($G(^PSRX(P,0)),U,15)
I X=12 Q 1
I X=13 Q 1
I X=14 Q 1
I X=15 Q 1
S X=$P($G(^PSRX(P,"STA")),U,1)
I X=12 Q 1
I X=13 Q 1
I X=14 Q 1
I X=15 Q 1
Q 0
WRITE ;
I $Y>(IOSL-10) D Q:APCHQUIT
.W !!!,"DISPENSE UNTIL NEXT SCHEDULED EVALUATION: ________"
.W !!!,"SIGNATURE: ________________________________ DATE: ________________",!
.D HEADER
Q:APCHQUIT
S X=$$DATE(APCHSDTM),$E(X,10)=APCHSNAM_" "_APCHSEXP D W(X,1)
S X="",$E(X,10)="QTY: "_APCHSQTY_" ("_APCHSDYS_" days) "_APCHPROV_$S(APCHCLN]"":" - "_APCHCLN,1:"") D W(X)
S APCHSICL=10,APCHSNRQ="",APCHSTXT=APCHSIG D PRTTXT K APCHSICL,APCHSNRQ,APCHSP
;ISSUE HISTORY
;I APCHSRX,$D(^PSRX(APCHSRX,0)) S X="",$E(X,10)="Most recent issue date: "_$$FMTE^XLFDT($P(^PSRX(APCHSRX,0),U,13),5) D W(X)
I APCHSITE]"" S X="",$E(X,10)="Dispensed at: "_APCHSITE D W(X)
S X=""
S Y=$P(^TMP($J,"APCHCOUNT",APCHSNAM,APCHDIEN),U)
I Y>1 S X="" D
.S X="",$E(X,10)="Previously filled: " F I=3:1:5 S X=X_" "_$P(^TMP($J,"APCHCOUNT",APCHSNAM,APCHDIEN),U,I)
I X]"" D W(X)
I APCHSREF S X="",$E(X,10)=APCHSREF D W(X)
S X=""
I $G(APCHNARC)=2 S $E(X,10)="------- MUST REWRITE SCHEDULE 2 DRUGS -------" D W(X,1) Q
I $G(APCHNARC)>2,$G(APCHNARC)<6 S $E(X,10)="RENEW __________ QTY __________ DC __________" D W(X,1) Q
S $E(X,10)="RENEW __________ DC __________ " D W(X,1)
Q
;
SITE ;DETERMINE IF OUTSIDE LOCATION INFO PRESENT
S APCHSITE=""
I $D(^AUPNVSIT(APCHVIEN,21))#2 S APCHSITE=$P(^(21),U) Q
Q:$P(^AUPNVSIT(APCHVIEN,0),U,6)=""
I $P(^AUPNVSIT(APCHVIEN,0),U,6)'=DUZ(2) S APCHSITE=$E($P(^DIC(4,$P(^AUPNVSIT(APCHVIEN,0),U,6),0),U),1,30)
Q
;
SIG ;
;CONSTRUCT THE FULL TEXT FROM THE ENCODED SIG
I $$VALI^XBDIQ1(9001015,APCHSTYP,3.5)="S" S APCHSSGY=APCHSIG Q
S APCHSSGY="" F APCHSP=1:1:$L(APCHSIG," ") S X=$P(APCHSIG," ",APCHSP) I X]"" D
. S Y=$O(^PS(51,"B",X,0)) I Y>0 S X=$P(^PS(51,Y,0),"^",2) I $D(^(9)) S Y=$P(APCHSIG," ",APCHSP-1),Y=$E(Y,$L(Y)) S:Y>1 X=$P(^(9),"^",1)
. S APCHSSGY=APCHSSGY_X_" "
Q
;
REF ;
;DETERMINE THE NUMBER OF REFILLS REMAINING
I 'APCHSRX S APCHSREF=0 Q
S APCHSRFL=$P(^PSRX(APCHSRX,0),U,9) S APCHSREF=0 F S APCHSREF=$O(^PSRX(APCHSRX,1,APCHSREF)) Q:'APCHSREF S APCHSRFL=APCHSRFL-1
S APCHSREF=APCHSRFL
Q
;
PROV ;GET THE PROVIDER FOR ORIGINAL RX OR REFILL
S APCHPROV=""
I 'APCHSRX S APCHPROV=$$VAL^XBDIQ1(9000010.14,1202,APCHMIEN) Q
S APCHIPRV=$S(APCHRXRF=0:$P($G(^PSRX(APCHSRX,0)),"^",4),1:$P($G(^PSRX(APCHSRX,1,APCHRXRF,0)),"^",17))
S APCHPROV=$S('APCHIPRV:"UNKNOWN PROVIDER",1:$P(^VA(200,APCHIPRV,0),"^"))
Q
;
CLN ;GET CLINIC FOR V MEDICATION
S APCHCLN=$E($$VAL^XBDIQ1(9000010,APCHVIEN,.08),1,10)
Q
DATE(D) ;EP
I D="" Q ""
Q $E(D,4,5)_"/"_$E(D,6,7)_"/"_$E(D,2,3)
;
CHRONIC(N) ;
I '$G(N) Q ""
I '$D(^AUPNVMED(N)) Q ""
NEW X,Y,P
S P=$P(^AUPNVMED(N,0),U,2)
S X=$S($D(^PSRX("APCC",N)):$O(^(N,0)),1:0)
S Y=$S(+X:$D(^PS(55,P,"P","CP",X)),1:0)
I 'Y Q ""
Q 1
W(Y,F,C,T) ;set up array
I '$G(F) S F=0
I '$G(T) S T=0
NEW %,X
;blank lines
F F=1:1:F S X="" W !,X
S X=Y
I $G(C) S L=$L(Y),T=(80-L)/2 D W !,X Q
.F %=1:1:(T-1) S X=" "_X
F %=1:1:T S X=" "_Y
W !,X
Q
PRTTXT ; GENERALIZED TEXT PRINTER
S APCHTDLT=1,APCHTILN=80-APCHSICL-1
F APCHTQ=0:0 S:APCHSNRQ]""&(($L(APCHSNRQ)+$L(APCHSTXT)+2)<255) APCHSTXT=$S(APCHSTXT]"":APCHSTXT_"; ",1:"")_APCHSNRQ,APCHSNRQ="" Q:APCHSTXT="" D PRTTXT2
K APCHTILN,APCHTDLT,APCHTF,APCHTC,APCHSTXT,APCHSDOO
Q
PRTTXT2 D GETFRAG S X="",$E(X,APCHSICL)=APCHTF D W(X) S APCHSICL=APCHSICL+APCHTDLT,APCHTILN=APCHTILN-APCHTDLT,APCHTDLT=0
Q
GETFRAG I $L(APCHSTXT)<APCHTILN S APCHTF=APCHSTXT,APCHSTXT="" Q
F APCHTC=APCHTILN:-1:1 Q:$E(APCHSTXT,APCHTC)=" "
S APCHTF=$E(APCHSTXT,1,APCHTC-1),APCHSTXT=$E(APCHSTXT,APCHTC+1,255)
Q
;
APCHS9M3 ; IHS/CMI/LAB - MEDICATION TURN AROUND SUPPLEMENT ;
+1 ;;2.0;IHS PCC SUITE;**7**;MAY 14, 2009
+2 ;
+3 ;
EP ;EP - called from component
+1 IF '$GET(APCHSPAT)
QUIT
+2 IF '$DATA(^AUPNVMED("AC",APCHSPAT))
QUIT
+3 ;IHS/CMI/LAB fixed for slave printing
IF $EXTRACT(IOST)="C"
IF IO=IO(0)
WRITE !!
SET DIR("A")="CHRONIC MEDICATION RE-ORDER DOCUMENT (^ TO EXIT, RETURN TO CONTINUE)"
SET DIR(0)="E"
DO ^DIR
KILL DIR
IF $DATA(DIRUT)
SET APCHSQIT=1
QUIT
WR ;write out array
+1 KILL APCHQUIT
+2 SET APCHPAGE=0
SET APCHQUIT=0
+3 ;write out document
DO EP2
+4 IF APCHQUIT
SET APCHSQIT=1
+5 DO EOJ
+6 QUIT
+7 ;
EOJ ;
+1 KILL APCHCLN,APCHDATM,APCHDIEN,APCHIPRV,APCHMIEN,APCHNARC,APCHPAGE,APCHPROV,APCHQUIT,APCHRTN,APCHTXRF,APCHSBEG,APCHSCRN,APCHSDC,APCHSDLM,APCHSDOO,APCHSDTM,APCHSDYS,APCHSED,APCHSEXP
+2 KILL APCHSICL,APCHSIG,APCHSITE,APCHSIVD,APCHSM0,APCHSNAM,APCHSNRQ,APCHSP,APCHSQTY,APCHSREF,APCHSRFL,APCHSRX,APCHSSGY,APCHSTEX,APCHSTOB,APCHSTOP,APCHSTXT,APCHSUPI,APCHTC,APCHTILN,APCHTOB,APCHTOBN,APCHTQ,APCHTYPE,APCHVIEN,APCHX,APCHXRX,APCHY
+3 KILL DIR,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,V,X,Y,Z,W,X1,X2
+4 QUIT
+1 IF APCHPAGE=0
GOTO HEAD1
+2 KILL DIR
IF $EXTRACT(IOST)="C"
IF IO=IO(0)
WRITE !
SET DIR(0)="EO"
DO ^DIR
KILL DIR
IF Y=0!(Y="^")!($DATA(DTOUT))
SET APCHQUIT=1
QUIT
HEAD1 ;
+1 SET APCHPAGE=APCHPAGE+1
+2 IF $DATA(IOF)
WRITE @IOF
+3 WRITE !,APCHSHDR,!
+4 WRITE !,"MEDICATION REORDER DOCUMENT Date: "_$$FMTE^XLFDT(DT)_" Page: "_APCHPAGE
+5 WRITE !,"Patient: ",$PIECE(^DPT(APCHSPAT,0),U)," HRN: ",$$HRN^AUPNPAT(APCHSPAT,DUZ(2)),!
+6 QUIT
EP2 ;PEP - PASS DFN get back array of patient care summary
+1 ;at this point you are stuck with ^TMP("APCHS",$J,"DCS"
+2 KILL ^TMP($JOB,"APCHMEDS")
+3 KILL ^TMP($JOB,"APCHCOUNT")
+4 KILL ^TMP($JOB,"APCHMEDSA")
+5 KILL ^TMP($JOB,"APCHMEDSG")
+6 SET APCHSDLM=""
+7 IF $GET(APCHSTYP)
SET APCHSDLM=$PIECE(^APCHSCTL(APCHSTYP,12,APCHSFOR,0),U,3)
+8 IF APCHSDLM=""
SET APCHSDLM="1Y"
+9 IF APCHSDLM?1N.N!(APCHSDLM?1N.N1"D")
SET APCHSDLS=+APCHSDLM_" day"
+10 IF APCHSDLM?1N.N1"M"
SET APCHSDLS=+APCHSDLM_" month"
SET APCHSDLM=+APCHSDLM*30
+11 IF APCHSDLM?1N.N1"Y"
SET APCHSDLS=+APCHSDLM_" year"
SET APCHSDLM=+APCHSDLM*365
+12 SET APCHSDLM=+APCHSDLM
+13 IF +APCHSDLS>1
SET APCHSDLS=APCHSDLS_"s"
+14 KILL APCHSDLS
+15 IF APCHSDLM'>0
SET APCHSDLM=9999999
+16 IF '$TEST
SET X1=DT
SET X2=-APCHSDLM
DO C^%DTC
SET APCHSDLM=9999999-X
KILL X1,X2
+17 SET APCHSMSD=$$FMTE^XLFDT(X)
SET APCHSMSI=X
+18 DO SETARRAY
+19 QUIT
SETARRAY ;set up array containing dm care summary
+1 DO GETMEDS
+2 QUIT
GETMEDS ;
+1 ;gather up in ^TMP all meds in past year that are current or Chronic
+2 SET APCHSTOP=$$FMADD^XLFDT(APCHSMSI,-1030)
+3 SET APCHSTOP=9999999-APCHSTOP
+4 ;patient has no meds
IF '$DATA(^AUPNVMED("AC",APCHSPAT))
QUIT
+5 SET APCHSIVD=0
FOR
SET APCHSIVD=$ORDER(^AUPNVMED("AA",APCHSPAT,APCHSIVD))
IF APCHSIVD=""!(APCHSIVD>APCHSTOP)
QUIT
Begin DoDot:1
+6 SET APCHMIEN=0
FOR
SET APCHMIEN=$ORDER(^AUPNVMED("AA",APCHSPAT,APCHSIVD,APCHMIEN))
IF APCHMIEN'=+APCHMIEN
QUIT
Begin DoDot:2
+7 SET APCHSM0=^AUPNVMED(APCHMIEN,0)
+8 IF $PIECE(APCHSM0,U)=""
QUIT
+9 IF '$DATA(^PSDRUG($PIECE(APCHSM0,U),0))
QUIT
+10 SET APCHDATM=9999999-$PIECE(APCHSIVD,".")
+11 SET APCHSDC=$PIECE(APCHSM0,U,8)
+12 SET APCHSDYS=$PIECE(APCHSM0,U,7)
IF APCHSDYS=0
SET APCHSDYS=30
+13 SET APCHSNAM=$SELECT($PIECE(APCHSM0,U,4)]"":$PIECE(APCHSM0,U,4),1:$PIECE(^PSDRUG($PIECE(APCHSM0,U),0),U))
+14 SET APCHDIEN=$PIECE(APCHSM0,U,1)
+15 SET $PIECE(^TMP($JOB,"APCHCOUNT",APCHSNAM,APCHDIEN),U)=$PIECE($GET(^TMP($JOB,"APCHCOUNT",APCHSNAM,APCHDIEN)),U)+1
+16 SET X=$PIECE(^TMP($JOB,"APCHCOUNT",APCHSNAM,APCHDIEN),U)
+17 IF X<10
SET $PIECE(^TMP($JOB,"APCHCOUNT",APCHSNAM,APCHDIEN),U,(X+1))=$$DATE((9999999-APCHSIVD))
+18 IF $$CHRONIC(APCHMIEN)
Begin DoDot:3
+19 ;already have this one
IF $DATA(^TMP($JOB,"APCHMEDSG","CHRONIC",APCHSNAM,APCHDIEN))
QUIT
+20 SET ^TMP($JOB,"APCHMEDS","CHRONIC",APCHSIVD,APCHSNAM,APCHDIEN,APCHMIEN)=""
SET ^TMP($JOB,"APCHMEDSG","CHRONIC",APCHSNAM,APCHDIEN)=""
End DoDot:3
QUIT
+21 ;S X=$$FMDIFF^XLFDT(DT,APCHDATM) Q:X>60&(X>(2*APCHSDYS))
+22 ;already have this one
IF $DATA(^TMP($JOB,"APCHMEDSG","CURRENT",APCHSNAM,APCHDIEN))
QUIT
+23 SET ^TMP($JOB,"APCHMEDS","CURRENT",APCHSIVD,APCHSNAM,APCHDIEN,APCHMIEN)=""
SET ^TMP($JOB,"APCHMEDSG","CURRENT",APCHSNAM,APCHDIEN)=""
End DoDot:2
+24 QUIT
End DoDot:1
+25 ;no meds to display
IF '$DATA(^TMP($JOB,"APCHMEDS","CURRENT"))
IF '$DATA(^TMP($JOB,"APCHMEDS","CHRONIC"))
QUIT
+26 ;NOW GET RID OF ALL DISCONTINUED MEDS BY .08 OF VMED OR BY STATUS IN FILE 52
+27 SET I=0
FOR
SET I=$ORDER(^TMP($JOB,"APCHMEDS","CURRENT",I))
IF I'=+I
QUIT
SET N=""
FOR
SET N=$ORDER(^TMP($JOB,"APCHMEDS","CURRENT",I,N))
IF N=""
QUIT
SET D=0
FOR
SET D=$ORDER(^TMP($JOB,"APCHMEDS","CURRENT",I,N,D))
IF D'=+D
QUIT
Begin DoDot:1
+28 SET M=0
FOR
SET M=$ORDER(^TMP($JOB,"APCHMEDS","CURRENT",I,N,D,M))
IF M'=+M
QUIT
IF $$DC(M)
KILL ^TMP($JOB,"APCHMEDS","CURRENT",I,N,D,M)
End DoDot:1
+29 SET I=0
FOR
SET I=$ORDER(^TMP($JOB,"APCHMEDS","CHRONIC",I))
IF I'=+I
QUIT
SET N=""
FOR
SET N=$ORDER(^TMP($JOB,"APCHMEDS","CHRONIC",I,N))
IF N=""
QUIT
SET D=0
FOR
SET D=$ORDER(^TMP($JOB,"APCHMEDS","CHRONIC",I,N,D))
IF D'=+D
QUIT
Begin DoDot:1
+30 SET M=0
FOR
SET M=$ORDER(^TMP($JOB,"APCHMEDS","CHRONIC",I,N,D,M))
IF M'=+M
QUIT
IF $$DC(M)
KILL ^TMP($JOB,"APCHMEDS","CHRONIC",I,N,D,M)
End DoDot:1
+31 ;S C=1,X=$O(^TMP($J,"APCHMEDS","CHRONIC",0)) D
+32 ;.I X="" S C=0 Q
+33 ;.S X=9999999-X I X<$$FMADD^XLFDT(DT,-366) S C=0
+34 ;S R=1,X=$O(^TMP($J,"APCHMEDS","CURRENT",0)) D
+35 ;.I X="" S R=0 Q
+36 ;.S X=9999999-X I X<$$FMADD^XLFDT(DT,-366) S R=0
+37 ;I 'C,'R Q ;no meds in past year
+38 DO HEADER
+39 ;K APCHSCRN S APCHTYPE="CURRENT" D MEDDSP ;IHS/CMI/GRL suppress non-chronic meds
+40 SET APCHSCRN=1
SET APCHTYPE="CHRONIC"
DO MEDDSP
+41 IF 'APCHQUIT
WRITE !!!,"DISPENSE UNTIL NEXT SCHEDULED EVALUATION: ________",!!,"SIGNATURE: ________________________________ DATE: ________________",!
+42 KILL ^TMP($JOB,"APCHMEDS")
+43 KILL ^TMP($JOB,"APCHCOUNT")
+44 KILL ^TMP($JOB,"APCHMEDSA")
+45 KILL ^TMP($JOB,"APCHMEDSG")
+46 QUIT
MEDDSP ;
+1 SET X=""
+2 ;NO MEDS TO DISPLAY
IF '$DATA(^TMP($JOB,"APCHMEDS",APCHTYPE))
QUIT
+3 IF APCHTYPE="CURRENT"
SET X="CURRENT MEDICATIONS - (TWICE DURATION OF RX - MINIMUM 60 DAYS)"
DO W(X,1)
+4 IF APCHTYPE="CHRONIC"
SET X="LATEST OF EACH CHRONIC MEDICATION DISPENSED IN THE PAST YEAR"
DO W(X,1)
+5 ;S APCHSTOP=$$FMADD^XLFDT(DT,-366),APCHSTOP=9999999-APCHSTOP
+6 SET APCHSIVD=0
FOR
SET APCHSIVD=$ORDER(^TMP($JOB,"APCHMEDS",APCHTYPE,APCHSIVD))
IF APCHSIVD'=+APCHSIVD!(APCHSIVD>APCHSDLM)!(APCHQUIT)
QUIT
Begin DoDot:1
+7 SET APCHSNAM=""
FOR
SET APCHSNAM=$ORDER(^TMP($JOB,"APCHMEDS",APCHTYPE,APCHSIVD,APCHSNAM))
IF APCHSNAM=""!(APCHQUIT)
QUIT
Begin DoDot:2
+8 SET APCHDIEN=0
FOR
SET APCHDIEN=$ORDER(^TMP($JOB,"APCHMEDS",APCHTYPE,APCHSIVD,APCHSNAM,APCHDIEN))
IF APCHDIEN'=+APCHDIEN!(APCHQUIT)
QUIT
Begin DoDot:3
+9 SET APCHMIEN=0
SET APCHMIEN=$ORDER(^TMP($JOB,"APCHMEDS",APCHTYPE,APCHSIVD,APCHSNAM,APCHDIEN,APCHMIEN))
DO MEDDSP1
+10 QUIT
End DoDot:3
+11 QUIT
End DoDot:2
+12 QUIT
End DoDot:1
+13 QUIT
MEDDSP1 ;
+1 SET APCHSM0=^AUPNVMED(APCHMIEN,0)
+2 SET APCHSRX=$ORDER(^PSRX("APCC",APCHMIEN,0))
IF 'APCHSRX
SET APCHXRX=0
+3 SET APCHRXRF=""
+4 IF APCHSRX
SET APCHRXRF=$ORDER(^PSRX("APCC",APCHMIEN,APCHSRX,""))
IF APCHRXRF=""
SET APCHRXRF=0
+5 SET (Y,APCHSDTM)=9999999-$PIECE(APCHSIVD,".")
+6 ;S APCHSDTM=$$DATE(APCHSDTM)
+7 SET APCHSDC=$PIECE(APCHSM0,U,8)
+8 SET APCHSDYS=$PIECE(APCHSM0,U,7)
IF APCHSDYS=0
SET APCHSDYS=30
+9 SET APCHSNAM=$SELECT($PIECE(APCHSM0,U,4)]"":$PIECE(APCHSM0,U,4),1:$PIECE(^PSDRUG($PIECE(APCHSM0,U),0),U))
+10 SET APCHSQTY=$PIECE(APCHSM0,U,6)
+11 SET APCHSIG=$PIECE(APCHSM0,U,5)
+12 SET APCHVIEN=$PIECE(APCHSM0,U,3)
+13 SET APCHDIEN=+APCHSM0
+14 SET X1=DT
SET X2=APCHSDTM
DO ^%DTC
+15 SET APCHSEXP=""
+16 IF X>APCHSDYS
SET X1=APCHSDTM
SET X2=APCHSDYS
DO C^%DTC
SET APCHSEXP="-- Ran out "_$$DATE(X)
+17 SET APCHNARC=+$PIECE(^PSDRUG(APCHDIEN,0),U,3)
+18 ;ADDED RETURNED TO STOCK FLAG FOR NEXT 4 LINES IHS/OKCAO/POC 12/19/97
+19 IF $PIECE($GET(^AUPNVMED(APCHMIEN,11)),U)="RETURNED TO STOCK"
SET APCHRTN="R"
+20 IF APCHSDC
IF $GET(APCHRTN)="R"
SET Y=APCHSDC
XECUTE APCHSCVD
SET APCHSEXP="--Returned to Stock "_Y
+21 IF APCHSDC
IF $GET(APCHRTN)=""
SET Y=APCHSDC
XECUTE APCHSCVD
SET APCHSEXP="-- D/C "_Y
+22 KILL APCHRTN
+23 DO SIG
SET APCHSIG=APCHSSGY
+24 DO REF
+25 IF APCHSREF
SET APCHSREF=APCHSREF_$SELECT(APCHSREF=1:" refill",1:" refills")_" left."
+26 SET APCHSITE=$PIECE(^AUPNVSIT(APCHVIEN,0),U,6)
+27 DO PROV
+28 DO CLN
+29 DO SITE
+30 DO WRITE
+31 QUIT
DC(V) ;is this d/c'ed
+1 IF '$DATA(^AUPNVMED(V,0))
QUIT 0
+2 IF $PIECE(^AUPNVMED(V,0),U,8)]""
QUIT 1
+3 NEW P,S
+4 SET P=$SELECT($DATA(^PSRX("APCC",N)):$ORDER(^(N,0)),1:0)
+5 IF 'P
QUIT 0
+6 SET X=$PIECE($GET(^PSRX(P,0)),U,15)
+7 IF X=12
QUIT 1
+8 IF X=13
QUIT 1
+9 IF X=14
QUIT 1
+10 IF X=15
QUIT 1
+11 SET X=$PIECE($GET(^PSRX(P,"STA")),U,1)
+12 IF X=12
QUIT 1
+13 IF X=13
QUIT 1
+14 IF X=14
QUIT 1
+15 IF X=15
QUIT 1
+16 QUIT 0
WRITE ;
+1 IF $Y>(IOSL-10)
Begin DoDot:1
+2 WRITE !!!,"DISPENSE UNTIL NEXT SCHEDULED EVALUATION: ________"
+3 WRITE !!!,"SIGNATURE: ________________________________ DATE: ________________",!
+4 DO HEADER
End DoDot:1
IF APCHQUIT
QUIT
+5 IF APCHQUIT
QUIT
+6 SET X=$$DATE(APCHSDTM)
SET $EXTRACT(X,10)=APCHSNAM_" "_APCHSEXP
DO W(X,1)
+7 SET X=""
SET $EXTRACT(X,10)="QTY: "_APCHSQTY_" ("_APCHSDYS_" days) "_APCHPROV_$SELECT(APCHCLN]"":" - "_APCHCLN,1:"")
DO W(X)
+8 SET APCHSICL=10
SET APCHSNRQ=""
SET APCHSTXT=APCHSIG
DO PRTTXT
KILL APCHSICL,APCHSNRQ,APCHSP
+9 ;ISSUE HISTORY
+10 ;I APCHSRX,$D(^PSRX(APCHSRX,0)) S X="",$E(X,10)="Most recent issue date: "_$$FMTE^XLFDT($P(^PSRX(APCHSRX,0),U,13),5) D W(X)
+11 IF APCHSITE]""
SET X=""
SET $EXTRACT(X,10)="Dispensed at: "_APCHSITE
DO W(X)
+12 SET X=""
+13 SET Y=$PIECE(^TMP($JOB,"APCHCOUNT",APCHSNAM,APCHDIEN),U)
+14 IF Y>1
SET X=""
Begin DoDot:1
+15 SET X=""
SET $EXTRACT(X,10)="Previously filled: "
FOR I=3:1:5
SET X=X_" "_$PIECE(^TMP($JOB,"APCHCOUNT",APCHSNAM,APCHDIEN),U,I)
End DoDot:1
+16 IF X]""
DO W(X)
+17 IF APCHSREF
SET X=""
SET $EXTRACT(X,10)=APCHSREF
DO W(X)
+18 SET X=""
+19 IF $GET(APCHNARC)=2
SET $EXTRACT(X,10)="------- MUST REWRITE SCHEDULE 2 DRUGS -------"
DO W(X,1)
QUIT
+20 IF $GET(APCHNARC)>2
IF $GET(APCHNARC)<6
SET $EXTRACT(X,10)="RENEW __________ QTY __________ DC __________"
DO W(X,1)
QUIT
+21 SET $EXTRACT(X,10)="RENEW __________ DC __________ "
DO W(X,1)
+22 QUIT
+23 ;
SITE ;DETERMINE IF OUTSIDE LOCATION INFO PRESENT
+1 SET APCHSITE=""
+2 IF $DATA(^AUPNVSIT(APCHVIEN,21))#2
SET APCHSITE=$PIECE(^(21),U)
QUIT
+3 IF $PIECE(^AUPNVSIT(APCHVIEN,0),U,6)=""
QUIT
+4 IF $PIECE(^AUPNVSIT(APCHVIEN,0),U,6)'=DUZ(2)
SET APCHSITE=$EXTRACT($PIECE(^DIC(4,$PIECE(^AUPNVSIT(APCHVIEN,0),U,6),0),U),1,30)
+5 QUIT
+6 ;
SIG ;
+1 ;CONSTRUCT THE FULL TEXT FROM THE ENCODED SIG
+2 IF $$VALI^XBDIQ1(9001015,APCHSTYP,3.5)="S"
SET APCHSSGY=APCHSIG
QUIT
+3 SET APCHSSGY=""
FOR APCHSP=1:1:$LENGTH(APCHSIG," ")
SET X=$PIECE(APCHSIG," ",APCHSP)
IF X]""
Begin DoDot:1
+4 SET Y=$ORDER(^PS(51,"B",X,0))
IF Y>0
SET X=$PIECE(^PS(51,Y,0),"^",2)
IF $DATA(^(9))
SET Y=$PIECE(APCHSIG," ",APCHSP-1)
SET Y=$EXTRACT(Y,$LENGTH(Y))
IF Y>1
SET X=$PIECE(^(9),"^",1)
+5 SET APCHSSGY=APCHSSGY_X_" "
End DoDot:1
+6 QUIT
+7 ;
REF ;
+1 ;DETERMINE THE NUMBER OF REFILLS REMAINING
+2 IF 'APCHSRX
SET APCHSREF=0
QUIT
+3 SET APCHSRFL=$PIECE(^PSRX(APCHSRX,0),U,9)
SET APCHSREF=0
FOR
SET APCHSREF=$ORDER(^PSRX(APCHSRX,1,APCHSREF))
IF 'APCHSREF
QUIT
SET APCHSRFL=APCHSRFL-1
+4 SET APCHSREF=APCHSRFL
+5 QUIT
+6 ;
PROV ;GET THE PROVIDER FOR ORIGINAL RX OR REFILL
+1 SET APCHPROV=""
+2 IF 'APCHSRX
SET APCHPROV=$$VAL^XBDIQ1(9000010.14,1202,APCHMIEN)
QUIT
+3 SET APCHIPRV=$SELECT(APCHRXRF=0:$PIECE($GET(^PSRX(APCHSRX,0)),"^",4),1:$PIECE($GET(^PSRX(APCHSRX,1,APCHRXRF,0)),"^",17))
+4 SET APCHPROV=$SELECT('APCHIPRV:"UNKNOWN PROVIDER",1:$PIECE(^VA(200,APCHIPRV,0),"^"))
+5 QUIT
+6 ;
CLN ;GET CLINIC FOR V MEDICATION
+1 SET APCHCLN=$EXTRACT($$VAL^XBDIQ1(9000010,APCHVIEN,.08),1,10)
+2 QUIT
DATE(D) ;EP
+1 IF D=""
QUIT ""
+2 QUIT $EXTRACT(D,4,5)_"/"_$EXTRACT(D,6,7)_"/"_$EXTRACT(D,2,3)
+3 ;
CHRONIC(N) ;
+1 IF '$GET(N)
QUIT ""
+2 IF '$DATA(^AUPNVMED(N))
QUIT ""
+3 NEW X,Y,P
+4 SET P=$PIECE(^AUPNVMED(N,0),U,2)
+5 SET X=$SELECT($DATA(^PSRX("APCC",N)):$ORDER(^(N,0)),1:0)
+6 SET Y=$SELECT(+X:$DATA(^PS(55,P,"P","CP",X)),1:0)
+7 IF 'Y
QUIT ""
+8 QUIT 1
W(Y,F,C,T) ;set up array
+1 IF '$GET(F)
SET F=0
+2 IF '$GET(T)
SET T=0
+3 NEW %,X
+4 ;blank lines
+5 FOR F=1:1:F
SET X=""
WRITE !,X
+6 SET X=Y
+7 IF $GET(C)
SET L=$LENGTH(Y)
SET T=(80-L)/2
Begin DoDot:1
+8 FOR %=1:1:(T-1)
SET X=" "_X
End DoDot:1
WRITE !,X
QUIT
+9 FOR %=1:1:T
SET X=" "_Y
+10 WRITE !,X
+11 QUIT
PRTTXT ; GENERALIZED TEXT PRINTER
+1 SET APCHTDLT=1
SET APCHTILN=80-APCHSICL-1
+2 FOR APCHTQ=0:0
IF APCHSNRQ]""&(($LENGTH(APCHSNRQ)+$LENGTH(APCHSTXT)+2)<255)
SET APCHSTXT=$SELECT(APCHSTXT]"":APCHSTXT_"; ",1:"")_APCHSNRQ
SET APCHSNRQ=""
IF APCHSTXT=""
QUIT
DO PRTTXT2
+3 KILL APCHTILN,APCHTDLT,APCHTF,APCHTC,APCHSTXT,APCHSDOO
+4 QUIT
PRTTXT2 DO GETFRAG
SET X=""
SET $EXTRACT(X,APCHSICL)=APCHTF
DO W(X)
SET APCHSICL=APCHSICL+APCHTDLT
SET APCHTILN=APCHTILN-APCHTDLT
SET APCHTDLT=0
+1 QUIT
GETFRAG IF $LENGTH(APCHSTXT)<APCHTILN
SET APCHTF=APCHSTXT
SET APCHSTXT=""
QUIT
+1 FOR APCHTC=APCHTILN:-1:1
IF $EXTRACT(APCHSTXT,APCHTC)=" "
QUIT
+2 SET APCHTF=$EXTRACT(APCHSTXT,1,APCHTC-1)
SET APCHSTXT=$EXTRACT(APCHSTXT,APCHTC+1,255)
+3 QUIT
+4 ;