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

BGPMUD09.m

Go to the documentation of this file.
  1. BGPMUD09 ; IHS/MSC/SAT - MI measure NQF0105 ;01-Sep-2011 14:56
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;
  1. ; BGPMUD01 = tobacco use assessment 0028a
  1. ; BGPMUD02 = tobacco use cessation 0028b
  1. ; BGPMUD03 = Heart Failure w/ACE Inhibitor or ARB 0081
  1. ; BGPMUD04 = Prenatal HIV Screening 0012
  1. ; BGPMUD05 = Prenatal Anti-D Immune Globulin 0014
  1. ; BGPMUD06 = Control High Blood Pressure 0018
  1. ; BGPMUD07 = SMOKING CESSATION MEDICAL ASSIST 0027
  1. ; BGPMUD08 = Chlamydia Measure 0033
  1. ; BGPMUD09 = Antidepressant Medication Management 0105
  1. ; BGPMUD10 = Oncology Colon Cancer Stage III 0385
  1. ;
  1. ;Code to collect meaningful use report for Antidepressant Med Management 0105
  1. ENTRY ;EP
  1. N START,END,STRING,STRING2
  1. N IEN,INV,RFOUND,VISIT,DATA,VDATE,VALUE,EXCEPT,FIRST,VIEN
  1. N CNT,DIAB,NUM,DIAB,DIABDX,OUTENC,OPHENC,NONENC,VENC,INENC,ERENC
  1. N BGPALL,BGPEXC,BGPH
  1. N BGPDEN,BGPNOT1,BGPNOT2,BGPNUM1,BGPNUM2
  1. N BGPX
  1. ; BGPNUM1 = Prescription for AntiDepressant Meds => 84 days
  1. ; BGPNUM2 = Prescription for AntiDepressant Meds => 180 days
  1. S (BGPDEN,BGPEXC,BGPNUM1,BGPNUM2,BGPNOT1,BGPNOT2)=""
  1. S BGPX=0
  1. ;Pts must be >=18 245 days before the end of the reporting period
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,$$FMADD^XLFDT(BGPEDATE,-245))
  1. ;No need to check further if no age match
  1. Q:BGPAGEE<18
  1. ;
  1. ;1, 2 & 3) look for encounter with the EP with a 1st diagnosis of major depression and possibly subsequent diagnosis for outpatient
  1. S START=9999999-$$FMADD^XLFDT(BGPBDATE,-245),END=9999999-$$FMADD^XLFDT(BGPEDATE,-245),VALUE=0
  1. S START=START_".2359"
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D Q:BGPDEN'=""
  1. .S VIEN=0 F S VIEN=$O(^AUPNVSIT("AA",DFN,FIRST,VIEN)) Q:'+VIEN D Q:BGPDEN'=""
  1. ..S BGPDT=$P($P($G(^AUPNVSIT(VIEN,0)),U,1),".",1)
  1. ..;Check provider, determine if there are visits with E&M codes
  1. ..I $$PRV^BGPMUUT1(VIEN,BGPPROV) D
  1. ...S BGPX=0
  1. ...S BGPX=$$VSTPOV(DFN,VIEN,"BGPMU MAJOR DEPRESSION DX")
  1. ...I +BGPX D
  1. ....I $$EM1(DFN,VIEN,0) D ; (1)
  1. .....S:$P(BGPX,U,4)=1 BGP1D=$P($P(BGPX,U,3),".",1),BGPDEN="DEP:"_$$DATE^BGPMUUTL(BGP1D)_";"_"EN:"_$$DATE^BGPMUUTL($P(BGPDT,".",1))
  1. ....Q:BGPDEN'=""
  1. ....I $$EM2(DFN,VIEN) D ; (3)
  1. .....S:$P(BGPX,U,4)=1 BGP1D=$P($P(BGPX,U,3),".",1),BGPDEN="DEP:"_$$DATE^BGPMUUTL(BGP1D)_";"_"EN:"_$$DATE^BGPMUUTL($P(BGPDT,".",1))
  1. ....Q:BGPDEN'=""
  1. ;
  1. Q:BGPDEN=""
  1. ;check PRESCRIPTION for antidepressant meds
  1. S BGPX=$$FIND^BGPMUUT8(DFN,"BGPMU ANTIDEPRESSANT MEDS NDCS",$$FMADD^XLFDT(BGP1D,-30),"",$$FMADD^XLFDT(BGP1D,14))
  1. I '+BGPX S BGPDEN=""
  1. Q:BGPDEN=""
  1. ;check for depression or major depression within 120 days before first diagnosis
  1. S BGPX=$$LASTDX^BGPMUUT2(DFN,$$FMADD^XLFDT(BGP1D,-120),$$FMADD^XLFDT(BGP1D,-1),"BGPMU DEPRESSION DX")
  1. I +BGPX S BGPDEN=""
  1. Q:BGPDEN=""
  1. S BGPX=$$LASTDX^BGPMUUT2(DFN,$$FMADD^XLFDT(BGP1D,-120),$$FMADD^XLFDT(BGP1D,-1),"BGPMU MAJOR DEPRESSION DX")
  1. I +BGPX S BGPDEN=""
  1. Q:BGPDEN=""
  1. S BGPX=$$PLTAX(DFN,"BGPMU DEPRESSION DX","C",$$FMADD^XLFDT(BGP1D,-120),BGP1D)
  1. I +BGPX S BGPDEN=""
  1. Q:BGPDEN=""
  1. S BGPX=$$PLTAX(DFN,"BGPMU MAJOR DEPRESSION DX","C",$$FMADD^XLFDT(BGP1D,-120),BGP1D)
  1. I +BGPX S BGPDEN=""
  1. Q:BGPDEN=""
  1. ;patient is in the denominator
  1. ;
  1. ;NUM1
  1. ;check PRESCRIPTION for antidepressant meds after 84 days of FIRST diagnosis
  1. S BGPX=0
  1. S BGPX=$$FIND^BGPMUUT8(DFN,"BGPMU ANTIDEPRESSANT MEDS NDCS",$$FMADD^XLFDT(BGP1D,84),"",$S($P($$NOW^XLFDT(),".",1)>BGPEDATE:$$NOW^XLFDT,1:BGPEDATE),"")
  1. I +BGPX S BGPNUM1="M:MED "_$$DATE^BGPMUUTL($P(BGPX,U,3))
  1. S:BGPNUM1="" BGPNOT1="NM:"
  1. ;NUM2
  1. ;check PRESCRIPTION for antidepressant meds after 180 days of FIRST diagnosis
  1. S BGPX=0
  1. I BGPNUM1'="" D
  1. .S BGPX=$$FIND^BGPMUUT8(DFN,"BGPMU ANTIDEPRESSANT MEDS NDCS",$$FMADD^XLFDT(BGP1D,180),"",$S($P($$NOW^XLFDT(),".",1)>BGPEDATE:$$NOW^XLFDT,1:BGPEDATE),"")
  1. .I +BGPX S BGPNUM2="M:MED "_$$DATE^BGPMUUTL($P(BGPX,U,3))
  1. S:BGPNUM2="" BGPNOT2="NM:"
  1. ;
  1. ;no exclusions
  1. ;
  1. D TOTAL(DFN)
  1. Q
  1. ;
  1. TOTAL(DFN) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT1,NUMCT2,NOTNUM1,NOTNUM2,TOTALS
  1. S TOTALS=$G(^TMP("BGPMU0105",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0105",$J,BGPMUTF,"DEN",1))
  1. S NUMCT1=+$G(^TMP("BGPMU0105",$J,BGPMUTF,"NUM",1))
  1. S NUMCT2=+$G(^TMP("BGPMU0105",$J,BGPMUTF,"NUM",2))
  1. S NOTNUM1=+$G(^TMP("BGPMU0105",$J,BGPMUTF,"NOT",1))
  1. S NOTNUM2=+$G(^TMP("BGPMU0105",$J,BGPMUTF,"NOT",2))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0105",$J,BGPMUTF,"DEN",1)=DENCT
  1. ;
  1. I BGPNOT1'="" D
  1. .S NOTNUM1=NOTNUM1+1 S ^TMP("BGPMU0105",$J,BGPMUTF,"NOT",1)=NOTNUM1
  1. .I BGPMUTF="C" S ^TMP("BGPMU0105",$J,"PAT",BGPMUTF,"NOT",1,PTCNT)=DFN_U_BGPDEN_U_BGPNOT1
  1. I BGPNOT2'="" D
  1. .S NOTNUM2=NOTNUM2+1 S ^TMP("BGPMU0105",$J,BGPMUTF,"NOT",2)=NOTNUM2
  1. .I BGPMUTF="C" S ^TMP("BGPMU0105",$J,"PAT",BGPMUTF,"NOT",2,PTCNT)=DFN_U_BGPDEN_U_BGPNOT2
  1. ;
  1. I BGPNUM1'="" D
  1. .S NUMCT1=NUMCT1+1 S ^TMP("BGPMU0105",$J,BGPMUTF,"NUM",1)=NUMCT1
  1. .I BGPMUTF="C" S ^TMP("BGPMU0105",$J,"PAT",BGPMUTF,"NUM",1,PTCNT)=DFN_U_BGPDEN_U_BGPNUM1
  1. I BGPNUM2'="" D
  1. .S NUMCT2=NUMCT2+1 S ^TMP("BGPMU0105",$J,BGPMUTF,"NUM",2)=NUMCT2
  1. .I BGPMUTF="C" S ^TMP("BGPMU0105",$J,"PAT",BGPMUTF,"NUM",2,PTCNT)=DFN_U_BGPDEN_U_BGPNUM2
  1. S ^TMP("BGPMU0105",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. ; BGPICARE(INDICATOR_ID,Timeframe)=Denom Flag
  1. ; ^ Num Flag ^ Excl Flag ^ Denom disp ; Num disp ^ Excl disp
  1. S BGPICARE("MU.EP.0105.1",BGPMUTF)=1_U_(BGPNUM1'="")_U_0_U_BGPDEN_";"_$S(BGPNUM1'="":BGPNUM1,1:"")_U_""
  1. Q
  1. ;
  1. EM1(DFN,VIEN,FLG) ;check visit for at least 1 E&M code indicating ED, outpatient BH, or outpatient BH requirements POS with a POS modifier
  1. N BGPI,BGPTMP
  1. S BGP2=0
  1. F BGPI=1:1 Q:BGP2'=0 S BGPTMP=$P($T(EM1T+BGPI),";;",2) Q:BGPTMP="" D
  1. .S X=+$$VSTCPT^BGPMUUT1(DFN,VIEN,BGPTMP)
  1. .I +X S BGP2=1
  1. I 'BGP2 D
  1. .S X=+$$VSTCPT^BGPMUUT1(DFN,VIEN,"BGPMU OUTPT BEHAVIOR POS ENC")
  1. .I +X D
  1. ..S BGP2=1
  1. ..;I $E(FLG,1)=1 S X1=$$VSTMOD(DFN,VIEN,"BGPMU BEHAVIOR HLT MODIFIER") S:+X1 BGP2=1
  1. ..;I $E(FLG,1)'=1 S BGP2=1
  1. Q BGP2
  1. EM1T ;
  1. ;;BGPMU ENCOUNTER ED CPT
  1. ;;BGPMU OUTPT BEHAVIOR HLTH ENC
  1. ;
  1. VSTMOD(DFN,VIEN,TAX) ;EP Check to see if the patient had a CPT on a particular visit
  1. N TIEN,X,G,CPTT,CPT,EVDT,MOD1,MOD2
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) Q:'TIEN
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVCPT("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVCPT("AD",VIEN,X)) Q:X'=+X!(G) D Q:+G
  1. .S MOD1=$P(^AUPNVCPT(X,0),U,8)
  1. .I $D(^ATXAX(TIEN,21,"B",MOD1)) S G=1_U_MOD1_U_$P($G(^AUPNVCPT(X,12)),U,1)
  1. .I '+G D
  1. ..S MOD2=$P(^AUPNVCPT(X,0),U,9)
  1. ..I $D(^ATXAX(TIEN,21,"B",MOD2)) S G=1_U_MOD2_U_$P($G(^AUPNVCPT(X,12)),U,1)
  1. Q G
  1. ;
  1. EM2(DFN,VIEN) ;check visit for at least 1 E&M code indicating acute inpatient or non-acute inpatient
  1. N BGPI,BGPTMP
  1. S BGP2=0
  1. F BGPI=1:1 Q:BGP2'=0 S BGPTMP=$P($T(EM2T+BGPI),";;",2) Q:BGPTMP="" D
  1. .S X=+$$VSTCPT^BGPMUUT1(DFN,VIEN,BGPTMP)
  1. .I +X S BGP2=1
  1. Q BGP2
  1. EM2T ;
  1. ;;BGPMU NON-ACUTE INPT CPT
  1. ;;BGPMU ACUTE INPT ENC
  1. ;
  1. VSTPOV(DFN,VIEN,TAX) ;EP Check to see if the patient had an ICD on a particular visit
  1. N TIEN,X,G,ICD,ICDT,EVDT,FR
  1. S FR=0
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPOV("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .I $$ICD^ATXCHK($P(^AUPNVPOV(X,0),U),TIEN,9) S G=X
  1. .Q
  1. I 'G Q 0
  1. I G D
  1. .S ICD=$P($G(^AUPNVPOV(G,0)),U,1),ICDT=$P($G(^ICD9(ICD,0)),U,1)
  1. .S EVDT=$P($G(^AUPNVPOV(G,12)),U,1)
  1. .S FR=$P($G(^AUPNVPOV(G,0)),U,8)
  1. .S G=1_U_ICDT_U_EVDT_U_(FR'=2)
  1. Q $S(G:G,1:0)
  1. ;
  1. PLTAX(DFN,TAX,STAT,BDATE,EDATE) ;EP - is DX on problem list 1 or 0
  1. ;Input variables
  1. ;STAT - A for all problems, C for active problems, I for inactive
  1. ;DFN=IEN of the patient
  1. ;TAX=Name of the taxonomy
  1. ;CDATE=Date to check against
  1. I $G(BDATE)="" S BDATE=0
  1. I $G(EDATE)="" S EDATE=$P($$NOW^XLFDT(),".",1)
  1. I $G(DFN)="" Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(STAT)="" S STAT="A"
  1. N TIEN,PLSTAT S TIEN=$O(^ATXAX("B",TAX,0))
  1. I 'TIEN Q 0
  1. N PROB,ICD,I,SDTE,EDTE,PDTE,EDT
  1. S (PROB,ICD,I)=0
  1. F S PROB=$O(^AUPNPROB("AC",DFN,PROB)) Q:PROB'=+PROB!(+I) D
  1. .I $D(^AUPNPROB(PROB,0)) S ICD=$P($G(^AUPNPROB(PROB,0)),U),PLSTAT=$P($G(^AUPNPROB(PROB,0)),U,12)
  1. .S EDT=$P($G(^AUPNPROB(PROB,0)),U,8)
  1. .S SDTE=$P($G(^AUPNPROB(PROB,0)),U,13)
  1. .I SDTE'="" S EDT=SDTE
  1. .Q:(+BDATE&(EDT>BDATE))!(+EDATE&(EDT<EDATE))
  1. .I $$ICD^ATXCHK(ICD,TIEN,9) D
  1. ..S SDTE=$P($G(^AUPNPROB(PROB,0)),U,13)
  1. ..S EDTE=$P($G(^AUPNPROB(PROB,0)),U,8)
  1. ..I +SDTE S PDTE=SDTE
  1. ..E S PDTE=EDTE
  1. ..I STAT="A" S Y=$$GET1^DIQ(80,ICD,.01) S I=1_U_Y_U_PDTE_U_PROB
  1. ..I (STAT="C")&(PLSTAT="A") S Y=$$GET1^DIQ(80,ICD,.01) S I=1_U_Y_U_PDTE_U_PROB
  1. ..I (STAT="I")&(PLSTAT="I") S Y=$$GET1^DIQ(80,ICD,.01) S I=1_U_Y_U_PDTE_U_PROB
  1. Q I
  1. ;
  1. TEST ; debug target
  1. S U="^"
  1. S DT=$$DT^XLFDT()
  1. S DFN=876 ; DFN = patient code from VA PATIENT file
  1. S BGPBDATE=3100101 ; BGPBDATE = begin date of report
  1. S BGPEDATE=3101231 ; BGPEDATE = end date of report
  1. S BGPPROV=2 ; BGPPROV = provider code from NEW PERSON file
  1. S BGPMUTF="C" ; BGPMUTF = timeframe variable - "C"=current year; "P"=previous year; "B"=baseline year
  1. D ENTRY
  1. Q