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

BGPMUF09.m

Go to the documentation of this file.
  1. BGPMUF09 ; IHS/MSC/MGH - MI measure NQF0052 ;10-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 LOW BACK PAIN
  1. ENTRY ;EP
  1. N START,END,BGPNUM,BGPDEN,BGPNUM,STRING,STRING2
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,FIRST,VIEN,RESULT
  1. N CNT,DEN,NUM,ERENC,OUTENC,VENC,ORTHENC,LBPENC
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (DEN,NUM)=0
  1. ;Pts must be >18 and <49
  1. ;No need to check further if no age match
  1. Q:BGPAGEE<18!(BGPAGEE>49)
  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 Low Back Pain visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..S LBPENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU BACK PAIN DX")
  1. ..Q:'+LBPENC
  1. ..;Count this visit if Low Back Pain Dx AND proper encounter code
  1. ..S ERENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU DIAB ED ENCOUNTER CPT")
  1. ..I +ERENC D VSTSTORE Q
  1. ..S OUTENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ENCOUNTER OUTPT")
  1. ..I +OUTENC D VSTSTORE Q
  1. ..S VENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU ENC OUTPATIENT ICD")
  1. ..I +VENC D VSTSTORE Q
  1. ..S ORTHENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ENC ORTHO CPT")
  1. ..I +ORTHENC D VSTSTORE Q
  1. Q:'$D(VIEN)
  1. ;Next check to see if the patient has any Dx within certain timeframes prior to first LBP visit
  1. ; **Earliest LBP visit will be the last one in VIEN array (VIEN(CNT))
  1. S DEN=$$DEN(DFN,.VIEN,CNT,BGPBDATE,BGPEDATE)
  1. I +DEN D
  1. .;If the patient has LBP, check to see if they are in the numerator
  1. .S NUM=$$NUM(DFN,.VIEN,CNT,BGPBDATE,BGPEDATE)
  1. .D TOTAL(DFN,DEN,NUM)
  1. Q
  1. VSTSTORE ;Store compliant visit into array
  1. ;Count this visit if Low Back Pain Dx AND proper encounter code
  1. S CNT=CNT+1
  1. S VDATE=$P($P($G(^AUPNVSIT(IEN,0)),U,1),".")
  1. S VIEN(CNT)=IEN_U_VDATE_U_$P($P(LBPENC,U,3),".")
  1. Q
  1. TOTAL(DFN,DEN,NUM) ;See where this patient ends up
  1. N PTCNT,DENCT,NUMCT,NOTNUM,TOTALS,DENSTR,DXTIME
  1. S TOTALS=$G(^TMP("BGPMU0052",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0052",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0052",$J,BGPMUTF,"NUM"))
  1. S NOTNUM=+$G(^TMP("BGPMU0052",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S DENSTR=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0052",$J,BGPMUTF,"DEN")=DENCT
  1. S DENSTR="LBP:"_$$DATE^BGPMUUTL($P(VIEN(CNT),U,3))
  1. S DENSTR=DENSTR_";EN:"_$$DATE^BGPMUUTL($P(VIEN(CNT),U,2))
  1. I +NUM D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0052",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0052",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DENSTR_U_"M:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. I +NUM=0 D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0052",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0052",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DENSTR_U_"NM:"_$P(NUM,U,3)_";"_$P(NUM,U,2)
  1. S ^TMP("BGPMU0052",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0052.1",BGPMUTF)=1_U_+NUM_U_""_U_DENSTR_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. DEN(DFN,VIEN,CNT,BGPBDATE,BGPEDATE) ;Check for conditions that would preclude denominator inclusion
  1. N LBPVDATE,PRIORST,PRIOREND,PRIORDX,PRIORPL
  1. S LBPVDATE=$P($P(VIEN(CNT),U,2),".")
  1. S PRIORST=$$FMADD^XLFDT(LBPVDATE,-180),PRIOREND=$$FMADD^XLFDT(LBPVDATE,-1)
  1. S PRIORDX=$$LASTDX^BGPMUUT2(DFN,PRIORST,PRIOREND,"BGPMU BACK PAIN DX")
  1. Q:+PRIORDX 0
  1. S PRIORPL=$$PLTAX^BGPMUUT1(DFN,"BGPMU BACK PAIN DX","C",PRIOREND)
  1. Q:$P(PRIORPL,U,3)>=PRIORST 0
  1. S LBP2YR=$$FMADD^XLFDT(BGPEDATE,-730)
  1. ;Check for cancer Dx up to 2 years prior to period end
  1. S PRIORDX=$$LASTDX^BGPMUUT2(DFN,LBP2YR,BGPEDATE,"BGPMU CANCER DX")
  1. Q:+PRIORDX 0
  1. S PRIORPL=$$PLTAX^BGPMUUT1(DFN,"BGPMU CANCER DX","C",BGPEDATE)
  1. Q:$P(PRIORPL,U,3)>=LBP2YR 0
  1. ;Check for trauma Dx up to 2 years prior to period end
  1. S PRIORDX=$$LASTDX^BGPMUUT2(DFN,LBP2YR,BGPEDATE,"BGPMU TRAUMA DX")
  1. Q:+PRIORDX 0
  1. S PRIORPL=$$PLTAX^BGPMUUT1(DFN,"BGPMU TRAUMA DX","C",BGPEDATE)
  1. Q:$P(PRIORPL,U,3)>=LBP2YR 0
  1. ;Check for IV drug abuse Dx up to 2 years prior to period end
  1. S PRIORDX=$$LASTDX^BGPMUUT2(DFN,LBP2YR,BGPEDATE,"BGPMU IV DRUG ABUSE DX")
  1. Q:+PRIORDX 0
  1. S PRIORPL=$$PLTAX^BGPMUUT1(DFN,"BGPMU IV DRUG ABUSE DX","C",BGPEDATE)
  1. Q:$P(PRIORPL,U,3)>=LBP2YR 0
  1. ;Check for neurologic impairment Dx up to 2 years prior to period end
  1. S PRIORDX=$$LASTDX^BGPMUUT2(DFN,LBP2YR,BGPEDATE,"BGPMU NEUROLOGIC DISORDER DX")
  1. Q:+PRIORDX 0
  1. S PRIORPL=$$PLTAX^BGPMUUT1(DFN,"BGPMU NEUROLOGIC DISORDER DX","C",BGPEDATE)
  1. Q:$P(PRIORPL,U,3)>=LBP2YR 0
  1. Q 1
  1. NUM(DFN,VIEN,CNT,BGPBDATE,BGPEDATE) ;Look for spinal imaging study
  1. N SPINAL,LBPDATE,LBPD28
  1. S LBPDATE=$P(VIEN(CNT),U,3),LBPD28=$$FMADD^XLFDT(LBPDATE,28)
  1. ;Look for V RADIOLOGY event for spinal study
  1. S SPINAL=$$RAD^BGPMUUT1(DFN,LBPDATE,LBPD28,"BGPMU SPINAL STUDY CPT",7)
  1. ;return TRUE if no spinal study found
  1. I +SPINAL Q 0_U_SPINAL
  1. ;Look for ORDER for spinal study
  1. S SPINAL=$$FIND^BGPMUUT7(DFN,"BGPMU SPINAL STUDY CPT",LBPDATE,LBPD28) ;RAD procedure check
  1. I +SPINAL Q 0_U_$P(SPINAL,U,2,3)
  1. Q 1