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

BGP2D23.m

Go to the documentation of this file.
  1. BGP2D23 ; IHS/CMI/LAB - measure I2 23 Jun 2010 10:08 AM ;
  1. ;;12.1;IHS CLINICAL REPORTING;;MAY 17, 2012;Build 66
  1. ;
  1. IMS ;EP
  1. S (BGPN1,BGPN2,BGPN3,BGPN4,BGPN5,BGPN6,BGPN7,BGPN8,BGPN9,BGPN10,BGPN11,BGPN12,BGPN13,BGPD1,BGPD2)=0
  1. S BGPVALUE=""
  1. I $$LASTDX^BGP2UTL1(DFN,"SURVEILLANCE DIABETES",$P(^DPT(DFN,0),U,3),BGPEDATE) S BGPSTOP=1 Q ;had diabetes dx
  1. S BGPD=$$MS(DFN,BGPBDATE,BGPEDATE)
  1. I BGPD="" S BGPSTOP=1 Q ;not in denominator
  1. Q:BGPAGEB<18
  1. I BGPACTCL S BGPD1=1
  1. I BGPACTUP S BGPD2=1
  1. I 'BGPD2 Q ;not at least up
  1. S BGPVALUE="UP"
  1. I BGPD1 S BGPVALUE=BGPVALUE_",AC"
  1. S BGPVALUE=BGPVALUE_","_$P(BGPD,U,2)_"|||"
  1. ;now set up numerators
  1. IMS1 ;EP
  1. S C=0
  1. S BGPBP=$$BPSD(DFN,BGPBDATE,BGPEDATE)
  1. I BGPBP S BGPN1=1
  1. I BGPBP="" S BGPBP=$$BPCPT^BGP2D22(DFN,BGP365,BGPEDATE),C=1 I $P(BGPBP,U,2)]"" S BGPN1=1
  1. I BGPN1 S BGPVALUE=BGPVALUE_" 2 BPs" I C S BGPVALUE=BGPVALUE ;_$S($P(BGPBP,U,2)["V":" - POV ",1:" - CPT ")_$P(BGPBP,U,2)
  1. IMS2 ;LDL done
  1. S BGPLDL=$$LDL^BGP2D2(DFN,BGPBDATE,BGPEDATE,1)
  1. S BGPN2=$P(BGPLDL,U)
  1. I BGPN2 D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"LDL: "_$$DATE^BGP2UTL($P(BGPLDL,U,2))_" "_$P(BGPLDL,U,3)
  1. K X,Y,Z,%,A,B,C,D,E,H,BDATE,EDATE,P,V,S,F,BGPLDL,BGPHDL,BGPTRI,BGPLP,BGPA1C
  1. IMS3 ;fasting glucose
  1. S BGPFG=$$FGT(DFN,BGPBDATE,BGPEDATE)
  1. S BGPN3=$P(BGPFG,U)
  1. I BGPN3 D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"FG: "_$$DATE^BGP2UTL($P(BGPFG,U,2))
  1. S BGPA1C=$$HGBA1C^BGP2D2(DFN,BGPBDATE,BGPEDATE)
  1. I '$P(BGPA1C,U,1) S BGPN13=1 ;NO HGBA1C
  1. I $P(BGPA1C,U,1) S BGPN3=1 D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"A1C: "_$P(BGPA1C,U,4) D
  1. .S V=$P(BGPA1C,U,4)
  1. .Q:V=""
  1. .;I V="" S BGPN13=""
  1. .;I V["3044F" S BGPN13=""
  1. .I $E(V)="<",+$E(V,2,9)<5.7 S BGPN10=1 Q
  1. .I V[">" S BGPN12=1 Q
  1. .I +V=0 Q
  1. .I V<5.7 S BGPN10=1 Q
  1. .I V<6.5 S BGPN11=1 Q
  1. .S BGPN12=1 Q
  1. S BGPGFR="" ;$$GFR^BGP2D211(DFN,BGP365,BGPEDATE)
  1. S BGPESRD="" ;$$ESRD^BGP2D211(DFN,$P(^DPT(DFN,0),U,3),BGPEDATE)
  1. S BGPQUP="" ;$$QUANTUP^BGP2D211(DFN,BGPBDATE,BGPEDATE)
  1. I BGPESRD S BGPN4=1
  1. I $P(BGPGFR,U),$P(BGPQUP,U,1) S BGPN4=1
  1. I BGPN4 D
  1. .I BGPESRD S BGPVALUE=BGPVALUE_$S(BGPESRD]"":";ESRD: "_$P(BGPESRD,U,2)_"-"_$$DATE^BGP2UTL($P(BGPESRD,U,3)),1:"") Q
  1. .S BGPVALUE=BGPVALUE_";GFR: "_$$DATE^BGP2UTL($P(BGPGFR,U,2))
  1. .S BGPVALUE=BGPVALUE_" & QUANT UP: "_$P(BGPQUP,U,2)_"-"_$$DATE^BGP2UTL($P(BGPQUP,U,3))
  1. K BGPFG
  1. IMS5 ;
  1. K BGPX,BGPC1,X,Y,Z,%,A,B,C,D,E,H,BDATE,EDATE,P,V,S,F
  1. S BGPTOBV=""
  1. S BGPTOB=$$TOBACCO^BGP2D7(DFN,BGPBDATE,BGPEDATE)
  1. S BGPN5=$S(BGPTOB]"":1,1:0) I BGPN5 S BGPTOBV=$P(BGPTOB,U,2)_" "_$P(BGPTOB,U,1)
  1. S BGPSDX=$$DX^BGP2D7(DFN,BGPBDATE,BGPEDATE)
  1. S BGPXPWD=$$PED^BGP2D7(DFN,BGPBDATE,BGPEDATE)
  1. S BGP1320=$$DENT^BGP2D7(DFN,BGPBDATE,BGPEDATE)
  1. S BGPSCPT=$$CPTSM^BGP2D7(DFN,BGPBDATE,BGPEDATE)
  1. I BGPSDX]"" S BGPN5=1 I BGPTOBV="" S BGPTOBV=$$DATE^BGP2UTL($P(BGPSDX,U,2))_" "_$P(BGPSDX,U,1)
  1. I BGPXPWD]"" S BGPN5=1 I BGPTOBV="" S BGPTOBV=$$DATE^BGP2UTL($P(BGPXPWD,U,2))_" "_$P(BGPXPWD,U,1)
  1. I BGP1320]"" S BGPN5=1 I BGPTOBV="" S BGPTOBV=$$DATE^BGP2UTL($P(BGP1320,U,2))_" 1320"
  1. I BGPSCPT]"" S BGPN5=1 I BGPTOBV="" S BGPTOBV=$$DATE^BGP2UTL($P(BGPSCPT,U,2))_" "_$P(BGPSCPT,U,1)
  1. I BGPN5 D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"TOB: "_BGPTOBV
  1. IMS6 ;
  1. S BGPBMI=$$BMI^BGP2D6(DFN,BGPEDATE,BGPAGEE)
  1. ;I $P(BGPBMI,U)="" S BGPBMI=$$REF^BGP2D6(DFN,BGPBDATE,BGPEDATE,BGPAGEB)
  1. I $P(BGPBMI,U)]"" S BGPN6=1
  1. I BGPN6 D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"BMI: "_$S(BGPBMI["HT":"Ref "_$P(BGPBMI,U,2)_" "_$$DATE^BGP2UTL($P(BGPBMI,U,3))_" "_$P(BGPBMI,U,5)_" "_$$DATE^BGP2UTL($P(BGPBMI,U,6)),BGPBMI]"":$$SB^BGP2PDL1($J($P(BGPBMI,U),6,2)),1:"")
  1. IMS7 ;
  1. S BGPLIFE=$$LIFED^BGP2D41(DFN,BGPBDATE,BGPEDATE)
  1. I $P(BGPLIFE,U) S BGPN7=1
  1. I BGPN7 D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"LIFE: "_$$DATE^BGP2UTL($P(BGPLIFE,U,2))_" "_$P(BGPLIFE,U,3)
  1. IMS8 ;
  1. S BGPDEP=$$DEP^BGP2D25(DFN,BGP365,BGPEDATE) I $P(BGPDEP,U)=1 S BGPN8=1
  1. S BGPDEPS=$$DEPSCR^BGP2D25(DFN,BGP365,BGPEDATE) I $P(BGPDEPS,U)=1 S BGPN8=1
  1. S BGPREF="" I 'BGPN8 S BGPREF=$$DEPREF^BGP2D25(DFN,BGP365,BGPEDATE) I $P(BGPREF,U)=1 S BGPN8=1
  1. I BGPDEP]"" D I 1
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"DEPR: "_$P(BGPDEP,U,2)_" "_$P(BGPDEP,U,3)
  1. E I BGPDEPS]"" D I 1
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .S BGPVALUE=BGPVALUE_"DEPR: "_$P(BGPDEPS,U,2)_" "_$P(BGPDEPS,U,3)
  1. E D
  1. .I $P(BGPVALUE,"|||",2)]"" S BGPVALUE=BGPVALUE_"; "
  1. .I BGPREF]"" S BGPVALUE=BGPVALUE_"DEPR: "_$P(BGPREF,U,2)_" "_$P(BGPREF,U,3)
  1. IMS9 ;
  1. I BGPN1,BGPN2,BGPN3,BGPN7,BGPN5,BGPN6,BGPN8 S BGPN9=1,BGPVALUE=$P(BGPVALUE,"|||",1)_"||| (ALL:) "_$P(BGPVALUE,"|||",2)
  1. K BGPDEP,BGPDEPS,BGPREF,BGPLIFE,BGPBMI,BGPSDX,BGP1320,BGPTOB,BGPUP,BGPFG,BGPHDL
  1. K ^TMP($J,"A")
  1. Q
  1. MS(P,BDATE,EDATE) ;EP
  1. ;2 visits with 277.7?
  1. NEW A,B,E,X,G,V,Y,D
  1. K ^TMP($J,"A")
  1. S A="^TMP($J,""A"",",B=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(B,A)
  1. I '$D(^TMP($J,"A",1)) Q ""
  1. S (X,G)=0 F S X=$O(^TMP($J,"A",X)) Q:X'=+X!($P(G,U)>2) S V=$P(^TMP($J,"A",X),U,5) D
  1. .Q:'$D(^AUPNVSIT(V,0))
  1. .Q:'$P(^AUPNVSIT(V,0),U,9)
  1. .Q:$P(^AUPNVSIT(V,0),U,11)
  1. .Q:"SAHO"'[$P(^AUPNVSIT(V,0),U,7)
  1. .Q:"V"[$P(^AUPNVSIT(V,0),U,3)
  1. .S (D,Y)=0,E="" F S Y=$O(^AUPNVPOV("AD",V,Y)) Q:Y'=+Y!(D) D
  1. ..Q:'$D(^AUPNVPOV(Y,0))
  1. ..S %=$P(^AUPNVPOV(Y,0),U)
  1. ..Q:'%
  1. ..;I $P($$ICDDX^ICDCODE(%),U,2)=277.7 S D=1
  1. ..I $$ICD^ATXCHK(%,$O(^ATXAX("B","BGP PRE DM MET SYN DX",0)),9) S D=1,E=Y
  1. .Q:'D
  1. .S $P(G,U)=$P(G,U)+1,$P(G,U,($P(G,U)+1))=$$DATE^BGP2UTL($P($P(^AUPNVSIT(V,0),U),"."))_" POV "_$$VAL^XBDIQ1(9000010.07,E,.01)
  1. .Q
  1. K ^TMP($J,"A")
  1. I $P(G,U)>1 Q 1_U_" on "_$P(G,U,2)_"; "_$P(G,U,3)
  1. ;now check for 3 or more of the following
  1. S BGPC=0,BGPK=""
  1. S X=$$BMI^BGP2D6(P,EDATE,$$AGE^AUPNPAT(P,EDATE))
  1. I $E(X,1,2)>29 S BGPC=BGPC+1,BGPK="BMI="_$$STRIP^XLFSTR($J(X,6,2)," ")
  1. S X=$$TRIG^BGP2D231(P,BDATE,EDATE) I X]"" S BGPC=BGPC+1 S:BGPK]"" BGPK=BGPK_"; " S BGPK=BGPK_X
  1. S X=$$HDL(P,BDATE,EDATE) I X]"" S BGPC=BGPC+1 S:BGPK]"" BGPK=BGPK_"; " S BGPK=BGPK_X
  1. S BGPHTN=$$LASTDX^BGP2UTL1(P,"SURVEILLANCE HYPERTENSION",BGP365,EDATE)
  1. S BGPMBP=$$MEANBP(P,BGPBDATE,BGPEDATE)
  1. I $P(BGPHTN,U)!(BGPMBP]"") S BGPC=BGPC+1 S:BGPK]"" BGPK=BGPK_"; " S:$P(BGPHTN,U)=1 BGPK=BGPK_"HTN DX: "_$$DATE^BGP2UTL($P(BGPHTN,U,3)) I BGPMBP]"" S:BGPK]""&($P(BGPHTN,U)=1) BGPK=BGPK_"; " S BGPK=BGPK_BGPMBP
  1. S X=$$FG(P,BGPBDATE,BGPEDATE) I X]"" S BGPC=BGPC+1 S:BGPK]"" BGPK=BGPK_"; " S BGPK=BGPK_X
  1. S X=$$WC^BGP2D231(P,BGPBDATE,BGPEDATE) I X]"" S BGPC=BGPC+1 S:BGPK]"" BGPK=BGPK_"; " S BGPK=BGPK_X
  1. I BGPC>2 Q BGPC_"^"_BGPK
  1. Q ""
  1. BMI(P,BDATE,EDATE,AGE) ;EP
  1. KILL %,W,H,B,D,%DT
  1. S BGPBMIH=""
  1. I AGE>18,AGE<51 D Q BGPBMIH
  1. .S HDATE=$$FMADD^XLFDT(BDATE,-(5*365)),HDATE=$$FMTE^XLFDT(HDATE)
  1. .S BDATE=$$FMADD^XLFDT(BDATE,-(5*365))
  1. .S BDATE=$$FMTE^XLFDT(BDATE),EDATE=$$FMTE^XLFDT(EDATE)
  1. .S W=$$WT(P,BDATE,EDATE) I W=""!(W="?") Q
  1. .;S HDATE=$$FMTE^XLFDT($$FMADD^XLFDT($P(^DPT(P,0),U,3),(19*365)))
  1. .;S HDATE=BDATE
  1. .S H=$$HT(P,HDATE,EDATE) I H="" Q
  1. .S W=W*.45359,H=(H*.0254),H=(H*H),BGPBMIH=(W/H)
  1. I AGE>50 D Q BGPBMIH
  1. .S HDATE=$$FMADD^XLFDT(BDATE,-(2*365)),HDATE=$$FMTE^XLFDT(HDATE)
  1. .S BDATE=$$FMTE^XLFDT(BDATE),EDATE=$$FMTE^XLFDT(EDATE)
  1. .S W=$$WT(P,BDATE,EDATE) I W=""!(W="?") Q
  1. .;S HDATE=$$FMTE^XLFDT($$FMADD^XLFDT($P(^DPT(P,0),U,3),(19*365)))
  1. .S HDATE=BDATE
  1. .S H=$$HT(P,HDATE,EDATE) I H="" Q
  1. .S W=W*.45359,H=(H*.0254),H=(H*H),BGPBMIH=(W/H)
  1. I AGE<19 D Q BGPBMIH
  1. .S BDATE=$$FMADD^XLFDT(EDATE,-365),BDATE=$$FMTE^XLFDT(BDATE),EDATE=$$FMTE^XLFDT(EDATE)
  1. .S X=$$HTWTSD(P,BDATE,EDATE)
  1. .I '$P(X,"^") Q
  1. .I '$P(X,"^",2) Q
  1. .S W=$P(X,"^"),H=$P(X,"^",2)
  1. .S W=W*.45359,H=(H*.0254),H=(H*H),BGPBMIH=(W/H)
  1. .Q
  1. Q
  1. HT(P,BDATE,EDATE) ;EP
  1. I 'P Q ""
  1. KILL %,BGPARRY,H,E
  1. S %=P_"^LAST MEAS HT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(%,"BGPARRY(") S H=$P($G(BGPARRY(1)),U,2)
  1. I H="" Q H
  1. I H["?" Q ""
  1. S H=$J(H,2,0)
  1. Q H
  1. WT(P,BDATE,EDATE) ;EP
  1. I 'P Q ""
  1. KILL %,E,BGPLW,X,BGPLN,BGPL,BGPLD,BGPLZ,BGPLX,ICD
  1. K BGPL S BGPLW="" S BGPLX=P_"^LAST 24 MEAS WT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(BGPLX,"BGPL(")
  1. S BGPLN=0 F S BGPLN=$O(BGPL(BGPLN)) Q:BGPLN'=+BGPLN!(BGPLW]"") D
  1. .S BGPLZ=$P(BGPL(BGPLN),U,5)
  1. .I '$D(^AUPNVPOV("AD",BGPLZ)) S BGPLW=$P(BGPL(BGPLN),U,2) Q
  1. . S BGPLD=0 F S BGPLD=$O(^AUPNVPOV("AD",BGPLZ,BGPLD)) Q:'BGPLD!(BGPLW]"") D
  1. .. S D=$P(BGPL(BGPLN),U)
  1. .. S ICD=$P($$ICDDX^ICDCODE($P(^AUPNVPOV(BGPLD,0),U),D),U,2) D
  1. ...I $E(ICD,1,3)="V22" Q
  1. ...I $E(ICD,1,3)="V23" Q
  1. ...I $E(ICD,1,3)="V27" Q
  1. ...I $E(ICD,1,3)="V28" Q
  1. ...I ICD>629.9999&(ICD<676.95) Q
  1. ...I ICD>61.49&(ICD<61.71) Q
  1. ...S BGPLW=$P(BGPL(BGPLN),U,2)
  1. ..Q
  1. Q BGPLW
  1. HTWTSD(P,BDATE,EDATE) ;get last ht / wt on same day
  1. I '$G(P) Q ""
  1. KILL BGPLWTS,BGPLHTS,%,X,BGPLWTS1,BGPLHTS1,Y
  1. ;get all hts during time frame
  1. S %=P_"^ALL MEAS HT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(%,"BGPLHTS(")
  1. S Y=0 F S Y=$O(BGPLHTS(Y)) Q:Y'=+Y I $P(BGPLHTS(Y),U,2)="?"!($P(BGPLHTS(Y),U,2)="") K BGPLHTS(Y)
  1. ;set the array up by date
  1. K BGPLHTS1 S X=0 F S X=$O(BGPLHTS(X)) Q:X'=+X S BGPLHTS1($P(BGPLHTS(X),U))=X
  1. ;get all wts during time frame
  1. S %=P_"^ALL MEAS WT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(%,"BGPLWTS(")
  1. S Y=0 F S Y=$O(BGPLWTS(Y)) Q:Y'=+Y I $P(BGPLWTS(Y),U,2)="?"!($P(BGPLWTS(Y),U,2)="") K BGPLWTS(Y)
  1. ;set the array up by date
  1. K BGPLWTS1 S X=0 F S X=$O(BGPLWTS(X)) Q:X'=+X S BGPLWTS1($P(BGPLWTS(X),U))=X
  1. S BGPLCHT="",X=9999999 F S X=$O(BGPLWTS1(X),-1) Q:X=""!(BGPLCHT]"") I $D(BGPLHTS1(X)) S BGPLCHT=$P(BGPLWTS(BGPLWTS1(X)),U,2)_U_$P(BGPLHTS(BGPLHTS1(X)),U,2)
  1. Q BGPLCHT
  1. ;
  1. HDL(P,BDATE,EDATE) ;EP
  1. K BGPC1
  1. S BGPC1=0,R=""
  1. ;S %="",E=+$$CODEN^ICPTCOD(83718),%=$$CPTI^BGP2DU(P,BDATE,EDATE,E)
  1. ;I %]"" Q 1_U_$P(%,U,2)
  1. ;S %="",E=+$$CODEN^ICPTCOD(83718),%=$$TRANI^BGP2DU(P,BDATE,EDATE,E)
  1. ;I %]"" Q 1_U_$P(%,U,2)
  1. ;now get all loinc/taxonomy tests
  1. S S=$P(^DPT(DFN,0),U,2)
  1. S T=$O(^ATXAX("B","BGP HDL LOINC CODES",0))
  1. S BGPLT=$O(^ATXLAB("B","DM AUDIT HDL TAX",0))
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!(D>B)!(BGPC1) D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L!(R]"") D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X!(R]"") D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I BGPLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(BGPLT,21,"B",$P(^AUPNVLAB(X,0),U))) D Q:R]""
  1. ....S V=$P(^AUPNVLAB(X,0),U,4) D
  1. .....I V="" Q
  1. .....I 'V Q
  1. .....I S="M",+V<40 S R="HDL="_V
  1. .....I S="F",+V<50 S R="HDL="_V
  1. ...Q:'T
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,T)
  1. ...S V=$P(^AUPNVLAB(X,0),U,4)
  1. ...I V="" Q
  1. ...I V'=+V Q
  1. ...I S="M",+V<40 S R="HDL="_V Q
  1. ...I S="F",+V<50 S R="HDL="_V Q
  1. ...Q
  1. Q R
  1. ;
  1. LOINC(A,B) ;
  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. MEANBP(P,BDATE,EDATE) ;EP
  1. S X=$$BPS(P,BDATE,EDATE,"I")
  1. S S=$$SYSMEAN(X) I S="" Q ""
  1. S DS=$$DIAMEAN(X) I DS="" Q ""
  1. I S>129 Q "BP="_S_"/"_DS
  1. I DS>84 Q "BP="_S_"/"_DS
  1. Q ""
  1. ;
  1. SYSMEAN(X) ;EP
  1. I X="" Q ""
  1. S C=0 F Y=1:1:3 I $P(X,";",Y)]"" S C=C+1
  1. I C<2 Q ""
  1. S T=0 F Y=1:1:3 S T=$P($P(X,";",Y),"/")+T
  1. ;Q $$STRIP^XLFSTR($J((T/C),5,1)," ")
  1. Q T\C
  1. ;
  1. DIAMEAN(X) ;EP
  1. I X="" Q ""
  1. S C=0 F Y=1:1:3 I $P(X,";",Y)]"" S C=C+1
  1. I C<2 Q ""
  1. S T=0 F Y=1:1:3 S T=$P($P(X,";",Y),"/",2)+T
  1. ;Q $$STRIP^XLFSTR($J((T/C),5,1)," ")
  1. Q T\C
  1. ;
  1. BPSD(P,BDATE,EDATE) ;EP
  1. NEW C,X,Y
  1. S X=$$BPS(P,BDATE,EDATE,"I")
  1. S C=0 F Y=1:1:2 I $P(X,";",Y)]"" S C=C+1
  1. I C<2 Q ""
  1. Q 1
  1. BPS(P,BDATE,EDATE,F) ;EP ;
  1. NEW BGPGLL,BGPGV,BGPG,A,B,E,Y,V,X,T,Z
  1. I $G(F)="" S F="E"
  1. S BGPGLL=0,BGPGV=""
  1. K BGPG
  1. K ^TMP($J,"BPV")
  1. S A="^TMP($J,""BPV"",",B=P_"^LAST 365 VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(B,A)
  1. I '$D(^TMP($J,"BPV",1)) Q ""
  1. S Y=0 F S Y=$O(^TMP($J,"BPV",Y)) Q:Y'=+Y!(BGPGLL=3) D
  1. .S V=$P(^TMP($J,"BPV",Y),U,5)
  1. .Q:$$CLINIC^APCLV(V,"C")=30 ;NO ER CLINIC VISITS COUNTED
  1. .Q:'$D(^AUPNVMSR("AD",V)) ;no measurements to look at
  1. .;NOW GET ALL BPS ON THIS VISIT
  1. .S BGPBP=""
  1. .S X=0 F S X=$O(^AUPNVMSR("AD",V,X)) Q:X'=+X D
  1. ..Q:'$D(^AUPNVMSR(X,0)) ;BAD AD XREF
  1. ..S T=$P($G(^AUPNVMSR(X,0)),U)
  1. ..Q:T="" ;BAD AD XREF
  1. ..Q:$P($G(^AUTTMSR(T,0)),U)'="BP" ;not a BP measurement type
  1. ..Q:$P($G(^AUPNVMSR(X,2)),U,1)
  1. ..S Z=$P(^AUPNVMSR(X,0),U,4) ;blood pressure value
  1. ..I BGPBP="" S BGPBP=Z Q
  1. ..I $P(Z,"/")'>$P(BGPBP,"/") S BGPBP=Z
  1. .Q:BGPBP=""
  1. .S BGPGLL=BGPGLL+1
  1. .I F="E" S $P(BGPGV,";",BGPGLL)=BGPBP_" "_$$FMTE^XLFDT($P(^TMP($J,"BPV",V),U))
  1. .I F="I" S $P(BGPGV,";",BGPGLL)=$P(BGPBP," ")
  1. K ^TMP($J,"BPV")
  1. Q BGPGV
  1. FG(P,BDATE,EDATE) ;EP
  1. K BGPC1
  1. S BGPC1=0,R=""
  1. ;now get all loinc/taxonomy tests
  1. S T=$O(^ATXAX("B","DM AUDIT FASTING GLUC LOINC",0))
  1. S BGPLT=$O(^ATXLAB("B","DM AUDIT FASTING GLUCOSE TESTS",0))
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!(D>B)!(R]"") D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L!(R]"") D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X!(R]"") D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I BGPLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(BGPLT,21,"B",$P(^AUPNVLAB(X,0),U))) D Q:R]""
  1. ....S V=$P(^AUPNVLAB(X,0),U,4) Q:+V<100 Q:+V>125.9999 S R="FAST GLUC="_V
  1. ...Q:'T
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,T)
  1. ...S V=$P(^AUPNVLAB(X,0),U,4)
  1. ...Q:V=""
  1. ...Q:'V
  1. ...Q:+V<100
  1. ...Q:+V>125.9999
  1. ...S R="FASTING GLUC="_V
  1. ...Q
  1. Q R
  1. FGT(P,BDATE,EDATE) ;EP
  1. K BGPG,BGPT,BGPC
  1. K BGPG
  1. S Y="BGPG("
  1. S X=P_"^LAST DX [BGP IMPAIRED FASTING GLUCOSE;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
  1. I $D(BGPG(1)) Q 1_U_$P(BGPG(1),U)_U_$P(BGPG(1),U,2) ;has a dx
  1. S BGPC=0
  1. ;now get all loinc/taxonomy tests
  1. S T=$O(^ATXAX("B","DM AUDIT FASTING GLUC LOINC",0))
  1. S BGPLT=$O(^ATXLAB("B","DM AUDIT FASTING GLUCOSE TESTS",0))
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!(D>B) D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I BGPLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(BGPLT,21,"B",$P(^AUPNVLAB(X,0),U))) S BGPC=BGPC+1,BGPT(D,BGPC)=$P(^AUPNVLAB(X,0),U,4) Q
  1. ...Q:'T
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,T)
  1. ...S R=$P(^AUPNVLAB(X,0),U,4)
  1. ...S BGPC=BGPC+1,BGPT(D,BGPC)=R
  1. ...Q
  1. ; now got though and set return value of done 1 or 0^VALUE^date
  1. I '$D(BGPT) Q "" ;no tests
  1. Q 1_U_(9999999-$O(BGPT(0)))