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

BGPMUG02.m

Go to the documentation of this file.
  1. BGPMUG02 ; IHS/MSC/MMT - MI measure NQF0083 ;20-Aug-2011 14:56;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use report Heart Failure Beta-Blockers
  1. ENTRY ;EP
  1. N START,END,STRING,STRING2
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,EXCEPT,FIRST
  1. N OUTCNT,NFCNT,DEN,NUM,EXC,OUTENC,NFENC,VIENO,VIENNF,LASTVDT
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (HFDX,DEN,EXC,NUM)=0
  1. S (OUTCNT,NFCNT)=0
  1. ;Pts must be >=18
  1. ;No need to check further if no age match
  1. Q:BGPAGEE<18
  1. S BGPBIRTH=$$DOB^AUPNPAT(DFN)
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START)!(OUTCNT>1)!(NFCNT>1) D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN!(OUTCNT>1)!(NFCNT>1) D
  1. ..;Check provider, Only visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..S OUTENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU BP EM")
  1. ..I +OUTENC D
  1. ...S OUTCNT=OUTCNT+1
  1. ...S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. ...S VIENO(OUTCNT)=IEN_U_VDATE
  1. ..S NFENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU NURSING FAC EM")
  1. ..I +NFENC D
  1. ...S NFCNT=NFCNT+1
  1. ...S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. ...S VIENNF(NFCNT)=IEN_U_VDATE
  1. ..I (+OUTENC!(+NFENC))&($G(LASTVDT)="") S LASTVDT=VDATE
  1. I OUTCNT>1 S DEN=1,STRING=";EN:"_$$DATE^BGPMUUTL($P(VIENO(1),U,2))_";EN:"_$$DATE^BGPMUUTL($P(VIENO(2),U,2))
  1. E I NFCNT>1 S DEN=1,STRING=";EN:"_$$DATE^BGPMUUTL($P(VIENNF(1),U,2))_";EN:"_$$DATE^BGPMUUTL($P(VIENNF(2),U,2))
  1. Q:'DEN
  1. ;Next check to see if the patient is in the denominator
  1. S HFDX=$$HFDX(DFN,BGPBIRTH,LASTVDT)
  1. I +HFDX D
  1. .S DENSTR="HF:"_$$DATE^BGPMUUTL($P(HFDX,U,3))_";LVEF:"_$$DATE^BGPMUUTL($P(HFDX,U,5))_STRING
  1. .;If the patient has Heart Failure, check to see if they are in the numerator
  1. .S NUM=$$NUM(DFN,BGPBDATE,BGPEDATE)
  1. .;If not in the numerator,see if they are an exception
  1. .I +NUM=0 S EXC=$$EXCEPT^BGPMUA06(DFN,BGPBDATE,BGPEDATE)
  1. .D TOTAL(DFN,HFDX,NUM,EXC)
  1. Q
  1. TOTAL(DFN,HFDX,NUM,EXC) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DEN,DXTIME
  1. S TOTALS=$G(^TMP("BGPMU0083",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0083",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0083",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0083",$J,BGPMUTF,"EXC"))
  1. S NOTNUM=+$G(^TMP("BGPMU0083",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0083",$J,BGPMUTF,"DEN")=DENCT
  1. I +NUM D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0083",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0083",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DENSTR_U_"M:MED "_$$DATE^BGPMUUTL($P(NUM,U,3))
  1. I +EXC D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0083",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0083",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DENSTR_U_"Excluded"
  1. I +NUM=0&(EXC=0) D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0083",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0083",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DENSTR_U_"NM:"
  1. S ^TMP("BGPMU0083",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient",BGPMUTF)=1_U_+NUM_U_""
  1. S BGPICARE("MU.EP.0083.1",BGPMUTF)=1_U_+NUM_U_+EXC_U_DENSTR_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. HFDX(DFN,BDATE,EDATE) ;look for Heart Failure Dx AND LVEF < 40%
  1. N FOUND,DXHF,PLHF,DX1,DX2,CEF,IEN,INV,MTYPE,RESULT,RDATE
  1. S FOUND=0,DX1=0,DX2=0,CEF=0
  1. ;Check for the patient having a DX or Problem of Heart Failure (ever)
  1. S DXHF=$$LASTDX^BGPMUUT2(DFN,BGPBIRTH,EDATE,"BGPMU HEART FAILURE DX")
  1. I +DXHF S DX1=DXHF
  1. E D
  1. .S PLHF=$$PLTAX^BGPMUUT1(DFN,"BGPMU HEART FAILURE DX","C",EDATE)
  1. .I +PLHF S DX1=PLHF
  1. Q:DX1=0 0
  1. ;Now check for LVEF < 40%
  1. ;S MTYP="" S MTYP=$O(^AUTTMSR("B","HT",MTYP)) ;ZSAT: for testing; delete this line, keep next line
  1. S MTYP="" S MTYP=$O(^AUTTMSR("B","CEF",MTYP))
  1. Q:MTYP="" 0
  1. S INV=9999999-EDATE
  1. F S INV=$O(^AUPNVMSR("AA",DFN,MTYP,INV)) Q:'+INV!(+FOUND) D
  1. .S RDATE=9999999-INV
  1. .S IEN=0 F S IEN=$O(^AUPNVMSR("AA",DFN,MTYP,INV,IEN)) Q:IEN=""!(+FOUND) D
  1. ..S FOUND=1
  1. ..S RESULT=$P($G(^AUPNVMSR(IEN,0)),U,4)
  1. ..;I RESULT<80 S CEF=1_U_U_RDATE ;ZSAT: testing; delete this line; keep next line
  1. ..I RESULT<40 S CEF=1_U_RESULT_U_RDATE
  1. I +CEF D
  1. .S FOUND=1_U_$P(DX1,U,2)_U_$P(DX1,U,3)_U_$P(CEF,U,2)_U_$P(CEF,U,3)
  1. Q FOUND
  1. NUM(DFN,BGPBDATE,BGPEDATE) ;Look for Beta-blocker MED
  1. N FOUND,PMED
  1. S FOUND=0
  1. S PMED=$$FIND^BGPMUUT8(DFN,"BGPMU BETABLOCKER NDCS",BGPBDATE,"",BGPEDATE)
  1. I +PMED S FOUND=1_U_$P(PMED,U,2)_U_$P(PMED,U,3)
  1. Q FOUND
  1. EXCEPT(DFN,BDATE,EDATE) ;See if this patient has exceptions
  1. N RESULT,ARRY,HYPO,ASTHMA,BRADY,PACE,PACE2,AVBLOCK,MED
  1. S RESULT=0
  1. ;Check for arrythmia
  1. S ARRY=$$DXCK(DFN,"BGPMU ARRHYTHMIA DX",EDATE)
  1. I +ARRY S RESULT=ARRY Q RESULT
  1. ;Check for hypotension
  1. S HYPO=$$DXCK(DFN,"BGPMU HYPOTENSION DX",EDATE)
  1. I +HYPO S RESULT=HYPO Q RESULT
  1. ;Check for asthma
  1. S ASTHMA=$$DXCK(DFN,"BGPMU ASTHMA DX ICD",EDATE)
  1. I +ASTHMA S RESULT=ASTHMA Q RESULT
  1. ;Check for bradycardia
  1. S BRADY=$$DXCK(DFN,"BGPMU BRADYCARDIA DX",EDATE)
  1. I +BRADY S RESULT=BRADY Q RESULT
  1. ;Check for av block and NOT on cardiac pacemaker
  1. S AVBLOCK=$$DXCK(DFN,"BGPMU AV BLOCK DX",EDATE)
  1. I +AVBLOCK D Q:+RESULT RESULT
  1. .S PACE=$$LASTPRC^BGPMUUT2(DFN,"",BGPEDATE,"BGPMU CARDIAC PACER ICD0")
  1. .S PACE2=$$DXCK(DFN,"BGPMU CARDIAC PACER IN SITU DX",EDATE)
  1. .I +PACE=0&(+PACE2=0) S RESULT=AVBLOCK
  1. ;Next check for allergy
  1. S ALLER=$$ALLER^BGPMUA10("CV100","")
  1. I +ALLER S RESULT=1_U_$P(ALLER,U,1) Q RESULT
  1. ;Check for refusal of Betablockers
  1. S MED=$$MEDREF^BGPMUUT2(DFN,BDATE,EDATE_".2359","BGPMU BETABLOCKER NDCS")
  1. I +MED S RESULT=MED Q RESULT
  1. Q RESULT
  1. DXCK(DFN,TAX,CKDATE) ;Find dx on problem list or POV
  1. N A1,A2,FOUND
  1. S FOUND=0
  1. S A1=$$LASTDX^BGPMUUT2(DFN,"",CKDATE,TAX)
  1. I +A1 S FOUND=1_U_$P(A1,U,2)_U_$P(A1,U,3) Q FOUND
  1. S A2=$$PLTAX^BGPMUUT1(DFN,TAX,"C")
  1. I +A2 S FOUND=1_U_$P(A2,U,2)_U_$P(A2,U,3)
  1. Q FOUND