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

GMVHS1.m

Go to the documentation of this file.
  1. GMVHS1 ;HIOFO/FT-RETURN PATIENT DATA UTILITY (cont.) ;10/3/07
  1. ;;5.0;GEN. MED. REC. - VITALS;**3,23**;Oct 31, 2002;Build 25
  1. ;
  1. ; This routine uses the following IAs:
  1. ; #4290 - ^PXRMINDX global (controlled)
  1. ;
  1. CALCBMI(GMVNODE) ; Calculate BMI for a record
  1. ; GMVNODE = FILE 120.5 zero node of patient's weight
  1. N GMVADATE,GMVAHGT,GMVBDATE,GMVBHGT,GMVBMI,GMVDFN,GMVH,GMVHTI,GMVIEN,GMVHGT,GMVWDATE,GMVWTI
  1. S GMVHTI=$$GETTYPEI^GMVHS("HT") ;height ien
  1. S GMVWTI=$$GETTYPEI^GMVHS("WT") ;weight ien
  1. S GMVBMI="^",GMVNODE=$G(GMVNODE)
  1. I $P(GMVNODE,U,3)'=GMVWTI Q GMVBMI ;not a weight reading
  1. I $P(GMVNODE,U,8)'>0 Q GMVBMI ;weight'>0
  1. S GMVDFN=$P(GMVNODE,U,2)
  1. I 'GMVDFN Q GMVBMI
  1. S GMVWDATE=$P(GMVNODE,U,1) ;date/time of weight
  1. S GMVHGT=0
  1. ; Look for exact date/time match for height entry
  1. S GMVIEN=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVHTI,GMVWDATE,0))
  1. I GMVIEN'="" S GMVHGT=$$HEIGHT(GMVIEN)
  1. I $P(GMVHGT,U,1) S GMVBMI=$$CALC($P(GMVNODE,U,8),$P(GMVHGT,U,1)) Q GMVBMI
  1. ; get height and date/time taken before weight
  1. S GMVBDATE=GMVWDATE,GMVBHGT=0
  1. F S GMVBDATE=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVHTI,GMVBDATE),-1) Q:GMVBDATE'>0!(+GMVBHGT) D
  1. .S GMVIEN=0
  1. .F S GMVIEN=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVHTI,GMVBDATE,GMVIEN)) Q:$L(GMVIEN)'>0!(+GMVBHGT) D
  1. ..S GMVBHGT=$$HEIGHT(GMVIEN)
  1. ..Q
  1. .Q
  1. ; get height and date/time taken after weight
  1. S GMVADATE=GMVWDATE,GMVAHGT=0
  1. F S GMVADATE=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVHTI,GMVADATE)) Q:GMVADATE'>0!(+GMVAHGT) D
  1. .S GMVIEN=0
  1. .F S GMVIEN=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVHTI,GMVADATE,GMVIEN)) Q:$L(GMVIEN)'>0!(+GMVAHGT) D
  1. ..S GMVAHGT=$$HEIGHT(GMVIEN)
  1. ..Q
  1. .Q
  1. S GMVBDATE=$P(GMVBHGT,U,2),GMVBHGT=$P(GMVBHGT,U,1)
  1. S GMVADATE=$P(GMVAHGT,U,2),GMVAHGT=$P(GMVAHGT,U,1)
  1. I $P(GMVBDATE,".",1)=$P(GMVWDATE,".",1) S GMVBMI=$$CALC($P(GMVNODE,U,8),GMVBHGT) Q GMVBMI
  1. I $P(GMVADATE,".",1)=$P(GMVWDATE,".",1) S GMVBMI=$$CALC($P(GMVNODE,U,8),GMVAHGT) Q GMVBMI
  1. S GMVH=$S(GMVBHGT>0:GMVBHGT,GMVAHGT>0:GMVAHGT,1:"")
  1. I GMVH="" Q GMVBMI
  1. S GMVBMI=$$CALC($P(GMVNODE,U,8),GMVH) Q GMVBMI
  1. Q GMVBMI
  1. ;
  1. HEIGHT(GMVIEN) ; Does record have a useable height value? Is yes, return that value.
  1. ; GMVIEN = File 120.5 entry number
  1. N GMVCLIO,GMVX
  1. S GMVIEN=$G(GMVIEN),GMVX=0
  1. I GMVIEN=+GMVIEN D
  1. .D F1205^GMVUTL(.GMVCLIO,GMVIEN)
  1. I GMVIEN'=+GMVIEN D
  1. .D CLIO^GMVUTL(.GMVCLIO,GMVIEN)
  1. S GMVCLIO(0)=$G(GMVCLIO(0))
  1. S GMVX=$P(GMVCLIO(0),U,8)
  1. I GMVX'>0 Q GMVX
  1. S GMVX=GMVX_U_$P(GMVCLIO(0),U,1)
  1. Q GMVX
  1. ;
  1. CALC(GMVWT,GMVHT) ; Crunch the numbers, return bmi score
  1. ; GMVWT (lb)
  1. ; GMVHT (in)
  1. N GMVX
  1. S GMVWT=$G(GMVWT),GMVHT=$G(GMVHT)
  1. I 'GMVWT!(GMVHT'>0) Q ""
  1. S GMVWT=GMVWT/2.2,GMVHT=GMVHT*2.54/100
  1. S GMVX=$J(GMVWT/(GMVHT*GMVHT),0,0) S GMVX=GMVX_$S(GMVX>27:"*",1:"")
  1. Q GMVX
  1. ;
  1. ABNORMAL ; Is reading outside of normal range?
  1. N GMVASTRK,GMVDIA,GMVSYS
  1. S GMVASTRK=""
  1. I GMVTYPE="T" D
  1. .S:GMVRATE>$P(GMVABNML("T"),U,1) GMVASTRK="*"
  1. .S:GMVRATE<$P(GMVABNML("T"),U,2) GMVASTRK="*"
  1. .Q
  1. I GMVTYPE="P" D
  1. .S:GMVRATE>$P(GMVABNML("P"),U,1) GMVASTRK="*"
  1. .S:GMVRATE<$P(GMVABNML("P"),U,2) GMVASTRK="*"
  1. .Q
  1. I GMVTYPE="R" D
  1. .S:GMVRATE>$P(GMVABNML("R"),U,1) GMVASTRK="*"
  1. .S:GMVRATE<$P(GMVABNML("R"),U,2) GMVASTRK="*"
  1. .Q
  1. I GMVTYPE="BP" D
  1. .S GMVSYS=$P(GMVRATE,"/",1)
  1. .S GMVDIA=$S($P(GMVRATE,"/",3)="":$P(GMVRATE,"/",2),1:$P(GMVRATE,"/",3))
  1. .S:GMVSYS>$P(GMVABNML("BP"),U,1) GMVASTRK="*"
  1. .S:GMVSYS<$P(GMVABNML("BP"),U,2) GMVASTRK="*"
  1. .S:GMVDIA>$P(GMVABNML("BP"),U,3) GMVASTRK="*"
  1. .S:GMVDIA<$P(GMVABNML("BP"),U,4) GMVASTRK="*"
  1. .Q
  1. I GMVTYPE="CVP" D
  1. .S:GMVRATE>$P(GMVABNML("CVP"),U,1) GMVASTRK="*"
  1. .S:GMVRATE<$P(GMVABNML("CVP"),U,2) GMVASTRK="*"
  1. .Q
  1. I GMVTYPE="PO2" D
  1. .S:GMVRATE<$P(GMVABNML("PO2"),U,2) GMVASTRK="*"
  1. .Q
  1. S $P(GMVDATA,U,12)=GMVASTRK
  1. Q
  1. TEXT(RATE) ; Is rate a text code?
  1. ; Returns 0 if RATE has a text code and 1 if a numeric reading
  1. N GMVYES
  1. S RATE=$G(RATE),GMVYES=1
  1. I "REFUSEDPASSUNAVAILABLE"[$$UP^XLFSTR(RATE) S GMVYES=0
  1. Q GMVYES
  1. ;
  1. RANGE ; Find normal ranges and store in array
  1. N GMVPIEN,GMVPNODE
  1. S GMVABNML("T")="0^0" ;high^low
  1. S GMVABNML("P")="0^0" ;high^low
  1. S GMVABNML("R")="0^0" ;high^low
  1. S GMVABNML("CVP")="0^0" ;high^low
  1. S GMVABNML("PO2")="0^0" ;low
  1. S GMVABNML("BP")="0^0^0^0" ;sys high^sys low^dia high^dia low
  1. S GMVPIEN=$O(^GMRD(120.57,0))
  1. Q:'GMVPIEN
  1. S GMVPNODE=$G(^GMRD(120.57,GMVPIEN,1))
  1. S GMVABNML("T")=$P(GMVPNODE,U,1)_U_$P(GMVPNODE,U,2)
  1. S GMVABNML("P")=$P(GMVPNODE,U,3)_U_$P(GMVPNODE,U,4)
  1. S GMVABNML("R")=$P(GMVPNODE,U,5)_U_$P(GMVPNODE,U,6)
  1. S GMVABNML("BP")=$P(GMVPNODE,U,7)_U_$P(GMVPNODE,U,9)_U_$P(GMVPNODE,U,8)_U_$P(GMVPNODE,U,10)
  1. S GMVABNML("CVP")=$P(GMVPNODE,U,11)_U_$P(GMVPNODE,U,12)
  1. S GMVABNML("PO2")=""_U_$P(GMVPNODE,U,13)
  1. Q