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

BGP8PC12.m

Go to the documentation of this file.
  1. BGP8PC12 ; IHS/CMI/LAB - measure I2 ; 02 Feb 2018 11:25 AM
  1. ;;18.1;IHS CLINICAL REPORTING;;MAY 25, 2018;Build 66
  1. ;
  1. DFU S (BGPN1,BGPD1)=0
  1. S BGPFDV="" K BGPDEPV,BGPV,BGPDOV
  1. ;
  1. I BGPAGEE<12 S BGPSTOP=1 Q ;12 or greater during time period
  1. ;
  1. ;GATHER UP ALL DEP SCRN VISITS
  1. NEW X,V,D,Y
  1. ;Let's check all Visits, looping through once
  1. S G="" ;return variable
  1. K BGPV
  1. ;get all visits in date range in BGPV
  1. D ALLV^APCLAPIU(DFN,BGPBDATE,BGPEDATE,"BGPV")
  1. ;I '$O(BGPV(0)) S BGPSTOP=1 G DFUE ;NO DEP VISITS
  1. ;now loop through and check SNOMED and .17 in visit and check v cpts attached to the visit
  1. ;REORDER BY DATE
  1. S X=0 F S X=$O(BGPV(X)) Q:X'=+X S BGPDOV($P(BGPV(X),U,1),X)=BGPV(X)
  1. S D=0 F S D=$O(BGPDOV(D)) Q:D'=+D S X=0 F S X=$O(BGPDOV(D,X)) Q:X'=+X S V=$P(BGPDOV(D,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 Y=$$DEPV(V) I Y]"" S BGPDEPV(9999999-D,X)=""
  1. .;is .17 a cpt we want?
  1. .S Y=$$VALI^XBDIQ1(9000010,V,.17)
  1. .I Y,$$OFFCPT12(Y) S BGPDEPV(9999999-D,X)="" Q
  1. .;now check all V CPTs
  1. .S Z=0 F S Z=$O(^AUPNVCPT("AD",V,Z)) Q:Z'=+Z D
  1. ..S Y=$P($G(^AUPNVCPT(Z,0)),U,1)
  1. ..I Y,$$OFFCPT12(Y) S BGPDEPV(9999999-D,X)="" Q
  1. ;NOW ADD IN ANY VISITS IN BH THAT DID NOT PASS TO PCC AND ARE NOT EHR CREATED
  1. S D=0,E=9999999-BGPBDATE,D=9999999-BGPEDATE-1_".99" F S D=$O(^AMHREC("AE",DFN,D)) Q:D'=+D!($P(D,".")>E) S V=0 F S V=$O(^AMHREC("AE",DFN,D,V)) Q:V'=+V D
  1. .Q:$P(^AMHREC(V,0),U,16) ;ALREADY IN PCC SO WOULD HAVE GOT IT ALREADY
  1. .S S=$P($$VALI^XBDIQ1(9002011,V,.01),".")
  1. .S Z=0 F S Z=$O(^AMHRPROC("AD",V,Z)) Q:Z'=+Z D
  1. ..S Y=$P($G(^AMHRPROC(Z,0)),U,1)
  1. ..I Y,$$OFFCPT12(Y) S BGPDEPV($P(D,"."),V)="" Q
  1. ;
  1. I '$D(BGPDEPV) S BGPSTOP=1 G DFUE
  1. ;
  1. S BGPFDV="",X="" F S X=$O(BGPDEPV(X)) Q:X'=+X S BGPFDV=X
  1. S D=9999999-BGPFDV
  1. ;
  1. ;now what about exclusions?
  1. I $$HASDX(DFN,$$DOB^AUPNPAT(DFN),$$FMADD^XLFDT(D,-1)) S BGPSTOP=1 G DFUE ;DX PRIOR TO 1ST DEP VISIT
  1. ;
  1. ;FIND LAST SCREEN ON A DATE OF A DEPRESSION VISIT
  1. S D=0,G="" F S D=$O(BGPDEPV(D)) Q:D'=+D!(G]"") D
  1. .S G=$$DEPSCR(DFN,(9999999-D),(9999999-D))
  1. I G]"" S:G BGPN1=1 G DFU1
  1. ;any screening during entire report period?
  1. S E=$$DEPSCR(DFN,BGPBDATE,BGPEDATE)
  1. I E]"" G DFU1 ;HAS A SCREENING SO CAN'T EXCLUDE
  1. ;check refusal, etc
  1. S X=$$REFUSAL(DFN,BGPBDATE,BGPEDATE,.BGPDEPV)
  1. I X S BGPSTOP=1 G DFUE
  1. DFU1 ;
  1. S BGPD1=1
  1. S BGPVALUE=""
  1. S BGPVALUE="ENC "_$$DATE^BGP8UTL((9999999-BGPFDV))_"|||" ;hit denominator
  1. I BGPN1 S BGPVALUE=BGPVALUE_"*** "_$$DATE^BGP8UTL($P(G,U,2))_" "_$P(G,U,4)_" "_$P(G,U,6)_" "_$P(G,U,7)
  1. I 'BGPN1 S BGPVALUE=BGPVALUE_$$DATE^BGP8UTL($P(G,U,2))_" "_$P(G,U,4)_" "_$P(G,U,6)_" "_$P(G,U,7)
  1. ;
  1. DFUE ;
  1. K D,V,X,Y,BGPV,BGPDEPV,BGPFDV,BGPDOV,G
  1. Q
  1. DEPV(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 DEP SCRN 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 DEP SCRN ENC",A)) S B=A
  1. Q B
  1. OFFCPT12(C) ;EP
  1. I $$ICD^ATXAPI(C,$O(^ATXAX("B","BGP IPC DEP SCRN ENC CPTS",0)),1) Q 1
  1. Q ""
  1. LOINC(A,B) ;EP
  1. NEW %
  1. S %=$P($G(^LAB(95.3,A,9999999)),U,2)
  1. I %]"",$D(^ATXAX(B,21,"B",%)) Q 1
  1. S %=$P($G(^LAB(95.3,A,0)),U)_"-"_$P($G(^LAB(95.3,A,0)),U,15)
  1. I $D(^ATXAX(B,21,"B",%)) Q 1
  1. Q ""
  1. HASDX(P,BDATE,EDATE) ;
  1. NEW X,Y,Z
  1. I $$PLTAXND^BGP8DU(P,"BGP IPC DEPRESSION DIAG DXS",EDATE,1) Q 1
  1. I $$IPLSNOND^BGP8DU(P,"PXRM BGP IPC DEPRESSION DX",EDATE,1) Q 1
  1. I $$LASTDX^BGP8UTL1(P,"BGP IPC DEPRESSION DIAG DXS",BDATE,EDATE) Q 1
  1. I $$PLTAXND^BGP8DU(P,"BGP IPC BIPOLAR DIAG DXS",EDATE,1) Q 1
  1. I $$IPLSNOND^BGP8DU(P,"PXRM BGP IPC BIPOLAR DX",EDATE,1) Q 1
  1. I $$LASTDX^BGP8UTL1(P,"BGP IPC BIPOLAR DIAG DXS",BDATE,EDATE) Q 1
  1. I $$BHDX(P,BDATE,EDATE) Q 1
  1. Q ""
  1. BHDX(P,BDATE,EDATE) ;has a bh dx in either taxonomy BDATE to EDATE?
  1. NEW X,Y,Z,C,I,G
  1. S G=""
  1. S X=0 F S X=$O(^AMHRPRO("AC",P,X)) Q:X'=+X!(G) D
  1. .;DATE?
  1. .S Y=$$VALI^XBDIQ1(9002011.01,X,.01)
  1. .Q:'Y
  1. .S Y=$P($P($G(^AMHREC(Y,0)),U,1),".")
  1. .Q:'Y
  1. .Q:Y<BDATE
  1. .Q:Y>EDATE
  1. .S C=$P($G(^AMHRPRO(X,0)),U,1)
  1. .Q:'C
  1. .Q:'$D(^AMHPROB(C,0))
  1. .S I=$P(^AMHPROB(C,0),U,5)
  1. .I I="" S I=$P(^AMHPROB(C,0),U,17)
  1. .I I="" Q
  1. .S Z=+$$CODEN^BGP8UTL2(I,80)
  1. .I 'Z Q
  1. .I $$ICD^BGP8UTL2(Z,$O(^ATXAX("B","BGP IPC BIPOLAR DIAG DXS",0)),9) S G=1 Q
  1. .I $$ICD^BGP8UTL2(Z,$O(^ATXAX("B","BGP IPC DEPRESSION DIAG DXS",0)),9) S G=1 Q
  1. .Q
  1. Q G
  1. DEPSCR(P,BDATE,EDATE) ;
  1. NEW X,Y,Z,BGPV,BGPS,V,D,E,S
  1. S BGPS=""
  1. D ALLV^APCLAPIU(P,BDATE,EDATE,"BGPV")
  1. S X=0 F S X=$O(BGPV(X)) Q:X'=+X D
  1. .S V=$P(BGPV(X),U,5)
  1. .;get depression screenings exam 36
  1. .S Y=0 F S Y=$O(^AUPNVXAM("AD",V,Y)) Q:Y'=+Y D
  1. ..S E=$$VAL^XBDIQ1(9000010.13,Y,.019)
  1. ..Q:E'=36
  1. ..Q:$P(^AUPNVXAM(Y,0),U,4)="" ;no result
  1. ..S R=$$VALI^XBDIQ1(9000010.13,Y,.04)
  1. ..I R'="N",R'="PO",R'="RF" Q ;these are the positive and negative values
  1. ..;S D=$P($G(^AUPNVXAM(Y,12)),U,1)
  1. ..S D=$$VDTM^APCLV(V)
  1. ..I D=$P(BGPS,U,1),Y>$P(BGPS,U,4) S BGPS=D_U_R_U_"Exam 36"_U_Y_U_$S(R="PO":"POS",R="RF":"POS",1:"NEG") Q
  1. ..I D>$P(BGPS,U,1) S BGPS=D_U_$$VAL^XBDIQ1(9000010.13,Y,.04)_U_"Exam 36"_U_Y_U_$S(R="PO":"POS",R="RF":"POS",1:"NEG") Q
  1. .;GET PHQ's
  1. .S Y=0 F S Y=$O(^AUPNVMSR("AD",V,Y)) Q:Y'=+Y D
  1. ..Q:$P($G(^AUPNVMSR(Y,2)),U,1) ;entered in error
  1. ..S E=$$VAL^XBDIQ1(9000010.01,Y,.01)
  1. ..I E'="PHQ2",E'="PHQ9",E'="PHQT" Q
  1. ..Q:$P(^AUPNVMSR(Y,0),U,4)="" ;no result
  1. ..S R=$$VAL^XBDIQ1(9000010.01,Y,.04)
  1. ..;S D=$P($G(^AUPNVMSR(Y,12)),U,1)
  1. ..S D=$$VDTM^APCLV(V)
  1. ..I D=$P(BGPS,U,1),Y>$P(BGPS,U,4) S BGPS=D_U_$$VAL^XBDIQ1(9000010.13,Y,.04)_U_"Meas "_E_U_Y_U_$$RES(E,R) Q
  1. ..I D>$P(BGPS,U,1) S BGPS=D_U_$$VAL^XBDIQ1(9000010.13,Y,.04)_U_"Meas "_E_U_Y_U_$$RES(E,R) Q
  1. ;ADD IN BH
  1. S D=0,E=9999999-BDATE,D=9999999-EDATE-1_".99" F S D=$O(^AMHREC("AE",P,D)) Q:D'=+D!($P(D,".")>E) S V=0 F S V=$O(^AMHREC("AE",P,D,V)) Q:V'=+V D
  1. .S S=$P($$VALI^XBDIQ1(9002011,V,.01),".")
  1. .S R=$$VALI^XBDIQ1(9002011,V,1405)
  1. .I R="" G BHM
  1. .I R]"",R'="P",R'="N",R'="RF" Q
  1. .I S>$P(BGPS,U,1) S BGPS=S_U_$$VAL^XBDIQ1(9002011,V,1405)_U_"BH Exam 36"_U_V_U_$S(R="P":"POS",R="RF":"POS",1:"NEG") Q
  1. BHM .S X=0 F S X=$O(^AMHRMSR("AD",V,X)) Q:X'=+X S BGPP=$P($G(^AMHRMSR(X,0)),U) D
  1. ..S BGPP=$P($G(^AUTTMSR(BGPP,0)),U)
  1. ..S R=$$VAL^XBDIQ1(9002011.12,X,.04)
  1. ..I BGPP="PHQ2"!(BGPP="PHQ9")!(BGPP="PHQT") I S>$P(BGPS,U,1) S BGPS=S_U_$$VAL^XBDIQ1(9002011.12,X,.04)_U_"BH Meas "_BGPP_U_X_U_$$RES(BGPP,R) Q
  1. I BGPS="" Q ""
  1. S R=$P(BGPS,U,5)
  1. I R="NEG" Q 1_U_BGPS
  1. S Y=$$FUPLAN(P,$P($P(BGPS,U,1),"."),$P($P(BGPS,U,1),"."))
  1. I 'Y Q 0_U_BGPS_U_"NO FU PLAN"
  1. I Y Q 1_U_BGPS_U_$P(Y,U,2)
  1. Q
  1. FUPLAN(P,BDATE,EDATE) ;
  1. ;PROBLEM LIST SNOMED ENTERED ON BDATE
  1. NEW X,G,S,BGPG,Y,I,V,W,Z,TAX,BGPMEDS1,TAX1,M,R,B,O
  1. S X=0,G="" F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(G) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .Q:$P(^AUPNPROB(X,0),U,8)'=BDATE
  1. .S S=$$VAL^XBDIQ1(9000011,X,80001)
  1. .Q:S=""
  1. .I '$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC DEP INTER",S)) Q
  1. .S G=1_U_"F/U PL "_S
  1. I G Q G
  1. ;now vpov using asnc
  1. S Y="BGPG("
  1. S X=P_"^ALL DX;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(X,Y)
  1. S X=0 F S X=$O(BGPG(X)) Q:X'=+X!(G) D
  1. .S I=+$P(BGPG(X),U,4)
  1. .S V=$P(BGPG(X),U,5)
  1. .S S=$$VAL^XBDIQ1(9000010.07,I,1101)
  1. .I S="" Q
  1. .I '$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC DEP INTER",S)) Q
  1. .S G=1_U_"F/U POV "_S
  1. I G Q G
  1. ;REFERRALS? ANY V REFERRAL ON DATE WITH A SNOMED AS .01 FIELD
  1. S Z=0 F S Z=$O(^AUPNVREF("AC",P,Z)) Q:Z'=+Z!(G) D
  1. .S V=$P($G(^AUPNVREF(Z,0)),U,3)
  1. .S D=$$VD^APCLV(V)
  1. .Q:D<BDATE
  1. .Q:D>EDATE
  1. .S S=$P($G(^AUPNVREF(Z,0)),U,1) Q:S=""
  1. .Q:'$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC DEP INTER",S))
  1. .S G=1_U_"F/U Referral: "_S Q
  1. I G Q G
  1. S G=""
  1. ;V PATIENT EDUCATION
  1. K BGPG
  1. S X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
  1. S X=0 F S X=$O(BGPG(X)) Q:X'=+X!(G) D
  1. .S I=+$P(BGPG(X),U,4)
  1. .S T=$$VALI^XBDIQ1(9000010.16,I,.01)
  1. .Q:'T
  1. .Q:'$D(^AUTTEDT(T,0))
  1. .S T=$P(^AUTTEDT(T,0),U,2)
  1. .I $P(T,"-",2)'="FU" Q ;must be followup
  1. .S S=$P(T,"-",1)
  1. .S C=$$ICDDX^BGP8UTL2(S)
  1. .I $P(C,U,1)'="-1",$$ICD^BGP8UTL2($P(C,U,1),$O(^ATXAX("B","BGP IPC DEPRESSION DIAG DXS",0)),9) S G=1_U_"F/U Pt Ed "_T Q
  1. .I $P(C,U,1)'="-1",$$ICD^BGP8UTL2($P(C,U,1),$O(^ATXAX("B","BGP IPC BIPOLAR DISORDER DXS",0)),9) S G=1_U_"F/U Pt Ed "_T Q
  1. .;is it a snomed?
  1. .I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC DEP INTER",S)) S G=1_U_"F/U Pt Ed "_T Q
  1. .I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC DEPRESSION DX",S)) S G=1_U_"F/U Pt Ed "_T Q
  1. .I $D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC BIPOLAR DX",S)) S G=1_U_"F/U Pt Ed "_T Q
  1. I G Q G
  1. ;v med first
  1. D GETMEDS^BGP8UTL2(P,BDATE,EDATE,"BGP IPC DEPRESSION MEDS","",,,.BGPMEDS1,"BGP IPC DEPRESSION 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. .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_"F/U Med "_$$VAL^XBDIQ1(9000010.14,Y,.01)
  1. I G Q G
  1. ;how about orders
  1. ;go through all 52 for one ordered on BDATE
  1. S TAX=$O(^ATXAX("B","BGP IPC DEPRESSION MEDS",0))
  1. S TAX1=$O(^BGPSNOMR("B","BGP IPC DEPRESSION RXNORM",0))
  1. S Z=0,G="" F S Z=$O(^PS(55,P,"P",Z)) Q:Z'=+Z!(G) D
  1. .S R=$P(^PS(55,P,"P",Z,0),U,1)
  1. .Q:'$D(^PSRX(R,0)) ;bad xref
  1. .S D=$P(^PSRX(R,0),U,6)
  1. .Q:'D ;no drug??
  1. .S M=0
  1. .I $D(^ATXAX(TAX,21,"B",D)) S M=1
  1. .S B=$$VAL^XBDIQ1(9000010.14,R,9999999.27)
  1. .I B]"",$D(^BGPSNOMR(TAX1,11,"B",B)) S M=1
  1. .Q:'M
  1. .;ORDER
  1. .S O=$P($G(^PSRX(R,"OR1")),U,2) ;order number
  1. .Q:'O
  1. .Q:'$D(^OR(100,O))
  1. .S A=0 F S A=$O(^OR(100,O,8,A)) Q:A'=+A!(G) D
  1. ..S D=$P($G(^OR(100,O,8,A,0)),U,1)
  1. ..I $P(D,".")=BDATE S G=1_U_"F/U PSRX Order"
  1. I G Q G
  1. Q ""
  1. RES(T,R) ;
  1. I T="PHQ2",R<3 Q "NEG"
  1. I T="PHQ2" Q "POS"
  1. I T="PHQ9",R<10 Q "NEG"
  1. I T="PHQ9" Q "POS"
  1. I T="PHQT",R<10 Q "NEG"
  1. I T="PHQT" Q "POS"
  1. Q ""
  1. REFUSAL(P,BDATE,EDATE,BGPDEPV) ;
  1. ;CHECK REFUSAL FILE FIRST FOR FLU CVX OR FLU CPT AND MEDICAL REASON NOT DONE SNOMED OR PATIENT REASON NOT DONE SNOMED OR SYSTEM REASON NOT DONE SNOMED
  1. ;ITEM 1-2, 1-3, 1-4
  1. NEW F,G,I,C,ID,X
  1. S F=0,G="" F F=9999999.07,9999999.15 D
  1. .S I="" F S I=$O(^AUPNPREF("AA",P,F,I)) Q:I=""!(G) D
  1. ..;check all file vs item combos
  1. ..I F=9999999.15,$$VAL^XBDIQ1(9999999.15,I,.02)'=36 Q
  1. ..I F=9999999.07 S C=$P($G(^AUTTMSR(I,0)),U,1) I C'="PHQ2",C'="PHQ9",C'="PHQT" Q
  1. ..S ID=0 F S ID=$O(^AUPNPREF("AA",P,F,I,ID)) Q:ID=""!(G) D
  1. ...Q:'$D(BGPDEPV(ID))
  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 R]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM BGP IPC NOT DONE PAT",R)) S G=1 Q
  1. ....I $$VALI^XBDIQ1(9000022,X,.07)="R" S G=1 Q
  1. ....I $$VALI^XBDIQ1(9000022,X,.07)="N" S G=1 Q
  1. Q G