Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: APCHS7

APCHS7.m

Go to the documentation of this file.
  1. APCHS7 ; IHS/CMI/LAB - PART 7 OF APCHS -- SUMMARY PRODUCTION COMPONENTS ; 09 Aug 2010 10:17 AM
  1. ;;2.0;IHS PCC SUITE;**2,5**;MAY 14, 2009
  1. ;
  1. ;
  1. MEDSCURR ; ************** CURRENT MEDICATIONS * 9000010.14 ********
  1. S APCHSMTY="CURR" G CONT
  1. MEDSALL ; **************** ALL MEDICATIONS * 9000010.14 **********
  1. S APCHSMTY="ALL" G CONT
  1. MEDSCHRN ; ************* CHRONIC MEDCICATIONS ************
  1. S APCHSMTY="CHRONIC" G CONT
  1. MEDSNDUP ; ************* ALL, NON DUPLICATED *************
  1. S APCHSMTY="NODUP" G CONT
  1. MEDSCHR1 ; ******* CHRONIC MEDICATIONS, W/O D/C'ED *******
  1. S APCHSMTY="CHRONIC",APCHSDCP=1 G CONT
  1. ;
  1. CONT ; <SETUP>
  1. ;Q:'$D(^AUPNVMED("AC",APCHSPAT))
  1. X APCHSCKP Q:$D(APCHSQIT) I 'APCHSNPG W ! X APCHSBRK
  1. ; <BUILD>
  1. K ^TMP($J,"APCHSMTB"),^TMP($J,"APCHSMTP")
  1. S APCHSIVD=0 F APCHSQ=0:0 S APCHSIVD=$O(^AUPNVMED("AA",APCHSPAT,APCHSIVD)) Q:APCHSIVD=""!(APCHSIVD>APCHSDLM) S APCHSMX=0 F APCHSQ=0:0 S APCHSMX=$O(^AUPNVMED("AA",APCHSPAT,APCHSIVD,APCHSMX)) Q:APCHSMX="" D MEDBLD
  1. D NONVA ;get all NON-VA meds that didn't pass to PCC
  1. ; <DISPLAY>
  1. S APCHSIVD=0 F APCHSQ=0:0 S APCHSIVD=$O(^TMP($J,"APCHSMTP",APCHSIVD)) Q:'APCHSIVD D MEDDSP
  1. ; <CLEANUP>
  1. ;now display all meds on hold
  1. D HOLDDSP
  1. ;now display MED refusals
  1. S APCHST="MEDICATION",APCHSFN=50 D DISPREF^APCHS3C
  1. D MEDRU ;display last date reviewed/updated/nam
  1. K APCHST,APCHSFN
  1. MEDX K APCHSIVD,APCHSMX,APCHSMFX,APCHSQTY,APCHSIG,APCHSSGY,APCHSEXP,APCHSMTS,APCHSMED,APCHSDTM,APCHSDAT,APCHSDYS,APCHSN,APCHSDC,APCHSVDF,APCHSP,APCHORTS,APCHSDCP
  1. K APCHSNFL,APCHSNSH,APCHSNAB,APCHSVSC,APCHSITE,APCHSRX,APCHSDRG,APCHSCRN,APCHSREF,APCHSRFL,APCHSALL,APCHSTXT,APCHSMTY
  1. K ^TMP($J,"APCHSMTB"),^TMP($J,"APCHSMTP")
  1. K X1,X2,X,Y
  1. Q
  1. MEDBLD ;BUILD ARRAY OF MEDICATIONS
  1. ;APCHSDC=DATE DISCONTINUED,DYS=DAYS PRESCRIBED,SIG=DIRECTIONS
  1. ;VDF=VISIT FILE DATE
  1. ;Q:$P($G(^AUPNVMED(APCHSMX,11)),U,8)]"" ;WILL GET NON-VA MEDS LATER
  1. Q:'$D(^AUPNVMED(APCHSMX,0))
  1. S APCHSN=^AUPNVMED(APCHSMX,0)
  1. Q:'$D(^PSDRUG($P(APCHSN,U,1)))
  1. S APCHSDTM=-APCHSIVD\1+9999999
  1. ;S APCHSDC=$P(APCHSN,U,8),APCHSDYS=$P(APCHSN,U,7),APCHSMFX=+APCHSN
  1. S APCHSDC=$P(APCHSN,U,8),APCHSDYS=$P(APCHSN,U,7),APCHSMFX=$S($P(APCHSN,U,4)="":+APCHSN,1:$P(APCHSN,U,4))
  1. S APCHSCMT=$P($G(^AUPNVMED(APCHSMX,11)),U,1)
  1. ;I $D(^TMP($J,"APCHSMTB",APCHSMFX)),^TMP($J,"APCHSMTB",APCHSMFX)="" Q
  1. S:APCHSDYS="" APCHSDYS=30
  1. ;SCREENS OUT MEDS NOT CURRENT; APCHSALL FORCES INCLUSION OF ALL MEDS
  1. ;I 'APCHSALL S X1=DT,X2=APCHSDTM D ^%DTC Q:X>60&(X>(2*APCHSDYS))
  1. ;S ^TMP($J,"APCHSMTB",APCHSMFX)=APCHSDC,^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)=APCHSMX
  1. D @APCHSMTY
  1. Q
  1. NONVA ;EP - ;NEW DFN,PSOACT S DFN=APCHSPAT,PSOACT=1 D ^PSOHCSUM
  1. ;quit if chronic
  1. Q:APCHSMTY="CHRONIC"
  1. S X=0 F S X=$O(^PS(55,APCHSPAT,"NVA",X)) Q:X'=+X D
  1. .I $P($G(^PS(55,APCHSPAT,"NVA",X,999999911)),U,1),$D(^AUPNVMED($P(^PS(55,APCHSPAT,"NVA",X,999999911),U,1),0)) Q
  1. .;S L=$P(^PS(55,APCHSPAT,"NVA",X,0),U,9)
  1. .;:'L
  1. .S L=$P($P($G(^PS(55,APCHSPAT,"NVA",X,0)),U,10),".")
  1. .S L=9999999-L
  1. .Q:L>APCHSDLM
  1. .;S M=$P($G(^PS(55,APCHSPAT,"NVA",X,999999911)),U,1) ;passed to PCC so got it already
  1. .;I M,$D(^AUPNVMED(M)) Q ;passed to PCC and v med exists so we already got it from V MED
  1. .S D=$P(^PS(55,APCHSPAT,"NVA",X,0),U,2)
  1. .I D="" S D="NO DRUG IEN"
  1. .S N=$S(D:$P(^PSDRUG(D,0),U,1),1:$P(^PS(50.7,$P(^PS(55,APCHSPAT,"NVA",X,0),U,1),0),U,1))
  1. .S ^TMP($J,"APCHSMTP",L_"-"_N)=U_$P(^PS(55,APCHSPAT,"NVA",X,0),U,6)_U_N_U_$P(^PS(55,APCHSPAT,"NVA",X,0),U,4)_" "_$P(^PS(55,APCHSPAT,"NVA",X,0),U,5)_U_$P(^PS(55,APCHSPAT,"NVA",X,0),U,7)
  1. .S ^TMP($J,"APCHSMTB",N)=$P(^PS(55,APCHSPAT,"NVA",X,0),U,6)
  1. Q
  1. ;
  1. CURR ; current meds only
  1. I $D(^TMP($J,"APCHSMTB",APCHSMFX)),^TMP($J,"APCHSMTB",APCHSMFX)="" Q ;ALREADY GOT THIS MED
  1. S X1=DT,X2=APCHSDTM D ^%DTC Q:X>60&(X>(2*APCHSDYS))
  1. S ^TMP($J,"APCHSMTB",APCHSMFX)=APCHSDC,^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)=APCHSMX
  1. Q
  1. ALL ;all meds included
  1. S ^TMP($J,"APCHSMTB",APCHSMFX)=APCHSDC,^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)=APCHSMX
  1. ;now get NVA meds
  1. Q
  1. NODUP ;
  1. ;I $D(^TMP($J,"APCHSMTB",APCHSMFX)) Q
  1. ;S X="" F S X=$O(^TMP($J,"APCHSMTP",X)) Q:X="" I $P(X,"-",2)=APCHSMFX K ^TMP($J,"APCHSMTP",X)
  1. I $D(^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)) S ^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)=APCHSMX
  1. I $D(^TMP($J,"APCHSMTB",APCHSMFX)) Q
  1. S ^TMP($J,"APCHSMTB",APCHSMFX)=APCHSDC,^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)=APCHSMX
  1. Q
  1. CHRONIC ;chronic meds only
  1. I $D(^TMP($J,"APCHSMTB",APCHSMFX)) Q
  1. S X=$S($D(^PSRX("APCC",APCHSMX)):$O(^(APCHSMX,0)),1:0)
  1. S Y=$S(+X:$D(^PS(55,APCHSPAT,"P","CP",X)),1:0)
  1. Q:'Y
  1. I $G(APCHSDCP),APCHSDC]"",APCHSCMT'="RETURNED TO STOCK" Q ;IHS/CMI/LAB - new component patch 9
  1. S ^TMP($J,"APCHSMTB",APCHSMFX)=APCHSDC,^TMP($J,"APCHSMTP",APCHSIVD_"-"_APCHSMFX)=APCHSMX
  1. Q
  1. MEDDSP ;DISPLAY MEDICATION
  1. ;APCHSRX=RX# in FILE 52,CHRN=CHRONIC FLAG,REF=#REFILLS
  1. S APCHSMX=^TMP($J,"APCHSMTP",APCHSIVD)
  1. I $P(APCHSMX,U,1)="" D NVADSP Q
  1. S APCHSN=^AUPNVMED(APCHSMX,0)
  1. S APCHSRX=$S($D(^PSRX("APCC",APCHSMX)):$O(^(APCHSMX,0)),1:0)
  1. S APCHSCRN=$S(+APCHSRX:$D(^PS(55,APCHSPAT,"P","CP",APCHSRX)),1:0)
  1. S (Y,APCHSDTM)=-APCHSIVD\1+9999999 X APCHSCVD S APCHSDAT=Y
  1. S APCHSDC=$P(APCHSN,U,8),APCHSDYS=$P(APCHSN,U,7),APCHSQTY=$P(APCHSN,U,6),APCHSIG=$P(APCHSN,U,5),APCHSVDF=$P(APCHSN,U,3),APCHSMFX=+APCHSN
  1. S:APCHSDYS="" APCHSDYS=30
  1. S X1=DT,X2=APCHSDTM D ^%DTC ;Q:X>60&(X>(2*APCHSDYS))
  1. S APCHSEXP=""
  1. I X>APCHSDYS S X1=APCHSDTM,X2=APCHSDYS D C^%DTC S Y=X X APCHSCVD S APCHSEXP="-- Ran out "_Y
  1. S APCHSMED=$S($P(APCHSN,U,4)="":$P(^PSDRUG(APCHSMFX,0),U,1),1:$P(APCHSN,U,4))
  1. I APCHSDC S Y=APCHSDC X APCHSCVD S APCHSEXP="-- D/C "_Y
  1. ;CHANGE IT AROUND A BIT LOOK FOR RETURNED TO STOCK IHS/OKCAO/POC 2/14/2000
  1. S APCHORTS=$G(^AUPNVMED(APCHSMX,11))
  1. I APCHORTS["RETURNED TO STOCK",APCHSDC S APCHSEXP="--RTS "_Y
  1. ;END OF LOCAL CHANGES IHS/OKCAO/POC 2/14/2000
  1. D SIG S APCHSIG=APCHSSGY
  1. D REF I APCHSREF S APCHSIG=APCHSIG_" "_APCHSREF_$S(APCHSREF=1:" refill",1:" refills")_" left."
  1. I '$P($G(^AUPNVMED(APCHSMX,11)),U,8) S V=$P(^AUPNVMED(APCHSMX,0),U,3) I $P($G(^AUPNVSIT(+V,0)),U,7)="E" S APCHSIG=APCHSIG_" (OUTSIDE MEDICATION)"
  1. I $P($G(^AUPNVMED(APCHSMX,11)),U,8) S APCHSIG=APCHSIG_" (EHR OUTSIDE MEDICATION)"
  1. D SITE ;I APCHSITE]"" S APCHSIG=APCHSIG_" ["_APCHSITE_"]"
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W APCHSDAT,?10,$S(APCHSCRN:"(C)",1:""),?14,APCHSMED," #",APCHSQTY," (",APCHSDYS," days) ",APCHSEXP,!
  1. I APCHSITE]"" W ?14,"Dispensed at: ",APCHSITE,!
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. S APCHSICL=14,APCHSNRQ="",APCHSTXT=APCHSIG D PRTTXT^APCHSUTL K APCHSICL,APCHSNRQ,APCHSP
  1. Q
  1. NVADSP ;
  1. S APCHSEXP=""
  1. S (Y,APCHSDTM)=-APCHSIVD\1+9999999 X APCHSCVD S APCHSDAT=Y
  1. S APCHSDC=$P(^TMP($J,"APCHSMTP",APCHSIVD),U,5)
  1. S APCHSMED=$P(^TMP($J,"APCHSMTP",APCHSIVD),U,3)
  1. I APCHSDC S Y=APCHSDC X APCHSCVD S APCHSEXP="-- D/C "_Y
  1. S APCHSIG=$P(^TMP($J,"APCHSMTP",APCHSIVD),U,4)
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W APCHSDAT,?14,APCHSMED," ",APCHSEXP,!
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. S APCHSICL=14,APCHSNRQ="",APCHSTXT=APCHSIG_" (EHR OUTSIDE MEDICATION)" D PRTTXT^APCHSUTL K APCHSICL,APCHSNRQ,APCHSP
  1. Q
  1. ;
  1. SIG ;CONSTRUCT THE FULL TEXT FROM THE ENCODED SIG
  1. I $$VALI^XBDIQ1(9001015,APCHSTYP,3.5)="S" S APCHSSGY=APCHSIG Q
  1. S APCHSSGY="" F APCHSP=1:1:$L(APCHSIG," ") S X=$P(APCHSIG," ",APCHSP) I X]"" D
  1. . 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)
  1. . S APCHSSGY=APCHSSGY_X_" "
  1. Q
  1. ;
  1. REF ;DETERMINE THE NUMBER OF REFILLS REMAINING
  1. I 'APCHSRX S APCHSREF=0 Q
  1. S APCHSRFL=$P($G(^PSRX(APCHSRX,0)),U,9) S APCHSREF=0 F S APCHSREF=$O(^PSRX(APCHSRX,1,APCHSREF)) Q:'APCHSREF S APCHSRFL=APCHSRFL-1
  1. S APCHSREF=APCHSRFL
  1. Q
  1. ;
  1. SITE ;DETERMINE IF OUTSIDE LOCATION INFO PRESENT
  1. S APCHSITE=""
  1. I $D(^AUPNVSIT(APCHSVDF,21))#2 S APCHSITE=$P(^(21),U) Q
  1. Q:$P($G(^AUPNVSIT(APCHSVDF,0)),U,6)=""
  1. I $P(^AUPNVSIT(APCHSVDF,0),U,6)'=DUZ(2) S APCHSITE=$E($P(^DIC(4,$P(^AUPNVSIT(APCHSVDF,0),U,6),0),U),1,30)
  1. Q
  1. ;
  1. HOLDMEDS(P,R) ;EP - get meds on hold for display
  1. ;return array of med iens of all meds for this patient that are on hold
  1. I '$G(P) Q
  1. NEW D,C,N
  1. S D=DT
  1. F S D=$O(^PS(55,P,"P","A",D)) Q:D'=+D D
  1. .S N=0 F S N=$O(^PS(55,P,"P","A",D,N)) Q:'N D
  1. ..Q:'$$HOLD(N)
  1. ..S R(N)=""
  1. ..Q
  1. Q
  1. ;
  1. HOLD(S) ;EP - is this prescription on hold?
  1. NEW X
  1. S X=$P($G(^PSRX(S,"STA")),U,1)
  1. I X=3 Q 1
  1. I X=5 Q 1
  1. I X=16 Q 1
  1. ;version 6
  1. S X=$P($G(^PSRX(S,0)),U,15)
  1. I X=3 Q 1
  1. I X=5 Q 1
  1. I X=16 Q 1
  1. Q 0
  1. ;
  1. HOLDDSP ;EP - display all meds on hold
  1. K APCHHMED
  1. D HOLDMEDS(APCHSPAT,.APCHHMED)
  1. Q:'$D(APCHHMED)
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W !,"The following medications have been processed in the Pharmacy "
  1. W !,"system, and are currently active but not dispensed:",!,!
  1. S APCHSRX=0 F S APCHSRX=$O(APCHHMED(APCHSRX)) Q:APCHSRX'=+APCHSRX!($D(APCHSQIT)) D
  1. .D HOLDDSP1
  1. .Q
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W !,"Medications may be active but not dispensed for several reasons including: "
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W !,"Too early for refill, patient has sufficient amount on hand, pharmacy"
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W !,"resolving issue with prescriber, etc. Contact Pharmacy staff for "
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W !,"details or view prescription details in Pharmacy system.",!
  1. K APCHHMED
  1. Q
  1. HOLDDSP1 ;write out med
  1. S APCHSCRN=$S(+APCHSRX:$D(^PS(55,APCHSPAT,"P","CP",APCHSRX)),1:0)
  1. S (Y,APCHSDTM)=$P(^PSRX(APCHSRX,0),U,13) X APCHSCVD S APCHSDAT=Y ;issue or fill??
  1. S APCHSDYS=$P(^PSRX(APCHSRX,0),U,8)
  1. S APCHSQTY=$P(^PSRX(APCHSRX,0),U,7)
  1. S APCHSIG=$P(^PSRX(APCHSRX,0),U,10)
  1. D SIG S APCHSIG=APCHSSGY
  1. D REF I APCHSREF S APCHSIG=APCHSIG_" "_APCHSREF_$S(APCHSREF=1:" refill",1:" refills")_" left."
  1. ;D SITE ;I APCHSITE]"" S APCHSIG=APCHSIG_" ["_APCHSITE_"]"
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W APCHSDAT,?10,$S(APCHSCRN:"(C)",1:""),?14,$$VAL^XBDIQ1(52,APCHSRX,6)," #",APCHSQTY," (",APCHSDYS," days) ",!
  1. ;I APCHSITE]"" W ?14,"Dispensed at: ",APCHSITE,!
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. S APCHSICL=14,APCHSNRQ="",APCHSTXT=APCHSIG D PRTTXT^APCHSUTL K APCHSICL,APCHSNRQ,APCHSP
  1. W ?14,"Ordering Provider: ",$$VAL^XBDIQ1(52,APCHSRX,4),!
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. S APCHSTXT=$$VAL^XBDIQ1(52,APCHSRX,100)_" Reason: "_$$VAL^XBDIQ1(52,APCHSRX,99)_" - "_$$VAL^XBDIQ1(52,APCHSRX,99.1)_" ("_$$VAL^XBDIQ1(52,APCHSRX,99.2)_")",APCHSICL=14,APCHSNRQ=""
  1. D PRTTXT^APCHSUTL K APCHSICL,APCHSNRQ,APCHSP
  1. Q
  1. MEDRU ;EP
  1. ;get date last reviewed and display
  1. S APCHSX=$$LASTMLR^APCLAPI6(APCHSPAT,,DT,"A")
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W !,"Medication List Reviewed On: ",?36,$$FMTE^XLFDT($P(APCHSX,U,1)) W ?51,"By: ",?56,$E($S($P(APCHSX,U,3):$P($G(^VA(200,$P(APCHSX,U,3),0)),U),1:""),1,22),!
  1. S APCHSX=$$LASTMLU^APCLAPI6(APCHSPAT,,DT,"A")
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. W "Medication List Updated On: ",?36,$$FMTE^XLFDT($P(APCHSX,U,1)) W ?51,"By: ",?56,$E($S($P(APCHSX,U,3):$P($G(^VA(200,$P(APCHSX,U,3),0)),U),1:""),1,22),!
  1. S APCHSX=$$LASTNAM^APCLAPI6(APCHSPAT,,DT,"A")
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. ;I '$$ANYACTP^APCDAPRB(APCHSPAT) W !,"No Active Problems: ",?24,$$FMTE^XLFDT($P(APCHSX,U,1)) I $P(APCHSX,U,3) W ?39,"Documented By: ",?54,$E($P($G(^VA(200,$P(APCHSX,U,3),0)),U),1,25),!
  1. W "No Active Medications Documented On: ",?36,$$FMTE^XLFDT($P(APCHSX,U,1)) W ?51,"By: ",?56,$E($S($P(APCHSX,U,3):$P($G(^VA(200,$P(APCHSX,U,3),0)),U),1:""),1,22),!
  1. Q