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

BGPMUF06.m

Go to the documentation of this file.
  1. BGPMUF06 ; IHS/MSC/MGH - MI measure NQF0073 ;02-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 for IVD BP Mgmt
  1. ENTRY ;EP
  1. N START,END,BGPNUM,BGPDEN,BGPNUM,STRING,OUTCT,NFCT,INCT
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,FIRST,VIEN,RESULT,IVDSTRT,IVDEND
  1. N CNT,IVD,NUM,OUTENC,NFENC,VENC,IVDDX
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S IVDSTRT=$$FMADD^XLFDT(BGPEDATE,-730),IVDEND=$$FMADD^XLFDT(BGPEDATE,-426)
  1. S STRING="",IVDDX=0
  1. S (IVD,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. ;First check for IVD DX as an outpatient since this is more common
  1. S START=9999999-IVDSTRT,END=9999999-BGPEDATE,VALUE=0
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START)!(+IVD) D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN!(+IVD) 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 NFENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ACUTE INPT ENC")
  1. ..I +NFENC D VSTSTORE Q
  1. ..S VENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU ENC OUTPATIENT ICD")
  1. ..I +VENC D VSTSTORE Q
  1. ;skip to numerator checking if IVD Dx found
  1. I +IVD G NUMCHKS
  1. ;check for other procedures or diagnoses
  1. S CNT=0
  1. S START=9999999-IVDSTRT,END=9999999-IVDEND,VALUE=0
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START)!(+IVD) D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN!(+IVD) D
  1. ..;Check provider, Only visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..S NFENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ACUTE INPT ENC")
  1. ..I +NFENC D
  1. ...S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. ...S CNT=CNT+1
  1. ...S VIEN(CNT)=IEN_U_VDATE_U_$$DATE^BGPMUUTL(VDATE)
  1. ...S STRING(CNT)=$$DATE^BGPMUUTL(VDATE)
  1. ...S IVD=$$INPTDEN(DFN,IEN,IVDSTRT,IVDEND)
  1. NUMCHKS ;If the patient had IVD, check to see if they are in the numerator
  1. Q:'IVD
  1. S NUM=$$NUM(DFN,BGPBDATE,BGPEDATE)
  1. D TOTAL1(DFN,IVD,NUM)
  1. Q
  1. VSTSTORE ;Store compliant visit into array
  1. S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. S CNT=CNT+1
  1. S VIEN(CNT)=IEN_U_VDATE_U_$$DATE^BGPMUUTL(VDATE)
  1. S STRING(CNT)=$$DATE^BGPMUUTL(VDATE)
  1. S IVD=$$OUTPTDEN(DFN,IEN)
  1. Q
  1. TOTAL1(DFN,IVD,NUM) ;See where this patient ends up
  1. N PTCNT,DENCT,NUM1CT,NOTNUM1,TOTALS,DXTIME,DEN
  1. S TOTALS=$G(^TMP("BGPMU0073",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0073",$J,BGPMUTF,"DEN"))
  1. S NUM1CT=+$G(^TMP("BGPMU0073",$J,BGPMUTF,"NUM"))
  1. S NOTNUM1=+$G(^TMP("BGPMU0073",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S (DEN,DXTIME)=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0073",$J,BGPMUTF,"DEN")=DENCT
  1. I $P(IVD,U,3)'="" S DXTIME=$$DATE^BGPMUUTL($P(IVD,U,3))
  1. S DEN=$P(IVD,U,2)_DXTIME_";EN:"_STRING(1)
  1. I +NUM=2 D
  1. .S NUM1CT=NUM1CT+1 S ^TMP("BGPMU0073",$J,BGPMUTF,"NUM")=NUM1CT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0073",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DEN_U_$P(NUM,U,2,5)
  1. I +NUM<2 D
  1. .S NOTNUM1=NOTNUM1+1 S ^TMP("BGPMU0073",$J,BGPMUTF,"NOT")=NOTNUM1
  1. .I BGPMUTF="C" S ^TMP("BGPMU0073",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DEN_U_$P(NUM,U,2,5)
  1. S ^TMP("BGPMU0073",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0073.1",BGPMUTF)=1_U_(+NUM=2)_U_""_U_DEN_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. OUTPTDEN(DFN,VIEN) ; Get the denominator
  1. N RESULT,IVDA,IVDB,IVDDX,DOB
  1. S RESULT=0
  1. ;Check for IVD Dx
  1. S DOB=$$GET1^DIQ(2,DFN,.03,"I")
  1. S IVDA=$$VSTPOV^BGPMUUT3(DFN,VIEN,"BGPMU IVD DX")
  1. ; PROBLEM check not in ORT - S IVDB=$$PLTAX^BGPMUUT1(DFN,"BGPMU IVD DX","A",END)
  1. I +IVDA S IVDDX=IVDA
  1. ;I +IVDB S IVDDX=IVDB
  1. ;I +IVDA!(+IVDB) S RESULT=1_U_"IVD:"_$P(IVDDX,U,2)_U_$P(IVDDX,U,3) Q RESULT
  1. I +IVDA S RESULT=1_U_"IVD:"_U_$P(IVDDX,U,3) Q RESULT
  1. Q RESULT
  1. INPTDEN(DFN,VIEN,START,END) ;Evaluate Inpatient visit denominator criteria
  1. N RESULT,PTCA,PTCAP,AMI,CABG,CABGP
  1. S RESULT=0
  1. ;Check for PTCA Codes (14 to 24 months hence)
  1. S PTCA=$$CPT^BGPMUUT1(DFN,IVDSTRT,IVDEND,"BGPMU PTCA CPT")
  1. ;I +PTCA S RESULT=1_U_"PTCA:"_$P(PTCA,U,2)_U_$P(PTCA,U,3) Q RESULT
  1. I +PTCA S RESULT=1_U_"PTCA:"_U_$P(PTCA,U,3) Q RESULT
  1. S PTCAP=$$LASTPRC^BGPMUUT2(DFN,IVDSTRT,IVDEND,"BGPMU PTCA PROCEDURE")
  1. I +PTCAP S RESULT=1_U_"PTCA:"_U_$P(PTCAP,U,3) Q RESULT
  1. ;Check for AMI Dx (during visit)
  1. S AMI=$$VSTPOV^BGPMUUT3(DFN,VIEN,"BGPMU ACUTE MI DX")
  1. I +AMI S RESULT=1_U_"AMI:"_U_$P(AMI,U,3) Q RESULT
  1. ;Check for CABG procedure (during visit)
  1. S CABG=$$VSTCPT^BGPMUUT1(DFN,VIEN,"BGPMU CABG CPT")
  1. I +CABG S RESULT=1_U_"CABG:"_U_$P(CABG,U,3) Q RESULT
  1. S CABGP=$$VSTICD0^BGPMUUT3(DFN,VIEN,"BGPMU CABG PROCEDURE")
  1. I +CABGP S RESULT=1_U_"CABG:"_U_$P(CABGP,U,3) Q RESULT
  1. Q RESULT
  1. NUM(DFN,BGPBDATE,BGPEDATE) ;check for BP's
  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 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)=VSIEN_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