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

BGP8PC16.m

Go to the documentation of this file.
  1. BGP8PC16 ; IHS/CMI/LAB - measure I2 ; 02 Feb 2018 11:25 AM
  1. ;;18.1;IHS CLINICAL REPORTING;;MAY 25, 2018;Build 66
  1. ;
  1. CBP ;EP
  1. S (BGPN1,BGPD1)=0
  1. K Y
  1. S BGPDV=""
  1. I BGPAGEE<18 S BGPSTOP=1 Q ;18 or greater during time period
  1. I BGPAGEB>85 S BGPSTOP=1 Q ;85 or less during time period
  1. ;
  1. S BGPDV=$$ENC16(DFN,BGPBDATE,BGPEDATE) I BGPDV="" S BGPSTOP=1 G CBPX ;no office visit
  1. ;hypertension?
  1. I '$$HTN(DFN,$$DOB^AUPNPAT(DFN),$$FMADD^XLFDT(BGPBDATE,180)) S BGPSTOP=1 G CBPX ;no hypertension
  1. ;now what about exclusions?
  1. I $$HOSPIND^BGP8PC2(DFN,BGPBDATE,BGPEDATE) S BGPSTOP=1 G CBPX ;no hospice pts
  1. ;?
  1. I $$PREG(DFN,BGPBDATE,BGPEDATE) S BGPSTOP=1 G CBPX
  1. I $$ESRD(DFN,BGPBDATE,BGPEDATE) S BGPSTOP=1 G CBPX
  1. I $$CKD(DFN,BGPBDATE,BGPEDATE) S BGPSTOP=1 G CBPX
  1. I $$CPT^BGP8DU(DFN,$$DOB^AUPNPAT(DFN),BGPEDATE,$O(^ATXAX("B","BGP IPC VASCULAR ACC DIAL CPTS",0)),5) S BGPSTOP=1 G CBPX
  1. I $$CPT^BGP8DU(DFN,$$DOB^AUPNPAT(DFN),BGPEDATE,$O(^ATXAX("B","BGP IPC ESRD OPT SRV CPTS",0)),5) S BGPSTOP=1 G CBPX
  1. I $$CPT^BGP8DU(DFN,$$DOB^AUPNPAT(DFN),BGPEDATE,$O(^ATXAX("B","BGP IPC KIDNEY TRANSPLANT CPTS",0)),5) S BGPSTOP=1 G CBPX
  1. I $$CPT^BGP8DU(DFN,$$DOB^AUPNPAT(DFN),BGPEDATE,$O(^ATXAX("B","BGP IPC DIALYSIS SRV CPTS",0)),5) S BGPSTOP=1 G CBPX
  1. ;
  1. S BGPD1=1
  1. ;
  1. K BGPG,BGPF
  1. S Y="BGPG("
  1. S X=DFN_"^FIRST DX [BGP IPC ESSENTIAL HTN DXS" S E=$$START1^APCLDF(X,Y)
  1. ;I '$D(BGPG(1)) S BGPSTOP=1 G CBPX ;NO DX EVER????
  1. S BGPF=$P($G(BGPG(1)),U,1)
  1. I BGPF="" S BGPF=$P($$PLTAXND(DFN,"BGP IPC ESSENTIAL HTN DXS",$$FMADD^XLFDT(BGPBDATE,180),1),U,3)
  1. I BGPF="" S BGPF=$P($$IPLSNOND(DFN,"PXRM BGP IPC HTN",$$FMADD^XLFDT(BGPBDATE,180),1),U,3)
  1. S BGPVAL=$$LASTBP(DFN,BGPBDATE,BGPEDATE) ;RETURN DATE^SYSTOLIC^DIASTOLIC
  1. I BGPVAL="" G CBPV
  1. I $P(BGPVAL,U,1)<BGPF G CBPV
  1. I $P(BGPVAL,U,2)<140,$P(BGPVAL,U,3)<90 S BGPN1=1
  1. CBPV ;
  1. S BGPVALUE=""
  1. S BGPVALUE="ENC "_$P(BGPDV,U,2)_"|||" ;hit denominator
  1. S BGPVALUE=BGPVALUE_$S(BGPN1:"*** ",1:"")
  1. I BGPVAL]"" S BGPVALUE=BGPVALUE_$$DATE^BGP8UTL($P(BGPVAL,U,1))_" "_$P(BGPVAL,U,2)_"/"_$P(BGPVAL,U,3)
  1. CBPX ;
  1. K V,BGPDV,BGPVAL,BGPG,F,Y,X,E
  1. Q
  1. ENC16(P,BDATE,EDATE) ;EP - have encounter per CMS122v6
  1. ;HAS one of the following
  1. NEW X,Y,Z,G,BGPV,D
  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. ;now loop through and check Face to Face and .17 in visit and check v cpts attached to the visit
  1. S X=0 F S X=$O(BGPV(X)) Q:X'=+X!(G) S V=$P(BGPV(X),U,5) 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=$$FTOF^BGP8PC2(V) I Y]"" S G=1_U_$$DATE^BGP8UTL(D)_" FTOF: "_Y Q
  1. .;is .17 a cpt we want?
  1. .S Y=$$VALI^XBDIQ1(9000010,V,.17)
  1. .I Y,$$OFFCPT16(Y) S G=1_U_$$DATE^BGP8UTL(D)_" CPT: "_$P($$CPT^ICPTCOD(Y),U,2) 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,$$OFFCPT16(Y) S G=1_U_$$DATE^BGP8UTL(D)_" CPT: "_$P($$CPT^ICPTCOD(Y),U,2) Q
  1. Q G
  1. OFFCPT16(C) ;EP
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC OFFICE VISIT CPTS",0)),1) Q 1
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC PREVCARE EOV >=18 CPTS",0)),1) Q 1
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC PREVCARE IOV >=18 CPTS",0)),1) Q 1
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC HOMEHEALTH VISIT CPTS",0)),1) Q 1
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC ANNUAL WELLNESS CPTS",0)),1) Q 1
  1. Q ""
  1. HTN(P,BDATE,EDATE) ;
  1. I $$PLTAXND^BGP8DU(P,"BGP IPC ESSENTIAL HTN DXS",EDATE,1) Q 1
  1. I $$IPLSNOND^BGP8DU(P,"PXRM BGP IPC HTN",EDATE,1) Q 1
  1. I $$LASTDX^BGP8UTL1(P,"BGP IPC ESSENTIAL HTN DXS",BDATE,EDATE) 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 DXS",BDATE,EDATE) I X Q 1
  1. S T=$O(^ATXAX("B","BGP IPC PREGNANCY 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",S)) S G=1 Q
  1. Q G
  1. ESRD(P,BDATE,EDATE) ;
  1. I $$PLTAXND^BGP8DU(P,"BGP IPC ESRD DXS",EDATE,1) Q 1
  1. I $$LASTDX^BGP8UTL1(P,"BGP IPC ESRD DXS",BDATE,EDATE) Q 1
  1. NEW X,S,I
  1. S I=""
  1. S X=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .I $P(^AUPNPROB(X,0),U,12)="D" Q
  1. .I $P(^AUPNPROB(X,0),U,12)="I" Q
  1. .I $P(^AUPNPROB(X,0),U,13),$P(^AUPNPROB(X,0),U,13)>EDATE Q ;if there is a doo and it is after report period skip
  1. .I $P(^AUPNPROB(X,0),U,13)="",$P(^AUPNPROB(X,0),U,8)>EDATE Q ;entered after report period, skip
  1. .S S=$$VAL^XBDIQ1(9000011,X,80001)
  1. .I S=236434000 S I=1 Q
  1. .I S=236435004 S I=1 Q
  1. .I S=236436003 S I=1 Q
  1. .I S=46177005 S I=1 Q
  1. .Q
  1. I I Q 1
  1. ;NOW V POV FOR SNOMED CODE
  1. ;NOW SNOMED USING ASNC
  1. S G="",I=""
  1. S S="" F S S=$O(^AUPNVPOV("ASNC",P,S)) Q:S=""!(G) D
  1. .S I=0
  1. .I S=236434000 S I=1
  1. .I S=236435004 S I=1
  1. .I S=236436003 S I=1
  1. .I S=46177005 S I=1
  1. .Q:'I
  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. ..S G=1
  1. I G Q 1
  1. Q ""
  1. CKD(P,BDATE,EDATE) ;
  1. I $$PLTAXND^BGP8DU(P,"BGP IPC CKD STG 5 DXS",EDATE,1) Q 1
  1. I $$LASTDX^BGP8UTL1(P,"BGP IPC CKD STG 5 DXS",BDATE,EDATE) Q 1
  1. NEW X,S,I
  1. S I=""
  1. S X=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .I $P(^AUPNPROB(X,0),U,12)="D" Q
  1. .I $P(^AUPNPROB(X,0),U,12)="I" Q
  1. .I $P(^AUPNPROB(X,0),U,13),$P(^AUPNPROB(X,0),U,13)>EDATE Q ;if there is a doo and it is after report period skip
  1. .I $P(^AUPNPROB(X,0),U,13)="",$P(^AUPNPROB(X,0),U,8)>EDATE Q ;entered after report period, skip
  1. .S S=$$VAL^XBDIQ1(9000011,X,80001)
  1. .I S=433146000 S I=1 Q
  1. .Q
  1. I I Q 1
  1. ;NOW V POV FOR SNOMED CODE
  1. ;NOW SNOMED USING ASNC
  1. S G="",I=""
  1. S S="" F S S=$O(^AUPNVPOV("ASNC",P,S)) Q:S=""!(G) D
  1. .S I=0
  1. .I S=433146000 S I=1
  1. .Q:'I
  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. ..S G=1
  1. I G Q 1
  1. Q ""
  1. LASTBP(P,BDATE,EDATE) ;
  1. NEW A,B,C,G,X,Y,Z,SYS,DIA,D,BGPV,V,L,LV,R
  1. ;get all visits in time window
  1. ;eliminate all that are not outpatient adult visits
  1. D ALLV^APCLAPIU(P,BDATE,EDATE,"BGPV")
  1. I '$O(BGPV(0)) Q ""
  1. ;ELIMIATE NON ADULT OPT AND GET LAST ONE BY DATE/TIME, IF 2 AT SAME DATE/TIME TAKE HIGHEST IEN
  1. K Z
  1. S X=0,V="",G="" F S X=$O(BGPV(X)) Q:X'=+X D
  1. .S V=$P(BGPV(X),U,5) ;VISIT IEN
  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=$$FTOF^BGP8PC2(V) I Y]"" S Z(D,V)="" Q
  1. .;is .17 a cpt we want?
  1. .S C=$$VALI^XBDIQ1(9000010,V,.17) I C,$$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC ADULT OPT CPTS",0)),1) S Z(D,V)="" Q
  1. .;now check all V CPTs
  1. .S B=0 F S B=$O(^AUPNVCPT("AD",V,B)) Q:B'=+B D
  1. ..S C=$P($G(^AUPNVCPT(B,0)),U,1)
  1. ..I C,$$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC ADULT OPT CPTS",0)),1) S Z(D,V)="" Q
  1. ;NOW CHECK ARRAY Z AND GET VERY LAST ONE
  1. I '$O(Z(0)) Q ""
  1. S D=0,L="" F S D=$O(Z(D)) Q:D="" S L=D
  1. S (SYS,DIA)=""
  1. S V=0 F S V=$O(Z(L,V)) Q:V'=+V D
  1. .;GET ALL BPS ON EACH ADULT VISIT ON THIS DAY
  1. .S X=0 F S X=$O(^AUPNVMSR("AD",V,X)) Q:X'=+X D
  1. ..Q:'$D(^AUPNVMSR(X,0))
  1. ..Q:$$VAL^XBDIQ1(9000010.01,X,.01)'="BP"
  1. ..Q:$P($G(^AUPNVMSR(X,2)),U,1) ;entered in error
  1. ..S R=$$VAL^XBDIQ1(9000010.01,X,.04)
  1. ..S S=$P(R,"/"),D=$P(R,"/",2)
  1. ..I SYS="" S SYS=S
  1. ..I DIA="" S DIA=D
  1. ..I S<SYS S SYS=S
  1. ..I D<DIA S DIA=D
  1. I SYS]"",DIA]"" Q L_U_SYS_U_DIA
  1. Q ""
  1. TESTBP ;
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN S A=$$LASTBP(DFN,3120101,DT) W !,DFN," ",A
  1. Q
  1. TESTESRD ;
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN S A=$$ESRD(DFN,$$DOB^AUPNPAT(DFN),DT) I A W !,DFN," ",A
  1. Q
  1. TESTPREG ;
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN S A=$$PREG(DFN,3120101,DT) I A W !,DFN," ",A
  1. Q
  1. TESTCKD ;
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN S A=$$CKD(DFN,$$DOB^AUPNPAT(DFN),DT) I A W !,DFN," ",A
  1. Q
  1. PLTAXND(P,A,E,Z) ;EP - is dx on problem list as NOT DELETED
  1. ;P is dfn
  1. ;a is taxonomy name
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. S E=$G(E)
  1. S Z=$G(Z) ;skip inactive if =1
  1. NEW T S T=$O(^ATXAX("B",A,0))
  1. I 'T Q "" ;bad taxonomy??
  1. NEW X,Y,I,D
  1. S (X,Y,I)=0
  1. F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .I Z Q:$P(^AUPNPROB(X,0),U,12)="I"
  1. .S Y=$P(^AUPNPROB(X,0),U)
  1. .I E,$P(^AUPNPROB(X,0),U,13)>E Q ;if there is a doo and it is after report period skip
  1. .I $P(^AUPNPROB(X,0),U,13)="",E,$P(^AUPNPROB(X,0),U,8)>E Q ;entered after report period, skip
  1. .Q:'$$ICD^BGP8UTL2(Y,T,9)
  1. .S D=$P(^AUPNPROB(X,0),U,13)
  1. .I 'D S D=$P(^AUPNPROB(X,0),U,8)
  1. .S I=1_U_"Problem List: "_$$VAL^XBDIQ1(9000011,X,.01)_U_D
  1. .Q
  1. Q I
  1. IPLSNOND(P,T,E,Z) ;EP - any problem list entry with a SNOMED in T
  1. ;LOOP PROBLEM LIST
  1. NEW G,X,Y
  1. S (X,G)=""
  1. S E=$G(E)
  1. S Z=$G(Z)
  1. F S X=$O(^AUPNPROB("APCT",P,X)) Q:X=""!(G) D
  1. .S Y=0 F S Y=$O(^AUPNPROB("APCT",P,X,Y)) Q:Y'=+Y!(G) D
  1. ..Q:'$D(^AUPNPROB(Y,0))
  1. ..Q:$P(^AUPNPROB(Y,0),U,12)="D" ;deleted
  1. ..I Z Q:$P(^AUPNPROB(Y,0),U,12)="I"
  1. ..Q:'$D(^XTMP("BGPSNOMEDSUBSET",$J,T,X))
  1. ..I E,$P(^AUPNPROB(Y,0),U,13)>E Q ;if there is a doo and it is after report period skip
  1. ..I $P(^AUPNPROB(Y,0),U,13)="",E,$P(^AUPNPROB(Y,0),U,8)>E Q ;entered after report period, skip
  1. ..S D=$P(^AUPNPROB(Y,0),U,13)
  1. ..I 'D S D=$P(^AUPNPROB(Y,0),U,8)
  1. ..S G=1_U_"Problem List: "_X_U_D ;$$CONCPT^AUPNVUTL(X)
  1. Q G