| [613] | 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 | 
|---|