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

BGPMUA06.m

Go to the documentation of this file.
  1. BGPMUA06 ; IHS/MSC/MGH - MI measure NQF0055 ;20-Jul-2011 14:56;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use report for diabetic eye exam
  1. ENTRY ;EP
  1. N START,END,BGPNUM,BGPDEN,BGPNUM,AENC,BENC,STRING,STRING2,BGPHYPER,BGPHYPL
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,EXCEPT,FIRST,VIEN,EXCEPT,RESULT,ERENC
  1. N CNT,DIAB,NUM,DIAB,OUTENC,OPHENC,NONENC,VENC,DIABDX,INENC
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S DIABDX=0
  1. S (DIAB,EXC,NUM)=0
  1. ;Pts must be >18 and <75
  1. ;No need to check further if no age match
  1. Q:BGPAGEE<18!(BGPAGEE>75)
  1. S CNT=0
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN D
  1. ..;Check provider, Only visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..S OUTENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ENCOUNTER OUTPT")
  1. ..I +OUTENC D VSTSTORE Q
  1. ..S OPHENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU OPTHAMOLOGY CPTS")
  1. ..I +OPHENC D VSTSTORE Q
  1. ..S NONENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU NON-ACUTE INPT CPT")
  1. ..I +NONENC D VSTSTORE Q
  1. ..S VENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU ENC OUTPATIENT ICD")
  1. ..I +VENC D VSTSTORE Q
  1. ..S INENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ACUTE INPT ENC")
  1. ..I +INENC D VSTSTORE Q
  1. ..S ERENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU DIAB ED ENCOUNTER CPT")
  1. ..I +ERENC D VSTSTORE Q
  1. ;Next check to see if the patient is in the denominator
  1. ;Denominator is that the pt had a diabetes medicine
  1. ;in the last 2 years or a DX of diabetes in the last 2 years along with
  1. ;one inpt visit or 2 or more outpt visits
  1. S DIAB=$$DIAB(DFN,BGPBDATE,BGPEDATE,CNT,DIABDX)
  1. I +DIAB D
  1. .;If the patient is diabetic, check to see if they are in the numerator
  1. .S NUM=$$NUM(DFN,BGPBDATE,BGPEDATE)
  1. .;If not in the numerator and pt is on diabetes meds but no DX of diabetes see if they are an exception
  1. .I NUM=0&(+DIAB=2) S EXC=$$EXCEPT(DFN,BGPBDATE,BGPEDATE,DIABDX)
  1. .D TOTAL(DFN,DIAB,NUM,EXC)
  1. Q
  1. VSTSTORE ;Store a compliant visit into the array
  1. S CNT=CNT+1
  1. S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. S VIEN(CNT)=IEN_U_VDATE
  1. Q
  1. TOTAL(DFN,DIAB,NUM,EXC) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DEN,DXTIME
  1. S TOTALS=$G(^TMP("BGPMU0055",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0055",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0055",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0055",$J,BGPMUTF,"EXC"))
  1. S NOTNUM=+$G(^TMP("BGPMU0055",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S (DEN,DXTIME)=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0055",$J,BGPMUTF,"DEN")=DENCT
  1. I $P(DIAB,U,3)'="" S DXTIME=$$DATE^BGPMUUTL($P(DIAB,U,3))
  1. S DEN=$P(DIAB,U,2)_" "_DXTIME
  1. I $D(STRING(1)) S DEN=DEN_";EN:"_STRING(1)
  1. I $D(STRING(2)) S DEN=DEN_";EN:"_STRING(2)
  1. I +NUM D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0055",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0055",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DEN_U_"M:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. I +EXC D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0055",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0055",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DEN_U_"EXCLUDE"
  1. I +NUM=0&(EXC=0) D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0055",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0055",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DEN_U_"NM:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. S ^TMP("BGPMU0055",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0055.1",BGPMUTF)=1_U_+NUM_U_+EXC_U_DEN_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. DIAB(DFN,BGPBDATE,BGPEDATE,CNT,DIABDX) ;look for diabetes diagnosis
  1. N FOUND,YR1,YR2,OENC,AENC,NENC,EENC,DX,AMED,BMED,CMED,DMED,EMED,FMED,GMED,HMED,IMED,DIABX
  1. S FOUND=0,DX=0
  1. ;Check for the patient having a DX of diabetes in the last 2yrs and having
  1. ;a current visit (One or two years)
  1. N X1,X2,X,DXA,DXB
  1. S X1=BGPBDATE,X2=-730 D C^%DTC S YR2=X
  1. S DXA=$$LASTDX^BGPMUUT2(DFN,YR2,BGPEDATE,"BGPMU DIABETES DX")
  1. S DXB=$$PLTAX^BGPMUUT1(DFN,"BGPMU DIABETES DX","C",BGPEDATE)
  1. I +DXA S DX=DXA
  1. E I +DXB S DX=DXB
  1. N X1,X2,X S X1=BGPEDATE,X2=-365 D C^%DTC S YR1=X
  1. I (+DX)&($D(VIEN)) D Q FOUND
  1. .S AENC=$$CPT^BGPMUUT1(DFN,YR1,BGPEDATE,"BGPMU ACUTE INPT ENC")
  1. .I +AENC D Q
  1. ..S DIABDX=1,FOUND=1_U_"ICD:"_$$DATE^BGPMUUTL($P($P(DX,U,3),".",1))
  1. ..S STRING(1)=$$DATE^BGPMUUTL($P($P(VIEN(1),U,2),".",1))
  1. .S EENC=$$CPT^BGPMUUT1(DFN,YR1,BGPEDATE,"BGPMU DIAB ED ENCOUNTER CPT")
  1. .I +EENC D Q
  1. ..S DIABDX=1,FOUND=1_U_"ICD:"_$$DATE^BGPMUUTL($P($P(DX,U,3),".",1))
  1. ..S STRING(1)=$$DATE^BGPMUUTL($P($P(VIEN(1),U,2),".",1))
  1. .I CNT>1 D Q
  1. ..S DIABX=1,FOUND=1_U_"ICD:"_$$DATE^BGPMUUTL($P($P(DX,U,3),".",1))
  1. ..S STRING(1)=$$DATE^BGPMUUTL($P($P(VIEN(1),U,2),".",1))
  1. ..S STRING(2)=$$DATE^BGPMUUTL($P($P(VIEN(2),U,2),".",1))
  1. ;If DX not found, check for meds
  1. ;Check for the patient being on a diabetic med in the last 2 years
  1. S AMED=$$FIND^BGPMUUT8(DFN,"BGPMU DIAB MEDS INDICATIVE ALL",YR2,BGPPROV,BGPEDATE)
  1. I +AMED S FOUND=2_U_"MED:"_$$DATE^BGPMUUTL($P($P(AMED,U,3),".",1)) Q FOUND
  1. Q FOUND
  1. NUM(DFN,BGPBDATE,BGPEDATE) ;Look for evidence of a diabetic eye exam
  1. N FOUND,YR1,YR2,EXMCPT,EXMPRC,EXMICD,RETDX,RETDX1
  1. S FOUND=0
  1. ;Set date 1yr before end
  1. ;If the exam if found in the reporting period, the patient meets the numerator
  1. N X1,X2,X S X1=BGPBDATE,X2=-365 D C^%DTC S YR1=X
  1. S EXMCPT=$$CPT^BGPMUUT1(DFN,BGPBDATE,BGPEDATE,"BGPMU DIABETIC EYE EXAM CPT")
  1. I +EXMCPT S FOUND=1_U_$P(EXMCPT,U,2)_U_$P(EXMCPT,U,3) Q FOUND
  1. S EXMPRC=$$LASTPRC^BGPMUUT2(DFN,BGPBDATE,BGPEDATE,"BGPMU DIAB EYE EXAM ICD0")
  1. I +EXMPRC S FOUND=1_U_$P(EXMPRC,U,2)_U_$P(EXMPRC,U,3) Q FOUND
  1. S EXMICD=$$LASTDX^BGPMUUT2(DFN,BGPBDATE,BGPEDATE,"BGPMU DIABETIC EYE EXAM ICD9")
  1. I +EXMICD S FOUND=1_U_$P(EXMICD,U,2)_U_$P(EXMICD,U,3) Q FOUND
  1. ;If exam not found in reporting period, try again in year before
  1. S EXMCPT=$$CPT^BGPMUUT1(DFN,YR1,BGPBDATE,"BGPMU DIABETIC EYE EXAM CPT")
  1. I +EXMCPT S FOUND=1_U_$P(EXMCPT,U,2)_U_$P(EXMCPT,U,3) G EXAM
  1. S EXMPRC=$$LASTPRC^BGPMUUT2(DFN,YR1,BGPBDATE,"BGPMU DIAB EYE EXAM ICD0")
  1. I +EXMPRC S FOUND=1_U_$P(EXMPRC,U,2)_U_$P(EXMPRC,U,3) G EXAM
  1. S EXMICD=$$LASTDX^BGPMUUT2(DFN,YR1,BGPBDATE,"BGPMU DIABETIC EYE EXAM ICD9")
  1. I +EXMICD S FOUND=1_U_$P(EXMICD,U,2)_U_$P(EXMICD,U,3) G EXAM
  1. EXAM ;If exam found check and see if the patient has diabetic retinopathy in the year before the reporting period
  1. I +EXMCPT!(+EXMPRC)!(EXMICD) D
  1. .S RETDX=$$LASTDX^BGPMUUT2(DFN,YR1,BGPBDATE,"BGPMU DIABETIC RETINOPATHY DX")
  1. .S RETDX1=$$PLTAX^BGPMUUT1(DFN,"BGPMU DIABETIC RETINOPATHY DX","A")
  1. .;If retinopathy then pt does not meet numerator
  1. .I +RETDX S FOUND=0_U_$P(RETDX,U,2)_";"_$P(RETDX,U,3)
  1. .I +RETDX1 S FOUND=0_U_$P(RETDX1,U,2)_";"_$P(RETDX1,U,3)
  1. Q FOUND
  1. EXCEPT(DFN,BGPBDATE,BGPEDATE,DIABDX) ;See if this patient has exceptions
  1. N EFOUND,YR2,DX,PO,PO1,GD,GD1,SD,SD1
  1. S EFOUND=0
  1. N X1,X2,X S X1=BGPEDATE,X2=-721 D C^%DTC S YR2=X
  1. ;Polycystic ovaries are an exception if there is also not an DX of diabetes
  1. S PO=$$LASTDX^BGPMUUT2(DFN,YR2,BGPEDATE,"BGPMU POLYCYSTIC OVARIES DX")
  1. S PO1=$$PLTAX^BGPMUUT1(DFN,"BGPMU POLYCYSTIC OVARIES DX","A")
  1. I +PO!(+PO1) S EFOUND=1_U_$P(PO,U,2) Q EFOUND
  1. ;Gestational diabetes or steroid induced diabetes is an exception if the pt does not have diabetes
  1. S GD=$$LASTDX^BGPMUUT2(DFN,YR2,BGPEDATE,"BGPMU GESTATIONAL DIABETES DX")
  1. S GD1=$$PLTAX^BGPMUUT1(DFN,"BGPMU GESTATIONAL DIABETES DX","A")
  1. I +GD!(+GD1) S EFOUND=1_U_$P(GD,U,2) Q EFOUND
  1. S SD=$$LASTDX^BGPMUUT2(DFN,YR2,BGPEDATE,"BGPMU STEROID DIABETES DX")
  1. S SD1=$$PLTAX^BGPMUUT1(DFN,"BGPMU STEROID DIABETES DX","A")
  1. I +SD!(+SD1) S EFOUND=1_U_$P(SD,U,2)
  1. Q EFOUND