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

BGPD29.m

Go to the documentation of this file.
  1. BGPD29 ; IHS/CMI/LAB - indicator 29 ;
  1. ;;7.0;IHS CLINICAL REPORTING;;JAN 24, 2007
  1. ;
  1. I29 ;EP ;EP - indicator 29
  1. ;Q:'$D(BGPIND(25))
  1. S BGPSEX=$P(^DPT(DFN,0),U,2),BGPSEX=$S(BGPSEX="M":1,1:2)
  1. S BGPBMI=$$BMI(DFN,BGPEDATE,BGPAGEE),BGPBMIC=$S(BGPBMI]"":1,1:0)
  1. S BGPOVW=$$OW(DFN,BGPBMI,BGPAGEE)
  1. S BGPOBE=$$OB(DFN,BGPBMI,BGPAGEE)
  1. S BGPBMI=$$BMI(DFN,BGPEDATE,BGPAGEE),BGPBMIC=$S(BGPBMI]"":1,1:0)
  1. S BGPOVW=$$OW(DFN,BGPBMI,BGPAGEE)
  1. S BGPOBE=$$OB(DFN,BGPBMI,BGPAGEE)
  1. I BGPAGEE>1,BGPAGEE<6 S BGPPN=$S(BGPTIME=1:16,BGPTIME=0:46,BGPTIME=8:86,1:999),BGPPP=1 D S1
  1. I BGPAGEE>6,BGPAGEE<12 S BGPPN=$S(BGPTIME=1:16,BGPTIME=0:46,BGPTIME=8:86,1:999),BGPPP=2 D S1
  1. I BGPAGEE>11,BGPAGEE<20 S BGPPN=$S(BGPTIME=1:16,BGPTIME=0:46,BGPTIME=8:86,1:999),BGPPP=3 D S1
  1. I BGPAGEE>19,BGPAGEE<25 S BGPPN=$S(BGPTIME=1:16,BGPTIME=0:46,BGPTIME=8:86,1:999),BGPPP=4 D S1
  1. I BGPAGEE>24,BGPAGEE<35 S BGPPN=$S(BGPTIME=1:16,BGPTIME=0:46,BGPTIME=8:86,1:999),BGPPP=5 D S1
  1. I BGPAGEE>34,BGPAGEE<45 S BGPPN=$S(BGPTIME=1:20,BGPTIME=0:50,BGPTIME=8:90,1:999),BGPPP=3 D S1
  1. I BGPAGEE>44,BGPAGEE<55 S BGPPN=$S(BGPTIME=1:20,BGPTIME=0:50,BGPTIME=8:90,1:999),BGPPP=4 D S1
  1. I BGPAGEE>54,BGPAGEE<65 S BGPPN=$S(BGPTIME=1:20,BGPTIME=0:50,BGPTIME=8:90,1:999),BGPPP=5 D S1
  1. I BGPAGEE>64 S BGPPN=$S(BGPTIME=1:20,BGPTIME=0:50,BGPTIME=8:90,1:999),BGPPP=6 D S1
  1. I $D(BGPLIST(25)),BGPTIME=1 S ^XTMP("BGPD",BGPJ,BGPH,"LIST",25,$S($P($G(^AUPNPAT(DFN,11)),U,18)]"":$P(^AUPNPAT(DFN,11),U,18),1:"UNKNOWN"),$P(^DPT(DFN,0),U,2),BGPAGEE,DFN)=BGPBMI
  1. Q
  1. S1 ;
  1. ;set denominator
  1. D SETPA(BGPRPT,BGPPN,BGPPP,1,BGPSEX,1) ;set denominator # of pats
  1. D SETPA(BGPRPT,BGPPN,BGPPP,2,BGPSEX,BGPBMIC) ;set # with bmi calc
  1. D SETPA(BGPRPT,BGPPN,BGPPP,3,BGPSEX,BGPOVW)
  1. D SETPA(BGPRPT,BGPPN,BGPPP,4,BGPSEX,BGPOBE)
  1. Q
  1. SETPA(R,N,P,P1,S,V) ;
  1. NEW X,Y,F,M
  1. S X=$P($G(^BGPD(R,N)),U,P) ;whole string
  1. S M=$P(X,"!",1) ;males
  1. S F=$P(X,"!",2)
  1. I S=2 S $P(F,"~",P1)=$P(F,"~",P1)+V
  1. I S=1 S $P(M,"~",P1)=$P(M,"~",P1)+V
  1. S X=M_"!"_F
  1. S $P(^BGPD(R,N),U,P)=X
  1. Q
  1. OB(P,BMI,A) ;EP obese
  1. I $G(BMI)="" Q ""
  1. NEW S S S=$P(^DPT(P,0),U,2)
  1. I S="" Q ""
  1. NEW R S R=0,R=$O(^APCLBMI("H",S,A,R))
  1. I 'R S R=$O(^APCLBMI("H",S,A)) I R S R=$O(^APCLBMI("H",S,R,""))
  1. I 'R Q ""
  1. I BMI>$P(^APCLBMI(R,0),U,7)!(BMI<$P(^APCLBMI(R,0),U,6)) Q ""
  1. I BMI'<$P(^APCLBMI(R,0),U,5) Q 1
  1. Q ""
  1. OW(P,BMI,A) ;EP overweight
  1. I $G(BMI)="" Q ""
  1. NEW S S S=$P(^DPT(P,0),U,2)
  1. I S="" Q ""
  1. NEW R S R=0,R=$O(^APCLBMI("H",S,A,R))
  1. I 'R S R=$O(^APCLBMI("H",S,A)) I R S R=$O(^APCLBMI("H",S,R,""))
  1. I 'R Q ""
  1. I BMI>$P(^APCLBMI(R,0),U,7)!(BMI<$P(^APCLBMI(R,0),U,6)) Q ""
  1. I BMI'<$P(^APCLBMI(R,0),U,4) Q 1
  1. Q ""
  1. HT(P,BDATE,EDATE) ;EP
  1. I 'P Q ""
  1. NEW %,BGPARRY,H,E
  1. S %=P_"^LAST MEAS HT;DURING "_BDATE_"-"_EDATE NEW X 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. NEW %,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 ICD=$P($$ICDDX^ICDCODE($P(^AUPNVPOV(BGPLD,0),U)),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. BMI(P,EDATE,AGE) ;EP
  1. I 'P Q -1
  1. NEW %,W,H,B,D,%DT,BDATE
  1. S BDATE=$$FMADD^XLFDT(EDATE,-365),BDATE=$$FMTE^XLFDT(BDATE),EDATE=$$FMTE^XLFDT(EDATE)
  1. S %=""
  1. I AGE>19 D Q %
  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 H=$$HT(P,HDATE,EDATE) I H="" Q
  1. .;S W=(W/5)*2.3,H=(H*2.5),H=(H*H)/10000,%=(W/H),%=$J(%,4,1)
  1. .;S W=(W/5)*2.3,H=(H*2.5),H=(H*H)/10000,%=(W/H)
  1. .S W=W*.45359,H=(H*.0254),H=(H*H),%=(W/H)
  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/5)*2.3,H=(H*2.5),H=(H*H)/10000,%=(W/H),%=$J(%,4,1)
  1. ;S W=(W/5)*2.3,H=(H*2.5),H=(H*H)/10000,%=(W/H)
  1. S W=W*.45359,H=(H*.0254),H=(H*H),%=(W/H)
  1. Q %
  1. HTWTSD(P,BDATE,EDATE) ;get last ht / wt on same day
  1. I '$G(P) Q ""
  1. NEW BGPLWTS,BGPLHTS,%,X,BGPLWTS1,BGPLHTS1,Y
  1. ;get all hts during time frame
  1. S %=P_"^ALL MEAS HT;DURING "_BDATE_"-"_EDATE NEW X 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 NEW X 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. NEW BGPLCHT 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