LR7OR4 ;slc/dcm - Get Lab TEST Info ;8/11/97
 ;;5.2;LAB SERVICE;**256,356**;Sep 27, 1994;Build 8
 ;Entry points:  EN
GET(TEST) ;Get TEST ifn
 I '$D(TEST) Q ""
 I TEST'?1N.N S TEST=$O(^LAB(60,"B",TEST,0)) Q:'TEST ""
 I TEST?1N.N Q:'$D(^LAB(60,TEST)) ""
 Q TEST
ONE(Y,TEST) ;Gets parameters for one test
 N CNT
 Q:'$L($G(TEST))
 S CNT=0,TEST=+TEST
 D EN
 Q
ALL(Y,TESTS) ;Gets Lab Test ordering parameters from file 60
 ;TEST=Lab TEST (can be either name or internal #)
 N I,CNT
 Q:'$O(TESTS(0))
 S (I,CNT)=0
 F  S I=$O(TESTS(I)) Q:'I  S TEST=+TESTS(I) D EN S CNT=CNT+1,Y(CNT)="---------------------"
 Q
EN Q:'$D(TEST)
 N X0
 S TEST=$$GET(TEST) Q:'TEST
 S X0=^LAB(60,TEST,0),CNT=CNT+1,Y(CNT)=$P(X0,"^",1)
 I $L($P(X0,"^",11)) S Y(CNT)=Y(CNT)_"   $"_$J($P(X0,"^",11),4,2)
 D URG
 D GCOM
 I $P(X0,"^",8),$O(^LAB(60,TEST,3,0)) S X=$G(^($O(^(0)),0)),CNT=CNT+1,Y(CNT)="Unique collection sample: "_$$SAMP(+X) ;$P($G(^LAB(62,+X,0)),"^")
 I $P(X0,"^",9) S I=0 F  S I=$O(^LAB(60,TEST,3,I)) Q:I<1  S X=+^(I,0) I X=$P(X0,"^",9) S CNT=CNT+1,Y(CNT)="Lab collect sample: "_$$SAMP(X) Q  ;$P($G(^LAB(62,X,0)),"^") Q
 ;I $O(^LAB(60,TEST,3,0)) S X=$G(^($O(^(0)),0)),CNT=CNT+1,Y(CNT)="Default collection sample: "_$P($G(^LAB(62,+X,0)),"^")
 D COLL,SUB
 Q
COLL ;Get Collection Sample-Specimen data
 N I,J,X,SAMP,SPEC,CHK
 S I=0
 F  S I=$O(^LAB(60,TEST,3,I)) Q:I<1  S X=^(I,0) D
 . S CNT=CNT+1,Y(CNT)="Collection sample: "_$$SAMP(X,$P(X0,"^",19))
 . I $L($P(X,"^",2)) S CNT=CNT+1,Y(CNT)="     Form name/number: "_$P(X,"^",2)
 . I $L($P(X,"^",4)) S CNT=CNT+1,Y(CNT)="     Minimum volume (in mls): "_$P(X,"^",4)
 . I $L($P(X,"^",5)) S CNT=CNT+1,Y(CNT)="     Maximum order frequency: "_$P(X,"^",5)
 . I $L($P(X,"^",7)) S CNT=CNT+1,Y(CNT)="     Maximum daily order frequency: "_$P(X,"^",7)
 . I $O(^LAB(60,TEST,3,I,1,0)) S CNT=CNT+1,Y(CNT)="     Collection sample instructions: " D
 .. S J=0 F  S J=$O(^LAB(60,TEST,3,I,1,J)) Q:J<1  S CNT=CNT+1,Y(CNT)="          "_^(J,0)
 ;. I $O(^LAB(60,TEST,3,I,2,0)) S CNT=CNT+1,Y(CNT)="     Collection sample LAB processing instructions: " D
 ;.. S J=0 F  S J=$O(^LAB(60,TEST,3,I,2,J)) Q:J<1  S CNT=CNT+1,Y(CNT)="          "_^(J,0)
 S I=0
 F  S I=$O(^LAB(60,TEST,1,I)) Q:I<1  S X=^(I,0) D
 . S CNT=CNT+1,Y(CNT)="Site/Specimen: "_$P($G(^LAB(61,+X,0)),"^")
 . I $L($P(X,"^",2,3))>1 D CRRV("Reference range",$P(X,"^",2,3))
 . I $L($P(X,"^",11,12))>1 D CRRV("Therapeutic range",$P(X,"^",11,12))
 . I $L($P(X,"^",4,5))>1 D CRRV("Critical",$P(X,"^",4,5))
 . I $L($P(X,"^",7)) S CNT=CNT+1,Y(CNT)="     Units: "_$P(X,"^",7)
 . I $O(^LAB(60,TEST,1,I,1,0)) S CNT=CNT+1,Y(CNT)="     Interpretation: "
 . S J=0 F  S J=$O(^LAB(60,TEST,1,I,1,J)) Q:'J  S X=^(J,0),CNT=CNT+1,Y(CNT)="          "_X
 Q
URG ;Get Urgency params for TEST
 N I,X,URG
 I $P(X0,"^",18) S CNT=CNT+1,Y(CNT)="Default urgency: "_$P($G(^LAB(62.05,+$P(X0,"^",18),0)),"^")
 I $P(X0,"^",16) S CNT=CNT+1,Y(CNT)="Highest urgency allowed: "_$P($G(^LAB(62.05,+$P(X0,"^",16),0)),"^")
 Q
SAMP(X,REQ) ;Build Collection Sample data
 ;X=zero node from ^LAB(60,TEST,3,ifn,0) or ptr to 62
 ;REQ=Required comment from $P(^LAB(60,TEST,0),"^",19)
 N X0,Y1
 Q:'$D(^LAB(62,+X,0)) "" S X0=^(0)
 ;S REQ=$S($P(X,"^",6):$P(X,"^",6),$G(REQ):REQ,1:""),REQ=$S(REQ:$P($G(^LAB(62.07,REQ,0)),"^"),1:"")
 ;S Y1=+X_"^"_$P(X0,"^")_"^"_$P(X0,"^",2)_"^"_$P(X0,"^",3)_"^"_$P(X,"^",5)_"^"_$P(X,"^",7)_"^"_$P(X0,"^",7)_"^"_REQ
 S Y1=$P(X0,"^")_"  "_$P(X0,"^",3)
 Q Y1
GCOM ;Get General Ward & Lab Instructions
 ;TEST=ptr to TEST in file 60
 N I
 S I=0
 I $O(^LAB(60,+$G(TEST),6,0)) S CNT=CNT+1,Y(CNT)="General instructions: "
 F  S I=$O(^LAB(60,TEST,6,I)) Q:'I  S CNT=CNT+1,Y(CNT)="     "_^(I,0)
 S I=0
 ;I $O(^LAB(60,+$G(TEST),7,0)) S CNT=CNT+1,Y(CNT)="General LAB processing instructions: "
 ;F  S I=$O(^LAB(60,TEST,7,I)) Q:'I  S CNT=CNT+1,Y(CNT)="     "_^(I,0)
 Q
SUB ;Tests in panel
 N I
 S I=0
 I $O(^LAB(60,+$G(TEST),2,0)) S I=0,CNT=CNT+1,Y(CNT)="Tests included in panel: "
 F  S I=$O(^LAB(60,TEST,2,I)) Q:'I  S X=^(I,0),CNT=CNT+1,Y(CNT)="     "_$P($G(^LAB(60,+X,0)),"^")
 Q
 ;Added to support LR*5.2*356, PSI-06-025
CRRV(RT,RV) ;Convert Referance Range Values - convert embedded M code into a more readable format
 ;Variables passed in:
 ;RT - Refereance range Text
 ;RV - Refereance range Value
 ;       1st piece holds low value
 ;       2nd piece holds high value
 ;Routine variables
 ;Y() - The return array with the lab test information
 ;CNT - The counter variable used to create nodes in the Y array variable
 ;Local variables
 ;SP5 - 5 embedded spaces for output alinement
 ;SP10 - 10 embedded spaces for output alinement
 ;X - Work variable
 N SP5,SP10,X
 S SP5="     ",SP10=SP5_SP5,X=""
 I RV'["$S(" D  Q
 . I $L($P(RV,"^")),'$L($P(RV,"^",2)),$P(RV,"^")?.ANP S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^")?.N:" low : "_$TR($P(RV,"^"),""""),1:"  : "_$TR($P(RV,"^"),"""")) Q
 . I '$L($P(RV,"^")),$L($P(RV,"^",2)),$P(RV,"^",2)?.ANP S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^",2)?.N:" high : "_$TR($P(RV,"^",2),""""),1:" : "_$TR($P(RV,"^",2),"""")) Q
 . I $L($P(RV,"^")) S CNT=CNT+1,Y(CNT)=SP5_RT_" low  : "_$TR($P(RV,"^"),"""")
 . I $L($P(RV,"^",2)) S CNT=CNT+1,Y(CNT)=SP5_RT_" high : "_$TR($P(RV,"^",2),"""")
 . ;I $L($P(RV,"^")) S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^")?.AP:" : "_$TR($P(RV,"^"),""""),1:" low  : "_$TR($P(RV,"^"),""""))
 . ;I $L($P(RV,"^",2)) S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^",2)?.AP:" : "_$TR($P(RV,"^",2),""""),1:" high : "_$TR($P(RV,"^",2),""""))
 I RV["SEX" D  Q
 . I RV["AGE" S CNT=CNT+1,Y(CNT)=SP5_RT_" - Age and sex dependent range values, please contact lab for specifics." Q
 . S CNT=CNT+1,Y(CNT)=SP5_RT
 . I $L($$GSV($P(RV,"^"),"M")) S CNT=CNT+1,Y(CNT)=SP10_"Male "_$S($$GSV($P(RV,"^"),"M")?.AP:": "_$TR($$GSV($P(RV,"^"),"M"),""""),1:"low  : "_$TR($$GSV($P(RV,"^"),"M"),""""))
 . I $L($$GSV($P(RV,"^",2),"M")) S CNT=CNT+1,Y(CNT)=SP10_"Male "_$S($$GSV($P(RV,"^",2),"M")?.AP:$TR($$GSV($P(RV,"^",2),"M"),""""),1:"high : "_$TR($$GSV($P(RV,"^",2),"M"),""""))
 . I $L($$GSV($P(RV,"^"),"F")) S CNT=CNT+1,Y(CNT)=SP10_"Female "_$S($$GSV($P(RV,"^"),"F")?.AP:": "_$TR($$GSV($P(RV,"^"),"F"),""""),1:"low  : "_$TR($$GSV($P(RV,"^"),"F"),""""))
 . I $L($$GSV($P(RV,"^",2),"F")) S CNT=CNT+1,Y(CNT)=SP10_"Female "_$S($$GSV($P(RV,"^",2),"F")?.AP:$TR($$GSV($P(RV,"^",2),"F"),""""),1:"high : "_$TR($$GSV($P(RV,"^",2),"F"),""""))
 I RV["AGE" D  Q
 . S CNT=CNT+1,Y(CNT)=SP5_RT
 . I $L($P(RV,"^")) D FAVO($P(RV,"^"),"low")
 . I $L($P(RV,"^",2)) D FAVO($P(RV,"^",2),"high")
GSV(X,SEX) ;Get Sex Value
 ;Variables passed in:
 ;X - Work variable low/high range value
 ;SEX - Patient's sex
 ;Subroutine variables:
 ;X1 - Return value variable with the resolved low/high value
 N X1
 S @("X1="_$S($L(X):X,1:""""""))
 Q X1
FAVO(X,HL) ;Format Age Value Output
 ;Variables passed in:
 ;X - Work variable with low/high range value
 ;HL - This will be for either a low or high reference range
 ;Subroutine variables:
 ;AT0 - Common text for output
 ;AT1 - Embedded M code tested for 
 ;AT2 - Text description for embedded M code for output
 ;IO  - Counter to piece the low/high range value
 ;I1  - Counter to reformat the embedded M code
 ;SP10 - 10 embedded spaces for output alinement
 ;X0,X1,X2  - Work variables used in converting the low/high range value
 N AT0,AT1,AT2,I0,I1,SP10,X0,X1,X2
 S AT0="If Age is "
 S AT1="",AT1(1)="AGE<",AT1(2)="AGE>",AT1(3)="AGE'<",AT1(4)="AGE'>",AT1(5)="AGE="
 S AT2="",AT2(1)="less than ",AT2(2)="greater than "
 S AT2(3)="not less than ",AT2(4)="not greater than ",AT2(5)="equal to "
 S SP10="          "
 S X0=$E(X,4,$L(X)-1),(X1,X2)=""
 F I0=1:1 S X1=$P(X0,",",I0) Q:X1=""  D
 . I $P(X1,":")=1 S X2=SP10_"Default "_HL_": "_$P(X1,":",2),CNT=CNT+1,Y(CNT)=$TR(X2,"""")
 . E  D
 . . F I1=1:1:5 I $P(X1,":")[AT1(I1) S X2=SP10_AT0_AT2(I1)_$E($P(X1,":"),$L(AT1(I1))+1,$L($P(X1,":")))_" the "_HL_" is "_$P(X1,":",2),CNT=CNT+1,Y(CNT)=$TR(X2,"""")
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLR7OR4   7961     printed  Sep 23, 2025@19:41:01                                                                                                                                                                                                      Page 2
LR7OR4    ;slc/dcm - Get Lab TEST Info ;8/11/97
 +1       ;;5.2;LAB SERVICE;**256,356**;Sep 27, 1994;Build 8
 +2       ;Entry points:  EN
GET(TEST) ;Get TEST ifn
 +1        IF '$DATA(TEST)
               QUIT ""
 +2        IF TEST'?1N.N
               SET TEST=$ORDER(^LAB(60,"B",TEST,0))
               if 'TEST
                   QUIT ""
 +3        IF TEST?1N.N
               if '$DATA(^LAB(60,TEST))
                   QUIT ""
 +4        QUIT TEST
ONE(Y,TEST) ;Gets parameters for one test
 +1        NEW CNT
 +2        if '$LENGTH($GET(TEST))
               QUIT 
 +3        SET CNT=0
           SET TEST=+TEST
 +4        DO EN
 +5        QUIT 
ALL(Y,TESTS) ;Gets Lab Test ordering parameters from file 60
 +1       ;TEST=Lab TEST (can be either name or internal #)
 +2        NEW I,CNT
 +3        if '$ORDER(TESTS(0))
               QUIT 
 +4        SET (I,CNT)=0
 +5        FOR 
               SET I=$ORDER(TESTS(I))
               if 'I
                   QUIT 
               SET TEST=+TESTS(I)
               DO EN
               SET CNT=CNT+1
               SET Y(CNT)="---------------------"
 +6        QUIT 
EN         if '$DATA(TEST)
               QUIT 
 +1        NEW X0
 +2        SET TEST=$$GET(TEST)
           if 'TEST
               QUIT 
 +3        SET X0=^LAB(60,TEST,0)
           SET CNT=CNT+1
           SET Y(CNT)=$PIECE(X0,"^",1)
 +4        IF $LENGTH($PIECE(X0,"^",11))
               SET Y(CNT)=Y(CNT)_"   $"_$JUSTIFY($PIECE(X0,"^",11),4,2)
 +5        DO URG
 +6        DO GCOM
 +7       ;$P($G(^LAB(62,+X,0)),"^")
           IF $PIECE(X0,"^",8)
               IF $ORDER(^LAB(60,TEST,3,0))
                   SET X=$GET(^($ORDER(^(0)),0))
                   SET CNT=CNT+1
                   SET Y(CNT)="Unique collection sample: "_$$SAMP(+X)
 +8       ;$P($G(^LAB(62,X,0)),"^") Q
           IF $PIECE(X0,"^",9)
               SET I=0
               FOR 
                   SET I=$ORDER(^LAB(60,TEST,3,I))
                   if I<1
                       QUIT 
                   SET X=+^(I,0)
                   IF X=$PIECE(X0,"^",9)
                       SET CNT=CNT+1
                       SET Y(CNT)="Lab collect sample: "_$$SAMP(X)
                       QUIT 
 +9       ;I $O(^LAB(60,TEST,3,0)) S X=$G(^($O(^(0)),0)),CNT=CNT+1,Y(CNT)="Default collection sample: "_$P($G(^LAB(62,+X,0)),"^")
 +10       DO COLL
           DO SUB
 +11       QUIT 
COLL      ;Get Collection Sample-Specimen data
 +1        NEW I,J,X,SAMP,SPEC,CHK
 +2        SET I=0
 +3        FOR 
               SET I=$ORDER(^LAB(60,TEST,3,I))
               if I<1
                   QUIT 
               SET X=^(I,0)
               Begin DoDot:1
 +4                SET CNT=CNT+1
                   SET Y(CNT)="Collection sample: "_$$SAMP(X,$PIECE(X0,"^",19))
 +5                IF $LENGTH($PIECE(X,"^",2))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Form name/number: "_$PIECE(X,"^",2)
 +6                IF $LENGTH($PIECE(X,"^",4))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Minimum volume (in mls): "_$PIECE(X,"^",4)
 +7                IF $LENGTH($PIECE(X,"^",5))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Maximum order frequency: "_$PIECE(X,"^",5)
 +8                IF $LENGTH($PIECE(X,"^",7))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Maximum daily order frequency: "_$PIECE(X,"^",7)
 +9                IF $ORDER(^LAB(60,TEST,3,I,1,0))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Collection sample instructions: "
                       Begin DoDot:2
 +10                       SET J=0
                           FOR 
                               SET J=$ORDER(^LAB(60,TEST,3,I,1,J))
                               if J<1
                                   QUIT 
                               SET CNT=CNT+1
                               SET Y(CNT)="          "_^(J,0)
                       End DoDot:2
               End DoDot:1
 +11      ;. I $O(^LAB(60,TEST,3,I,2,0)) S CNT=CNT+1,Y(CNT)="     Collection sample LAB processing instructions: " D
 +12      ;.. S J=0 F  S J=$O(^LAB(60,TEST,3,I,2,J)) Q:J<1  S CNT=CNT+1,Y(CNT)="          "_^(J,0)
 +13       SET I=0
 +14       FOR 
               SET I=$ORDER(^LAB(60,TEST,1,I))
               if I<1
                   QUIT 
               SET X=^(I,0)
               Begin DoDot:1
 +15               SET CNT=CNT+1
                   SET Y(CNT)="Site/Specimen: "_$PIECE($GET(^LAB(61,+X,0)),"^")
 +16               IF $LENGTH($PIECE(X,"^",2,3))>1
                       DO CRRV("Reference range",$PIECE(X,"^",2,3))
 +17               IF $LENGTH($PIECE(X,"^",11,12))>1
                       DO CRRV("Therapeutic range",$PIECE(X,"^",11,12))
 +18               IF $LENGTH($PIECE(X,"^",4,5))>1
                       DO CRRV("Critical",$PIECE(X,"^",4,5))
 +19               IF $LENGTH($PIECE(X,"^",7))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Units: "_$PIECE(X,"^",7)
 +20               IF $ORDER(^LAB(60,TEST,1,I,1,0))
                       SET CNT=CNT+1
                       SET Y(CNT)="     Interpretation: "
 +21               SET J=0
                   FOR 
                       SET J=$ORDER(^LAB(60,TEST,1,I,1,J))
                       if 'J
                           QUIT 
                       SET X=^(J,0)
                       SET CNT=CNT+1
                       SET Y(CNT)="          "_X
               End DoDot:1
 +22       QUIT 
URG       ;Get Urgency params for TEST
 +1        NEW I,X,URG
 +2        IF $PIECE(X0,"^",18)
               SET CNT=CNT+1
               SET Y(CNT)="Default urgency: "_$PIECE($GET(^LAB(62.05,+$PIECE(X0,"^",18),0)),"^")
 +3        IF $PIECE(X0,"^",16)
               SET CNT=CNT+1
               SET Y(CNT)="Highest urgency allowed: "_$PIECE($GET(^LAB(62.05,+$PIECE(X0,"^",16),0)),"^")
 +4        QUIT 
SAMP(X,REQ) ;Build Collection Sample data
 +1       ;X=zero node from ^LAB(60,TEST,3,ifn,0) or ptr to 62
 +2       ;REQ=Required comment from $P(^LAB(60,TEST,0),"^",19)
 +3        NEW X0,Y1
 +4        if '$DATA(^LAB(62,+X,0))
               QUIT ""
           SET X0=^(0)
 +5       ;S REQ=$S($P(X,"^",6):$P(X,"^",6),$G(REQ):REQ,1:""),REQ=$S(REQ:$P($G(^LAB(62.07,REQ,0)),"^"),1:"")
 +6       ;S Y1=+X_"^"_$P(X0,"^")_"^"_$P(X0,"^",2)_"^"_$P(X0,"^",3)_"^"_$P(X,"^",5)_"^"_$P(X,"^",7)_"^"_$P(X0,"^",7)_"^"_REQ
 +7        SET Y1=$PIECE(X0,"^")_"  "_$PIECE(X0,"^",3)
 +8        QUIT Y1
GCOM      ;Get General Ward & Lab Instructions
 +1       ;TEST=ptr to TEST in file 60
 +2        NEW I
 +3        SET I=0
 +4        IF $ORDER(^LAB(60,+$GET(TEST),6,0))
               SET CNT=CNT+1
               SET Y(CNT)="General instructions: "
 +5        FOR 
               SET I=$ORDER(^LAB(60,TEST,6,I))
               if 'I
                   QUIT 
               SET CNT=CNT+1
               SET Y(CNT)="     "_^(I,0)
 +6        SET I=0
 +7       ;I $O(^LAB(60,+$G(TEST),7,0)) S CNT=CNT+1,Y(CNT)="General LAB processing instructions: "
 +8       ;F  S I=$O(^LAB(60,TEST,7,I)) Q:'I  S CNT=CNT+1,Y(CNT)="     "_^(I,0)
 +9        QUIT 
SUB       ;Tests in panel
 +1        NEW I
 +2        SET I=0
 +3        IF $ORDER(^LAB(60,+$GET(TEST),2,0))
               SET I=0
               SET CNT=CNT+1
               SET Y(CNT)="Tests included in panel: "
 +4        FOR 
               SET I=$ORDER(^LAB(60,TEST,2,I))
               if 'I
                   QUIT 
               SET X=^(I,0)
               SET CNT=CNT+1
               SET Y(CNT)="     "_$PIECE($GET(^LAB(60,+X,0)),"^")
 +5        QUIT 
 +6       ;Added to support LR*5.2*356, PSI-06-025
CRRV(RT,RV) ;Convert Referance Range Values - convert embedded M code into a more readable format
 +1       ;Variables passed in:
 +2       ;RT - Refereance range Text
 +3       ;RV - Refereance range Value
 +4       ;       1st piece holds low value
 +5       ;       2nd piece holds high value
 +6       ;Routine variables
 +7       ;Y() - The return array with the lab test information
 +8       ;CNT - The counter variable used to create nodes in the Y array variable
 +9       ;Local variables
 +10      ;SP5 - 5 embedded spaces for output alinement
 +11      ;SP10 - 10 embedded spaces for output alinement
 +12      ;X - Work variable
 +13       NEW SP5,SP10,X
 +14       SET SP5="     "
           SET SP10=SP5_SP5
           SET X=""
 +15       IF RV'["$S("
               Begin DoDot:1
 +16               IF $LENGTH($PIECE(RV,"^"))
                       IF '$LENGTH($PIECE(RV,"^",2))
                           IF $PIECE(RV,"^")?.ANP
                               SET CNT=CNT+1
                               SET Y(CNT)=SP5_RT_$SELECT($PIECE(RV,"^")?.N:" low : "_$TRANSLATE($PIECE(RV,"^"),""""),1:"  : "_$TRANSLATE($PIECE(RV,"^"),""""))
                               QUIT 
 +17               IF '$LENGTH($PIECE(RV,"^"))
                       IF $LENGTH($PIECE(RV,"^",2))
                           IF $PIECE(RV,"^",2)?.ANP
                               SET CNT=CNT+1
                               SET Y(CNT)=SP5_RT_$SELECT($PIECE(RV,"^",2)?.N:" high : "_$TRANSLATE($PIECE(RV,"^",2),""""),1:" : "_$TRANSLATE($PIECE(RV,"^",2),""""))
                               QUIT 
 +18               IF $LENGTH($PIECE(RV,"^"))
                       SET CNT=CNT+1
                       SET Y(CNT)=SP5_RT_" low  : "_$TRANSLATE($PIECE(RV,"^"),"""")
 +19               IF $LENGTH($PIECE(RV,"^",2))
                       SET CNT=CNT+1
                       SET Y(CNT)=SP5_RT_" high : "_$TRANSLATE($PIECE(RV,"^",2),"""")
 +20      ;I $L($P(RV,"^")) S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^")?.AP:" : "_$TR($P(RV,"^"),""""),1:" low  : "_$TR($P(RV,"^"),""""))
 +21      ;I $L($P(RV,"^",2)) S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^",2)?.AP:" : "_$TR($P(RV,"^",2),""""),1:" high : "_$TR($P(RV,"^",2),""""))
               End DoDot:1
               QUIT 
 +22       IF RV["SEX"
               Begin DoDot:1
 +23               IF RV["AGE"
                       SET CNT=CNT+1
                       SET Y(CNT)=SP5_RT_" - Age and sex dependent range values, please contact lab for specifics."
                       QUIT 
 +24               SET CNT=CNT+1
                   SET Y(CNT)=SP5_RT
 +25               IF $LENGTH($$GSV($PIECE(RV,"^"),"M"))
                       SET CNT=CNT+1
                       SET Y(CNT)=SP10_"Male "_$SELECT($$GSV($PIECE(RV,"^"),"M")?.AP:": "_$TRANSLATE($$GSV($PIECE(RV,"^"),"M"),""""),1:"low  : "_$TRANSLATE($$GSV($PIECE(RV,"^"),"M"),""""))
 +26               IF $LENGTH($$GSV($PIECE(RV,"^",2),"M"))
                       SET CNT=CNT+1
                       SET Y(CNT)=SP10_"Male "_$SELECT($$GSV($PIECE(RV,"^",2),"M")?.AP:$TRANSLATE($$GSV($PIECE(RV,"^",2),"M"),""""),1:"high : "_$TRANSLATE($$GSV($PIECE(RV,"^",2),"M"),""""))
 +27               IF $LENGTH($$GSV($PIECE(RV,"^"),"F"))
                       SET CNT=CNT+1
                       SET Y(CNT)=SP10_"Female "_$SELECT($$GSV($PIECE(RV,"^"),"F")?.AP:": "_$TRANSLATE($$GSV($PIECE(RV,"^"),"F"),""""),1:"low  : "_$TRANSLATE($$GSV($PIECE(RV,"^"),"F"),""""))
 +28               IF $LENGTH($$GSV($PIECE(RV,"^",2),"F"))
                       SET CNT=CNT+1
                       SET Y(CNT)=SP10_"Female "_$SELECT($$GSV($PIECE(RV,"^",2),"F")?.AP:$TRANSLATE($$GSV($PIECE(RV,"^",2),"F"),""""),1:"high : "_$TRANSLATE($$GSV($PIECE(RV,"^",2),"F"),""""))
               End DoDot:1
               QUIT 
 +29       IF RV["AGE"
               Begin DoDot:1
 +30               SET CNT=CNT+1
                   SET Y(CNT)=SP5_RT
 +31               IF $LENGTH($PIECE(RV,"^"))
                       DO FAVO($PIECE(RV,"^"),"low")
 +32               IF $LENGTH($PIECE(RV,"^",2))
                       DO FAVO($PIECE(RV,"^",2),"high")
               End DoDot:1
               QUIT 
GSV(X,SEX) ;Get Sex Value
 +1       ;Variables passed in:
 +2       ;X - Work variable low/high range value
 +3       ;SEX - Patient's sex
 +4       ;Subroutine variables:
 +5       ;X1 - Return value variable with the resolved low/high value
 +6        NEW X1
 +7        SET @("X1="_$SELECT($LENGTH(X):X,1:""""""))
 +8        QUIT X1
FAVO(X,HL) ;Format Age Value Output
 +1       ;Variables passed in:
 +2       ;X - Work variable with low/high range value
 +3       ;HL - This will be for either a low or high reference range
 +4       ;Subroutine variables:
 +5       ;AT0 - Common text for output
 +6       ;AT1 - Embedded M code tested for 
 +7       ;AT2 - Text description for embedded M code for output
 +8       ;IO  - Counter to piece the low/high range value
 +9       ;I1  - Counter to reformat the embedded M code
 +10      ;SP10 - 10 embedded spaces for output alinement
 +11      ;X0,X1,X2  - Work variables used in converting the low/high range value
 +12       NEW AT0,AT1,AT2,I0,I1,SP10,X0,X1,X2
 +13       SET AT0="If Age is "
 +14       SET AT1=""
           SET AT1(1)="AGE<"
           SET AT1(2)="AGE>"
           SET AT1(3)="AGE'<"
           SET AT1(4)="AGE'>"
           SET AT1(5)="AGE="
 +15       SET AT2=""
           SET AT2(1)="less than "
           SET AT2(2)="greater than "
 +16       SET AT2(3)="not less than "
           SET AT2(4)="not greater than "
           SET AT2(5)="equal to "
 +17       SET SP10="          "
 +18       SET X0=$EXTRACT(X,4,$LENGTH(X)-1)
           SET (X1,X2)=""
 +19       FOR I0=1:1
               SET X1=$PIECE(X0,",",I0)
               if X1=""
                   QUIT 
               Begin DoDot:1
 +20               IF $PIECE(X1,":")=1
                       SET X2=SP10_"Default "_HL_": "_$PIECE(X1,":",2)
                       SET CNT=CNT+1
                       SET Y(CNT)=$TRANSLATE(X2,"""")
 +21              IF '$TEST
                       Begin DoDot:2
 +22                       FOR I1=1:1:5
                               IF $PIECE(X1,":")[AT1(I1)
                                   SET X2=SP10_AT0_AT2(I1)_$EXTRACT($PIECE(X1,":"),$LENGTH(AT1(I1))+1,$LENGTH($PIECE(X1,":")))_" the "_HL_" is "_$PIECE(X1,":",2)
                                   SET CNT=CNT+1
                                   SET Y(CNT)=$TRANSLATE(X2,"""")
                       End DoDot:2
               End DoDot:1
 +23       QUIT