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

BTIUPCC6.m

Go to the documentation of this file.
  1. BTIUPCC6 ; IHS/ITSC/LJF - IHS PCC OBJECTS ;15-Dec-2015 15:40;DU
  1. ;;1.0;TEXT INTEGRATION UTILITIES;**1006,1012,1013,1015,1015,1016**;NOV 04, 2004;Build 10
  1. BMI(DFN,TIUCAP,NUM) ;EP -- returns BMI based on last ht and wt
  1. ; TIUCAP=1 if caption with measurement name is to be returned
  1. N VTWT,VTHT,RSWT,RSHT,BMI,WTDT,RMAX,X,IDT,HNUM,START,END,WNUM,IDATE,RCNT,DATE,WTDT,RESULT,LINE,APCHMDT
  1. ;S VTWT=$$VTYPE("WT"),VTHT=$$VTYPE("HT")
  1. S TIUCAP=$G(TIUCAP)
  1. S VTWT=$$VTYPE("BMI")
  1. K ^TMP("BTIUVM",$J),^TMP("BTIUPCC",$J)
  1. I '$D(NUM) S NUM=1
  1. S WNUM=NUM+2,HNUM=NUM+10,RMAX=NUM
  1. S START=DT+1,END=0
  1. S:START<END X=START,START=END,END=X
  1. S START=9999999-$S(START#1:START,1:START+.9),END=9999999-END
  1. S RCNT=0,IDT=START
  1. ;PCTILE=+G(PCTILE)
  1. ;D BLDXRF(VTWT,NUM),BLDXRF(VTHT,NUM)
  1. D BLDXRF(VTWT,NUM)
  1. F Q:'IDT!(RCNT=RMAX) D
  1. .S VIEN=$C(1)
  1. .F S VIEN=$O(^TMP("BTIUVM",$J,VTWT,IDT,VIEN),-1) Q:'VIEN D Q:RCNT=RMAX
  1. ..D GETMSR(VIEN,.BMI,.DATE,.LOC,.ENTERBY)
  1. ..;IHS/MSC/MGH Save the wt date to use if the ht isn't too old patch 4
  1. ..;S WTDT=DATE
  1. ..;S RSHT=$$FNDHT(IDT)
  1. ..;Q:'RSHT
  1. ..;S RSWT=RSWT*.45359,RSHT=RSHT*.0254,RSHT=RSHT*RSHT,BMI=+$J(RSWT/RSHT,0,2)
  1. ..;S:PCTILE BMI=$$BMIPCT(BMI,DFN,DATE)
  1. ..;Q:'BMI
  1. ..S RESULT(IDT)=$J(BMI,5,2),RCNT=RCNT+1
  1. ..;S DATE=WTDT
  1. .S IDT=$O(^TMP("BTIUVM",$J,VTWT,IDT))
  1. S CNT=0
  1. S IDATE="" F S IDATE=$O(RESULT(IDATE)) Q:IDATE=""!(CNT>NUM) D
  1. .S BMI=$G(RESULT(IDATE))
  1. .S DATE=9999999-IDATE
  1. .I $$PREG^BTIUPCC6(DFN,"",VIEN)=1 S BMI=BMI_"*"
  1. .S DATE=$$FMTE^XLFDT(DATE)
  1. .S CNT=CNT+1
  1. .S LINE=BMI_" ("_$P(DATE,"@",1)_")"
  1. .I TIUCAP S Y=$S(CNT=1:"BMI:",1:$$SP(4)) S LINE=Y_" "_LINE
  1. .S ^TMP("BTIUPCC",$J,CNT,0)=LINE
  1. I '$D(^TMP("BTIUPCC",$J)) Q "No bmi stored"
  1. Q "~@^TMP(""BTIUPCC"",$J)"
  1. FNDHT(IDT) ;Find closest height before weight
  1. N VIEN,RESULT,DOB,SEX,TAGE,X2,X1,SX
  1. S VIEN=$O(^TMP("BTIUVM",$J,VTHT,IDT,""))
  1. I 'VIEN D
  1. .;IHS/MSC/MGH Added in HS logic for lookback days for ht. Patch 4
  1. .N ID1,ID2,GOOD
  1. .S DOB=$P(^DPT(DFN,0),U,3),X2=DOB,X1=DT D ^%DTC S TAGE=X
  1. .S ID1=$O(^TMP("BTIUVM",$J,VTHT,IDT),-1),ID2=$O(^TMP("BTIUVM",$J,VTHT,IDT))
  1. .I ID1 D
  1. ..S X1=$P(ID1,".",1),X2=$P(IDT,".",1)
  1. ..I X1=X2 S ID2=ID1
  1. .I ID2 D
  1. ..S X1=9999999-(ID2\1)
  1. ..S APCHMDT=$$FMDIFF^XLFDT(X1,DOB,1)
  1. ..S X1=9999999-(IDT\1),X2=9999999-ID2
  1. ..S X=$$FMDIFF^XLFDT(X1,X2,1)
  1. ..I ((X>90)&(APCHMDT<1096))!((X>180)&(APCHMDT<4381))!((X>365)&(APCHMDT<6571))!((APCHMDT<6571)&(TAGE>6571)) S ID2=""
  1. ..S:ID2 VIEN=$O(^TMP("BTIUVM",$J,VTHT,ID2,""))
  1. D:VIEN GETMSR(VIEN,.RESULT)
  1. Q $G(RESULT)
  1. GETMSR(VIEN,RESULT,DATE,LOC,ENTERBY) ;
  1. N X,X12
  1. S X=$G(^AUPNVMSR(VIEN,0)),X12=$G(^(12))
  1. S DATE=+X12,ENTERBY=+$P(X12,U,4)
  1. S RESULT=$$TRIM^XLFSTR($P(X,U,4)),X=+$P(X,U,3)
  1. S X=$G(^AUPNVSIT(X,0))
  1. S:'DATE DATE=+X
  1. S LOC=+$P(X,U,22),DATE(0)=DATE*10000\1/10000
  1. Q
  1. ; Build temp xref for measurement type
  1. BLDXRF(VTYP,VNUM) ;
  1. N X,Y,Z,CNT
  1. S X=0
  1. K ^TMP("BTIUVM",$J,VTYP)
  1. S CNT=0
  1. F S X=$O(^AUPNVMSR("AA",DFN,VTYP,X)),VIEN=0 Q:'X!(CNT>VNUM) D
  1. .F S VIEN=$O(^AUPNVMSR("AA",DFN,VTYP,X,VIEN)) Q:'VIEN D
  1. ..S Z=$G(^AUPNVMSR(VIEN,0)),Y=+$G(^(12)),Y=$S(Y:9999999-Y,1:X)
  1. ..Q:+Z'=VTYP
  1. ..Q:$P(Z,U,2)'=DFN
  1. ..S CNT=CNT+1
  1. ..S ^TMP("BTIUVM",$J,VTYP,Y,VIEN)=""
  1. Q
  1. VTYPE(X,VMSR) ;
  1. N FNUM
  1. S:'$D(VMSR) VMSR=$$VMSR
  1. S FNUM=$S(VMSR:9999999.07,1:120.51)
  1. Q +$$FIND1^DIC(FNUM,"","X",$$UP^XLFSTR(X),"B^"_$S(VMSR:"D",1:"APCE^C"))
  1. PREG(DFN,VIEN,VMIEN) ;Determine if BMI is for pregnant patient
  1. ;Patch 1015 went back to using the ATX API after changes made
  1. N DOB,X1,X1,TAGE,POV,CODE,TAX,RET,ARRAY
  1. S RET=0
  1. S VMIEN=$G(VMIEN),VIEN=$G(VIEN)
  1. I $$GET1^DIQ(2,DFN,.02,"I")'="F" Q RET ;Wrong sex
  1. S TAGE=$$GET1^DIQ(2,DFN,.033)
  1. I TAGE<10!(TAGE>50) Q RET ;Wrong age
  1. ;Find POVs on this visit and check if they are pregnancy POVs
  1. I VIEN="" D
  1. .S VIEN=$$GET1^DIQ(9000010.01,VMIEN,.03,"I")
  1. I '+VIEN Q RET
  1. S TAX=$O(^ATXAX("B","BQI PREGNANCY DXS",0))
  1. S POV="" F S POV=$O(^AUPNVPOV("AD",VIEN,POV)) Q:POV=""!(RET=1) D
  1. .S CODE=$$GET1^DIQ(9000010.07,POV,.01,"I")
  1. .I CODE="" Q
  1. .S RET=$$ICD^ATXAPI(CODE,TAX,9)
  1. Q RET
  1. EXAMCMT(DFN,TARGET,CODE) ; Returns the last exam with comments
  1. NEW EXAM,DATE,RESULT,N,SUB,CNT,MAXLEN,COMM,TXT2,SUBCOUNT,SUBLINE
  1. K @TARGET
  1. S MAXLEN=60,CNT=0
  1. S SUB=$S($L(CODE)=2:"C",1:"B") ;was code or name sent
  1. S EXAM=$O(^AUTTEXAM(SUB,CODE,0)) I EXAM="" Q ""
  1. S DATE=$O(^AUPNVXAM("AA",+$G(DFN),EXAM,0)) I DATE="" Q "None Found"
  1. S RESULT="Date: "_$$FMTE^XLFDT(9999999-DATE,"D")
  1. S N=$O(^AUPNVXAM("AA",DFN,EXAM,DATE,0)) I 'N Q RESULT_" Results: No Results"
  1. S CNT=CNT+1
  1. S @TARGET@(CNT,0)=RESULT_" Results: "_$$GET1^DIQ(9000010.13,N,.04)
  1. S COMM=$$GET1^DIQ(9000010.13,N,81101)
  1. I $L(COMM)>MAXLEN D
  1. .S TXT2=$$WRAP^TIULS(COMM,MAXLEN)
  1. .F SUBCOUNT=1:1 S SUBLINE=$P(TXT2,"|",SUBCOUNT) Q:SUBLINE="" D ADD2(SUBLINE)
  1. E D ADD2(COMM)
  1. Q "~@"_$NA(@TARGET)
  1. ;
  1. ADD2(TXT) ;
  1. S CNT=CNT+1
  1. S @TARGET@(CNT,0)=TXT
  1. Q
  1. ; Returns true if V file is used for vital measurements
  1. VMSR() Q ''$$GET^XPAR("ALL","BEHOVM USE VMSR")
  1. PAD(DATA,LENGTH) ; -- SUBRTN to pad length of data
  1. Q $E(DATA_$$REPEAT^XLFSTR(" ",LENGTH),1,LENGTH)
  1. ;
  1. SP(NUM) ; -- SUBRTN to pad spaces
  1. Q $$PAD(" ",NUM)