BUD1RP6V ; IHS/CMI/LAB - UDS REPORT PROCESSOR 01 Dec 2011 5:11 PM ;
;;10.0;IHS/RPMS UNIFORM DATA SYSTEM;;FEB 04, 2016;Build 50
;
;
ADOLWT ;EP - called from xbdbque
;must have DOB between 1/1/06 and 12/31/06
S BUDDOB=$P(^DPT(DFN,0),U,3)
S BUD17RB=($E(BUDBD,1,3)-17)_"0101"
S BUD2RB=($E(BUDED,1,3)-2)_"1231"
S BUD3RB=($E(BUDED,1,3)-3)_"1231"
S BUDDOB=$P(^DPT(DFN,0),U,3)
S BUD3BD=$E(BUDDOB,1,3)+3_$E(BUDDOB,4,7)
Q:BUD3BD>BUDED
S BUD17BD=$E(BUDDOB,1,3)+17_$E(BUDDOB,4,7)
Q:$$AGE^AUPNPAT(DFN,BUDED)>17
Q:BUDMEDV<1
S BUD17TH=$E(BUDDOB,1,3)+17_$E(BUDDOB,4,7)
I '$$VBBD(DFN,BUDDOB,$$FMADD^XLFDT(BUD17TH,-1)) Q
K BUDPAP
;S BUDPD=$E(BUDBD,1,3)-2_$E(BUDBD,4,7)
Q:$$PREG^BUD1RP6B(DFN,$$FMADD^XLFDT(BUDED,-609),BUDED)
S BUDPAP=$$BMINPA(DFN,BUDBD,BUDED,BUDAGE)
Q:BUDPAP="REF"
S G=0 F X=1:1:3 I $P(BUDPAP,U,X)]"" S G=G+1
I G=3 S BUDSECTE("AWT")=$G(BUDSECTE("AWT"))+1
;put the rest in demoninator
S BUDSECTE("PTS")=$G(BUDSECTE("PTS"))+1 D
.I $G(BUDWAC2L) D
..I G'=3 S ^XTMP("BUD1RP6B",BUDJ,BUDH,"WAC2",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDPAP
.I $G(BUDWAC1L) D
..I G=3 S ^XTMP("BUD1RP6B",BUDJ,BUDH,"WAC1",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDPAP
Q
;
;
VBBD(P,BDATE,EDATE) ;EP
NEW BUDVL,G
K BUDVL
S G=""
S A="BUDVL(",B=DFN_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(B,A)
I '$D(BUDVL) Q ""
S X=0 F S X=$O(BUDVL(X)) Q:X'=+X S V=$P(BUDVL(X),U,5) D
.Q:'$D(^AUPNVSIT(V,0))
.Q:'$P(^AUPNVSIT(V,0),U,9)
.Q:$P(^AUPNVSIT(V,0),U,11)
.Q:'$D(^AUPNVPRV("AD",V))
.Q:'$D(^AUPNVPOV("AD",V))
.S L=$P(^AUPNVSIT(V,0),U,6)
.Q:L=""
.Q:'$D(^BUDLSITE(BUDSITE,11,L)) ;not valid location
.Q:$P(^AUPNVSIT(V,0),U,7)="C"
.Q:$P(^AUPNVSIT(V,0),U,7)="T"
.Q:$P(^AUPNVSIT(V,0),U,7)="N"
.Q:$P(^AUPNVSIT(V,0),U,7)="D"
.Q:$P(^AUPNVSIT(V,0),U,7)="X"
.Q:$P(^AUPNVSIT(V,0),U,7)="E"
.S G=V
.Q
Q G
;
BMINPA(P,BDATE,EDATE,AGE) ;EP
NEW %,W,H,B,D,%DT,RETVAL,BUDBMI,BUDNE,BUDPA
S BUDBMI=$$BMI(P,BDATE,EDATE,AGE)
I BUDBMI="" S BUDBMI=$$BMIPROC(P,BDATE,EDATE)
I BUDBMI="" I $$REF(P,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV)) Q "REF"
S BUDNE=$$NUTR(P,BDATE,EDATE)
S BUDPA=$$PA(P,BDATE,EDATE)
Q BUDBMI_U_BUDNE_U_BUDPA
BMIPROC(P,BDATE,EDATE) ;EP
NEW A
S A=$$LASTDX^BUD1UTL1(P,"BUD BMI PROCS",BDATE,EDATE)
I A Q "POV "_$P(A,U,2)
Q ""
REF(P,BDATE,EDATE) ;EP
NEW H,W
S H=$$REFRNU^BUD1UTL1(P,9999999.07,$O(^AUTTMSR("B","HT",0)),BDATE,EDATE)
I H="" Q 1
S W=$$REFRNU^BUD1UTL1(P,9999999.07,$O(^AUTTMSR("B","WT",0)),BDATE,EDATE)
I W="" Q 1
Q ""
BMI(P,BDATE,EDATE,AGE) ;EP
NEW HDATE,BUDBMIH,W,H,X
S BUDBMIH=""
I AGE>18,AGE<51 D Q BUDBMIH
.S HDATE=$$FMADD^XLFDT(BDATE,-(5*365)),HDATE=$$FMTE^XLFDT(HDATE)
.;S BDATE=$$FMADD^XLFDT(BDATE,-(5*365))
.S BDATE=$$FMTE^XLFDT(BDATE),EDATE=$$FMTE^XLFDT(EDATE)
.S W=$P($$WT(P,BDATE,EDATE),U,1) I W=""!(W="?") Q
.S H=$$HT(P,HDATE,EDATE) I H="" Q
.S W=W*.45359,H=(H*.0254),H=(H*H),BUDBMIH=(W/H)
I AGE>50 D Q BUDBMIH
.S HDATE=$$FMADD^XLFDT(BDATE,-(2*365)),HDATE=$$FMTE^XLFDT(HDATE)
.S BDATE=$$FMTE^XLFDT(BDATE),EDATE=$$FMTE^XLFDT(EDATE)
.S W=$P($$WT(P,BDATE,EDATE),U,1) I W=""!(W="?") Q
.S HDATE=BDATE
.S H=$$HT(P,HDATE,EDATE) I H="" Q
.S W=W*.45359,H=(H*.0254),H=(H*H),BUDBMIH=(W/H)
I AGE<19 D Q BUDBMIH
.S X=$$HTWTSD(P,BDATE,EDATE)
.I '$P(X,"^") Q
.I '$P(X,"^",2) Q
.S W=$P(X,"^"),H=$P(X,"^",2)
.S W=W*.45359,H=(H*.0254),H=(H*H),BUDBMIH=(W/H)
.Q
Q ""
HT(P,BDATE,EDATE) ;EP
I 'P Q ""
NEW %,BUDARRY,H,E
S %=P_"^LAST MEAS HT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(%,"BUDARRY(") S H=$P($G(BUDARRY(1)),U,2)
I H="" Q H
I H["?" Q ""
S H=$J(H,2,0)
Q H
WT(P,BDATE,EDATE) ;EP
I 'P Q ""
NEW %,E,BUDLW,X,BUDLN,BUDL,BUDLD,BUDLZ,BUDLX,ICD
K BUDL S BUDLW="" S BUDLX=P_"^LAST 24 MEAS WT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(BUDLX,"BUDL(")
S BUDLN=0 F S BUDLN=$O(BUDL(BUDLN)) Q:BUDLN'=+BUDLN!(BUDLW]"") D
.S BUDLZ=$P(BUDL(BUDLN),U,5)
.I '$D(^AUPNVPOV("AD",BUDLZ)) S BUDLW=$P(BUDL(BUDLN),U,2) Q
. S BUDLD=0 F S BUDLD=$O(^AUPNVPOV("AD",BUDLZ,BUDLD)) Q:'BUDLD!(BUDLW]"") D
.. S D=$P(BUDL(BUDLN),U)
.. S ICD=$P($$ICDDX^ICDCODE($P(^AUPNVPOV(BUDLD,0),U),D),U,2) D
...I $E(ICD,1,3)="V22" Q
...I $E(ICD,1,3)="V23" Q
...I $E(ICD,1,3)="V27" Q
...I $E(ICD,1,3)="V28" Q
...I ICD>629.9999&(ICD<676.95) Q
...I ICD>61.49&(ICD<61.71) Q
...S BUDLW=$P(BUDL(BUDLN),U,2)
..Q
Q BUDLW
HTWTSD(P,BDATE,EDATE) ;get last ht / wt on same day
I '$G(P) Q ""
KILL BUDLWTS,BUDLHTS,%,X,BUDLWTS1,BUDLHTS1,Y
;get all hts during time frame
S %=P_"^ALL MEAS HT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(%,"BUDLHTS(")
S Y=0 F S Y=$O(BUDLHTS(Y)) Q:Y'=+Y I $P(BUDLHTS(Y),U,2)="?"!($P(BUDLHTS(Y),U,2)="") K BUDLHTS(Y)
;set the array up by date
K BUDLHTS1 S X=0 F S X=$O(BUDLHTS(X)) Q:X'=+X S BUDLHTS1($P(BUDLHTS(X),U))=X
;get all wts during time frame
S %=P_"^ALL MEAS WT;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(%,"BUDLWTS(")
S Y=0 F S Y=$O(BUDLWTS(Y)) Q:Y'=+Y I $P(BUDLWTS(Y),U,2)="?"!($P(BUDLWTS(Y),U,2)="") K BUDLWTS(Y)
;set the array up by date
K BUDLWTS1 S X=0 F S X=$O(BUDLWTS(X)) Q:X'=+X S BUDLWTS1($P(BUDLWTS(X),U))=X
S BUDLCHT="",X=9999999 F S X=$O(BUDLWTS1(X),-1) Q:X=""!(BUDLCHT]"") I $D(BUDLHTS1(X)) S BUDLCHT=$P(BUDLWTS(BUDLWTS1(X)),U,2)_U_$P(BUDLHTS(BUDLHTS1(X)),U,2)
Q BUDLCHT
;
NUTR(P,BDATE,EDATE) ;EP
NEW BUDALLED,BUDG,X,E,%,D,T,Y
S Y="BUDALLED("
S X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
S (X,D)=0,%="",T="" F S X=$O(BUDALLED(X)) Q:X'=+X!(%]"") D
.S T=$P(^AUPNVPED(+$P(BUDALLED(X),U,4),0),U)
.Q:'T
.Q:'$D(^AUTTEDT(T,0))
.S T=$P(^AUTTEDT(T,0),U,2)
.I $P(T,"-",2)="N"!($P(T,"-",2)="DT")!($P(T,"-",2)="MNT") S %=T Q
.I $P(T,"-",1)="97802"!($P(T,"-",1)="97803")!($P(T,"-",1)="97804") S %=T Q
I %]"" Q %
S T=$O(^ATXAX("B","BUD NUTRITION CPT",0))
S %=$$CPT^BUD1DU(P,BDATE,EDATE,T,5)
I %]"" Q "CPT: "_$P(%,U,2)
Q ""
PA(P,BDATE,EDATE) ;EP
NEW BUDALLED,BUDG,X,E,%,D,T,Y
K BUDG S X=P_"^LAST DX V65.41;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,"BUDG(")
I $D(BUDG(1)) Q "POV V65.41"
S Y="BUDALLED("
S X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
I '$D(BUDALLED(1)) Q ""
S (X,D)=0,%="",T="" F S X=$O(BUDALLED(X)) Q:X'=+X!(%]"") D
.S T=$P(^AUPNVPED(+$P(BUDALLED(X),U,4),0),U)
.Q:'T
.Q:'$D(^AUTTEDT(T,0))
.S T=$P(^AUTTEDT(T,0),U,2)
.I $P(T,"-",2)="EX" S %=T Q
.I $P(T,"-",1)="V65.41" S %=T Q
Q %
ADULT ;EP
S BUDDOB=$P(^DPT(DFN,0),U,3)
S BUD18RB=($E(BUDBD,1,3)-18)_"1231"
Q:BUDDOB>BUD18RB
Q:BUDMEDV<1
S BUD18TH=$E(BUDDOB,1,3)+18_$E(BUDDOB,4,7)
I '$$VBBD(DFN,$$FMADD^XLFDT(BUD18TH,1),BUDED) Q ;quit if no visiT before 17TH birthday
;HAD V66.7 WITHIN 6 MONTHS BEFORE LAST VISIT DATE
Q:$$LASTDX^BUD1UTL1(DFN,"V66.7",$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV))
K BUDBMI,BUDOW,BUDUW
S (BUDBMI,BUDOW,BUDUW,BUDPLAN)=""
;S BUDPD=$E(BUDBD,1,3)-2_$E(BUDBD,4,7)
Q:$$PREG^BUD1RP6B(DFN,$$FMADD^XLFDT(BUDED,-609),BUDED)
S BUDBMI=$$BMI(DFN,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV),BUDAGE)
I BUDBMI="" I $$REF(P,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV)) Q
I BUDBMI="" S BUDPLAN=$$PLAN(DFN,BUDBD,BUDED) I BUDPLAN]"" S G=0 S ^XTMP("BUD1RP6B",BUDJ,BUDH,"AWS2",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDBMI_U_$S(BUDOW]"":"OVERWEIGHT",BUDUW]"":"UNDERWEIGHT",1:"")_U_BUDPLAN Q ;NO BMI
I BUDBMI="" Q
I BUDAGE<65 D G N
.I BUDBMI>25 S BUDOW="OW"
.I BUDBMI<18.5 S BUDUW="UW"
I BUDBMI'<30 S BUDOW="OW"
I BUDBMI<22 S BUDUW="UW"
;put the rest in demoninator
N I BUDOW="",BUDUW="" Q ;not over/underweight & HAD BMI
S BUDWTDT=$$BMI^BUD1RP6R(DFN,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV),BUDAGE)
S BUDPLAN=$$PLAN(DFN,BUDWTDT,BUDED)
S G=0
I BUDPLAN]"" S G=1,BUDSECTF("PLAN")=$G(BUDSECTF("PLAN"))+1
;put the rest in demoninator
S BUDSECTF("PTS")=$G(BUDSECTF("PTS"))+1 D
.I $G(BUDAWS2L) D
..I 'G S ^XTMP("BUD1RP6B",BUDJ,BUDH,"AWS2",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDBMI_U_$S(BUDOW]"":"OVERWEIGHT",BUDUW]"":"UNDERWEIGHT",1:"")_U_BUDPLAN
.I $G(BUDAWS1L) D
..I G S ^XTMP("BUD1RP6B",BUDJ,BUDH,"AWS1",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDBMI_U_$S(BUDOW]"":"OVERWEIGHT",BUDUW]"":"UNDERWEIGHT",1:"")_U_BUDPLAN
Q
;
PLAN(P,BD,ED) ;
NEW G,Y,X,E,T,%,Z,BUDALLED
;S BD=D,ED=D
;check for cpt codes
S G=$$CPT^BUD1UTL1(P,BD,ED,$O(^ATXAX("B","BUD WT PLAN CPTS",0)),5)
I G]"" Q $P(G,U,2)_" on "_$$FMTE^XLFDT($P(G,U,1))
S G=$$LASTDX^BUD1UTL1(P,"BUD WT PLAN DXS",BD,ED)
I G Q $P(G,U,2)_" on "_$$FMTE^XLFDT($P(G,U,3))
K BUDALLED
S Y="BUDALLED("
S X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,Y)
S (X,D)=0,%="",T="" F S X=$O(BUDALLED(X)) Q:X'=+X!(%]"") D
.S T=$P(^AUPNVPED(+$P(BUDALLED(X),U,4),0),U)
.Q:'T
.Q:'$D(^AUTTEDT(T,0))
.S T=$P(^AUTTEDT(T,0),U,2)
.S E=$P(BUDALLED(X),U,1)
.I $P(T,"-",2)="EX"!($P(T,"-",2)="LA")!($P(T,"-",2)="N")!($P(T,"-",2)="DT")!($P(T,"-",2)="MNT") S %=T_U_E Q
.I $P(T,"-",1)="OBS"!($P(T,"-",1)="V65.3")!($P(T,"-",1)="V65.41")!($P(T,"-",1)="278.00")!($P(T,"-",1)="278.01") S %=T_U_E Q
I %]"" Q $P(%,U,1)_" on "_$$FMTE^XLFDT($P(%,U,2))
;now check for a clinic or provider visit
NEW BUDG,W,R
K BUDG
S %=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED),E=$$START1^APCLDF(%,"BUDG(")
S (X,Y,D)="" F S X=$O(BUDG(X)) Q:X'=+X!(Y) D
.S Z=0 F S Z=$O(^AUPNVPRV("AD",$P(BUDG(X),U,5),Z)) Q:Z'=+Z!(Y) D
..S W=$P($G(^AUPNVPRV(Z,0)),U,1)
..Q:W=""
..S R=$$VALI^XBDIQ1(200,W,53.5)
..I R="" Q
..S R=$P($G(^DIC(7,R,9999999)),U,1)
..I R="07"!(R=29) S Y=1,D="Provider "_R_" on "_$$FMTE^XLFDT($P(BUDG(X),U)) Q
..S R=$$CLINIC^APCLV($P(BUDG(X),U,5),"C") I R=67!(R=36) S Y=1,D="Clinic "_R_" on "_$$FMTE^XLFDT($P(BUDG(X),U)) Q
I Y Q D
Q ""
G1 ;EP
NEW BUDGOT
S BUDGOT=""
S BUDDOB=$P(^DPT(DFN,0),U,3)
S BUD18RB=($E(BUDBD,1,3)-18)_"1231"
Q:BUDDOB>BUD18RB
Q:BUDMEDV<1
S BUD18TH=$E(BUDDOB,1,3)+18_$E(BUDDOB,4,7)
I '$$VBBD(DFN,$$FMADD^XLFDT(BUD18TH,1),BUDED) Q
S X=$$GETV^BUD1RP6U(DFN,BUDDOB,BUDED,BUDSITE)
Q:X<2
K BUDTOBS,BUDTOBD
S BUDTOBDD=$E(BUDBD,1,3)-1_$E(BUDBD,4,7)
S BUDTOBS=$$TOBACCO(DFN,$$DOB^AUPNPAT(DFN),BUDED)
I BUDTOBS]"",$P(BUDTOBS,U,3)'<BUDTOBDD S BUDSECG1("ABM")=$G(BUDSECG1("ABM"))+1,BUDGOT=1
;put the rest in demoninator
S BUDSECG1("PTS")=$G(BUDSECG1("PTS"))+1 D
.I $G(BUDTUA2L) D
..I 'BUDGOT S ^XTMP("BUD1RP6B",BUDJ,BUDH,"TUA2",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDTOBS
.I $G(BUDTUA1L) D
..I BUDGOT S ^XTMP("BUD1RP6B",BUDJ,BUDH,"TUA1",BUDAGE,$P(^DPT(DFN,0),U),BUDCOM,DFN)=BUDTOBS
Q
;
TOBACCO(P,BDATE,EDATE) ;
;TOBACCO SCREENING IN DATE RANGE?
NEW BUDTOB,BUDX,BUDPV,BUDLAST
K BUDLAST
D TOBACCO1
I BUDTOB]"" S BUDLAST($P(BUDTOB,U,3))=BUDTOB
;PATIENT ED
S BUDTOB=$$TOBPED(P,BDATE,EDATE)
I BUDTOB]"" S X=$P(BUDTOB,U,3),BUDLAST(X)=BUDTOB
S BUDPV=$$LASTDX^BUD1UTL1(P,"BUD TOBACCO SCREEN DXS",BDATE,EDATE)
I BUDPV S BUDLAST($P(BUDPV,U,3))=$P(BUDPV,U,2)_U_$$FMTE^XLFDT($P(BUDPV,U,3))_U_$P(BUDPV,U,3) ; Q BUDTOB
S BUDCPT=$$CPT^BUD1UTL1(P,BDATE,EDATE,$O(^ATXAX("B","BUD TOBACCO SCREEN CPTS",0)),7)
I BUDCPT]"" S BUDLAST($P(BUDCPT,U,3))=BUDCPT ;S BUDTOB=BUDCPT Q BUDTOB
I '$D(BUDLAST) Q ""
S BUDX=0 F S BUDX=$O(BUDLAST(BUDX)) Q:BUDX'=+BUDX S BUDTOB=BUDX
Q BUDLAST(BUDTOB)
TOBACCO1 ;
K BUDTOB
S BUDTOB=$$LASTHF(P,"TOBACCO (SMOKING)",BDATE,EDATE) K O,D,H
I BUDTOB]"" S BUDLAST($P(BUDTOB,U,3))=BUDTOB
S BUDTOB=$$LASTHF(P,"TOBACCO (SMOKELESS - CHEWING/DIP)",BDATE,EDATE) K O,D,H
I BUDTOB]"" S BUDLAST($P(BUDTOB,U,3))=BUDTOB
S BUDTOB=$$LASTHF(P,"TOBACCO (EXPOSURE)",BDATE,EDATE) K O,D,H
I BUDTOB]"" S BUDLAST($P(BUDTOB,U,3))=BUDTOB
S BUDTOB=$$LASTHF(P,"TOBACCO",BDATE,EDATE) K O,D,H
I BUDTOB]"" S BUDLAST($P(BUDTOB,U,3))=BUDTOB
Q
TOBACCO0 ;
S (X,Y)=0 F S X=$O(^AUPNHF("AA",P,X)) Q:X'=+X!(Y) I $$VAL^XBDIQ1(9999999.64,X,.03)="TOBACCO" S Y=X
Q:'Y
S E=$O(^AUPNHF("AA",P,Y,0)) Q:'E
I (9999999-E)>EDATE Q
I (9999999-E)<BDATE Q
S Y=$P(^AUTTHF(Y,0),U)
S BUDTOB=Y_"^"_$$FMTE^XLFDT(9999999-E)_"^"_(9999999-E)
K Y,E,X
Q
;
LASTHF(P,C,BDATE,EDATE) ;EP
S C=$O(^AUTTHF("B",C,0))
I '$G(C) Q ""
S (H,D)=0 K O
F S H=$O(^AUTTHF("AC",C,H)) Q:'+H D
.Q:'$D(^AUPNVHF("AA",P,H))
.S D="" F S D=$O(^AUPNVHF("AA",P,H,D)) Q:D'=+D D
..Q:(9999999-D)>EDATE
..Q:(9999999-D)<BDATE
..S O(D)=$O(^AUPNVHF("AA",P,H,D,""))
.Q
S D=$O(O(0))
I D="" Q D
Q $$VAL^XBDIQ1(9000010.23,O(D),.01)_"^"_$$FMTE^XLFDT(9999999-D)_"^"_(9999999-D)
;
TOBPED(P,BDATE,EDATE) ;EP
NEW Y,X,E,D,T,%,BUDG,BUDPED
K BUDPED
S Y="BUDG("
S X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
I '$D(BUDG) Q ""
S (X,D)=0,%="",T="" F S X=$O(BUDG(X)) Q:X'=+X D
.S T=$P(^AUPNVPED(+$P(BUDG(X),U,4),0),U)
.Q:'T
.Q:'$D(^AUTTEDT(T,0))
.S T=$P(^AUTTEDT(T,0),U,2)
.I $P(T,"-")="TO" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-",2)="TO" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-",2)="SHS" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="305.1" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="649.00" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="649.01" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="649.02" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="649.03" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="649.04" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="V15.82" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="1034F" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="1035F" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="1036F" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
.I $P(T,"-")="1000F" S BUDPED($P(BUDG(X),U))=T_U_$$FMTE^XLFDT($P(BUDG(X),U))_U_$P(BUDG(X),U) Q
I '$D(BUDPED) Q ""
S X=0 F S X=$O(BUDPED(X)) Q:X'=+X S %=X
Q BUDPED(%)
G2 ;
D G2^BUD1RP6U
Q
BUD1RP6V ; IHS/CMI/LAB - UDS REPORT PROCESSOR 01 Dec 2011 5:11 PM ;
+1 ;;10.0;IHS/RPMS UNIFORM DATA SYSTEM;;FEB 04, 2016;Build 50
+2 ;
+3 ;
ADOLWT ;EP - called from xbdbque
+1 ;must have DOB between 1/1/06 and 12/31/06
+2 SET BUDDOB=$PIECE(^DPT(DFN,0),U,3)
+3 SET BUD17RB=($EXTRACT(BUDBD,1,3)-17)_"0101"
+4 SET BUD2RB=($EXTRACT(BUDED,1,3)-2)_"1231"
+5 SET BUD3RB=($EXTRACT(BUDED,1,3)-3)_"1231"
+6 SET BUDDOB=$PIECE(^DPT(DFN,0),U,3)
+7 SET BUD3BD=$EXTRACT(BUDDOB,1,3)+3_$EXTRACT(BUDDOB,4,7)
+8 IF BUD3BD>BUDED
QUIT
+9 SET BUD17BD=$EXTRACT(BUDDOB,1,3)+17_$EXTRACT(BUDDOB,4,7)
+10 IF $$AGE^AUPNPAT(DFN,BUDED)>17
QUIT
+11 IF BUDMEDV<1
QUIT
+12 SET BUD17TH=$EXTRACT(BUDDOB,1,3)+17_$EXTRACT(BUDDOB,4,7)
+13 IF '$$VBBD(DFN,BUDDOB,$$FMADD^XLFDT(BUD17TH,-1))
QUIT
+14 KILL BUDPAP
+15 ;S BUDPD=$E(BUDBD,1,3)-2_$E(BUDBD,4,7)
+16 IF $$PREG^BUD1RP6B(DFN,$$FMADD^XLFDT(BUDED,-609),BUDED)
QUIT
+17 SET BUDPAP=$$BMINPA(DFN,BUDBD,BUDED,BUDAGE)
+18 IF BUDPAP="REF"
QUIT
+19 SET G=0
FOR X=1:1:3
IF $PIECE(BUDPAP,U,X)]""
SET G=G+1
+20 IF G=3
SET BUDSECTE("AWT")=$GET(BUDSECTE("AWT"))+1
+21 ;put the rest in demoninator
+22 SET BUDSECTE("PTS")=$GET(BUDSECTE("PTS"))+1
Begin DoDot:1
+23 IF $GET(BUDWAC2L)
Begin DoDot:2
+24 IF G'=3
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"WAC2",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDPAP
End DoDot:2
+25 IF $GET(BUDWAC1L)
Begin DoDot:2
+26 IF G=3
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"WAC1",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDPAP
End DoDot:2
End DoDot:1
+27 QUIT
+28 ;
+29 ;
VBBD(P,BDATE,EDATE) ;EP
+1 NEW BUDVL,G
+2 KILL BUDVL
+3 SET G=""
+4 SET A="BUDVL("
SET B=DFN_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(B,A)
+5 IF '$DATA(BUDVL)
QUIT ""
+6 SET X=0
FOR
SET X=$ORDER(BUDVL(X))
IF X'=+X
QUIT
SET V=$PIECE(BUDVL(X),U,5)
Begin DoDot:1
+7 IF '$DATA(^AUPNVSIT(V,0))
QUIT
+8 IF '$PIECE(^AUPNVSIT(V,0),U,9)
QUIT
+9 IF $PIECE(^AUPNVSIT(V,0),U,11)
QUIT
+10 IF '$DATA(^AUPNVPRV("AD",V))
QUIT
+11 IF '$DATA(^AUPNVPOV("AD",V))
QUIT
+12 SET L=$PIECE(^AUPNVSIT(V,0),U,6)
+13 IF L=""
QUIT
+14 ;not valid location
IF '$DATA(^BUDLSITE(BUDSITE,11,L))
QUIT
+15 IF $PIECE(^AUPNVSIT(V,0),U,7)="C"
QUIT
+16 IF $PIECE(^AUPNVSIT(V,0),U,7)="T"
QUIT
+17 IF $PIECE(^AUPNVSIT(V,0),U,7)="N"
QUIT
+18 IF $PIECE(^AUPNVSIT(V,0),U,7)="D"
QUIT
+19 IF $PIECE(^AUPNVSIT(V,0),U,7)="X"
QUIT
+20 IF $PIECE(^AUPNVSIT(V,0),U,7)="E"
QUIT
+21 SET G=V
+22 QUIT
End DoDot:1
+23 QUIT G
+24 ;
BMINPA(P,BDATE,EDATE,AGE) ;EP
+1 NEW %,W,H,B,D,%DT,RETVAL,BUDBMI,BUDNE,BUDPA
+2 SET BUDBMI=$$BMI(P,BDATE,EDATE,AGE)
+3 IF BUDBMI=""
SET BUDBMI=$$BMIPROC(P,BDATE,EDATE)
+4 IF BUDBMI=""
IF $$REF(P,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV))
QUIT "REF"
+5 SET BUDNE=$$NUTR(P,BDATE,EDATE)
+6 SET BUDPA=$$PA(P,BDATE,EDATE)
+7 QUIT BUDBMI_U_BUDNE_U_BUDPA
BMIPROC(P,BDATE,EDATE) ;EP
+1 NEW A
+2 SET A=$$LASTDX^BUD1UTL1(P,"BUD BMI PROCS",BDATE,EDATE)
+3 IF A
QUIT "POV "_$PIECE(A,U,2)
+4 QUIT ""
REF(P,BDATE,EDATE) ;EP
+1 NEW H,W
+2 SET H=$$REFRNU^BUD1UTL1(P,9999999.07,$ORDER(^AUTTMSR("B","HT",0)),BDATE,EDATE)
+3 IF H=""
QUIT 1
+4 SET W=$$REFRNU^BUD1UTL1(P,9999999.07,$ORDER(^AUTTMSR("B","WT",0)),BDATE,EDATE)
+5 IF W=""
QUIT 1
+6 QUIT ""
BMI(P,BDATE,EDATE,AGE) ;EP
+1 NEW HDATE,BUDBMIH,W,H,X
+2 SET BUDBMIH=""
+3 IF AGE>18
IF AGE<51
Begin DoDot:1
+4 SET HDATE=$$FMADD^XLFDT(BDATE,-(5*365))
SET HDATE=$$FMTE^XLFDT(HDATE)
+5 ;S BDATE=$$FMADD^XLFDT(BDATE,-(5*365))
+6 SET BDATE=$$FMTE^XLFDT(BDATE)
SET EDATE=$$FMTE^XLFDT(EDATE)
+7 SET W=$PIECE($$WT(P,BDATE,EDATE),U,1)
IF W=""!(W="?")
QUIT
+8 SET H=$$HT(P,HDATE,EDATE)
IF H=""
QUIT
+9 SET W=W*.45359
SET H=(H*.0254)
SET H=(H*H)
SET BUDBMIH=(W/H)
End DoDot:1
QUIT BUDBMIH
+10 IF AGE>50
Begin DoDot:1
+11 SET HDATE=$$FMADD^XLFDT(BDATE,-(2*365))
SET HDATE=$$FMTE^XLFDT(HDATE)
+12 SET BDATE=$$FMTE^XLFDT(BDATE)
SET EDATE=$$FMTE^XLFDT(EDATE)
+13 SET W=$PIECE($$WT(P,BDATE,EDATE),U,1)
IF W=""!(W="?")
QUIT
+14 SET HDATE=BDATE
+15 SET H=$$HT(P,HDATE,EDATE)
IF H=""
QUIT
+16 SET W=W*.45359
SET H=(H*.0254)
SET H=(H*H)
SET BUDBMIH=(W/H)
End DoDot:1
QUIT BUDBMIH
+17 IF AGE<19
Begin DoDot:1
+18 SET X=$$HTWTSD(P,BDATE,EDATE)
+19 IF '$PIECE(X,"^")
QUIT
+20 IF '$PIECE(X,"^",2)
QUIT
+21 SET W=$PIECE(X,"^")
SET H=$PIECE(X,"^",2)
+22 SET W=W*.45359
SET H=(H*.0254)
SET H=(H*H)
SET BUDBMIH=(W/H)
+23 QUIT
End DoDot:1
QUIT BUDBMIH
+24 QUIT ""
HT(P,BDATE,EDATE) ;EP
+1 IF 'P
QUIT ""
+2 NEW %,BUDARRY,H,E
+3 SET %=P_"^LAST MEAS HT;DURING "_BDATE_"-"_EDATE
SET E=$$START1^APCLDF(%,"BUDARRY(")
SET H=$PIECE($GET(BUDARRY(1)),U,2)
+4 IF H=""
QUIT H
+5 IF H["?"
QUIT ""
+6 SET H=$JUSTIFY(H,2,0)
+7 QUIT H
WT(P,BDATE,EDATE) ;EP
+1 IF 'P
QUIT ""
+2 NEW %,E,BUDLW,X,BUDLN,BUDL,BUDLD,BUDLZ,BUDLX,ICD
+3 KILL BUDL
SET BUDLW=""
SET BUDLX=P_"^LAST 24 MEAS WT;DURING "_BDATE_"-"_EDATE
SET E=$$START1^APCLDF(BUDLX,"BUDL(")
+4 SET BUDLN=0
FOR
SET BUDLN=$ORDER(BUDL(BUDLN))
IF BUDLN'=+BUDLN!(BUDLW]"")
QUIT
Begin DoDot:1
+5 SET BUDLZ=$PIECE(BUDL(BUDLN),U,5)
+6 IF '$DATA(^AUPNVPOV("AD",BUDLZ))
SET BUDLW=$PIECE(BUDL(BUDLN),U,2)
QUIT
+7 SET BUDLD=0
FOR
SET BUDLD=$ORDER(^AUPNVPOV("AD",BUDLZ,BUDLD))
IF 'BUDLD!(BUDLW]"")
QUIT
Begin DoDot:2
+8 SET D=$PIECE(BUDL(BUDLN),U)
+9 SET ICD=$PIECE($$ICDDX^ICDCODE($PIECE(^AUPNVPOV(BUDLD,0),U),D),U,2)
Begin DoDot:3
+10 IF $EXTRACT(ICD,1,3)="V22"
QUIT
+11 IF $EXTRACT(ICD,1,3)="V23"
QUIT
+12 IF $EXTRACT(ICD,1,3)="V27"
QUIT
+13 IF $EXTRACT(ICD,1,3)="V28"
QUIT
+14 IF ICD>629.9999&(ICD<676.95)
QUIT
+15 IF ICD>61.49&(ICD<61.71)
QUIT
+16 SET BUDLW=$PIECE(BUDL(BUDLN),U,2)
End DoDot:3
+17 QUIT
End DoDot:2
End DoDot:1
+18 QUIT BUDLW
HTWTSD(P,BDATE,EDATE) ;get last ht / wt on same day
+1 IF '$GET(P)
QUIT ""
+2 KILL BUDLWTS,BUDLHTS,%,X,BUDLWTS1,BUDLHTS1,Y
+3 ;get all hts during time frame
+4 SET %=P_"^ALL MEAS HT;DURING "_BDATE_"-"_EDATE
SET E=$$START1^APCLDF(%,"BUDLHTS(")
+5 SET Y=0
FOR
SET Y=$ORDER(BUDLHTS(Y))
IF Y'=+Y
QUIT
IF $PIECE(BUDLHTS(Y),U,2)="?"!($PIECE(BUDLHTS(Y),U,2)="")
KILL BUDLHTS(Y)
+6 ;set the array up by date
+7 KILL BUDLHTS1
SET X=0
FOR
SET X=$ORDER(BUDLHTS(X))
IF X'=+X
QUIT
SET BUDLHTS1($PIECE(BUDLHTS(X),U))=X
+8 ;get all wts during time frame
+9 SET %=P_"^ALL MEAS WT;DURING "_BDATE_"-"_EDATE
SET E=$$START1^APCLDF(%,"BUDLWTS(")
+10 SET Y=0
FOR
SET Y=$ORDER(BUDLWTS(Y))
IF Y'=+Y
QUIT
IF $PIECE(BUDLWTS(Y),U,2)="?"!($PIECE(BUDLWTS(Y),U,2)="")
KILL BUDLWTS(Y)
+11 ;set the array up by date
+12 KILL BUDLWTS1
SET X=0
FOR
SET X=$ORDER(BUDLWTS(X))
IF X'=+X
QUIT
SET BUDLWTS1($PIECE(BUDLWTS(X),U))=X
+13 SET BUDLCHT=""
SET X=9999999
FOR
SET X=$ORDER(BUDLWTS1(X),-1)
IF X=""!(BUDLCHT]"")
QUIT
IF $DATA(BUDLHTS1(X))
SET BUDLCHT=$PIECE(BUDLWTS(BUDLWTS1(X)),U,2)_U_$PIECE(BUDLHTS(BUDLHTS1(X)),U,2)
+14 QUIT BUDLCHT
+15 ;
NUTR(P,BDATE,EDATE) ;EP
+1 NEW BUDALLED,BUDG,X,E,%,D,T,Y
+2 SET Y="BUDALLED("
+3 SET X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,Y)
+4 SET (X,D)=0
SET %=""
SET T=""
FOR
SET X=$ORDER(BUDALLED(X))
IF X'=+X!(%]"")
QUIT
Begin DoDot:1
+5 SET T=$PIECE(^AUPNVPED(+$PIECE(BUDALLED(X),U,4),0),U)
+6 IF 'T
QUIT
+7 IF '$DATA(^AUTTEDT(T,0))
QUIT
+8 SET T=$PIECE(^AUTTEDT(T,0),U,2)
+9 IF $PIECE(T,"-",2)="N"!($PIECE(T,"-",2)="DT")!($PIECE(T,"-",2)="MNT")
SET %=T
QUIT
+10 IF $PIECE(T,"-",1)="97802"!($PIECE(T,"-",1)="97803")!($PIECE(T,"-",1)="97804")
SET %=T
QUIT
End DoDot:1
+11 IF %]""
QUIT %
+12 SET T=$ORDER(^ATXAX("B","BUD NUTRITION CPT",0))
+13 SET %=$$CPT^BUD1DU(P,BDATE,EDATE,T,5)
+14 IF %]""
QUIT "CPT: "_$PIECE(%,U,2)
+15 QUIT ""
PA(P,BDATE,EDATE) ;EP
+1 NEW BUDALLED,BUDG,X,E,%,D,T,Y
+2 KILL BUDG
SET X=P_"^LAST DX V65.41;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,"BUDG(")
+3 IF $DATA(BUDG(1))
QUIT "POV V65.41"
+4 SET Y="BUDALLED("
+5 SET X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,Y)
+6 IF '$DATA(BUDALLED(1))
QUIT ""
+7 SET (X,D)=0
SET %=""
SET T=""
FOR
SET X=$ORDER(BUDALLED(X))
IF X'=+X!(%]"")
QUIT
Begin DoDot:1
+8 SET T=$PIECE(^AUPNVPED(+$PIECE(BUDALLED(X),U,4),0),U)
+9 IF 'T
QUIT
+10 IF '$DATA(^AUTTEDT(T,0))
QUIT
+11 SET T=$PIECE(^AUTTEDT(T,0),U,2)
+12 IF $PIECE(T,"-",2)="EX"
SET %=T
QUIT
+13 IF $PIECE(T,"-",1)="V65.41"
SET %=T
QUIT
End DoDot:1
+14 QUIT %
ADULT ;EP
+1 SET BUDDOB=$PIECE(^DPT(DFN,0),U,3)
+2 SET BUD18RB=($EXTRACT(BUDBD,1,3)-18)_"1231"
+3 IF BUDDOB>BUD18RB
QUIT
+4 IF BUDMEDV<1
QUIT
+5 SET BUD18TH=$EXTRACT(BUDDOB,1,3)+18_$EXTRACT(BUDDOB,4,7)
+6 ;quit if no visiT before 17TH birthday
IF '$$VBBD(DFN,$$FMADD^XLFDT(BUD18TH,1),BUDED)
QUIT
+7 ;HAD V66.7 WITHIN 6 MONTHS BEFORE LAST VISIT DATE
+8 IF $$LASTDX^BUD1UTL1(DFN,"V66.7",$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV))
QUIT
+9 KILL BUDBMI,BUDOW,BUDUW
+10 SET (BUDBMI,BUDOW,BUDUW,BUDPLAN)=""
+11 ;S BUDPD=$E(BUDBD,1,3)-2_$E(BUDBD,4,7)
+12 IF $$PREG^BUD1RP6B(DFN,$$FMADD^XLFDT(BUDED,-609),BUDED)
QUIT
+13 SET BUDBMI=$$BMI(DFN,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV),BUDAGE)
+14 IF BUDBMI=""
IF $$REF(P,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV))
QUIT
+15 ;NO BMI
IF BUDBMI=""
SET BUDPLAN=$$PLAN(DFN,BUDBD,BUDED)
IF BUDPLAN]""
SET G=0
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"AWS2",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDBMI_U_$SELECT(BUDOW]"":"OVERWEIGHT",BUDUW]"":"UNDERWEIGHT",1:"")_U_BUDPLAN
QUIT
+16 IF BUDBMI=""
QUIT
+17 IF BUDAGE<65
Begin DoDot:1
+18 IF BUDBMI>25
SET BUDOW="OW"
+19 IF BUDBMI<18.5
SET BUDUW="UW"
End DoDot:1
GOTO N
+20 IF BUDBMI'<30
SET BUDOW="OW"
+21 IF BUDBMI<22
SET BUDUW="UW"
+22 ;put the rest in demoninator
N ;not over/underweight & HAD BMI
IF BUDOW=""
IF BUDUW=""
QUIT
+1 SET BUDWTDT=$$BMI^BUD1RP6R(DFN,$$FMADD^XLFDT($$VD^APCLV(BUDLASTV),-(6*30.5)),$$VD^APCLV(BUDLASTV),BUDAGE)
+2 SET BUDPLAN=$$PLAN(DFN,BUDWTDT,BUDED)
+3 SET G=0
+4 IF BUDPLAN]""
SET G=1
SET BUDSECTF("PLAN")=$GET(BUDSECTF("PLAN"))+1
+5 ;put the rest in demoninator
+6 SET BUDSECTF("PTS")=$GET(BUDSECTF("PTS"))+1
Begin DoDot:1
+7 IF $GET(BUDAWS2L)
Begin DoDot:2
+8 IF 'G
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"AWS2",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDBMI_U_$SELECT(BUDOW]"":"OVERWEIGHT",BUDUW]"":"UNDERWEIGHT",1:"")_U_BUDPLAN
End DoDot:2
+9 IF $GET(BUDAWS1L)
Begin DoDot:2
+10 IF G
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"AWS1",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDBMI_U_$SELECT(BUDOW]"":"OVERWEIGHT",BUDUW]"":"UNDERWEIGHT",1:"")_U_BUDPLAN
End DoDot:2
End DoDot:1
+11 QUIT
+12 ;
PLAN(P,BD,ED) ;
+1 NEW G,Y,X,E,T,%,Z,BUDALLED
+2 ;S BD=D,ED=D
+3 ;check for cpt codes
+4 SET G=$$CPT^BUD1UTL1(P,BD,ED,$ORDER(^ATXAX("B","BUD WT PLAN CPTS",0)),5)
+5 IF G]""
QUIT $PIECE(G,U,2)_" on "_$$FMTE^XLFDT($PIECE(G,U,1))
+6 SET G=$$LASTDX^BUD1UTL1(P,"BUD WT PLAN DXS",BD,ED)
+7 IF G
QUIT $PIECE(G,U,2)_" on "_$$FMTE^XLFDT($PIECE(G,U,3))
+8 KILL BUDALLED
+9 SET Y="BUDALLED("
+10 SET X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED)
SET E=$$START1^APCLDF(X,Y)
+11 SET (X,D)=0
SET %=""
SET T=""
FOR
SET X=$ORDER(BUDALLED(X))
IF X'=+X!(%]"")
QUIT
Begin DoDot:1
+12 SET T=$PIECE(^AUPNVPED(+$PIECE(BUDALLED(X),U,4),0),U)
+13 IF 'T
QUIT
+14 IF '$DATA(^AUTTEDT(T,0))
QUIT
+15 SET T=$PIECE(^AUTTEDT(T,0),U,2)
+16 SET E=$PIECE(BUDALLED(X),U,1)
+17 IF $PIECE(T,"-",2)="EX"!($PIECE(T,"-",2)="LA")!($PIECE(T,"-",2)="N")!($PIECE(T,"-",2)="DT")!($PIECE(T,"-",2)="MNT")
SET %=T_U_E
QUIT
+18 IF $PIECE(T,"-",1)="OBS"!($PIECE(T,"-",1)="V65.3")!($PIECE(T,"-",1)="V65.41")!($PIECE(T,"-",1)="278.00")!($PIECE(T,"-",1)="278.01")
SET %=T_U_E
QUIT
End DoDot:1
+19 IF %]""
QUIT $PIECE(%,U,1)_" on "_$$FMTE^XLFDT($PIECE(%,U,2))
+20 ;now check for a clinic or provider visit
+21 NEW BUDG,W,R
+22 KILL BUDG
+23 SET %=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED)
SET E=$$START1^APCLDF(%,"BUDG(")
+24 SET (X,Y,D)=""
FOR
SET X=$ORDER(BUDG(X))
IF X'=+X!(Y)
QUIT
Begin DoDot:1
+25 SET Z=0
FOR
SET Z=$ORDER(^AUPNVPRV("AD",$PIECE(BUDG(X),U,5),Z))
IF Z'=+Z!(Y)
QUIT
Begin DoDot:2
+26 SET W=$PIECE($GET(^AUPNVPRV(Z,0)),U,1)
+27 IF W=""
QUIT
+28 SET R=$$VALI^XBDIQ1(200,W,53.5)
+29 IF R=""
QUIT
+30 SET R=$PIECE($GET(^DIC(7,R,9999999)),U,1)
+31 IF R="07"!(R=29)
SET Y=1
SET D="Provider "_R_" on "_$$FMTE^XLFDT($PIECE(BUDG(X),U))
QUIT
+32 SET R=$$CLINIC^APCLV($PIECE(BUDG(X),U,5),"C")
IF R=67!(R=36)
SET Y=1
SET D="Clinic "_R_" on "_$$FMTE^XLFDT($PIECE(BUDG(X),U))
QUIT
End DoDot:2
End DoDot:1
+33 IF Y
QUIT D
+34 QUIT ""
G1 ;EP
+1 NEW BUDGOT
+2 SET BUDGOT=""
+3 SET BUDDOB=$PIECE(^DPT(DFN,0),U,3)
+4 SET BUD18RB=($EXTRACT(BUDBD,1,3)-18)_"1231"
+5 IF BUDDOB>BUD18RB
QUIT
+6 IF BUDMEDV<1
QUIT
+7 SET BUD18TH=$EXTRACT(BUDDOB,1,3)+18_$EXTRACT(BUDDOB,4,7)
+8 IF '$$VBBD(DFN,$$FMADD^XLFDT(BUD18TH,1),BUDED)
QUIT
+9 SET X=$$GETV^BUD1RP6U(DFN,BUDDOB,BUDED,BUDSITE)
+10 IF X<2
QUIT
+11 KILL BUDTOBS,BUDTOBD
+12 SET BUDTOBDD=$EXTRACT(BUDBD,1,3)-1_$EXTRACT(BUDBD,4,7)
+13 SET BUDTOBS=$$TOBACCO(DFN,$$DOB^AUPNPAT(DFN),BUDED)
+14 IF BUDTOBS]""
IF $PIECE(BUDTOBS,U,3)'<BUDTOBDD
SET BUDSECG1("ABM")=$GET(BUDSECG1("ABM"))+1
SET BUDGOT=1
+15 ;put the rest in demoninator
+16 SET BUDSECG1("PTS")=$GET(BUDSECG1("PTS"))+1
Begin DoDot:1
+17 IF $GET(BUDTUA2L)
Begin DoDot:2
+18 IF 'BUDGOT
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"TUA2",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDTOBS
End DoDot:2
+19 IF $GET(BUDTUA1L)
Begin DoDot:2
+20 IF BUDGOT
SET ^XTMP("BUD1RP6B",BUDJ,BUDH,"TUA1",BUDAGE,$PIECE(^DPT(DFN,0),U),BUDCOM,DFN)=BUDTOBS
End DoDot:2
End DoDot:1
+21 QUIT
+22 ;
TOBACCO(P,BDATE,EDATE) ;
+1 ;TOBACCO SCREENING IN DATE RANGE?
+2 NEW BUDTOB,BUDX,BUDPV,BUDLAST
+3 KILL BUDLAST
+4 DO TOBACCO1
+5 IF BUDTOB]""
SET BUDLAST($PIECE(BUDTOB,U,3))=BUDTOB
+6 ;PATIENT ED
+7 SET BUDTOB=$$TOBPED(P,BDATE,EDATE)
+8 IF BUDTOB]""
SET X=$PIECE(BUDTOB,U,3)
SET BUDLAST(X)=BUDTOB
+9 SET BUDPV=$$LASTDX^BUD1UTL1(P,"BUD TOBACCO SCREEN DXS",BDATE,EDATE)
+10 ; Q BUDTOB
IF BUDPV
SET BUDLAST($PIECE(BUDPV,U,3))=$PIECE(BUDPV,U,2)_U_$$FMTE^XLFDT($PIECE(BUDPV,U,3))_U_$PIECE(BUDPV,U,3)
+11 SET BUDCPT=$$CPT^BUD1UTL1(P,BDATE,EDATE,$ORDER(^ATXAX("B","BUD TOBACCO SCREEN CPTS",0)),7)
+12 ;S BUDTOB=BUDCPT Q BUDTOB
IF BUDCPT]""
SET BUDLAST($PIECE(BUDCPT,U,3))=BUDCPT
+13 IF '$DATA(BUDLAST)
QUIT ""
+14 SET BUDX=0
FOR
SET BUDX=$ORDER(BUDLAST(BUDX))
IF BUDX'=+BUDX
QUIT
SET BUDTOB=BUDX
+15 QUIT BUDLAST(BUDTOB)
TOBACCO1 ;
+1 KILL BUDTOB
+2 SET BUDTOB=$$LASTHF(P,"TOBACCO (SMOKING)",BDATE,EDATE)
KILL O,D,H
+3 IF BUDTOB]""
SET BUDLAST($PIECE(BUDTOB,U,3))=BUDTOB
+4 SET BUDTOB=$$LASTHF(P,"TOBACCO (SMOKELESS - CHEWING/DIP)",BDATE,EDATE)
KILL O,D,H
+5 IF BUDTOB]""
SET BUDLAST($PIECE(BUDTOB,U,3))=BUDTOB
+6 SET BUDTOB=$$LASTHF(P,"TOBACCO (EXPOSURE)",BDATE,EDATE)
KILL O,D,H
+7 IF BUDTOB]""
SET BUDLAST($PIECE(BUDTOB,U,3))=BUDTOB
+8 SET BUDTOB=$$LASTHF(P,"TOBACCO",BDATE,EDATE)
KILL O,D,H
+9 IF BUDTOB]""
SET BUDLAST($PIECE(BUDTOB,U,3))=BUDTOB
+10 QUIT
TOBACCO0 ;
+1 SET (X,Y)=0
FOR
SET X=$ORDER(^AUPNHF("AA",P,X))
IF X'=+X!(Y)
QUIT
IF $$VAL^XBDIQ1(9999999.64,X,.03)="TOBACCO"
SET Y=X
+2 IF 'Y
QUIT
+3 SET E=$ORDER(^AUPNHF("AA",P,Y,0))
IF 'E
QUIT
+4 IF (9999999-E)>EDATE
QUIT
+5 IF (9999999-E)<BDATE
QUIT
+6 SET Y=$PIECE(^AUTTHF(Y,0),U)
+7 SET BUDTOB=Y_"^"_$$FMTE^XLFDT(9999999-E)_"^"_(9999999-E)
+8 KILL Y,E,X
+9 QUIT
+10 ;
LASTHF(P,C,BDATE,EDATE) ;EP
+1 SET C=$ORDER(^AUTTHF("B",C,0))
+2 IF '$GET(C)
QUIT ""
+3 SET (H,D)=0
KILL O
+4 FOR
SET H=$ORDER(^AUTTHF("AC",C,H))
IF '+H
QUIT
Begin DoDot:1
+5 IF '$DATA(^AUPNVHF("AA",P,H))
QUIT
+6 SET D=""
FOR
SET D=$ORDER(^AUPNVHF("AA",P,H,D))
IF D'=+D
QUIT
Begin DoDot:2
+7 IF (9999999-D)>EDATE
QUIT
+8 IF (9999999-D)<BDATE
QUIT
+9 SET O(D)=$ORDER(^AUPNVHF("AA",P,H,D,""))
End DoDot:2
+10 QUIT
End DoDot:1
+11 SET D=$ORDER(O(0))
+12 IF D=""
QUIT D
+13 QUIT $$VAL^XBDIQ1(9000010.23,O(D),.01)_"^"_$$FMTE^XLFDT(9999999-D)_"^"_(9999999-D)
+14 ;
TOBPED(P,BDATE,EDATE) ;EP
+1 NEW Y,X,E,D,T,%,BUDG,BUDPED
+2 KILL BUDPED
+3 SET Y="BUDG("
+4 SET X=P_"^ALL EDUC;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,Y)
+5 IF '$DATA(BUDG)
QUIT ""
+6 SET (X,D)=0
SET %=""
SET T=""
FOR
SET X=$ORDER(BUDG(X))
IF X'=+X
QUIT
Begin DoDot:1
+7 SET T=$PIECE(^AUPNVPED(+$PIECE(BUDG(X),U,4),0),U)
+8 IF 'T
QUIT
+9 IF '$DATA(^AUTTEDT(T,0))
QUIT
+10 SET T=$PIECE(^AUTTEDT(T,0),U,2)
+11 IF $PIECE(T,"-")="TO"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+12 IF $PIECE(T,"-",2)="TO"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+13 IF $PIECE(T,"-",2)="SHS"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+14 IF $PIECE(T,"-")="305.1"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+15 IF $PIECE(T,"-")="649.00"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+16 IF $PIECE(T,"-")="649.01"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+17 IF $PIECE(T,"-")="649.02"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+18 IF $PIECE(T,"-")="649.03"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+19 IF $PIECE(T,"-")="649.04"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+20 IF $PIECE(T,"-")="V15.82"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+21 IF $PIECE(T,"-")="1034F"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+22 IF $PIECE(T,"-")="1035F"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+23 IF $PIECE(T,"-")="1036F"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
+24 IF $PIECE(T,"-")="1000F"
SET BUDPED($PIECE(BUDG(X),U))=T_U_$$FMTE^XLFDT($PIECE(BUDG(X),U))_U_$PIECE(BUDG(X),U)
QUIT
End DoDot:1
+25 IF '$DATA(BUDPED)
QUIT ""
+26 SET X=0
FOR
SET X=$ORDER(BUDPED(X))
IF X'=+X
QUIT
SET %=X
+27 QUIT BUDPED(%)
G2 ;
+1 DO G2^BUD1RP6U
+2 QUIT