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

BGPMUG09.m

Go to the documentation of this file.
  1. BGPMUG09 ; IHS/MSC/MMT - MI measure NQF0089 ;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 retinopathy exam - communication w/provider
  1. ENTRY ;EP
  1. N START,END,STRING
  1. N IEN,VDATE,VALUE,EXCEPT,FIRST,VIEN,RESULT
  1. N CNT,NUM,DIABDX,DRENC
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (DIABDX,EXC,NUM)=0
  1. ;Pts must be >=18
  1. ;No need to check further if no age match
  1. Q:BGPAGEE<18
  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 DRENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ENC RETINOPATHY COMBINED")
  1. ..I +DRENC D VSTSTORE Q
  1. Q:CNT<2
  1. ;Next check to see if the patient is in the denominator
  1. S DIABDX=$$DEN(DFN,BGPBDATE,BGPEDATE)
  1. Q:'+DIABDX
  1. ;If the patient is diabetetic retinopathy, check to see if they are in the numerator
  1. S NUM=$$NUM(DFN,BGPBDATE,BGPEDATE,DIABDX)
  1. ;If not in the numerator,see if they are an exception
  1. I +NUM=0 S EXC=$$EXCEPT(DFN,BGPBDATE,BGPEDATE,DIABDX)
  1. D TOTAL(DFN,DIABDX,NUM,EXC)
  1. Q
  1. VSTSTORE ;Store compliant visit into array
  1. S CNT=CNT+1
  1. S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. S VIEN(CNT)=IEN_U_VDATE
  1. S STRING(CNT)=$$DATE^BGPMUUTL(VDATE)
  1. Q
  1. TOTAL(DFN,DIABDX,NUM,EXC) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DENSTR,DXTIME
  1. S TOTALS=$G(^TMP("BGPMU0089",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0089",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0089",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0089",$J,BGPMUTF,"EXC"))
  1. S NOTNUM=+$G(^TMP("BGPMU0089",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S (DENSTR,DXTIME)=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0089",$J,BGPMUTF,"DEN")=DENCT
  1. S DENSTR=$P(DIABDX,U,2)
  1. I $D(STRING(1)) S DENSTR=DENSTR_";EN:"_STRING(1)
  1. I $D(STRING(2)) S DENSTR=DENSTR_";EN:"_STRING(2)
  1. I +NUM D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0089",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0089",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DENSTR_U_"M:"_$P(NUM,U,2)
  1. I +EXC D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0089",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0089",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DENSTR_U_"Excluded"
  1. I +NUM=0&(EXC=0) D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0089",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0089",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DENSTR_U_"NM:"
  1. S ^TMP("BGPMU0089",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0089.1",BGPMUTF)=1_U_+NUM_U_+EXC_U_DENSTR_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. DEN(DFN,BGPBDATE,BGPEDATE) ;look for diabetes diagnosis
  1. N CHKDT,DX,DXSTR,EXAM,EXMPRC,EXAMSTR,CLINPTR,CLINCODE
  1. S DXSTR=""
  1. ;Check for the patient having a DX of diabetic retinopathy prior to last visit
  1. S CHKDT=$P(VIEN(1),U,2),BGPBIRTH=$$DOB^AUPNPAT(DFN)
  1. S DX=$$LASTDX^BGPMUUT2(DFN,BGPBIRTH,CHKDT,"BGPMU DIABETIC RETINOPATHY DX")
  1. I +DX S DXSTR="RET:"_$$DATE^BGPMUUTL($P(DX,U,3))
  1. S DX=$$PLTAX^BGPMUUT1(DFN,"BGPMU DIABETIC RETINOPATHY DX","C",CHKDT)
  1. I +DX S DXSTR="RET:"_$$DATE^BGPMUUTL($P(DX,U,3))
  1. Q:DXSTR="" 0
  1. S (VCNT,EXAM)=""
  1. F S VCNT=$O(VIEN(VCNT)) Q:(VCNT="")!(+EXAM) D
  1. .;check the CLINIC on the VISIT for a match
  1. .S CLINPTR=$P(^AUPNVSIT($P(VIEN(VCNT),U),0),U,8)
  1. .S CLINCODE=$S(CLINPTR'="":$P(^DIC(40.7,CLINPTR,0),U,2),1:"")
  1. .I CLINCODE="A2" S EXAM=1_U_U_$P(VIEN(VCNT),U,2) Q
  1. .;now look for procedures on the visit
  1. .S EXMPRC=$$VSTCPT^BGPMUUT1(DFN,$P(VIEN(VCNT),U),"BGPMU MACULAR FUNDUS EXAM CPT")
  1. .I +EXMPRC S EXAM=EXMPRC Q
  1. .S EXMPRC=$$VSTICD0^BGPMUUT3(DFN,$P(VIEN(VCNT),U),"BGPMU MACULAR FUNDUS EXAM ICD0")
  1. .I +EXMPRC S EXAM=EXMPRC Q
  1. Q:'+EXAM 0
  1. S EXAMSTR="EXAM:"_$$DATE^BGPMUUTL($P(EXAM,U,3))
  1. Q 1_U_DXSTR_";"_EXAMSTR_U_$P(EXAM,U,3)
  1. NUM(DFN,BGPBDATE,BGPEDATE,DIABDX) ;Look for evidence of a diabetic eye exam
  1. N FOUND,VCNT,EXAM,COMMCPT,EXAM14,EXAMSTR,CLINPTR,CLINCODE,DX
  1. S FOUND=0
  1. S EXAM14=$$FMADD^XLFDT($P(DIABDX,U,3),14)
  1. S COMMCPT=$$CPT^BGPMUUT1(DFN,BGPBDATE,EXAM14,"BGPMU MACULAR FUNDUS EXAM COMM")
  1. ; double check to ensure the finding code occurred after the exam date AND within 14 days
  1. I +COMMCPT&($P(COMMCPT,U,3)>=$P(DIABDX,U,3))&($P(COMMCPT,U,3)<=EXAM14) S FOUND=1_U_"COMM:"_$$DATE^BGPMUUTL($P(COMMCPT,U,3)) Q FOUND
  1. S (VCNT,EXAM)=""
  1. F S VCNT=$O(VIEN(VCNT)) Q:(VCNT="")!(+EXAM) D
  1. .;check the CLINIC on the VISIT for a match
  1. .S CLINPTR=$P(^AUPNVSIT($P(VIEN(VCNT),U),0),U,8)
  1. .S CLINCODE=$S(CLINPTR'="":$P(^DIC(40.7,CLINPTR,0),U,2),1:"")
  1. .I CLINCODE="A2" S FOUND=1_U_"COMM:"_$$DATE^BGPMUUTL($P(VIEN(VCNT),U,2)) Q
  1. Q FOUND
  1. EXCEPT(DFN,BGPBDATE,BGPEDATE,DIABDX) ;See if this patient has exceptions
  1. N EFOUND,NMI
  1. S EFOUND=0
  1. S NMI=$$REFTAX^BGPMUUT2(DFN,81,"BGPMU MACULAR FUNDUS EXAM COMM",BGPBIRTH,BGPEDATE)
  1. Q:+NMI 1_U_$P(NMI,U,4)_U_$P(NMI,U,2)
  1. Q EFOUND