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

BGPMUD01.m

Go to the documentation of this file.
  1. BGPMUD01 ; IHS/MSC/SAT - MU measure NQF0028A ;11-Feb-2011 15:43;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;code to collect meaningful use report tobacco use assessment
  1. ENTRY ;EP
  1. ; expects:
  1. ; DFN = patient code from VA PATIENT file
  1. ; BGPBDATE = begin date of report
  1. ; BGPEDATE = end date of report
  1. ; BGPPROV = provider code from NEW PERSON file
  1. ; BGPMUTF = timeframe variable - "C"=current year; "P"=previous year; "B"=baseline year
  1. N BGP1,BGP2,BGPDEN,BGPDSTR,BGPNUM,BGPNSTR,BGPDT,BGPAGEE,END,FIRST,IEN,START,VDATE,VIEN
  1. N BGPHFI
  1. ;K ^TMP("BGPMU0028A",$J)
  1. S BGPDEN=0
  1. S BGPNUM=0
  1. S BGPDSTR=""
  1. S BGPNSTR=""
  1. ;Pts must be 18 or older
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPBDATE)
  1. ;No need to check further on children
  1. Q:BGPAGEE<18
  1. ;
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE
  1. ;look for 2 visits with E&M codes
  1. ; OR 1 visit with E&M codes
  1. S (BGP1,BGP2)=""
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D Q:($L(BGP2,";")>1)!(BGP1'="")
  1. .S VIEN=0 F S VIEN=$O(^AUPNVSIT("AA",DFN,FIRST,VIEN)) Q:'+VIEN D Q:($L(BGP2,";")>1)!(BGP1'="")
  1. ..S BGPDT=$P($P($G(^AUPNVSIT(VIEN,0)),U,1),".",1)
  1. ..;Check provider, determine if there are visits with E&M codes
  1. ..I $$PRV^BGPMUUT1(VIEN,BGPPROV) D
  1. ...D EM2(DFN,VIEN,.BGP2,BGPDT) ;determine if there are visits that have at least one of the E&M codes where 2 are necessary
  1. ...D EM1(DFN,VIEN,.BGP1,BGPDT) ;determine if there are visits that have at least one of the E&M codes where only 1 is necessary
  1. ;
  1. ;quit if visits with E&M code(s) not found for given DFN
  1. Q:(BGP1="")&(BGP2="")
  1. Q:(BGP1="")&($L(BGP2,";")'>1)
  1. ;getting here means this patient is in the denominator
  1. S BGPDEN=1
  1. ;combine BGP1 and BPG2 into one string
  1. S BGPDSTR=$S(BGP2'="":BGP2_$S(BGP1'="":";"_BGP1,1:""),1:BGP1)
  1. ;
  1. ;determine if this patient is in the numerator
  1. N BGPH,BGPHFF,BGPTOBN,BGPTOBU
  1. S BGPHFF=0 ;health factor found flag
  1. S BGPTOBU=1
  1. S BGPTOBN=1
  1. D HFA(.BGPTOBU,.BGPTOBN)
  1. S START=9999999-$$FMADD^XLFDT(BGPBDATE,-730)
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D Q:BGPHFF
  1. .S VIEN=0 F S VIEN=$O(^AUPNVSIT("AA",DFN,FIRST,VIEN)) Q:'+VIEN D Q:BGPHFF
  1. ..S BGPDT=$P($P($G(^AUPNVSIT(VIEN,0)),U,1),".",1)
  1. ..S BGPIEN="" F S BGPIEN=$O(^AUPNVHF("AD",VIEN,BGPIEN)) Q:'+BGPIEN D
  1. ...S BGPHFI=$P($G(^AUPNVHF(BGPIEN,0)),U,1)
  1. ...S BGPH="" F S BGPH=$O(BGPTOBU(BGPH)) Q:BGPH="" Q:BGPHFF I BGPHFI=BGPH S BGPHFF=1 S BGPNSTR=BGPTOBU(BGPH)_";"_BGPDT
  1. ...I 'BGPHFF S BGPH="" F S BGPH=$O(BGPTOBN(BGPH)) Q:BGPH="" Q:BGPHFF I BGPHFI=BGPH S BGPHFF=1 S BGPNSTR=BGPTOBN(BGPH)_";"_BGPDT
  1. I BGPHFF S BGPNUM=1 ;patient is in the numerator
  1. ; update TOTAL
  1. D TOTAL(DFN,BGPNUM,BGPMUTF,BGPDSTR,BGPNSTR)
  1. ;
  1. ; check these
  1. K BGPL,BGPLWTS,BGPLHTS,%,X,BGPLWTS1,BGPLHTS1,Y,TERMINAL,NORMAL,FOLLOW,EXCEPT
  1. Q
  1. ;
  1. TOTAL(DFN,BGPNUM,BGPMUTF,BGPDSTR,BGPNSTR) ;See where this patient ends up
  1. ; BGPDSTR = Denominator string: encounter dates in FM format pieced by ";"
  1. ; BGPNSTR = Numerator string: <health factor text> ";" <health factor edit date in FM format>
  1. ;if we got here, this patient is in the denominator
  1. N BGPDT,PTCNT,DEN1CT,INCL1CT,NOT1CT,TOTALS,PT1
  1. S TOTALS=$G(^TMP("BGPMU0028A",$J,BGPMUTF,"TOT"))
  1. S INCL1CT=+$G(^TMP("BGPMU0028A",$J,BGPMUTF,"INCL",1))
  1. S NOT1CT=+$G(^TMP("BGPMU0028A",$J,BGPMUTF,"NOT",1))
  1. S DEN1CT=+$G(^TMP("BGPMU0028A",$J,BGPMUTF,"DEN",1))
  1. S PTCNT=$P(TOTALS,U,1),PT1=$P(TOTALS,U,2)
  1. S PTCNT=PTCNT+1
  1. S PT1=PT1+1
  1. I BGPDEN D
  1. .S DEN1CT=DEN1CT+1 S ^TMP("BGPMU0028A",$J,BGPMUTF,"DEN",1)=DEN1CT
  1. .S ^TMP("BGPMU0028A",$J,BGPMUTF,"DEN","PAT",1,DEN1CT)=DFN_U_BGPDSTR
  1. .I BGPNUM D
  1. ..S INCL1CT=INCL1CT+1
  1. ..S ^TMP("BGPMU0028A",$J,BGPMUTF,"INCL",1)=INCL1CT
  1. ..S ^TMP("BGPMU0028A",$J,BGPMUTF,"INCL","PAT",1,PT1)=DFN_U_BGPDSTR_U_BGPNSTR
  1. .I 'BGPNUM D
  1. ..S NOT1CT=NOT1CT+1
  1. ..S ^TMP("BGPMU0028A",$J,BGPMUTF,"NOT",1)=NOT1CT
  1. ..S ^TMP("BGPMU0028A",$J,BGPMUTF,"NOT","PAT",1,PT1)=DFN_U_BGPDSTR
  1. S ^TMP("BGPMU0028A",$J,BGPMUTF,"TOT")=PTCNT_U_PT1
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0028a.1",BGPMUTF)=BGPDEN_U_BGPNUM_U_""_U_$G(BGPDSTR)_";"_$G(BGPNSTR)
  1. Q
  1. ;
  1. ;look for E&M codes related to "office visit", "health and behavior assessment", "occupational therapy", "phychiatric & psychologic"
  1. EM2(DFN,VIEN,BGP2,BGPDT) ;
  1. N BGPI,BGPTMP
  1. F BGPI=1:1 Q:$L(BGP2,";")>1 S BGPTMP=$P($T(CPT2+BGPI),";;",2) Q:BGPTMP="" D
  1. .S X=+$$VSTCPT^BGPMUUT1(DFN,VIEN,BGPTMP)
  1. .I +X S BGP2=BGP2_$S(BGP2'="":";",1:"")_$G(BGPDT)
  1. Q
  1. ;
  1. ;look for E&M codes related to "preventive medicine service 18 and older"
  1. ; "prev - individual counseling"
  1. ; "prev med group counseling"
  1. ; "prev med other services"
  1. EM1(DFN,VIEN,BGP1,BGPDT) ;
  1. N BGPI,BGPTMP
  1. F BGPI=1:1 Q:BGP1>0 S BGPTMP=$P($T(CPT1+BGPI),";;",2) Q:BGPTMP="" D
  1. .S X=+$$VSTCPT^BGPMUUT1(DFN,VIEN,BGPTMP)
  1. .I +X S BGP1=BGP1_$S(BGP1'="":";",1:"")_$G(BGPDT)
  1. Q
  1. ;
  1. TOBU ;;
  1. ;;CURRENT SMOKER, EVERY DAY
  1. ;;CURRENT SMOKER, SOME DAY
  1. ;;CURRENT SMOKER
  1. ;;CURRENT SMOKELESS
  1. ;;CESSATION-SMOKER
  1. ;;CESSATION-SMOKELESS
  1. ;;PREVIOUS (FORMER) SMOKELESS
  1. ;;PREVIOUS (FORMER) SMOKER
  1. ;;EXPOSURE TO ENVIRONMENTAL TOBACCO SMOKE
  1. ;;SMOKER IN HOME
  1. ;;CURRENT SMOKER & SMOKELESS
  1. ;;ASTHMA TRIGGERS
  1. ;;TOBACCO
  1. ;
  1. TOBN ;;
  1. ;;NEVER USED TOBACCO
  1. ;;NEVER USED SMOKELESS TOBACCO
  1. ;;NEVER SMOKED
  1. ;;SMOKING STATUS UNKNOWN
  1. ;;SMOKELESS TOBACCO, STATUS UNKNOWN
  1. ;;NON-TOBACCO USER
  1. ;;CEREMONIAL USE ONLY
  1. ;;SMOKE FREE HOME
  1. ;
  1. ;
  1. CPT1 ;;
  1. ;;BGPMU ENC PREV MED SVC 18 UP
  1. ;;BGPMU ENC PREV MED IND COUNSEL
  1. ;;BGPMU ENC PREV MED GRP COUNSEL
  1. ;;BGPMU ENC PREV MED OTHER SVC
  1. ;
  1. CPT2 ;;
  1. ;;BGPMU ENC OFFICE VISIT
  1. ;;BGPMU ENC HEALTH AND BEHAVIOR
  1. ;;BGPMU ENC OCCUPATIONAL THERAPY
  1. ;;BGPMU ENC PSYCH AND PSYCH
  1. ;
  1. HFA(BGPTOBU,BGPTOBN) ;build arrays of health factor pointers
  1. ; BGPTOBU(<health factor pointer>) array of health factors indicating tobacco user
  1. ; BGPTOBN(<health factor pointer>) array of health factors indicating non-tobacco user
  1. N BGPI,BGPIND,BGPTMP
  1. I $G(BGPTOBU)=1 D
  1. .S BGPTMP=0
  1. .F BGPI=1:1 D Q:BGPTMP=""
  1. ..S BGPTMP=$P($T(TOBU+BGPI),";;",2)
  1. ..Q:BGPTMP=""
  1. ..S BGPIND=$O(^AUTTHF("B",BGPTMP,""))
  1. ..S:BGPIND'="" BGPTOBU(BGPIND)=BGPTMP
  1. ;
  1. I $G(BGPTOBN)=1 D
  1. .S BGPTMP=0
  1. .F BGPI=1:1 D Q:BGPTMP=""
  1. ..S BGPTMP=$P($T(TOBN+BGPI),";;",2)
  1. ..Q:BGPTMP=""
  1. ..S BGPIND=$O(^AUTTHF("B",BGPTMP,""))
  1. ..S:BGPIND'="" BGPTOBN(BGPIND)=BGPTMP
  1. Q
  1. ;
  1. TEST ; debug target
  1. ;S U="^"
  1. ;S DT=$$DT^XLFDT()
  1. ;S DFN=184 ; DFN = patient code from VA PATIENT file
  1. ;S BGPBDATE=3100401 ; BGPBDATE = begin date of report
  1. ;S BGPEDATE=3110401 ; BGPEDATE = end date of report
  1. ;S BGPPROV=2 ; BGPPROV = provider code from NEW PERSON file
  1. ;S BGPMUTF="C" ; BGPMUTF = timeframe variable - "C"=current year; "P"=previous year; "B"=baseline year
  1. ;D ENTRY
  1. Q