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

BGPMUD07.m

Go to the documentation of this file.
  1. BGPMUD07 ; IHS/MSC/SAT - MU measure NQF0027 ;12-JUL-2011 15:43;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;code to collect meaningful use report SMOKING CESSATION MEDICAL ASSIST
  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. ; Print Routine: P27ENT^BGPMUDP?
  1. ; Delimited Routine: D27ENT^BGPMUDD?
  1. N BGPDEN,BGPNUM1,BGPNUM2,BGPNOT1,BGPNOT2,BGPDT,BGPAGEE,VIEN
  1. N BGPHFI
  1. N END,HF,N2CPT,START,TOPC,TOPCL,TOPIEN,VPEDD,VPEDIEN
  1. S HF=0
  1. S (BGPDEN,BGPNUM1,BGPNUM2,BGPNOT1,BGPNOT2)=0
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPEDATE)
  1. ;quit if not 18 by the end of the reporting period
  1. Q:BGPAGEE<18
  1. ;look for 1 outpatient encounter with the EP back to 730 days prior to the end of the reporting period
  1. S START=9999999-$$FMADD^XLFDT(BGPEDATE,-730),END=9999999-BGPEDATE
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D Q:+BGPDEN
  1. .S VIEN=0 F S VIEN=$O(^AUPNVSIT("AA",DFN,FIRST,VIEN)) Q:'+VIEN D Q:+BGPDEN
  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. ...S X=$$VSTCPT^BGPMUUT1(DFN,VIEN,"BGPMU CTRL HIGH BP EM")
  1. ...I +X S BGPDEN=1_U_"EN:"_$$DATE^BGPMUUTL(BGPDT)
  1. ...I '+BGPDEN D
  1. ....S X=$$VSTPOV^BGPMUUT3(DFN,VIEN,"BGPMU ENC OUTPATIENT ICD")
  1. ....I +X S BGPDEN=1_U_"EN:"_$$DATE^BGPMUUTL(BGPDT)
  1. ;quit if visits with E&M code(s) not found for given DFN
  1. Q:'+BGPDEN
  1. ;
  1. ;check numerator 1
  1. S HF=$$HF(DFN,"BGPMU TOB SMOKER HF")
  1. S BGPDENT=""
  1. I +HF D
  1. .S BGPNUM1="M:"_$P(HF,U,2)_" "_$$DATE^BGPMUUTL($P(HF,U,4)) ;patient is in numerator 1
  1. .S BGPNUM1=1_U_$$FL(BGPNUM1,17,";")
  1. .S BGPDENT="HF:"_$$DATE^BGPMUUTL($P(HF,U,4))
  1. I 'BGPNUM1 D
  1. .S HF=$$HF(DFN,"BGPMU TOB NON-USER HF")
  1. .S BGPNOT1="NM:"_$S(+HF:$P(HF,U,2)_" "_$$DATE^BGPMUUTL($P(HF,U,4)),1:"")
  1. .S BGPNOT1=1_U_$$FL(BGPNOT1,17,";")
  1. ;
  1. ;check numerator 2
  1. I +BGPNUM1 D
  1. .S N2CPT=$$CPT^BGPMUUT1(DFN,$$FMADD^XLFDT(BGPEDATE,-365),BGPEDATE,"BGPMU TOBACCO USE CESS COUNSEL")
  1. .I +N2CPT S BGPNUM2=1_U_"M:"_$P(N2CPT,U,2)_" "_$$DATE^BGPMUUTL($P(N2CPT,U,3))
  1. .I '+BGPNUM2 D
  1. ..S START=9999999-$$FMADD^XLFDT(BGPEDATE,-365)
  1. ..S END=9999999-BGPEDATE
  1. ..S VPEDD=END-1 F S VPEDD=$O(^AUPNVPED("AA",DFN,VPEDD)) Q:VPEDD="" D
  1. ...S VPEDIEN=0 F S VPEDIEN=$O(^AUPNVPED("AA",DFN,VPEDD,VPEDIEN)) Q:VPEDIEN="" D
  1. ....S TOPIEN=$P(^AUPNVPED(VPEDIEN,0),U,1)
  1. ....Q:TOPIEN=""
  1. ....S TOPC=$P(^AUTTEDT(TOPIEN,0),U,2)
  1. ....S TOPCL=$L(TOPC)
  1. ....I ("TO"=$E(TOPC,1,2))!("TO"=$E(TOPC,TOPCL-1,TOPCL))!("SHS"=$E(TOPC,TOPCL-2,TOPCL)) S BGPNUM2="M:"_TOPC_" "_$$DATE^BGPMUUTL((9999999-VPEDD)),BGPNUM2=1_U_$$FL(BGPNUM2,17,";")
  1. S:'+BGPNUM2 BGPNOT2=1_U_"NM:"
  1. ;
  1. D TOTAL(DFN)
  1. ; check these
  1. K BGPL,BGPLWTS,BGPLHTS,%,X,BGPLWTS1,BGPLHTS1,Y,TERMINAL,NORMAL,FOLLOW,EXCEPT
  1. Q
  1. ;
  1. TOTAL(DFN) ;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,DENCT,NUMCT,NOTCT,TOTALS,PT1
  1. S TOTALS=$G(^TMP("BGPMU0027",$J,BGPMUTF,"TOT"))
  1. S NUMCT1=+$G(^TMP("BGPMU0027",$J,BGPMUTF,"NUM",1))
  1. S NUMCT2=+$G(^TMP("BGPMU0027",$J,BGPMUTF,"NUM",2))
  1. S NOTCT1=+$G(^TMP("BGPMU0027",$J,BGPMUTF,"NOT",1))
  1. S NOTCT2=+$G(^TMP("BGPMU0027",$J,BGPMUTF,"NOT",2))
  1. S DENCT=+$G(^TMP("BGPMU0027",$J,BGPMUTF,"DEN",1))
  1. S EXCCT=+$G(^TMP("BGPMU0027",$J,BGPMUTF,"EXC",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 DENCT=DENCT+1 S ^TMP("BGPMU0027",$J,BGPMUTF,"DEN",1)=DENCT
  1. .S ^TMP("BGPMU0027",$J,"PAT",BGPMUTF,"DEN",1,DENCT)=DFN
  1. .I +BGPNUM1 D
  1. ..S NUMCT1=NUMCT1+1
  1. ..S ^TMP("BGPMU0027",$J,BGPMUTF,"NUM",1)=NUMCT1
  1. ..S ^TMP("BGPMU0027",$J,"PAT",BGPMUTF,"NUM",1,PT1)=DFN_U_$P(BGPDEN,U,2)_U_$P(BGPNUM1,U,2)
  1. .I '+BGPNUM1 D
  1. ..S NOTCT1=NOTCT1+1
  1. ..S ^TMP("BGPMU0027",$J,BGPMUTF,"NOT",1)=NOTCT1
  1. ..S ^TMP("BGPMU0027",$J,"PAT",BGPMUTF,"NOT",1,PT1)=DFN_U_$P(BGPDEN,U,2)_U_$P(BGPNOT1,U,2)
  1. .I +BGPNUM2 D
  1. ..S NUMCT2=NUMCT2+1
  1. ..S ^TMP("BGPMU0027",$J,BGPMUTF,"NUM",2)=NUMCT2
  1. ..S ^TMP("BGPMU0027",$J,"PAT",BGPMUTF,"NUM",2,PT1)=DFN_U_$P(BGPDEN,U,2)_U_$P(BGPNUM2,U,2)
  1. .I '+BGPNUM2 D
  1. ..S NOTCT2=NOTCT2+1
  1. ..S ^TMP("BGPMU0027",$J,BGPMUTF,"NOT",2)=NOTCT2
  1. ..S ^TMP("BGPMU0027",$J,"PAT",BGPMUTF,"NOT",2,PT1)=DFN_U_$P(BGPDEN,U,2)_";"_BGPDENT_U_$P(BGPNOT2,U,2)
  1. ;
  1. S ^TMP("BGPMU0027",$J,BGPMUTF,"TOT")=PTCNT_U_PT1
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0027.1",BGPMUTF)=1_U_+BGPNUM1_U_""_U_$P(BGPDEN,U,2)_";"_$P($G(BGPNUM1),U,2)
  1. S BGPICARE("MU.EP.0027.2",BGPMUTF)=1_U_+BGPNUM2_U_""_U_$P(BGPDEN,U,2)_";"_$P($G(BGPNUM2),U,2)
  1. Q
  1. ;
  1. HF(DFN,TAX) ;look in health factors for values in given taxonomy
  1. N BGPDT,BGPH,BGPHFN,BGPTOBN,BGPTOBU
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) Q:'TIEN 0
  1. S BGPHF=0 ;health factor found flag
  1. S END=9999999-BGPEDATE,START=9999999-$$FMADD^XLFDT(BGPEDATE,-365)
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D Q:BGPHF
  1. .S VIEN=0 F S VIEN=$O(^AUPNVSIT("AA",DFN,FIRST,VIEN)) Q:'+VIEN D Q:BGPHF
  1. ..S BGPIEN="" F S BGPIEN=$O(^AUPNVHF("AD",VIEN,BGPIEN)) Q:'+BGPIEN D
  1. ...S BGPDT=$P($P($G(^AUPNVSIT(VIEN,0)),U,1),".",1)
  1. ...S BGPHNOD=$G(^AUPNVHF(BGPIEN,0))
  1. ...S BGPHFI=$P(BGPHNOD,U,1)
  1. ...S BGPHFC=$P(^AUTTHF(BGPHFI,0),U,2)
  1. ...S BGPHFN=$P(^AUTTHF(BGPHFI,0),U,1)
  1. ...I $D(^ATXAX(TIEN,21,"B",BGPHFN)) S BGPHF=1_"^"_BGPHFN_"^"_BGPHFC_"^"_BGPDT
  1. Q BGPHF
  1. ;
  1. FL(STRING,WIDTH,DELIM) ;
  1. N FLI,TSTRING
  1. S:$G(DELIM)="" DELIM="^"
  1. S RETURN=""
  1. Q:$L(STRING)<=WIDTH STRING
  1. S TSTRING=STRING
  1. S TSTRINGL=$L(TSTRING)
  1. F Q:TSTRING="" D
  1. .S TSA=0
  1. .I WIDTH>=$L(TSTRING) S RETURN=RETURN_DELIM_TSTRING,TSTRING=""
  1. .Q:TSTRING=""
  1. .I $E(TSTRING,1,WIDTH)'[" " D
  1. ..S RETURN=$S(RETURN'="":RETURN_DELIM,1:"")_$E(TSTRING,1,WIDTH)
  1. ..S TSTRING=$E(TSTRING,WIDTH+1,TSTRINGL)
  1. ..S TSTRINGL=$L(TSTRING)
  1. ..S TSA=1
  1. .Q:TSA
  1. .S FLI=WIDTH
  1. .F Q:FLI<1 D
  1. ..I $E(TSTRING,FLI)=" " D
  1. ...S RETURN=$S(RETURN'="":RETURN_DELIM,1:"")_$E(TSTRING,1,FLI-1)
  1. ...S TSTRING=$E(TSTRING,FLI+1,TSTRINGL)
  1. ...S TSTRINGL=$L(TSTRING)
  1. ...S FLI=1
  1. ..S FLI=FLI-1
  1. Q RETURN
  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=3100930 ; BGPBDATE = begin date of report
  1. ;S BGPEDATE=3110801 ; 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. ;S ZSAT=$$HF(175,"BGPMU TOB SMOKER HF")
  1. ;W ZSAT
  1. Q