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

BGP8PC14.m

Go to the documentation of this file.
  1. BGP8PC14 ; IHS/CMI/LAB - measure I2 ; 26 Jul 2018 3:40 PM
  1. ;;18.1;IHS CLINICAL REPORTING;**1**;MAY 25, 2018;Build 65
  1. ;
  1. BMI ;EP - CALLED FROM IPC REPORT
  1. S (BGPN1,BGPD1)=0
  1. S BGPBMIE="",BGPBMI="",BGPFU=""
  1. ;
  1. ;
  1. ;GATHER UP ALL BMI ENC VISITS
  1. ;Let's check all Visits, looping through once
  1. S G="" ;return variable
  1. S BGPBMIE=$$MRBMIE(DFN,BGPBDATE,BGPEDATE) I BGPBMIE="" S BGPSTOP=1 G BMIE ;no BMI encounter
  1. ;AGE ON bmi encounter
  1. S A=$$AGE^AUPNPAT(DFN,BGPBMIE)
  1. I A<18 S BGPSTOP=1 G BMIE
  1. ;
  1. ;now what about exclusions?
  1. ;might as well process exclusions first;
  1. ;palliative care
  1. I $$PALLCARE^BGP8PC13(DFN,$$DOB^AUPNPAT(DFN),BGPBMIE) S BGPSTOP=1 G BMIE
  1. ;
  1. ;pregnancy
  1. I $$PREG(DFN,BGPBDATE,BGPEDATE) S BGPSTOP=1 G BMIE
  1. ;
  1. ;REFUSAL ON SAME DAY AS MOST RECENT BMI ENCOUNTER OF BOTH HT/WT
  1. I $$REFWTHT(DFN,BGPBMIE) S BGPSTOP=1 G BMIE
  1. ;MEDICAL REASON NOT DONE
  1. I $$MRND(DFN,$$FMADD^XLFDT(BGPBMIE,-365),$$FMADD^XLFDT(BGPBMIE,-1)) S BGPSTOP=1 G BMIE
  1. ;FINALLY MADE DENOMINATOR
  1. S BGPD1=1
  1. S BGPBMI=$$MRBMI(DFN,$$FMADD^XLFDT(BGPBMIE,-365),BGPBMIE) I BGPBMI]"" S BGPBMI=$J(BGPBMI,5,2)
  1. I BGPBMI'<18.5,BGPBMI<25 S BGPN1=1 G BMI1
  1. I BGPBMI'<25 S BGPFU=$$ANFU(DFN,$$FMADD^XLFDT(BGPBMIE,-365),BGPBMIE) S:BGPFU BGPN1=1 G BMI1
  1. S BGPFU=$$BLFU(DFN,$$FMADD^XLFDT(BGPBMIE,-365),BGPBMIE) S:BGPFU BGPN1=1 G BMI1
  1. BMI1 ;
  1. S BGPVALUE=""
  1. S BGPVALUE="ENC "_$$DATE^BGP8UTL(BGPBMIE)_"|||" ;hit denominator
  1. I BGPN1 S BGPVALUE=BGPVALUE_"*** BMI: "_BGPBMI I BGPFU S BGPVALUE=BGPVALUE_" F/U PLAN: "_$$DATE^BGP8UTL($P(BGPFU,U,2))_" "_$P(BGPFU,U,3)
  1. I 'BGPN1 S BGPVALUE=BGPVALUE_$S(BGPBMI:"BMI: "_BGPBMI,1:"")
  1. BMIE ;
  1. K D,V,X,Y,BGPV,BGPBMI,BGPBMIE,G,BGPFU
  1. Q
  1. MRBMIE(P,BDATE,EDATE) ;EP - MOST RECENT BMI ENCOUNTER DURING BDATE TO EDATE
  1. NEW X,Y,Z,G,BGPV,D,A,B,BGPDO,ID
  1. ;Let's check all Visits, looping through once
  1. S G="" ;return variable
  1. ;get all visits in date range in BGPV
  1. D ALLV^APCLAPIU(P,BDATE,EDATE,"BGPV")
  1. ;REORDER BY DATE
  1. K BGPDO
  1. S X=0 F S X=$O(BGPV(X)) Q:X'=+X S V=$P(BGPV(X),U,5) S BGPDO((9999999-$P(BGPV(X),U,1)),V)=""
  1. S ID=0 F S ID=$O(BGPDO(ID)) Q:ID=""!(G) S V=0 F S V=$O(BGPDO(ID,V)) Q:V'=+V D
  1. .Q:'$P(^AUPNVSIT(V,0),U,9) ;no dependent entries
  1. .Q:$P(^AUPNVSIT(V,0),U,11) ;deleted
  1. .S D=$$VD^APCLV(V)
  1. .S Y=$$BMIENC(V) I Y]"" S G=D Q ;ITEM 18
  1. .;is .17 a cpt we want?
  1. .S Y=$$VALI^XBDIQ1(9000010,V,.17)
  1. .I Y,$$BMIECPT(Y) S G=D Q
  1. .;now check all V CPTs
  1. .S Z=0 F S Z=$O(^AUPNVCPT("AD",V,Z)) Q:Z'=+Z!(G) D
  1. ..S Y=$P($G(^AUPNVCPT(Z,0)),U,1)
  1. ..I Y,$$BMIECPT(Y) S G=D Q
  1. .S Z=0 F S Z=$O(^AUPNVDEN("AD",V,Z)) Q:Z'=+Z!(G) D
  1. ..S Y=$$VALI^XBDIQ1(9000010.05,Z,.01)
  1. ..S T=$O(^ATXAX("B","BGP IPC BMI ADA CODES",0))
  1. ..I $D(^ATXAX(T,21,"B",Y)) S G=D Q
  1. Q G
  1. MRBMI(P,BDATE,EDATE) ;
  1. NEW X,Y,H,W,BMI
  1. S X=$$LASTITEM^BGP8DU(P,BDATE,EDATE,"MEASUREMENT","BMI")
  1. I X Q $P(X,U,4)
  1. ;get last ht within bdate and edate
  1. S X=$$LASTITEM^BGP8DU(P,BDATE,EDATE,"MEASUREMENT","WT")
  1. I X="" Q ""
  1. S W=$P(X,U,4)
  1. S X=$$LASTITEM^BGP8DU(P,BDATE,EDATE,"MEASUREMENT","HT")
  1. I X="" Q ""
  1. S H=$P(X,U,4)
  1. ;calculate BMI
  1. S W=W*.45359,H=(H*.0254),H=(H*H),BMI=(W/H)
  1. Q BMI
  1. BMIENC(V) ;EP
  1. NEW A,B,C
  1. S A=0,B=""
  1. F S A=$O(^AUPNVSIT(V,28,"B",A)) Q:A=""!(B]"") D
  1. .I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC BMI ENC",A)) S B=A
  1. I B Q B
  1. S A=0,B=""
  1. F S A=$O(^AUPNVSIT(V,26,"B",A)) Q:A=""!(B]"") D
  1. .I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC BMI ENC",A)) S B=A
  1. Q B
  1. BMIECPT(C) ;
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC BMI ENCOUNTER CPTS",0)),1) Q 1
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC BMI ADA CPTS",0)),1) Q 1
  1. Q ""
  1. PREG(P,BDATE,EDATE) ;
  1. NEW X,Y,Z,G,A
  1. I $P(^DPT(P,0),U,2)'="F" Q ""
  1. ;check dx
  1. S X=$$LASTDX^BGP8UTL1(P,"BGP IPC PREGNANCY CMS69 DXS",BDATE,EDATE) I X Q 1
  1. S T=$O(^ATXAX("B","BGP IPC PREGNANCY CMS69 DXS",0))
  1. S (X,G,A)=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(G) D
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .S A=0
  1. .S D=$P(^AUPNPROB(X,0),U,13)
  1. .I D'<BDATE,D'>EDATE S A=1
  1. .I A G PREGN
  1. .;I D Q ;had a doo and it didn't match
  1. .Q:$P(^AUPNPROB(X,0),U,8)>EDATE
  1. .Q:$P(^AUPNPROB(X,0),U,8)<BDATE
  1. PREGN .I $$ICD^ATXAPI($P(^AUPNPROB(X,0),U,1),T,9) S G=1 Q
  1. .S S=$$VAL^XBDIQ1(9000011,X,80001)
  1. .I S]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC PREGNANCY BMI",S)) S G=1 Q
  1. Q G
  1. REFWTHT(P,BDATE) ;
  1. NEW F,G,I,ID,C,X,D,H,W,R
  1. S G=0
  1. S F=9999999.07,I=$O(^AUTTMSR("B","BMI",0))
  1. S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(G) D
  1. .S D=9999999-ID
  1. .Q:D'=BDATE
  1. .S X=0 F S X=$O(^AUPNPREF("AA",P,F,I,ID,X)) Q:X'=+X!(G) D
  1. ..;get snomed reason not done and it must be in one of the subsets
  1. ..S R=$$VALI^XBDIQ1(9000022,X,1.01) ;SNOMED REASON NOT DONE
  1. ..I R]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC NOT DONE PAT",R)) S G=1 Q
  1. ..S R=$$VALI^XBDIQ1(9000022,X,.07)
  1. ..I R="R"!(R="N")!(R="U") S G=1 Q
  1. I G Q G
  1. ;now check for WT or HT
  1. S (W,H)=""
  1. S F=9999999.07,I=$O(^AUTTMSR("B","WT",0))
  1. S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(W) D
  1. .S D=9999999-ID
  1. .Q:D'=BDATE
  1. .S X=0 F S X=$O(^AUPNPREF("AA",P,F,I,ID,X)) Q:X'=+X!(W) D
  1. ..S R=$$VALI^XBDIQ1(9000022,X,.07)
  1. ..I R="R"!(R="N")!(R="U") S W=1
  1. I W Q 1
  1. S F=9999999.07,I=$O(^AUTTMSR("B","HT",0))
  1. S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(H) D
  1. .S D=9999999-ID
  1. .Q:D'=BDATE
  1. .S X=0 F S X=$O(^AUPNPREF("AA",P,F,I,ID,X)) Q:X'=+X!(H) D
  1. ..S R=$$VALI^XBDIQ1(9000022,X,.07)
  1. ..I R="R"!(R="N")!(R="U") S H=1
  1. I H Q 1
  1. Q ""
  1. MRND(P,BDATE,EDATE) ;EP
  1. NEW F,G,I,ID,C,X,D,H,W,R
  1. S G=0
  1. S F=81,I=""
  1. F S I=$O(^AUPNPREF("AA",P,F,I)) Q:I=""!(G) D
  1. .I '$$ICD^BGP8UTL2(I,$O(^ATXAX("B","BGP IPC ABOVE NORMAL FU CPTS",0)),1),'$$ICD^BGP8UTL2(I,$O(^ATXAX("B","BGP IPC BELOW NORMAL FU CPTS",0)),1) Q
  1. .S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(G) D
  1. ..S D=9999999-ID
  1. ..Q:D<BDATE
  1. ..Q:D>EDATE
  1. ..S X=0 F S X=$O(^AUPNPREF("AA",P,F,I,ID,X)) Q:X'=+X!(G) D
  1. ...;get snomed reason not done and it must be in one of the subsets
  1. ...S R=$$VALI^XBDIQ1(9000022,X,1.01) ;SNOMED REASON NOT DONE
  1. ...I R]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC NOT DONE MED",R)) S G=1 Q
  1. ...S R=$$VALI^XBDIQ1(9000022,X,.07)
  1. ...I R="N"!(R="U") S G=1
  1. I G Q G
  1. S F=9002318.4,I=""
  1. F S I=$O(^AUPNPREF("AA",P,F,I)) Q:I=""!(G) D
  1. .I '$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC ABOVE NORM",I)),'$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC BELOW NORM",I)) Q
  1. .S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(G) D
  1. ..S D=9999999-ID
  1. ..Q:D<BDATE
  1. ..Q:D>EDATE
  1. ..S X=0 F S X=$O(^AUPNPREF("AA",P,F,I,ID,X)) Q:X'=+X!(G) D
  1. ...;get snomed reason not done and it must be in one of the subsets
  1. ...S R=$$VALI^XBDIQ1(9000022,X,1.01) ;SNOMED REASON NOT DONE
  1. ...I R]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC NOT DONE MED",R)) S G=1 Q
  1. ...S R=$$VALI^XBDIQ1(9000022,X,.07)
  1. ...I R="N"!(R="U") S G=1
  1. I G Q G
  1. ;MEDS
  1. S F=50,I=""
  1. NEW T,T1
  1. S T=$O(^ATXAX("B","BGP IPC BELOW NORMAL MEDS",0))
  1. S T1=$O(^ATXAX("B","BGP IPC ABOVE NORMAL MEDS",0))
  1. F S I=$O(^AUPNPREF("AA",P,F,I)) Q:I=""!(G) D
  1. .I '$D(^ATXAX(T,21,"B",I)),'$D(^ATXAX(T,21,"B",I)) Q
  1. .S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(G) D
  1. ..S D=9999999-ID
  1. ..Q:D<BDATE
  1. ..Q:D>EDATE
  1. ..S X=0 F S X=$O(^AUPNPREF("AA",P,F,I,ID,X)) Q:X'=+X!(G) D
  1. ...;get snomed reason not done and it must be in one of the subsets
  1. ...S R=$$VALI^XBDIQ1(9000022,X,1.01) ;SNOMED REASON NOT DONE
  1. ...I R]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC NOT DONE MED",R)) S G=1 Q
  1. I G Q G
  1. Q ""
  1. ANFU(P,BDATE,EDATE) ;EP
  1. NEW A,B,C,X,Y,Z,T,V,R,G
  1. ;is there a dx
  1. S X=$$LASTDX^BGP8UTL1(P,"BGP IPC ABOVE NORMAL FU DXS",BDATE,EDATE) I X Q 1_U_$P(X,U,3)_U_"DX: "_$P(X,U,2)
  1. ;now check cpts
  1. S T=$O(^ATXAX("B","BGP IPC ABOVE NORMAL FU CPTS",0))
  1. I T D I X]"" Q 1_U_$P(X,U,1)_U_"CPT: "_$P(X,U,2)
  1. .S X=$$CPT^BGP8DU(P,BDATE,EDATE,T,5) I X]"" Q
  1. .S X=$$TRAN^BGP8DU(P,BDATE,EDATE,T,5)
  1. I X Q X
  1. ;HOW ABOUT REFERRALS BETWEEN BDATE AND EDATE
  1. ;GET ALL VISITS
  1. K BGPV
  1. S G=""
  1. D ALLV^APCLAPIU(P,BDATE,EDATE,"BGPV")
  1. S G=""
  1. S X=0 F S X=$O(BGPV(X)) Q:X'=+X!(G) S Y=$P(BGPV(X),U,5) D
  1. .Q:'$D(^AUPNVREF("AD",Y))
  1. .S Z=0 F S Z=$O(^AUPNVREF("AD",Y,Z)) Q:Z'=+Z!(G) D
  1. ..S S=$P($G(^AUPNVREF(Z,0)),U,1) Q:S=""
  1. ..Q:'$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC WT ASMT REFER",S))
  1. ..;NOW GO GET SNOMED REASON
  1. ..S R=$P($G(^AUPNVREF(Z,0)),U,6)
  1. ..Q:'R
  1. ..Q:'$D(^BMCREF(R,0))
  1. ..S A=0,G="" F S A=$O(^BMCREF(R,22,"B",A)) Q:A=""!(G) I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC OVERWEIGHT",A)) S G=1_U_$$VD^APCLV(Y)_U_"Refer: "_S_"/"_A
  1. I G Q G
  1. S G=""
  1. D GETMEDS^BGP8UTL2(P,BDATE,EDATE,"BGP IPC ABOVE NORMAL MEDS","",,,.BGPMEDS1,"BGP IPC ABOVE NORMAL RXNORM")
  1. S X=0,T=0,W="" F S X=$O(BGPMEDS1(X)) Q:X'=+X!(G) D
  1. .S Y=$P(BGPMEDS1(X),U,4) ;vmed ien
  1. .S V=$P(BGPMEDS1(X),U,5)
  1. .Q:'$D(^AUPNVMED(Y,0))
  1. .Q:$$UP^XLFSTR($P($G(^AUPNVMED(Y,11)),U))["RETURNED TO STOCK"
  1. .S D=$P(^AUPNVMED(Y,0),U,1) ;drug ien
  1. .;DAYS SUPPLY MUST BE >0
  1. .S E=$P(^AUPNVMED(Y,0),U,8) ;date discontinued
  1. .S S=$P(^AUPNVMED(Y,0),U,7) ;DAYS SUPPLY
  1. .Q:'S
  1. .I E,E'>$P(BGPMEDS1(X),U,1) Q ;at least one day
  1. .S G=1_U_$$VD^APCLV(V)_U_"Med "_$$VAL^XBDIQ1(9000010.14,Y,.01)
  1. I G Q G
  1. ;NOW V POV FOR SNOMED
  1. ;NOW SNOMED USING ASNC
  1. S T="PXRM BGP IPC ABOVE NORM"
  1. S S=0 F S S=$O(^XTMP("BGPSNOMEDSUBSET",$J,T,S)) Q:S=""!(G) D
  1. .Q:'$D(^AUPNVPOV("ASNC",P,S))
  1. .S D=0 F S D=$O(^AUPNVPOV("ASNC",P,S,D)) Q:D=""!(G) D
  1. ..S Y=9999999-D
  1. ..Q:Y>EDATE
  1. ..Q:Y<BDATE
  1. ..S G=1_U_D_U_"SNOMED: "_S
  1. I G Q G
  1. Q ""
  1. BLFU(P,BDATE,EDATE) ;EP
  1. NEW A,B,C,X,Y,Z,T,V,G
  1. ;is there a dx
  1. S X=$$LASTDX^BGP8UTL1(P,"BGP IPC BELOW NORMAL FU DXS",BDATE,EDATE) I X Q 1_U_$P(X,U,3)_U_"DX: "_$P(X,U,2)
  1. ;now check cpts
  1. S T=$O(^ATXAX("B","BGP IPC BELOW NORMAL FU CPTS",0))
  1. I T D I X]"" Q 1_U_$P(X,U,1)_U_"CPT: "_$P(X,U,2)
  1. .S X=$$CPT^BGP8DU(P,BDATE,EDATE,T,5) I X]"" Q
  1. .S X=$$TRAN^BGP8DU(P,BDATE,EDATE,T,5)
  1. I X Q X
  1. ;HOW ABOUT REFERRALS BETWEEN BDATE AND EDATE
  1. ;GET ALL VISITS
  1. K BGPV
  1. S G=""
  1. D ALLV^APCLAPIU(P,BDATE,EDATE,"BGPV")
  1. S X=0 F S X=$O(BGPV(X)) Q:X'=+X!(G) S Y=$P(BGPV(X),U,5) D
  1. .Q:'$D(^AUPNVREF("AD",Y))
  1. .S Z=0 F S Z=$O(^AUPNVREF("AD",Y,Z)) Q:Z'=+Z!(G) D
  1. ..S S=$P($G(^AUPNVREF(Z,0)),U,1) Q:S=""
  1. ..Q:'$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC WT ASMT REFER",S))
  1. ..;NOW GO GET SNOMED REASON
  1. ..S R=$P($G(^AUPNVREF(Z,0)),U,6)
  1. ..Q:'R
  1. ..Q:'$D(^BMCREF(R,0))
  1. ..S A=0 F S A=$O(^BMCREF(R,22,"B",A)) Q:A="" I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC UNDERWEIGHT",A)) S G=1_U_$$VD^APCLV(Y)_U_"Refer: "_S_"/"_A Q
  1. I G Q G
  1. ;NOW MEDS
  1. S G=""
  1. D GETMEDS^BGP8UTL2(P,BDATE,EDATE,"BGP IPC BELOW NORMAL MEDS","",,,.BGPMEDS1,"BGP IPC BELOW NORMAL RXNORM")
  1. S X=0,T=0,W="" F S X=$O(BGPMEDS1(X)) Q:X'=+X!(G) D
  1. .S Y=$P(BGPMEDS1(X),U,4) ;vmed ien
  1. .S V=$P(BGPMEDS1(X),U,5)
  1. .Q:'$D(^AUPNVMED(Y,0))
  1. .Q:$$UP^XLFSTR($P($G(^AUPNVMED(Y,11)),U))["RETURNED TO STOCK"
  1. .S D=$P(^AUPNVMED(Y,0),U,1) ;drug ien
  1. .;DAYS SUPPLY MUST BE >0
  1. .S E=$P(^AUPNVMED(Y,0),U,8) ;date discontinued
  1. .S S=$P(^AUPNVMED(Y,0),U,7) ;DAYS SUPPLY
  1. .Q:'S
  1. .I E,E'>$P(BGPMEDS1(X),U,1) Q ;at least one day
  1. .S G=1_U_$$VD^APCLV(V)_U_"Med "_$$VAL^XBDIQ1(9000010.14,Y,.01)
  1. I G Q G
  1. ;NOW V POV FOR SNOMED
  1. ;NOW SNOMED USING ASNC
  1. S T="PXRM BGP IPC BELOW NORM"
  1. S S=0 F S S=$O(^XTMP("BGPSNOMEDSUBSET",$J,T,S)) Q:S=""!(G) D
  1. .Q:'$D(^AUPNVPOV("ASNC",P,S))
  1. .S D=0 F S D=$O(^AUPNVPOV("ASNC",P,S,D)) Q:D=""!(G) D
  1. ..S Y=9999999-D
  1. ..Q:Y>EDATE
  1. ..Q:Y<BDATE
  1. ..S G=1_U_D_U_"SNOMED: "_S
  1. I G Q G
  1. Q ""
  1. TEST ;
  1. D ^CIMZSUS
  1. S DFN=13474
  1. S BGPVALUE=""
  1. S BGPBDATE=3171001
  1. S BGPEDATE=3180930
  1. D BMI
  1. W !,BGPVALUE
  1. Q