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

BHSMEDI.m

Go to the documentation of this file.
BHSMEDI ;IHS/CIA/MGH - Health Summary for V MED file ;01-May-2014 10:15;DU
 ;;1.0;HEALTH SUMMARY COMPONENTS;**1,2,6,9**;March 17, 2006;Build 16
 ;===================================================================
 ;Taken from APCHS73
 ; IHS/TUCSON/LAB - PART 7 OF BHS -- SUMMARY PRODUCTION COMPONENTS ;    [ 03/11/03  9:30 AM ]
 ;;2.0;IHS RPMS/PCC Health Summary;**5,7,8,9,10,11**;JUN 24, 1997
 ;
 ;Routine finds meds with issue dates
 ;Patch 1 changes prescribed at to dispensed at as in IHS patch 15
 ;Patch 2 changes for patch 16
 ;Patch 6 changes for non-VA and medications reviewed
 ;===================================================================
MEDSCURR ; ************** CURRENT MEDICATIONS * 9000010.14 ********
 S BHSMTY="CURR" G CONT
MEDSALL ; **************** ALL MEDICATIONS * 9000010.14 **********
 S BHSMTY="ALL" G CONT
MEDSCHRN ; ************* CHRONIC MEDCICATIONS ************
 S BHSMTY="CHRONIC" G CONT
MEDSNDUP ; ************* ALL, NON DUPLICATED *************
 S BHSMTY="NODUP" G CONT
 ;
CONT ; <SETUP>
 N BHSPAT,BHSQ,BHSCC,BHSCHR
 S BHSPAT=DFN
 I '$D(^AUPNVMED("AC",BHSPAT)) S BHST="MEDICATION",BHSFN=50 D DISPREF^BHSRAD Q
 D CKP^GMTSUP Q:$D(GMTSQIT)
 ; <BUILD>
 K ^TMP($J,"BHSMED")
 S BHSIVD=0 F  S BHSIVD=$O(^AUPNVMED("AA",BHSPAT,BHSIVD)) Q:BHSIVD=""!(BHSIVD>GMTSDLM)  S BHSMX=0 F  S BHSMX=$O(^AUPNVMED("AA",BHSPAT,BHSIVD,BHSMX)) Q:BHSMX=""  D
 .S M=+^AUPNVMED(BHSMX,0)
 .S $P(^TMP($J,"BHSMED",M),U)=$P($G(^TMP($J,"BHSMED",M)),U)+1
 .S X=$P(^TMP($J,"BHSMED",M),U)
 .I X<10 S $P(^TMP($J,"BHSMED",M),U,(X+1))=$$FMTE^XLFDT((9999999-BHSIVD),5)
 K ^TMP($J,"BHSMTB"),^TMP($J,"BHSMTP"),^TMP($J,"BHSNO")
 S BHSIVD=0 F BHSQ=0:0 S BHSIVD=$O(^AUPNVMED("AA",BHSPAT,BHSIVD)) Q:BHSIVD=""!(BHSIVD>GMTSDLM)  S BHSMX=0 F BHSQ=0:0 S BHSMX=$O(^AUPNVMED("AA",BHSPAT,BHSIVD,BHSMX)) Q:BHSMX=""  D MEDBLD
 D NONVA^BHSMED  ;Patch 6 get all NON-VA meds that didn't pass to PCC
 ; <DISPLAY>
 ;REBUILD LIST BY NAME (TRADE OR GENERIC) AND DATE
 D CKP^GMTSUP Q:$D(GMTSQIT)
 W !,"MEDICATIONS DISPENSED SINCE ",$$FMTE^XLFDT((9999999-GMTSDLM)),!
 W "(C) - Chronic Medication, (CRx) - Controlled Drug",!!
 S (BHSIVD,BHSCC)=0 F BHSQ=0:0 S BHSIVD=$O(^TMP($J,"BHSMTP",BHSIVD)) Q:'BHSIVD  I $P(^TMP($J,"BHSMTP",BHSIVD),U,2)="C" S BHSCC=BHSCC+1 D MEDDSP
 ;S (BHSIVD,BHSCC)=0 F BHSQ=0:0 S BHSIVD=$O(^TMP($J,"BHSMTP",BHSIVD)) Q:'BHSIVD  I $P(^TMP($J,"BHSMTP",BHSIVD),U,2)'="C" S BHSCC=BHSCC+1 W:BHSCC=1 !,"Other Medications",!,"Last Fill Date",! D MEDDSP
 ;patch 2 hold meds
 D HOLDDSP^BHSMED
 Q:$D(GMTSQIT)
 ;patch 2 display med refusals
 S BHST="MEDICATION",BHSFN=50 D DISPREF^BHSRAD
 ;Patch 6
 D MEDRU^BHSMED  ;display last date reviewed/updated/nam
 K BHST,BHSFN
 ; <CLEANUP>
MEDX K BHSIVD,BHSMX,BHSMFX,BHSQTY,BHSIG,BHSSGY,BHSEXP,BHSMTS,BHSMED,BHSDTM,BHSDAT,BHSDYS,BHSN,BHSDC,BHSVDF,BHSP,BHSNON,BHSDLU,BHSIEN
 K BHSNFL,BHSNSH,BHSNAB,BHSVSC,BHSITE,BHSRX,BHSORD,BHSDRG,BHSCRN,BHSREF,BHSRFL,BHSALL,BHSTXT,BHSMTY
 K ^TMP($J,"BHSMTB"),^TMP($J,"BHSMTP"),^TMP($J,"BHSNO"),^TMP($J,"BHSMED")
 K X1,X2,X,Y,I,M,RXNORM,NVA,BHSORD,BHS11
 Q
MEDBLD ;BUILD ARRAY OF MEDICATIONS
 ;BHSDC=DATE DISCONTINUED,DYS=DAYS PRESCRIBED,SIG=DIRECTIONS
 ;VDF=VISIT FILE DATE
 Q:'$D(^AUPNVMED(BHSMX,0))
 S BHSN=^AUPNVMED(BHSMX,0)
 Q:'$D(^PSDRUG($P(BHSN,U,1)))
 S BHSDTM=-BHSIVD\1+9999999
 S BHSDC=$P(BHSN,U,8),BHSDYS=$P(BHSN,U,7)
 S BHSMFX=$S($P(BHSN,U,4)="":+BHSN,$P(BHSN,U,4)=$P(^PSDRUG(+BHSN,0),U):+BHSN,1:$P(BHSN,U,4))
 S BHSCHR=$$CHRONIC^BHSMEDSF(BHSMX),BHSCHR=$S(BHSCHR=1:"C",1:"C")
 D @BHSMTY
 Q
 ;
CURR ; current meds only
 I $D(^TMP($J,"BHSMTB",BHSMFX)),^TMP($J,"BHSMTB",BHSMFX)="" Q
 S X1=DT,X2=BHSDTM D ^%DTC Q:X>60&(X>(2*BHSDYS))
 S ^TMP($J,"BHSMTB",BHSMFX)=BHSDC,^TMP($J,"BHSMTP",BHSIVD_"-"_BHSMFX)=BHSMX
 Q
ALL ;all meds included
 S ^TMP($J,"BHSMTB",BHSMFX)=BHSDC,^TMP($J,"BHSMTP",BHSIVD_"-"_BHSMFX)=BHSMX
 ;
 Q
NODUP ;
 ;I $D(^TMP($J,"BHSMTB",BHSMFX)) Q
 I $D(^TMP($J,"BHSMTP",BHSIVD_"-"_BHSMFX)) S ^TMP($J,"BHSMTP",BHSIVD_"-"_BHSMFX)=BHSMX_"^"_BHSCHR
 I $D(^TMP($J,"BHSMTB",BHSMFX)) Q
 S ^TMP($J,"BHSMTB",BHSMFX)=BHSDC,^TMP($J,"BHSMTP",BHSIVD_"-"_BHSMFX)=BHSMX_"^"_BHSCHR
 Q
CHRONIC ;chronic meds only
 I $D(^TMP($J,"BHSMTB",BHSMFX)) Q
 S X=$S($D(^PSRX("APCC",BHSMX)):$O(^(BHSMX,0)),1:0)
 S Y=$S(+X:$D(^PS(55,BHSPAT,"P","CP",X)),1:0)
 Q:'Y
 S ^TMP($J,"BHSMTB",BHSMFX)=BHSDC,^TMP($J,"BHSMTP",BHSIVD_"-"_BHSMFX)=BHSMX
 Q
MEDDSP ;DISPLAY MEDICATION
 ;BHSRX=RX# in FILE 52,CHRN=CHRONIC FLAG,REF=#REFILLS
 S BHSMX=$P(^TMP($J,"BHSMTP",BHSIVD),U)
 I $P(BHSMX,U,1)="" D NVADSP Q
 S BHSN=^AUPNVMED(BHSMX,0)
 S BHS11=^AUPNVMED(BHSMX,11)
 S BHSIEN=+BHSN
 S BHSRX=$S($D(^PSRX("APCC",BHSMX)):$O(^(BHSMX,0)),1:0)
 S BHSCRN=$S(+BHSRX:$D(^PS(55,BHSPAT,"P","CP",BHSRX)),1:0)
 S (X,BHSDTM)=-BHSIVD\1+9999999 D REGDT4^GMTSU S BHSDAT=X
 S BHSDC=$P(BHSN,U,8),BHSDYS=$P(BHSN,U,7),BHSQTY=$P(BHSN,U,6),BHSIG=$P(BHSN,U,5),BHSVDF=$P(BHSN,U,3),BHSMFX=+BHSN
 S X1=DT,X2=BHSDTM D ^%DTC ;Q:X>60&(X>(2*BHSDYS))
 S BHSEXP=""
 S BHSMED=$S($P(BHSN,U,4)="":$P(^PSDRUG(BHSMFX,0),U,1),1:$P(BHSN,U,4))
 I BHSDC S X=BHSDC D REGDT4^GMTSU S BHSEXP="-- D/C "_X
 D SIG S BHSIG=BHSSGY
 D REF I BHSREF S BHSIG=BHSIG_" "_BHSREF_$S(BHSREF=1:" refill",1:" refills")_" left."
 D SITE ;I BHSITE]"" S BHSIG=BHSIG_"  ["_BHSITE_"]"
 D CKP^GMTSUP Q:$D(GMTSQIT)
 W BHSDAT,?10,$S(BHSCRN:"(C)",1:""),?14,BHSMED W:BHSQTY " #",BHSQTY
 W:BHSDYS " (",BHSDYS," days) " W BHSEXP,!
 ;Patch 8 Add Rxnorm code here
 S RXNORM=$$GET1^DIQ(50,BHSMFX,9999999.27)
 I RXNORM'="" W ?14,"RxNorm: ",RXNORM,!
 S BHSORD=$$GET1^DIQ(52,BHSRX,39.3,"I")
 I +BHSORD D RECON^BHSMED(BHSORD,"M")
 E  D
 .N NVA
 .S NVA=+$P(BHS11,U,8)
 .I NVA'="" D
 ..S BHSORD=$P($G(^PS(55,DFN,"NVA",NVA,0)),U,8)
 ..D RECON^BHSMED(BHSORD,"M")
 I BHSITE]"" W ?14,"Dispensed at: ",BHSITE,!
 D CKP^GMTSUP Q:$D(GMTSQIT)
 S BHSICL=14,BHSNRQ="",BHSTXT="  "_BHSIG D PRTTXT^BHSUTL K BHSICL,BHSNRQ,BHSP
 D CKP^GMTSUP Q:$D(GMTSQIT)
 I BHSRX,$D(^PSRX(BHSRX,0)) W ?16,"Most recent issue date:  ",$$FMTE^XLFDT($P(^PSRX(BHSRX,0),U,13),5),!
 S Y=$P(^TMP($J,"BHSMED",BHSIEN),U)
 Q:Y<2
 D CKP^GMTSUP Q:$D(GMTSQIT)
 W ?16,"# times prev filled: ",Y-1 W "  " F I=3:1:5 W " ",$P(^TMP($J,"BHSMED",BHSIEN),U,I)
 W !
 Q
 ;
NVADSP ;
 S BHSEXP=""
 S (X,BHSDTM)=-BHSIVD\1+9999999 D REGDT4^GMTSU S BHSDAT=X
 S BHSDC=$P(^TMP($J,"BHSMTP",BHSIVD),U,5)
 S BHSMED=$P(^TMP($J,"BHSMTP",BHSIVD),U,3)
 I BHSDC S Y=BHSDC D REGDT4^GMTSU S BHSEXP="-- D/C "_Y
 S BHSIG=$P(^TMP($J,"BHSMTP",BHSIVD),U,4)
 D CKP^GMTSUP Q:$D(GMTSQIT)
 W BHSDAT,?14,BHSMED,"  ",BHSEXP,!
 ;Patch 8 Add Rxnorm code here
 D CKP^GMTSUP Q:$D(GMTSQIT)
 S BHSICL=14,BHSNRQ="",BHSTXT=BHSIG_"  (EHR OUTSIDE MEDICATION)" D PRTTXT^BHSUTL K BHSICL,BHSNRQ,BHSP
 Q
SIG ;CONSTRUCT THE FULL TEXT FROM THE ENCODED SIG
 S BHSSGY="" F BHSP=1:1:$L(BHSIG," ") S X=$P(BHSIG," ",BHSP) 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(BHSIG," ",BHSP-1),Y=$E(Y,$L(Y)) S:Y>1 X=$P(^(9),"^",1)
 . S BHSSGY=BHSSGY_X_" "
 Q
 ;
REF ;DETERMINE THE NUMBER OF REFILLS REMAINING
 I 'BHSRX S BHSREF=0 Q
 S BHSRFL=$P(^PSRX(BHSRX,0),U,9) S BHSREF=0 F  S BHSREF=$O(^PSRX(BHSRX,1,BHSREF)) Q:'BHSREF  S BHSRFL=BHSRFL-1
 S BHSREF=BHSRFL
 Q
 ;
 ;
SITE ;DETERMINE IF OUTSIDE LOCATION INFO PRESENT
 S BHSITE=""
 I $D(^AUPNVSIT(BHSVDF,21))#2 S BHSITE=$P(^(21),U) Q
 Q:$P(^AUPNVSIT(BHSVDF,0),U,6)=""
 I $P(^AUPNVSIT(BHSVDF,0),U,6)'=DUZ(2) S BHSITE=$E($P(^DIC(4,$P(^AUPNVSIT(BHSVDF,0),U,6),0),U),1,30)
 Q