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

APCLW61.m

Go to the documentation of this file.
  1. APCLW61 ; IHS/CMI/LAB - CALC WEIGHT REPORT ;
  1. ;;2.0;IHS PCC SUITE;**4,10,11**;MAY 14, 2009;Build 58
  1. ;
  1. ;cmi/anch/maw 9/12/2007 code set versioning PREGDX
  1. ;
  1. START ;EP
  1. ;calculate 365 days ago and 1095 days ago
  1. S APCLJ=$J,APCLH=$H
  1. S APCLGRAN=0
  1. D XTMP^APCLOSUT("APCLW6","PCC BMI REPORT")
  1. ;
  1. PROC ;
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN D
  1. .Q:'$D(^DPT(DFN,0))
  1. .Q:$P(^DPT(DFN,0),U,19)
  1. .I APCLSEAT="" Q:$$DEMO^APCLUTL(DFN,$G(APCLDEMO))
  1. .I APCLSEAT]"" Q:'$D(^DIBT(APCLSEAT,1,DFN))
  1. .I APCLTYPE="P" Q:'$$AGEAP(DFN,APCLBD,APCLED,APCLLOWA,APCLHGHA,APCLBEG)
  1. .S APCLAGE=$$AGE^AUPNPAT(DFN,$S($G(APCLBEG)="":APCLBD,APCLBEG="B":APCLBD,1:APCLED))
  1. .I APCLTYPE="P" Q:APCLAGE<APCLLOWA Q:APCLAGE>APCLHGHA
  1. .S Y=DFN D ^AUPNPAT
  1. .Q:AUPNSEX=""
  1. .Q:AUPNSEX="U"
  1. .Q:APCLSEX'="B"&(APCLSEX'=AUPNSEX)
  1. .D GETBMI1
  1. .I APCLBMI1="" Q ;no beginning BMI
  1. .I APCLOB1="" Q ;no beginning ob/ow
  1. .D GETBMI2
  1. .K ^TMP($J,"A")
  1. .I APCLBMI2="" Q ;no ending BMI
  1. .I APCLOB2="" Q ;no ending ob/ow value
  1. .I APCLOB1=APCLOB2 Q ;same beg and end
  1. .S APCLMOVE=""
  1. .I APCLOB1<APCLOB2 S APCLMOVE="UP"
  1. .I APCLOB1>APCLOB2 S APCLMOVE="DOWN"
  1. .S ^XTMP("APCLW6",APCLJ,APCLH,"PATIENTS",APCLMOVE,APCLAGE,$P(^DPT(DFN,0),U),DFN)=APCLWT1_U_APCLHT1_U_APCLBMI1_U_APCLOB1_U_APCLWT2_U_APCLHT2_U_APCLBMI2_U_APCLOB2
  1. .S APCLGRAN=APCLGRAN+1
  1. .Q
  1. Q
  1. GETBMI1 ;
  1. ;TABLE ALL VISITS CHRONOLOGICALLY FROM BEGINNING DATE
  1. S APCLBMI1="",APCLOB1=""
  1. K ^TMP($J,"A")
  1. S A="^TMP($J,""A"",",B=DFN_"^ALL VISITS;DURING "_$$FMTE^XLFDT(APCLBD)_"-"_$$FMTE^XLFDT(APCLED),E=$$START1^APCLDF(B,A)
  1. I '$D(^TMP($J,"A",1)) Q
  1. S (APCLX,G)=0 F S APCLX=$O(^TMP($J,"A",APCLX)) Q:APCLX'=+APCLX!(APCLBMI1]"") S APCLV=$P(^TMP($J,"A",APCLX),U,5) D
  1. .Q:'$D(^AUPNVSIT(APCLV,0))
  1. .Q:'$P(^AUPNVSIT(APCLV,0),U,9)
  1. .Q:$P(^AUPNVSIT(APCLV,0),U,11)
  1. .Q:$$PREGDX(APCLV) ;quit if pregnant on this visit
  1. .S APCLWT1=$$WT(APCLV)
  1. .Q:$P(APCLWT1,U)="" ;no weight on this visit
  1. .;got a weight so get a height
  1. .S APCLHT1=$$HT(DFN,APCLV,$$AGE^AUPNPAT(DFN,$P($P(^AUPNVSIT(APCLV,0),U),".")),$P(APCLWT1,U,2))
  1. .Q:$P(APCLHT1,U)=""
  1. .Q:$P(APCLHT1,U)="?"
  1. .S APCLCHT=$P(APCLHT1,U),APCLCWT=$P(APCLWT1,U) D CALCBMI
  1. .S APCLBMI1=APCLBMI
  1. .S APCLOB1=""
  1. .;find entry in reference table
  1. .S APCLREF=$O(^APCLBMI("H",AUPNSEX,$$AGE^AUPNPAT(DFN,$P($P(^AUPNVSIT(APCLV,0),U),".")),0))
  1. .I 'APCLREF S APCLREF=$O(^APCLBMI("H",AUPNSEX,$$AGE^AUPNPAT(DFN,$P($P(^AUPNVSIT(APCLV,0),U),".")))) I APCLREF S APCLREF=$O(^APCLBMI("H",AUPNSEX,APCLREF,""))
  1. .Q:'APCLREF
  1. .;I APCLBMI1>$P(^APCLBMI(APCLREF,0),U,7)!(APCLBMI1<$P(^APCLBMI(APCLREF,0),U,6)) S APCLOB1="" Q
  1. .I APCLBMI1'<$P(^APCLBMI(APCLREF,0),U,4),APCLBMI1<$P(^APCLBMI(APCLREF,0),U,5) S APCLOB1=2 Q
  1. .I APCLBMI1'<$P(^APCLBMI(APCLREF,0),U,5) S APCLOB1=3 Q
  1. .S APCLOB1=1
  1. .Q
  1. Q
  1. GETBMI2 ;
  1. ;TABLE ALL VISITS CHRONOLOGICALLY FROM BEGINNING DATE
  1. S APCLBMI2="",APCLOB2=""
  1. ;K ^TMP($J,"A")
  1. ;S A="^TMP($J,""A"",",B=DFN_"^ALL VISITS;DURING "_$$FMTE^XLFDT(APCLBD)_"-"_$$FMTE^XLFDT(APCLED),E=$$START1^APCLDF(B,A)
  1. ;I '$D(^TMP($J,"A",1)) Q
  1. S G=0,APCLX="A" F S APCLX=$O(^TMP($J,"A",APCLX),-1) Q:APCLX'=+APCLX!(APCLBMI2]"") S APCLV=$P(^TMP($J,"A",APCLX),U,5) D
  1. .Q:'$D(^AUPNVSIT(APCLV,0))
  1. .Q:'$P(^AUPNVSIT(APCLV,0),U,9)
  1. .Q:$P(^AUPNVSIT(APCLV,0),U,11)
  1. .Q:$$PREGDX(APCLV) ;quit if pregnant on this visit
  1. .S APCLWT2=$$WT(APCLV)
  1. .Q:$P(APCLWT2,U)="" ;no weight on this visit
  1. .;got a weight so get a height
  1. .S APCLHT2=$$HT(DFN,APCLV,$$AGE^AUPNPAT(DFN,$P($P(^AUPNVSIT(APCLV,0),U),".")),$P(APCLWT2,U,2))
  1. .Q:$P(APCLHT2,U)=""
  1. .Q:$P(APCLHT2,U)="?"
  1. .S APCLCHT=$P(APCLHT2,U),APCLCWT=$P(APCLWT2,U) D CALCBMI
  1. .S APCLBMI2=APCLBMI
  1. .S APCLOB2=""
  1. .;find entry in reference table
  1. .S APCLREF=$O(^APCLBMI("H",AUPNSEX,$$AGE^AUPNPAT(DFN,$P($P(^AUPNVSIT(APCLV,0),U),".")),0))
  1. .I 'APCLREF S APCLREF=$O(^APCLBMI("H",AUPNSEX,$$AGE^AUPNPAT(DFN,$P($P(^AUPNVSIT(APCLV,0),U),".")))) I APCLREF S APCLREF=$O(^APCLBMI("H",AUPNSEX,APCLREF,""))
  1. .Q:'APCLREF
  1. .;I APCLBMI2>$P(^APCLBMI(APCLREF,0),U,7)!(APCLBMI2<$P(^APCLBMI(APCLREF,0),U,6)) S APCLOB2="" Q
  1. .I APCLBMI2'<$P(^APCLBMI(APCLREF,0),U,4),APCLBMI2<$P(^APCLBMI(APCLREF,0),U,5) S APCLOB2=2 Q
  1. .I APCLBMI2'<$P(^APCLBMI(APCLREF,0),U,5) S APCLOB2=3 Q
  1. .S APCLOB2=1
  1. .Q
  1. Q
  1. WT(V) ;return wt on this visit
  1. NEW X,M,W
  1. S W="",D=""
  1. S M=$O(^AUTTMSR("B","WT",0))
  1. S X=0 F S X=$O(^AUPNVMSR("AD",V,X)) Q:X'=+X I '$P($G(^AUPNVMSR(X,2)),U,1) S Z=$P(^AUPNVMSR(X,0),U) I Z=M S W=$P(^AUPNVMSR(X,0),U,4),D=$P($P(^AUPNVSIT(V,0),U),".")
  1. Q W_U_D
  1. HT(P,V,AGE,DATE) ;return wt on this visit
  1. NEW X,M,W,APCLY,APCLX,BD,ED
  1. S W="",D=""
  1. S M=$O(^AUTTMSR("B","HT",0))
  1. I AGE<19 D Q W_U_D
  1. .S W=""
  1. .;call data fetcher to get ht on DATE-DATE
  1. .K APCLG S (W,D)=""
  1. .S APCLY="APCLG(",APCLX=P_"^LAST MEASUREMENT HT;DURING "_DATE_"-"_DATE S APCLER=$$START1^APCLDF(APCLX,APCLY)
  1. .I $D(APCLG(1)) S W=$P(APCLG(1),U,2),D=$P(APCLG(1),U)
  1. .Q
  1. K APCLG S (W,D)=""
  1. I AGE>18,AGE<50 D Q W_U_D
  1. .S BD=$$FMADD^XLFDT(DATE,-(3*365))
  1. .S ED=DATE
  1. .S APCLY="APCLG(",APCLX=P_"^LAST MEASUREMENT HT;DURING "_BD_"-"_ED S APCLER=$$START1^APCLDF(APCLX,APCLY)
  1. .I $D(APCLG(1)) S W=$P(APCLG(1),U,2),D=$P(APCLG(1),U)
  1. .Q
  1. K APCLG S (W,D)=""
  1. S BD=$$FMADD^XLFDT(DATE,-365)
  1. S ED=DATE
  1. S APCLY="APCLG(",APCLX=P_"^LAST MEASUREMENT HT;DURING "_BD_"-"_ED S APCLER=$$START1^APCLDF(APCLX,APCLY)
  1. I $D(APCLG(1)) S W=$P(APCLG(1),U,2),D=$P(APCLG(1),U)
  1. Q W_U_D
  1. PREGDX(V) ;
  1. NEW P,D,G
  1. S G=0
  1. S P=0 F S P=$O(^AUPNVPOV("AD",V,P)) Q:P'=+P!(G) S D=$P(^AUPNVPOV(P,0),U) D ;cmi/anch/maw 9/12/2007 csv
  1. .I $$ICD^AUPNVUTL(D,$O(^ATXAX("B","BGP PREGNANCY DIAGNOSES 2",0)),9) S G=1
  1. .Q
  1. Q G
  1. CALCBMI ;calculate BMI value
  1. S APCLMWT=APCLCWT*.45359,APCLMHT=APCLCHT*.0254,APCLBMI=APCLMWT/(APCLMHT*APCLMHT)
  1. Q
  1. EOJ ;
  1. K APCL1YR,APCL3YR,APCLA,APCLBD,APCLMGI,APCLCHT,APCLCWT,APCLGHT,APCLGWT,APCLROWT,APCLROHT,APCLER,APCLMHT,APCLMWT,APCLX,APCLY,APCLNN,APCLREF
  1. K AUPNPAT,AUPNDOB,AUPNSEX,AUPNDAYS,AUPNDOD
  1. K DFN,X,Y,V,A,D,I,J,Z
  1. Q
  1. AGEAP(P,BD,ED,LOW,HIGH,TP) ;
  1. I '$G(P) Q ""
  1. S A=$$AGE^AUPNPAT(P,$S(TP="B":BD,1:ED))
  1. I A<LOW Q 0
  1. I A>HIGH Q 0
  1. Q 1