Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: YTSALSQL

YTSALSQL.m

Go to the documentation of this file.
  1. YTSALSQL ;ISP/LMT - Score ALSSQOL-SF ;Jul 03, 2024@16:08:53
  1. ;;5.01;MENTAL HEALTH;**250**;Dec 30, 1994;Build 26
  1. ;
  1. ;
  1. DLLSTR(YSDATA,YS,YSTRNG) ; compute scores or report text based on YSTRNG
  1. ; input
  1. ; YSDATA(2)=adminId^patientDFN^instrumentName^dateGiven^isComplete
  1. ; YSDATA(2+n)=questionId^sequence^choiceId
  1. ; YS("AD")=adminId
  1. ; YSTRNG=1 for score, 2 for report
  1. ; output if YSTRNG=1: ^TMP($J,"YSCOR",n)=scaleId=score
  1. ; output if YSTRNG=2: append special "answers" to YSDATA
  1. ;
  1. I YSTRNG=1 D SCORESV(.YSDATA)
  1. I YSTRNG=2 D
  1. . N YSSCORES,YSN
  1. . D LDSCORES^YTSCORE(.YSDATA,.YS) ; puts score into ^TMP($J,"YSCOR",2)
  1. . S YSSCORES=$$REPORT()
  1. . S YSN=$O(YSDATA(""),-1) ; get last node
  1. . S YSDATA(YSN+1)="7771^9999;1^"_YSSCORES
  1. Q
  1. ;
  1. SCORESV(YSDATA) ; calculate the score
  1. ; expects YSDATA from DLLSTR (YSDATA from LOADANSW^YTSCORE,SCALEG^YTQAPI3)
  1. ;
  1. N YSBULBAR,YSBULBARAVG,YSCOUNT,YSEMOTION,YSEMOTIONAVG,YSI,YSINTERACTION,YSINTERACTIONAVG,YSINTIMACY
  1. N YSINTIMACYAVG,YSJ,YSMAPPINGS,YSNODE,YSPHYSICAL,YSPHYSICALAVG,YSQID,YSQUESTIONS,YSRELIGION
  1. N YSRELIGIONAVG,YSSCALE,YSSCALECONST,YSSCLID,YSSCLNM,YSSCORES,YSSKIPPED,YSTOTAL,YSTOTALAVG,YSVAL,YSX
  1. ;
  1. F YSI=1:1 S YSX=$P($T(MAPPING+YSI),";;",2,99) Q:YSX=""!(YSX="zzz") D
  1. . S YSSCALECONST=$P(YSX,U,1)
  1. . S YSSCALE=$P(YSX,U,3)
  1. . S @YSSCALECONST=YSSCALE
  1. . S YSSCORES(YSSCALE)=""
  1. . S YSQUESTIONS=$P(YSX,U,4)
  1. . I YSQUESTIONS="" QUIT
  1. . F YSJ=1:1 S YSQID=$P(YSQUESTIONS,";",YSJ) Q:YSQID="" D
  1. . . S YSMAPPINGS(YSQID)=YSSCALE
  1. ;
  1. S YSSKIPPED=0
  1. S YSCOUNT=0
  1. S YSI=2
  1. F S YSI=$O(YSDATA(YSI)) Q:'YSI!(YSSKIPPED) D
  1. . S YSQID=$P(YSDATA(YSI),U)
  1. . S YSVAL=$P(YSDATA(YSI),U,3)
  1. . I 'YSQID QUIT
  1. . S YSSCALE=$G(YSMAPPINGS(YSQID))
  1. . I 'YSSCALE QUIT
  1. . I YSVAL=1155!(YSVAL=1156)!(YSVAL=1157)!(YSVAL'?1.N) S YSSKIPPED=1 QUIT
  1. . S YSCOUNT=YSCOUNT+1
  1. . S YSSCORES(YSSCALE)=YSSCORES(YSSCALE)+YSVAL
  1. I YSCOUNT<20 S YSSKIPPED=1
  1. ;
  1. ; Inverted scores: Subtract the score for each subsection from the total possible score
  1. S YSSCORES(YSEMOTION)=30-YSSCORES(YSEMOTION)
  1. S YSSCORES(YSPHYSICAL)=50-YSSCORES(YSPHYSICAL)
  1. S YSSCORES(YSBULBAR)=20-YSSCORES(YSBULBAR)
  1. ;
  1. S YSSCORES(YSTOTAL)=YSSCORES(YSEMOTION)+YSSCORES(YSPHYSICAL)+YSSCORES(YSBULBAR)+YSSCORES(YSINTERACTION)+YSSCORES(YSRELIGION)+YSSCORES(YSINTIMACY)
  1. ;
  1. S YSSCORES(YSTOTALAVG)=$J(YSSCORES(YSTOTAL)/20,0,2)
  1. S YSSCORES(YSEMOTIONAVG)=$J(YSSCORES(YSEMOTION)/3,0,2)
  1. S YSSCORES(YSPHYSICALAVG)=$J(YSSCORES(YSPHYSICAL)/5,0,2)
  1. S YSSCORES(YSBULBARAVG)=$J(YSSCORES(YSBULBAR)/2,0,2)
  1. S YSSCORES(YSINTERACTIONAVG)=$J(YSSCORES(YSINTERACTION)/4,0,2)
  1. S YSSCORES(YSRELIGIONAVG)=$J(YSSCORES(YSRELIGION)/2,0,2)
  1. S YSSCORES(YSINTIMACYAVG)=$J(YSSCORES(YSINTIMACY)/4,0,2)
  1. ;
  1. ; set scores into ^TMP($J,"YSCOR",n)=scaleName=score {rawScore^tScore}
  1. K ^TMP($J,"YSCOR")
  1. I $D(^TMP($J,"YSG",1)),^TMP($J,"YSG",1)="[ERROR]" D Q ;-->out
  1. . S ^TMP($J,"YSCOR",1)="[ERROR]"
  1. . S ^TMP($J,"YSCOR",2)="No Scale found for ADMIN"
  1. ;
  1. S ^TMP($J,"YSCOR",1)="[DATA]"
  1. S YSI=2
  1. S YSJ=1
  1. F S YSI=$O(^TMP($J,"YSG",YSI)) Q:'YSI D
  1. . S YSNODE=$G(^TMP($J,"YSG",YSI))
  1. . I $P(YSNODE,"=",1)["Group" QUIT
  1. . S YSSCLID=+$P(YSNODE,"=",2)
  1. . S YSSCLNM=$P(YSNODE,U,4)
  1. . S YSJ=YSJ+1
  1. . S ^TMP($J,"YSCOR",YSJ)=YSSCLNM_"="_$S('YSSKIPPED:$G(YSSCORES(YSSCLID)),1:"")
  1. Q
  1. ;
  1. ;
  1. MAPPING ;Map question IDs to scales; Constant^Scale Name^Scale ID^Questions IDs
  1. ;;YSTOTAL^Total Score^1598
  1. ;;YSEMOTION^Negative Emotion^1599^9538;9542;9543
  1. ;;YSPHYSICAL^Physical Functioning^1600^9529;9530;9533;9534;9535
  1. ;;YSBULBAR^Bulbar Function^1601^9531;9532
  1. ;;YSINTERACTION^Interaction with people and the Environment^1602^9536;9537;9539;9544
  1. ;;YSRELIGION^Religiosity^1603^9540;9541
  1. ;;YSINTIMACY^Intimacy^1604^9545;9546;9547;9548
  1. ;;YSTOTALAVG^Average Total^1591
  1. ;;YSEMOTIONAVG^Negative Emotion Avg^1592
  1. ;;YSPHYSICALAVG^Physical Functioning Avg^1593
  1. ;;YSBULBARAVG^Bulbar Function Avg^1594
  1. ;;YSINTERACTIONAVG^Interaction with people and the Environment Avg^1595
  1. ;;YSRELIGIONAVG^Religiosity Avg^1596
  1. ;;YSINTIMACYAVG^Intimacy Avg^1597
  1. ;;zzz
  1. ;
  1. ;
  1. REPORT(YSRETURN) ; build the scoring display for the report
  1. ; expects ^TMP($J,"YSCOR",...) and ^TMP($J,"YSG") from DLLSTR
  1. ; YSDATA from DLLSTR
  1. ;
  1. N YSBULBAR,YSBULBARAVG,YSEMOTION,YSEMOTIONAVG,YSI,YSINTERACTION,YSINTERACTIONAVG,YSINTIMACY,YSINTIMACYAVG
  1. N YSNAME,YSPHYSICAL,YSPHYSICALAVG,YSRELIGION,YSRELIGIONAVG,YSSCALE,YSSCALECONST,YSSCALEMAP,YSSCALENAME
  1. N YSSCORES,YSSKIPPED,YSTOTAL,YSTOTALAVG,YSVALUE,YSX
  1. ;
  1. F YSI=1:1 S YSX=$P($T(MAPPING+YSI),";;",2,99) Q:YSX=""!(YSX="zzz") D
  1. . S YSSCALECONST=$P(YSX,U,1)
  1. . S YSSCALENAME=$P(YSX,U,2)
  1. . S YSSCALE=$P(YSX,U,3)
  1. . S @YSSCALECONST=YSSCALE
  1. . S YSSCALEMAP(YSSCALENAME)=YSSCALE
  1. . S YSSCORES(YSSCALE)=""
  1. ;
  1. S YSI=0 F S YSI=$O(^TMP($J,"YSCOR",YSI)) Q:'YSI D
  1. . S YSNAME=$P(^TMP($J,"YSCOR",YSI),"=")
  1. . S YSVALUE=$P(^TMP($J,"YSCOR",YSI),"=",2)
  1. . I YSNAME="" QUIT
  1. . S YSSCALE=$G(YSSCALEMAP(YSNAME))
  1. . I YSSCALE="" QUIT
  1. . S YSSCORES(YSSCALE)=YSVALUE
  1. ;
  1. S YSSKIPPED=0
  1. S YSSCALE=0
  1. F S YSSCALE=$O(YSSCORES(YSSCALE)) Q:YSSCALE="" D
  1. . I $G(YSSCORES(YSSCALE))="" S YSSKIPPED=1
  1. ;
  1. I YSSKIPPED D QUIT YSRETURN
  1. . S YSRETURN="|No scores due to skipped items."
  1. ;
  1. S YSX=""
  1. S YSX=YSX_"| Negative Emotion Total: "_$J(YSSCORES(YSEMOTION),3)_" (Max=30)"
  1. S YSX=YSX_"| Physical Functioning Total: "_$J(YSSCORES(YSPHYSICAL),3)_" (Max=50)"
  1. S YSX=YSX_"| Bulbar Function Total: "_$J(YSSCORES(YSBULBAR),3)_" (Max=20)"
  1. S YSX=YSX_"| Interaction with people and the Environment Total: "_$J(YSSCORES(YSINTERACTION),3)_" (Max=40)"
  1. S YSX=YSX_"| Religiosity Total: "_$J(YSSCORES(YSRELIGION),3)_" (Max=20)"
  1. S YSX=YSX_"| Intimacy Total: "_$J(YSSCORES(YSINTIMACY),3)_" (Max=40)"
  1. S YSX=YSX_"| TOTAL SCORE: "_$J(YSSCORES(YSTOTAL),3)_" (Max=200)"
  1. S YSX=YSX_"|"
  1. S YSX=YSX_"| Negative Emotion Average: "_$J(YSSCORES(YSEMOTIONAVG),0,2)
  1. S YSX=YSX_"| Physical Functioning Average: "_$J(YSSCORES(YSPHYSICALAVG),0,2)
  1. S YSX=YSX_"| Bulbar Function Average: "_$J(YSSCORES(YSBULBARAVG),0,2)
  1. S YSX=YSX_"| Interaction with people and the Environment Average: "_$J(YSSCORES(YSINTERACTIONAVG),0,2)
  1. S YSX=YSX_"| Religiosity Average: "_$J(YSSCORES(YSRELIGIONAVG),0,2)
  1. S YSX=YSX_"| Intimacy Average: "_$J(YSSCORES(YSINTIMACYAVG),0,2)
  1. S YSX=YSX_"| AVERAGE TOTAL SCORE: "_$J(YSSCORES(YSTOTALAVG),0,2)
  1. S YSX=YSX_"|"
  1. S YSX=YSX_"|Averages are reported as a value between 0 (worse) and 10 (best)."
  1. S YSRETURN=YSX
  1. ;
  1. Q YSRETURN