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

LREGFR2.m

Go to the documentation of this file.
LREGFR2 ;DALOI/SDV/AH/GDU Calculate Creatinine-eGFR ;Nov 12, 2020@15:02
 ;;5.2;LAB SERVICES;**377,449,541**;Sep 27, 1994;Build 7
 ;
 ; Reference to EN^DDIOL supported by IA #10142
 ; Reference to $$GET1^DIQ supported by IA #2056
 ; Reference to DEM^VADPT supported by IA # 10061
 ; 
 ; This routine is a delta check for the lab test eGFR called by delta
 ; check CREATININE-EGFR. The eGFR test is calculated.
 ;
 ; Provided Data
 ;   DOB - Patient's date of birth
 ; LRDFN - entry in LAB DATA file
 ; LRIDT - inverse date/time of entry in LAB DATA file
 ;  LRNG - variable containing normals/units and delta check 
 ;  LRSB - dataname for creatinine result
 ;
STRT(DFN,LRTR) ; Start Processing the Routine
 ; Call with DFN = parent file ien
 ;          LRTR = serum creatinine value as mg/dl
 ;
 ; Do not calculate eGFR if called from group data review.
 I $D(LRGVP) Q
 ;
 N AGE,LRTN,LRDC,LRRC,LRX,LRY,SEX,X,Y
 ;
 ; Determine test to store eFGR
 S LRDC=$P(LRNG,"^",8),LRY=""
 S LRX=$$GET1^DIQ(62.1,LRDC_",",61.1,"I")
 I LRX S LRY=$$GET1^DIQ(60,LRX_",",5,"I")
 S LRTN=$P(LRY,";",2)
 I LRTN="" D  Q
 . D FILECOM^LRVR4(LRDFN,LRIDT,"For eGFR: **eGFR not Calculated - Delta check not configured**")
 ;
 ; Quit if creatinine unchanged and eGFR already calculated and not 'pending'.
 I $P($G(LRSB(LRSB)),"^")=LRTR,$P($G(LRSB(LRTN)),"^")'="",$P(LRSB(LRTN),"^")'="pending" Q
 ;
 ; Check for eGFR dataname in test editing profile.
 ; If creatinine changed and eGFR previously calculated then warn.
 I '$D(^TMP("LR",$J,"TMP",LRTN)) D  Q
 . I $P($G(LRSB(LRSB)),"^")=LRTR Q
 . I $P($G(^LR(LRDFN,"CH",LRIDT,LRTN)),"^")'="" D FILECOM^LRVR4(LRDFN,LRIDT,"For eGFR: **eGFR not in test editing profile - Creatinine Changed**")
 ;
 ; Calculate age based on specimen date/time
 S AGE=""
 I LRCDT,DOB S AGE=($$FMDIFF^XLFDT(LRCDT,DOB,1))\365.25
 I 'AGE D  Q
 . S $P(LRSB(LRTN),"^")="canc"
 . D FILECOM^LRVR4(LRDFN,LRIDT,"For eGFR: **eGFR not Calculated - No Age Recorded**")
 ;
 ;LR*5.2*541: Erroneous collection date precedes patient's DOB
 I AGE<0 D  Q
 . S $P(LRSB(LRTN),"^")="canc"
 . D FILECOM^LRVR4(LRDFN,LRIDT,"For eGFR: **eGFR not Calculated - Coll. Date Before Patient's DOB**")
 S SEX=""
 I LRDPF=2 S SEX=$P(VADM(5),U)
 I LRDPF=67 S SEX=$$GET1^DIQ(67,DFN_",",.02,"I")
 I LRDPF=67.1 S SEX=$$GET1^DIQ(67.1,DFN_",",2,"I")
 I SEX=""!("MF"'[SEX) D  Q
 . S $P(LRSB(LRTN),"^")="canc"
 . D FILECOM^LRVR4(LRDFN,LRIDT,"For eGFR: **eGFR not Calculated - No Sex Recorded**")
 ;
 ; Determine race
 S LRRC=$$RACE(DFN)
 ;
 ; Compute eGFR return-value
 ; Set user(DUZ) and site(DUZ(2) in case delta check calculated during
 ; entry of reference lab results. 
 I LRTR D
 . N LREGFR,LRX,PRMT
 . S LREGFR=175*(LRTR**-1.154)*(AGE**-.203)  ; Using a constant of 175. This is to support the updated creatinine methodology
 . I SEX="F" S LREGFR=LREGFR*.742
 . I LRRC=1 S LREGFR=LREGFR*1.21
 . I 'LREGFR Q
 . S LRX=+$$GET1^DID(63.04,LRTN,"","DECIMAL DEFAULT")
 . S $P(LRSB(LRTN),"^")=$FN(LREGFR,"",LRX)
 . S $P(LRSB(LRTN),"^",4)=$G(DUZ),$P(LRSB(LRTN),"^",9)=$G(DUZ(2))
 . I LRRC="U" D FILECOM^LRVR4(LRDFN,LRIDT,"For eGFR: Race unknown, if African American multiply result by 1.210")
 Q
 ;
 ;
RACE(DFN) ; Get Race
 ;  Call with DFN = ien of PATIENT file (#2)
 ;  Returns   XRC = 1 (African American)
 ;                  0 (non African American)
 ;                  U (unknown)
 ;
 N XA,XB,XC,XD,XE,XRC
 S XA="BLACK",XB="AFRICAN",XC="HISPANIC,",XD="UNKNOWN",XE="DECLINED"
 S XRC=""
 ;
 ; If patient from PATIENT file (#2).
 I LRDPF=2 D
 . N VADM
 . D DEM^VADPT
 . S XRC=$P($G(VADM(12,1)),U,2)
 . S:XRC="" XRC=$P($G(VADM(8)),U,2)
 ;
 ; If patient from REFERRAL file (#67).
 I LRDPF=67 D
 . S XRC=$$GET1^DIQ(67,DFN_",",.06)
 ;
 ; If race not defined then set to unknown.
 I XRC="" S XRC="U"
 ;
 ; If race contains "BLACK" or "AFRICAN" but not HISPANIC then return "1"
 I XRC[XA!(XRC[XB) I XRC'[XC S XRC=1
 ;
 ; If unknown or declined then return "U"
 I XRC[XD!(XRC[XE) S XRC="U"
 ; If not unknown or African-American then return "0"
 I XRC'=1,XRC'="U" S XRC=0
 Q XRC
 ;
 ;*************************************************************
 ;LR(E)stimated(G)lomerular(F)iltration(R)ate: LREGFR
 ;LR(T)est(N)ame:            LRTN
 ;        (R)esults:         LRTR
 ;LR(R)ace:                  LRRC
 ;
 ;*************************************************************
 ;*                      end of routine                       *
 ;*************************************************************