| [613] | 1 | LRDAGE ;DFW/MRL/DALOI/FHS - RETURN TIMEFRAME IN DAYS, MONTHS OR YEARS; 15 MAR 90 | 
|---|
|  | 2 | ;;5.2;LAB SERVICE;**279,302**;Sep 27, 1994 | 
|---|
|  | 3 | ;Adapted from IDAGE routine | 
|---|
|  | 4 | ;If period is under 31 days then format is nnd where d=days | 
|---|
|  | 5 | ;If period is under 2 years then format is nnm where m=month(s) | 
|---|
|  | 6 | ;In all other cases format is in nny where y=years | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | ;Entry point from patient file in VA FileManager | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | DFN(DFN,FILE,LRCDT) ; Call returns patient age based on specimen collection date | 
|---|
|  | 12 | ; Age is returned as day (dy) month (mo) or years (yr) | 
|---|
|  | 13 | ; DFN = IEN of patient | 
|---|
|  | 14 | ; FILE =  File number where patient is found | 
|---|
|  | 15 | ; LRCDT = Specimen collection date otherwise age will be calculated | 
|---|
|  | 16 | ; using the current date | 
|---|
|  | 17 | ; Sex is a coded value of Male = "M" (default) Female = "F" | 
|---|
|  | 18 | ; DOD = Date of Death | 
|---|
|  | 19 | N LRSAGE | 
|---|
|  | 20 | S:'$G(LRCDT) LRCDT=$$DT^XLFDT | 
|---|
|  | 21 | S LRCDT=$P(LRCDT,".") | 
|---|
|  | 22 | S SEX="M",AGE="99yr" | 
|---|
|  | 23 | D GETS^DIQ(FILE,DFN_",",".02;.03;.351","IE","LRSAGE") | 
|---|
|  | 24 | S SEX=$G(LRSAGE(FILE,DFN_",",.02,"I")) S:$L(SEX)="" SEX="M" | 
|---|
|  | 25 | S DOB=$G(LRSAGE(FILE,DFN_",",.03,"I")) I '$G(DOB) Q | 
|---|
|  | 26 | S DOD=$G(LRSAGE(FILE,DFN_",",.351,"I")) | 
|---|
|  | 27 | S AGE=$$DATE(DOB,LRCDT) | 
|---|
|  | 28 | Q | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | DATE(DOB,LRCDT) ;Entry point if passing only a valid Date without patient | 
|---|
|  | 31 | ;  Dates must be defined in VA FileManager internal format. | 
|---|
|  | 32 | ;   DOB, Date of birth | 
|---|
|  | 33 | ;   LRCDT = collection date | 
|---|
|  | 34 | ; Date formate error will return 99yr | 
|---|
|  | 35 | N X,Y,%DT | 
|---|
|  | 36 | I '$G(LRCDT) S LRCDT=$$DT^XLFDT | 
|---|
|  | 37 | S DOB=$P(DOB,".") | 
|---|
|  | 38 | I '$G(DOB) Q "99yr"  ;no DOB passed | 
|---|
|  | 39 | S X=DOB,LRCDT=$P(LRCDT,".") | 
|---|
|  | 40 | I $S(DOB'=+DOB:1,LRCDT'=+LRCDT:1,1:0) Q "99yr" | 
|---|
|  | 41 | I $S(DOB'?7N.NE:1,LRCDT'?7N.NE:1,1:0) Q "99yr" | 
|---|
|  | 42 | D ^%DT I Y'>0 Q "99yr"  ;invalid date | 
|---|
|  | 43 | S X=LRCDT | 
|---|
|  | 44 | K %DT D ^%DT I Y'>0 Q "99yr"  ;invalid date | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | CALC ;Calculate timeframe based on difference between DOB and collection | 
|---|
|  | 47 | ; date. Time is stripped off. | 
|---|
|  | 48 | ; .0001-24 hour = dy | 
|---|
|  | 49 | ; 0-29 days = dy | 
|---|
|  | 50 | ; 30-730 dy = mo | 
|---|
|  | 51 | ; >24 mo = yr | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | I DOB>LRCDT Q "99yr" | 
|---|
|  | 54 | I DOB=LRCDT Q "1dy"  ;same dates---pass 1 day old | 
|---|
|  | 55 | S X=$E(LRCDT,1,3)-$E(DOB,1,3)-($E(LRCDT,4,7)<$E(DOB,4,7)) | 
|---|
|  | 56 | I X>1 S X=+X_"yr" Q X   ;age 2 years or more---pass in years | 
|---|
|  | 57 | S X=$$FMDIFF^XLFDT(LRCDT,DOB,1) | 
|---|
|  | 58 | I X>30 S X=X\30_"mo" Q X  ;over 30 days---pass in months | 
|---|
|  | 59 | E  S X=X_"dy" Q X  ;under 31 days---pass in days | 
|---|
|  | 60 | Q "99yr" | 
|---|