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

BGPMUA07.m

Go to the documentation of this file.
  1. BGPMUA07 ; IHS/MSC/MGH - MI measure NQF0056 & NQF0061 ;25-Jul-2011 08:35;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use report for diabetic foot exam
  1. ENTRY1 ;EP Entry point for NQA0056 Diabetic food exam
  1. N START,END,BGPNUM,BGPDEN,BGPNUM,STRING,STRING2,BGPHYPER,BGPHYPL
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,EXCEPT,FIRST,VIEN,EXCEPT,RESULT
  1. N CNT,DIAB,NUM,EXC,DIAB,OUTENC,OPHENC,NONENC,VENC,DIABDX,ERENC,INENC
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (STRING,STRING2)="",DIABDX=0
  1. ;Pts must be >18 and <75
  1. ;No need to check further if no age match
  1. S DIABDX=0
  1. S (DIAB,EXC,NUM)=0
  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 INENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ACUTE INPT ENC")
  1. ..I +INENC D VSTSTORE Q
  1. ..S VENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU ENC OUTPATIENT ICD")
  1. ..I +VENC 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^BGPMUA06(DFN,BGPBDATE,BGPEDATE,CNT,DIABDX)
  1. I +DIAB D
  1. .;If the patient is diabetetic, check to see if they are in the numerator
  1. .S NUM=$$NUM1(DFN,BGPBDATE,BGPEDATE)
  1. .;If not in the numerator,see if they are an exception
  1. .I NUM=0&(+DIAB=2) S EXC=$$EXCEPT^BGPMUA06(DFN,BGPBDATE,BGPEDATE,DIABDX)
  1. .D TOTAL1(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. S STRING(CNT)=$$DATE^BGPMUUTL(VDATE)
  1. Q
  1. TOTAL1(DFN,DIAB,NUM,EXC) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DXTIME,DEN
  1. S TOTALS=$G(^TMP("BGPMU0056",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0056",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0056",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0056",$J,BGPMUTF,"EXC"))
  1. S NOTNUM=+$G(^TMP("BGPMU0056",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S (DEN,DXTIME)=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0056",$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("BGPMU0056",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0056",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DEN_U_"M:"_$P(NUM,U,2)_";"_$P(NUM,U,3)_";"_$P(NUM,U,4)_";"_$P(NUM,U,5)
  1. I +EXC D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0056",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0056",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DEN_U_"EXCLUDE"
  1. I NUM=0&(EXC=0) D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0056",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0056",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DEN_U_"NM:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. S ^TMP("BGPMU0056",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0056.1",BGPMUTF)=1_U_+NUM_U_+EXC_U_DEN_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. NUM1(DFN,BGPBDATE,BGPEDATE) ;Look for evidence of a diabetic foot exam
  1. N FOUND,YR1,EXM
  1. S FOUND=0
  1. ;Search for CPT code during the reporting period
  1. S EXM=$$CPT^BGPMUUT1(DFN,BGPBDATE,BGPEDATE,"BGPMU DIAB FOOT EXAM CPT")
  1. I +EXM S FOUND=1_U_$P(EXM,U,2)_U_$P(EXM,U,3)
  1. Q FOUND
  1. ENTRY2 ;EP Entry point for NQA0061 Most recent BP<140/90
  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
  1. N CNT,DIAB,NUM,EXC,DIAB,OUTENC,OPHENC,NONENC,VENC,DIABDX,ERENC,INENC
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (STRING,STRING2)=""
  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 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. ..S VENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU ENC OUTPATIENT ICD")
  1. ..I +VENC 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 visit
  1. S DIAB=$$DIAB^BGPMUA06(DFN,BGPBDATE,BGPEDATE,CNT,DIABDX)
  1. I +DIAB D
  1. .;If the patient is diabetetic, check to see if they are in the numerator
  1. .S NUM=$$NUM2(DFN,BGPBDATE,BGPEDATE)
  1. .;If not in the numerator,see if they are an exception
  1. .I NUM'=2&(+DIAB=2) S EXC=$$EXCEPT^BGPMUA06(DFN,BGPBDATE,BGPEDATE,DIABDX)
  1. .D TOTAL2(DFN,DIAB,NUM,EXC)
  1. Q
  1. TOTAL2(DFN,DIAB,NUM,EXC) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DXTIME,DEN
  1. S TOTALS=$G(^TMP("BGPMU0061",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0061",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0061",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0061",$J,BGPMUTF,"EXC"))
  1. S NOTNUM=+$G(^TMP("BGPMU0061",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S (DEN,DXTIME)=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0061",$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=2 D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0061",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0061",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DEN_U_"M:"_$P(NUM,U,2)_";"_$P(NUM,U,3)_";"_$P(NUM,U,4)_";"_$P(NUM,U,5)
  1. I +EXC D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0061",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0061",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DEN_U_"EXCLUDE"
  1. I +NUM'=2&(EXC=0) D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0061",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0061",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DEN_U_"NM:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. S ^TMP("BGPMU0061",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0061.1",BGPMUTF)=1_U_(+NUM=2)_U_+EXC_U_DEN_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. NUM2(DFN,BGPBDATE,BGPEDATE) ; Find the latest BP
  1. ;check blood pressure reading of most recent outpatient encounter
  1. N LDIA,LSYS,BGPBP,BP,SYS,DIA,BGPI,BGPNUM,BGPCNT,RESULT,VSIEN
  1. S (LDIA,LSYS)=""
  1. ;Find is pt has a BP on the chosen visits
  1. N IEN,MSR,MTYP,BP,BPCNT,SAVE,ARRAY,VST,VCNT,INV,DTE,EIE
  1. S BP=0,BPCNT=0,VCNT=0
  1. S MTYP="" S MTYP=$O(^AUTTMSR("B","BP",MTYP))
  1. Q:MTYP="" 0
  1. Q:'$D(VIEN) 0
  1. S VSIEN=$P($G(VIEN(1)),U,1)
  1. S IEN=VSIEN,SAVE=0
  1. S MSR="" F S MSR=$O(^AUPNVMSR("AD",VSIEN,MSR)) Q:MSR="" D
  1. .S EIE=$$GET1^DIQ(9000010.01,MSR,2,"I")
  1. .Q:EIE=1
  1. .I $P($G(^AUPNVMSR(MSR,0)),U,1)=MTYP D
  1. ..S BPCNT=BPCNT+1
  1. ..S INV=9999999-$P($G(^AUPNVMSR(MSR,12)),U,1)
  1. ..S ARRAY(INV)=IEN_U_$P($G(^AUPNVMSR(MSR,0)),U,4)_U_$$DATE^BGPMUUTL($P($G(^AUPNVMSR(MSR,12)),U,1))
  1. I BPCNT=1 D
  1. .S DTE="" S DTE=$O(ARRAY(DTE))
  1. .S RESULT=$P($G(ARRAY(DTE)),U,2)
  1. .S SYS=$P(RESULT,"/",1),DIAS=$P(RESULT,"/",2)
  1. .I SYS>139!(DIAS>89) S BP=1_U_RESULT_U_$P($G(ARRAY(DTE)),U,3)
  1. .E S BP=2_U_RESULT_U_$P($G(ARRAY(DTE)),U,3)
  1. ;More than one BP on the visit
  1. I BPCNT>1 D
  1. .N DONE,SYSARRAY,DIAARRAY
  1. .S DONE=0
  1. .S DTE="" F S DTE=$O(ARRAY(DTE)) Q:DTE=""!(+DONE) D
  1. ..S RESULT=$P($G(ARRAY(DTE)),U,2)
  1. ..S SYS=$P(RESULT,"/",1),DIAS=$P(RESULT,"/",2)
  1. ..I SYS<140&(DIAS<90) D Q
  1. ...;If any BP is <140/90 we are done
  1. ...S DONE=1
  1. ...S BP=2_U_RESULT_U_$P($G(ARRAY(DTE)),U,3)
  1. ..;If Sys <140 save it
  1. ..I SYS<140 D Q
  1. ...S SYSARRAY(SYS)=RESULT_U_$P($G(ARRAY(DTE)),U,3)
  1. ..;If Dias <90 save it
  1. ..I DIAS<90 D Q
  1. ...S DIAARRAY(DIAS)=RESULT_U_$P($G(ARRAY(DTE)),U,3)
  1. .;when done looping, see if there are any saved items
  1. .I $D(SYSARRAY)&$D(DIAARRAY) D
  1. ..S RES1=$O(SYSARRAY(""))
  1. ..S RES2=$O(DIAARRAY(""))
  1. ..S BP=2_U_$G(SYSARRAY(RES1))_U_$G(DIAARRAY(RES2))
  1. Q BP