| 1 | LRRPU ;DALOI/JMC - Interim Report Results Utility ; May 10, 2004 0900
 | 
|---|
| 2 |  ;;5.2;LAB SERVICE;**286**;Sep 27, 1994
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | TSTRES(LRDFN,LRSS,LRIDT,LRDN,LR60,LRCODE) ; Test results and parameters
 | 
|---|
| 6 |  ; Call with LRDFN = ien of entry in file #63
 | 
|---|
| 7 |  ;            LRSS = subscript in file #63, currently only "CH" supported
 | 
|---|
| 8 |  ;           LRIDT = inverse date/time of result
 | 
|---|
| 9 |  ;            LRDN = ien of data name in "CH" subscript
 | 
|---|
| 10 |  ;            LR60 = pointer to file 60 test related to this dataname (optional)
 | 
|---|
| 11 |  ;          LRCODE = 1 - return NLT/LOINC codes (optional)
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; Returns
 | 
|---|
| 14 |  ;  LRY = result^normalcy flag^reference low^reference high^units^performing lab (file #4 ien)^therapeutic normal used (0=no/1=yes)^NLT order code;NLT name!NLT result code;NLT name!LOINC result code;LOINC name^performing user (DUZ)^EII
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  N LRFLAG,LRNR,LRX,LRY,X,Y
 | 
|---|
| 17 |  S LRX=$G(^LR(LRDFN,LRSS,LRIDT,LRDN))
 | 
|---|
| 18 |  S LRY=$P(LRX,"^",1,2),$P(LRY,"^",7)=0
 | 
|---|
| 19 |  I LRSS="CH",$$GET1^DID(63.04,LRDN,"","TYPE")="SET" D
 | 
|---|
| 20 |  . S X=$$EXTERNAL^DILFD(63.04,LRDN,"",$P(LRY,"^"))
 | 
|---|
| 21 |  . I X'="" S $P(LRY,"^")=X
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ; Check for units/ranges stored in file #63
 | 
|---|
| 24 |  ; If flag (NPC>1) indicates units/ranges are stored but pieces 5-12
 | 
|---|
| 25 |  ; are null then use values from file #60 - some class III software
 | 
|---|
| 26 |  ; still does not store this info in file #63 when NPC>1.
 | 
|---|
| 27 |  S LRFLAG=0,LRNR=$TR($P(LRX,"^",5),"!","^")
 | 
|---|
| 28 |  I $G(^LR(LRDFN,LRSS,LRIDT,"NPC"))>1,$P(LRX,"^",5,12)'="" S LRFLAG=1
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  I LRFLAG D
 | 
|---|
| 31 |  . I $P(LRNR,"^",11)="",$P(LRNR,"^",12)="" S $P(LRY,"^",3,4)=$P(LRNR,"^",2,3)
 | 
|---|
| 32 |  . E  S $P(LRY,"^",3,4)=$P(LRNR,"^",11,12),$P(LRY,"^",7)=1
 | 
|---|
| 33 |  . S $P(LRY,"^",5)=$P(LRNR,"^",7)
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ; If no units/ranges (LRFLAG=0) then use file 60
 | 
|---|
| 36 |  ; values to determine reference ranges
 | 
|---|
| 37 |  ; If no therapeutic normals then return reference normals
 | 
|---|
| 38 |  ; Need to handle age and sex in normals from file #60
 | 
|---|
| 39 |  I 'LRFLAG D
 | 
|---|
| 40 |  . N AGE,DOB,LR61,LRCDT,LRDPF,LRLO,LRHI,LRTLO,LRTHI,SEX,X
 | 
|---|
| 41 |  . S LRDPF=$P(^LR(LRDFN,0),U,2),DFN=$P(^(0),U,3)
 | 
|---|
| 42 |  . S X=$G(^LR(LRDFN,LRSS,LRIDT,0)),LRCDT=$P(X,"^"),LR61=+$P(X,"^",5)
 | 
|---|
| 43 |  . S X=$$ROOT^DILFD(+LRDPF)
 | 
|---|
| 44 |  . S SEX=$P($G(@(X_+DFN_",0)")),"^",2),DOB=$P($G(@(X_+DFN_",0)")),"^",3)
 | 
|---|
| 45 |  . S AGE=$$CALCAGE(DOB,LRCDT)
 | 
|---|
| 46 |  . I '$G(LR60) S LR60=+$O(^LAB(60,"C","CH;"_LRDN_";1",0))
 | 
|---|
| 47 |  . S X=$G(^LAB(60,LR60,1,LR61,0)) Q:X=""
 | 
|---|
| 48 |  . S $P(LRY,"^",5)=$P(X,"^",7)
 | 
|---|
| 49 |  . S LRLO=$P(X,U,2),LRHI=$P(X,U,3),LRTLO=$P(X,U,11),LRTHI=$P(X,U,12)
 | 
|---|
| 50 |  . I LRTLO="",LRTHI="" D  Q
 | 
|---|
| 51 |  . . I LRLO'="" S @("LRLO="_LRLO)
 | 
|---|
| 52 |  . . I LRHI'="" S @("LRHI="_LRHI)
 | 
|---|
| 53 |  . . S $P(LRY,"^",3)=LRLO,$P(LRY,"^",4)=LRHI
 | 
|---|
| 54 |  . I LRTLO'="" S @("LRTLO="_LRTLO)
 | 
|---|
| 55 |  . I LRTHI'="" S @("LRTHI="_LRTHI)
 | 
|---|
| 56 |  . S $P(LRY,"^",3)=LRTLO,$P(LRY,"^",4)=LRTHI,$P(LRY,"^",7)=1
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ; Remove leading/trailing quotes from normals.
 | 
|---|
| 59 |  I $P(LRY,"^",3)[$C(34) S $P(LRY,"^",3)=$$TRIM^XLFSTR($P(LRY,"^",3),"LR",$C(34))
 | 
|---|
| 60 |  I $P(LRY,"^",4)[$C(34) S $P(LRY,"^",4)=$$TRIM^XLFSTR($P(LRY,"^",4),"LR",$C(34))
 | 
|---|
| 61 |  ; Performing laboratory
 | 
|---|
| 62 |  S $P(LRY,"^",6)=$P(LRX,"^",9)
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  ; Return NLT/LOINC codes
 | 
|---|
| 65 |  I $G(LRCODE)=1 D
 | 
|---|
| 66 |  . N LR64
 | 
|---|
| 67 |  . S X=$P($P(LRX,"^",3),"!",1,3)
 | 
|---|
| 68 |  . F I=1,2 I $P(X,"!",I)'="" D
 | 
|---|
| 69 |  . . S LR64=$O(^LAM("E",$P(X,"!",I),0)),Y=""
 | 
|---|
| 70 |  . . I LR64 S Y=$$GET1^DIQ(64,LR64_",",.01,"I")
 | 
|---|
| 71 |  . . I Y'="",Y["!" S Y=$TR(Y,"!","*")
 | 
|---|
| 72 |  . . S $P(X,"!",I)=$P(X,"!",I)_";"_Y
 | 
|---|
| 73 |  . I $P(X,"!",3)'="" D
 | 
|---|
| 74 |  . . S Y=$$GET1^DIQ(95.3,$P(X,"!",3)_",",.01)
 | 
|---|
| 75 |  . . S Y(0)=$$GET1^DIQ(95.3,$P(X,"!",3)_",",80)
 | 
|---|
| 76 |  . . I Y(0)["!" S Y(0)=$TR(Y(0),"!","*")
 | 
|---|
| 77 |  . . S $P(X,"!",3)=Y_";"_Y(0)
 | 
|---|
| 78 |  . S $P(LRY,"^",8)=X
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ; Performing user
 | 
|---|
| 81 |  S $P(LRY,"^",9)=$P(LRX,"^",4)
 | 
|---|
| 82 |  ; EII - Equipment instance Identifier
 | 
|---|
| 83 |  S $P(LRY,"^",10)=$P(LRX,"^",11)
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  Q LRY
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | CALCAGE(DOB,LRCDT) ; Calculate age based on difference between DOB and collection date.
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ; Call with DOB = patient date of birth
 | 
|---|
| 91 |  ;         LRCDT = specimen collection date
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  ; Returns   AGE = patient's age in years at time of specimen collection
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  I $T(DATE^LRDAGE)'="" Q $$DATE^LRDAGE(DOB,LRCDT)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  S AGE=99
 | 
|---|
| 98 |  I DOB>2000000,LRCDT>2000000,DOB'>LRCDT S X=$$FMDIFF^XLFDT(LRCDT,DOB,1),AGE=X\365.25
 | 
|---|
| 99 |  Q AGE
 | 
|---|