YTSALSFR ;ISP/LMT - Report ALSFRS-R ;Jul 31, 2024@10:22:10
 ;;5.01;MENTAL HEALTH;**250**;Dec 30, 1994;Build 26
 ;
 ;
DLLSTR(YSDATA,YS,YSTRNG) ; compute scores or report text based on YSTRNG
 ; input
 ;   YSDATA(2)=adminId^patientDFN^instrumentName^dateGiven^isComplete
 ;   YSDATA(2+n)=questionId^sequence^choiceId
 ;   YS("AD")=adminId
 ;   YSTRNG=1 for score, 2 for report
 ; output if YSTRNG=1: ^TMP($J,"YSCOR",n)=scaleId=score
 ; output if YSTRNG=2: append special "answers" to YSDATA
 ;
 I YSTRNG=1 D BYKEY^YTSCORE(.YSDATA)  ; just use "regular" scoring
 ;
 I YSTRNG=2 D REPORT(.YSDATA)
 ;
 Q
 ;
REPORT(YSDATA) ; line wrap long answers
 ;
 N YSCHOICE,YSI,YSN,YSQLIST,YSQNEW,YSTEXT
 ;
 S YSQLIST(9516)=7771
 S YSQLIST(9522)=7772
 S YSQLIST(9526)=7773
 S YSQLIST(9527)=7774
 ;
 S YSN=$O(YSDATA(""),-1) ; get last node
 ;
 S YSI=2
 F  S YSI=$O(YSDATA(YSI)) Q:'YSI  D
 . S YSTEXT=""
 . S YSQNEW=$G(YSQLIST(+$P(YSDATA(YSI),U,1)))
 . I YSQNEW'>0 QUIT
 . S YSCHOICE=+$P(YSDATA(YSI),U,3)
 . I YSCHOICE=1157 S YSTEXT="|     Skipped but required"
 . I YSTEXT="" D
 . . S YSTEXT=$G(^YTT(601.75,YSCHOICE,1))
 . . S YSTEXT=$$WRAP^YTSCAT(YSTEXT,70,"|     ")
 . S YSN=YSN+1
 . S YSDATA(YSN)=YSQNEW_"^9999;1^"_YSTEXT
 ;
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HYTSALSFR   1260     printed  Sep 23, 2025@19:55:17                                                                                                                                                                                                    Page 2
YTSALSFR  ;ISP/LMT - Report ALSFRS-R ;Jul 31, 2024@10:22:10
 +1       ;;5.01;MENTAL HEALTH;**250**;Dec 30, 1994;Build 26
 +2       ;
 +3       ;
DLLSTR(YSDATA,YS,YSTRNG) ; compute scores or report text based on YSTRNG
 +1       ; input
 +2       ;   YSDATA(2)=adminId^patientDFN^instrumentName^dateGiven^isComplete
 +3       ;   YSDATA(2+n)=questionId^sequence^choiceId
 +4       ;   YS("AD")=adminId
 +5       ;   YSTRNG=1 for score, 2 for report
 +6       ; output if YSTRNG=1: ^TMP($J,"YSCOR",n)=scaleId=score
 +7       ; output if YSTRNG=2: append special "answers" to YSDATA
 +8       ;
 +9       ; just use "regular" scoring
           IF YSTRNG=1
               DO BYKEY^YTSCORE(.YSDATA)
 +10      ;
 +11       IF YSTRNG=2
               DO REPORT(.YSDATA)
 +12      ;
 +13       QUIT 
 +14      ;
REPORT(YSDATA) ; line wrap long answers
 +1       ;
 +2        NEW YSCHOICE,YSI,YSN,YSQLIST,YSQNEW,YSTEXT
 +3       ;
 +4        SET YSQLIST(9516)=7771
 +5        SET YSQLIST(9522)=7772
 +6        SET YSQLIST(9526)=7773
 +7        SET YSQLIST(9527)=7774
 +8       ;
 +9       ; get last node
           SET YSN=$ORDER(YSDATA(""),-1)
 +10      ;
 +11       SET YSI=2
 +12       FOR 
               SET YSI=$ORDER(YSDATA(YSI))
               if 'YSI
                   QUIT 
               Begin DoDot:1
 +13               SET YSTEXT=""
 +14               SET YSQNEW=$GET(YSQLIST(+$PIECE(YSDATA(YSI),U,1)))
 +15               IF YSQNEW'>0
                       QUIT 
 +16               SET YSCHOICE=+$PIECE(YSDATA(YSI),U,3)
 +17               IF YSCHOICE=1157
                       SET YSTEXT="|     Skipped but required"
 +18               IF YSTEXT=""
                       Begin DoDot:2
 +19                       SET YSTEXT=$GET(^YTT(601.75,YSCHOICE,1))
 +20                       SET YSTEXT=$$WRAP^YTSCAT(YSTEXT,70,"|     ")
                       End DoDot:2
 +21               SET YSN=YSN+1
 +22               SET YSDATA(YSN)=YSQNEW_"^9999;1^"_YSTEXT
               End DoDot:1
 +23      ;
 +24       QUIT 
 +25      ;