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

BGPMUC01.m

Go to the documentation of this file.
  1. BGPMUC01 ; IHS/MSC/MGH - MI measure NQF0041 ;02-Mar-2011 11:25;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use report for adult influenza immunization 0041
  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,BGPNUM,BGPDT,END,FIRST,IEN,START,VDATE,VIEN,BGPZ,EXCL,BGPX
  1. N VCNT,ACNT,BCNT,AENC,BENC,G,CENC,DENC,EENC,FENC,GENC,STRING,STRING2,IMMC,FBDATE,FEDATE
  1. S (ACNT,BCNT,VCNT)=0
  1. S (BGPDEN,BGPNUM,EXCL)=0
  1. ;Pts must be 50 years and older
  1. Q:BGPAGEB<50
  1. D FLUDATES
  1. ;the START date will be the beginning of the previous flu season and the loop below will make appropriate report period checks
  1. S START=9999999-FBDATE,END=9999999-BGPEDATE
  1. ;look for 2 visits with E&M codes (outpatient encounters)
  1. ; OR 1 visit with E&M codes (preventive medicine encounter)
  1. S (BGP1,BGP2)=0
  1. S (STRING,STRING2)=""
  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, determine if there are visits with E&M codes where at least 2 are needed
  1. ..I $$PRV^BGPMUUT1(IEN,BGPPROV) D
  1. ...;check and see if an appropriate CPT code exists
  1. ...S AENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU ENCOUNTER EM")
  1. ...S BENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU PREV 40 ENCOUNT EM")
  1. ...S CENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU GRP ENCOUNT EM")
  1. ...S DENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU IND ENCOUNT EM")
  1. ...S EENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU PREV OTH ENCOUNT EM")
  1. ...S FENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU NURS FAC ENCOUNT EM")
  1. ...S GENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU FLU NURS DC ENCOUNT EM")
  1. ...;Need 2 or more of BGPMU FLU ENCOUNT EM OR 1 or more of the others
  1. ...I (+AENC=1) D
  1. ....S VDATE=$P($P($G(^AUPNVSIT(IEN,0)),U,1),".",1)
  1. ....S VCNT=VCNT+1
  1. ....S VIEN(VCNT)=IEN_U_VDATE
  1. ....;check to see if encounter is within report period
  1. ....I (VDATE>=BGPBDATE)&(VDATE<=BGPEDATE) D
  1. .....S ACNT=ACNT+1
  1. .....S STRING="EN:"_$$DATE^BGPMUUTL(VDATE)
  1. ...I (+BENC=1)!(+CENC=1)!(+DENC=1)!(+EENC=1)!(+FENC=1)!(+GENC=1) D
  1. ....S VDATE=$P($P($G(^AUPNVSIT(IEN,0)),U,1),".",1)
  1. ....S VCNT=VCNT+1
  1. ....S VIEN(VCNT)=IEN_U_VDATE
  1. ....;check to see if encounter is within report period
  1. ....I (VDATE>=BGPBDATE)&(VDATE<=BGPEDATE) D
  1. .....S BCNT=BCNT+1
  1. .....I STRING="" S STRING="EN:"_$$DATE^BGPMUUTL(VDATE)
  1. .....E S STRING=STRING_";EN:"_$$DATE^BGPMUUTL(VDATE)
  1. I (ACNT>1)!(BCNT>0) D
  1. .;count for denominator if encounter falls between Sept-Feb
  1. .S BGPFLU=$$FLU(DFN)
  1. .I +BGPFLU D
  1. ..S BGPDEN=1
  1. ..;Setup numerator
  1. ..;get all immunizations
  1. ..S C="15^16^111^125^126^127^128^135"
  1. ..S CPTS="90656^90658^90660^90661^90662^90663^90664^90666^90667^90668"
  1. ..K BGPX D GETIMMS^BGPMUUT2(DFN,BGPEDATE,C,.BGPX,CPTS)
  1. ..I $D(BGPX) D
  1. ...S IMMC=""
  1. ...F S IMMC=$O(BGPX(IMMC)) Q:IMMC="" D
  1. ....S IMMD=BGPX(IMMC)
  1. ....S IMMV=$P(IMMD,U,2)
  1. ....S IMMDATE=$P($G(^AUPNVSIT(IMMV,0)),U,1)
  1. ....I (IMMDATE>FBDATE)&(IMMDATE<FEDATE) D
  1. .....S BGPNUM=1
  1. .....S STRING2=$S($P(IMMD,U,3):$P(IMMD,U,1),1:$P($G(^AUTTIMM($P(IMMD,U,1),0)),U,3))_" "_$$DATE^BGPMUUTL($P(IMMDATE,".",1))
  1. .....Q
  1. ..I +BGPNUM=0 D
  1. ...;Exclude if flu immunization contraindication
  1. ...F BGPZ=15,16,111,125,126,127,128,135 S X=$$FLUCONT(DFN,BGPZ,$$DOB^AUPNPAT(DFN),BGPEDATE) Q:X]""
  1. ...I X]"" S EXCL=1
  1. ...;NMI refusal
  1. ...S G=""
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",15,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",16,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",111,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",125,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",126,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",127,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",128,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$NMIREF^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",135,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...;Exclude if refused
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",15,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",16,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",111,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",125,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",126,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",127,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",128,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ...I EXCL'=1 S G=$$REFUSAL^BGPMUUT2(DFN,9999999.14,$O(^AUTTIMM("C",135,0)),$$DOB^AUPNPAT(DFN),BGPEDATE)
  1. ...S:$P(G,U)=1 EXCL=1
  1. ..D TOTAL(DFN)
  1. K BGP1,BGP2,BGPDEN,BGPNUM,BGPDT,END,FIRST,IEN,START,VDATE,VIEN,BGPZ,EXCL,BGPX
  1. K ACNT,BCNT,AENC,BENC,GS
  1. Q
  1. ;
  1. FLUCONT(P,C,BD,ED) ;EP
  1. N X,G,Y,R,D
  1. ;first check for ICD-9 code documented
  1. S G=$$LASTDX^BGPMUUT2(P,BD,ED,"BGPMU FLU EGG ALLERGY DX")
  1. I G Q 1_U_"Egg Allergy Dx"
  1. S X=0,G="",Y=$O(^AUTTIMM("C",C,0)) I Y F S X=$O(^BIPC("AC",P,Y,X)) Q:X'=+X!(G) D
  1. .S R=$P(^BIPC(X,0),U,3)
  1. .Q:R=""
  1. .Q:'$D(^BICONT(R,0))
  1. .S D=$P(^BIPC(X,0),U,4)
  1. .Q:D=""
  1. .Q:$P(^BIPC(X,0),U,4)<BD
  1. .Q:$P(^BIPC(X,0),U,4)>ED
  1. .I $P(^BICONT(R,0),U,1)="Egg Allergy" S G=D_U_"Contraindication: Egg Allergy"
  1. .;I $P(^BICONT(R,0),U,1)="Anaphylaxis" S G=D_U_"Contraindication: Anaphylaxis" REMOVED per Dr. Advani
  1. K X,Y,R,D
  1. Q G
  1. ;
  1. FLU(DFN) ;Find if pt has a visit during the flu season (Sept-Feb)
  1. N NUM,FLUCNT,FDATE
  1. S FLUCNT=0
  1. S NUM=0 F S NUM=$O(VIEN(NUM)) Q:NUM=""!(FLUCNT>1) D
  1. .S FDATE=$P(VIEN(NUM),U,2)
  1. .I (FDATE>FBDATE)&(FDATE<FEDATE) D
  1. ..S FLUCNT=FLUCNT+1
  1. ..S STRING="EN:"_$$DATE^BGPMUUTL(FDATE)
  1. ..;I $G(STRING2)="" S STRING2="FLU:"_FDATE
  1. ..;E S STRING2=STRING2_",FLU:"_FDATE
  1. Q FLUCNT
  1. ;
  1. FLUDATES ; Calculate dates of the most recent flu season
  1. S FEDATE=$S(+$E(BGPEDATE,4,5)>0&(+$E(BGPEDATE,4,5)<3):($E(BGPEDATE,1,3)-1)_"0301",1:$E(BGPEDATE,1,3)_"0301")
  1. S FBDATE=($E(FEDATE,1,3)-1)_"0831"
  1. Q
  1. ;S FBDATE=$S(+$E(BGPBDATE,4,5)>0&(+$E(BGPBDATE,4,5)<3):$E(BGPBDATE,1,3)_"0101",1:$E(BGPBDATE,1,3)_"0901")
  1. ;I $E(BGPBDATE,1,3)'=$E(BGPEDATE,1,3) D
  1. ;.S FEDATE=$S(+$E(BGPEDATE,4,5)>0&(+$E(BGPEDATE,4,5)<3):$E(BGPEDATE,1,3)_"0301",1:$E(BGPEDATE,1,3)_"1231")
  1. ;E S FEDATE=$S(+$E(BGPEDATE,4,5)>0&(+$E(BGPEDATE,4,5)<3):$E(BGPEDATE,1,3)_"0301",1:$E(BGPEDATE,1,3)+1_"0101")
  1. ;Q
  1. TOTAL(DFN) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,TOTALS
  1. S TOTALS=+$G(^TMP("BGPMU0041",$J,BGPMUTF,"TOT"))
  1. S EXCCT=+$G(^TMP("BGPMU0041",$J,BGPMUTF,"EXC"))
  1. S DENCT=+$G(^TMP("BGPMU0041",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0041",$J,BGPMUTF,"NUM"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. I +EXCL D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0041",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0041",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_STRING_U_"Excluded"
  1. E D
  1. .S:+BGPDEN DENCT=DENCT+1 S ^TMP("BGPMU0041",$J,BGPMUTF,"DEN")=DENCT
  1. .I +BGPNUM D
  1. ..S NUMCT=NUMCT+1 S ^TMP("BGPMU0041",$J,BGPMUTF,"NUM")=NUMCT
  1. ..I BGPMUTF="C" S ^TMP("BGPMU0041",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_STRING_U_STRING2
  1. .E I BGPMUTF="C" S ^TMP("BGPMU0041",$J,"PAT",BGPMUTF,"DEN",PTCNT)=DFN_U_STRING_U_STRING2
  1. S ^TMP("BGPMU0041",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0041.1",BGPMUTF)=(+BGPDEN&'EXCL)_U_+BGPNUM_U_+EXCL_U_STRING_";"_STRING2_U_$P(EXCL,U,2)
  1. K PTCNT,EXCCT,DENCT,NUMCT,TOTALS
  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=3110101 ; BGPBDATE = begin date of report
  1. ;S BGPEDATE=3110301 ; 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