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
|
---|