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

YTSC19Y.m

Go to the documentation of this file.
  1. YTSC19Y ;SLC/KCM - Score Modified C19-YRS ; 3/25/22 2:02pm
  1. ;;5.01;MENTAL HEALTH;**233**;Dec 30, 1994;Build 13
  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
  1. I YSTRNG=2 D
  1. . N SCORES,QANDA,N
  1. . D LDSCORES^YTSCORE(.YSDATA,.YS) ; puts score into ^TMP($J,"YSCOR",2)
  1. . D REPORT(.SCORES,.QANDA)
  1. . S N=$O(YSDATA(""),-1) ; get last node
  1. . S YSDATA(N+1)="7771^9999;1^"_SCORES
  1. . S YSDATA(N+2)="7772^9999;1^"_QANDA
  1. Q
  1. ;
  1. SCORESV ; calculate the score
  1. ; expects YSDATA from DLLSTR (YSDATA from LOADANSW^YTSCORE,SCALEG^YTQAPI3)
  1. N QSTN,SYMNOW,SYMPRE,DISNOW,DISPRE,OTHSYM,ALLNOW,ALLPRE
  1. D BLDQSTN(.QSTN)
  1. S SYMNOW(1)=$$HIGHEST(.QSTN,"8979,8981,8983,8985")
  1. S SYMPRE(1)=$$HIGHEST(.QSTN,"8980,8982,8984,8986")
  1. S SYMNOW(2)=$$HIGHEST(.QSTN,"8987,8989")
  1. S SYMPRE(2)=$$HIGHEST(.QSTN,"8988,8990")
  1. S SYMNOW(3)=$G(QSTN(8991))
  1. S SYMPRE(3)=$G(QSTN(8992))
  1. S SYMNOW(4)=$$HIGHEST(.QSTN,"8993,8995")
  1. S SYMPRE(4)=$$HIGHEST(.QSTN,"8994,8996")
  1. S SYMNOW(5)=$$HIGHEST(.QSTN,"8997,8999,9001,9003,9005")
  1. S SYMPRE(5)=$$HIGHEST(.QSTN,"8998,9000,9002,9004,9006")
  1. S SYMNOW(6)=$$HIGHEST(.QSTN,"9007,9009,9011")
  1. S SYMPRE(6)=$$HIGHEST(.QSTN,"9008,9010,9012")
  1. S SYMNOW(7)=$$HIGHEST(.QSTN,"9013,9015")
  1. S SYMPRE(7)=$$HIGHEST(.QSTN,"9014,9016")
  1. S SYMNOW(8)=$G(QSTN(9017))
  1. S SYMPRE(8)=$G(QSTN(9018))
  1. S SYMNOW(9)=$$HIGHEST(.QSTN,"9019,9021,9023,9025,9027")
  1. S SYMPRE(9)=$$HIGHEST(.QSTN,"9020,9022,9024,9026,9028")
  1. S SYMNOW(10)=$G(QSTN(9029))
  1. S SYMPRE(10)=$G(QSTN(9030))
  1. S SYMNOW=0 F I=1:1:10 S SYMNOW=SYMNOW+SYMNOW(I)
  1. S SYMPRE=0 F I=1:1:10 S SYMPRE=SYMPRE+SYMPRE(I)
  1. S DISNOW=$$SUM(.QSTN,"9031,9033,9035,9037,9039")
  1. S DISPRE=$$SUM(.QSTN,"9032,9034,9036,9038,9040")
  1. I $G(QSTN(9041))="Left blank by the user." S OTHSYM=0 I 1
  1. E S OTHSYM=$$CHKCNT(9041,$G(QSTN(9041)))
  1. S ALLNOW=$G(QSTN(9043)) ; <-- these aren't CID values
  1. S ALLPRE=$G(QSTN(9044))
  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. N I,J,SCLID,SCLNM
  1. S ^TMP($J,"YSCOR",1)="[DATA]"
  1. S I=2,J=1 F S I=$O(^TMP($J,"YSG",I)) Q:'I D
  1. . S SCLID=+$P(^TMP($J,"YSG",I),"=",2)
  1. . S SCLNM=$P(^TMP($J,"YSG",I),U,4)
  1. . S J=J+1
  1. . I SCLID=1495 S ^TMP($J,"YSCOR",J)=SCLNM_"="_SYMNOW
  1. . I SCLID=1496 S ^TMP($J,"YSCOR",J)=SCLNM_"="_SYMPRE
  1. . I SCLID=1497 S ^TMP($J,"YSCOR",J)=SCLNM_"="_DISNOW
  1. . I SCLID=1498 S ^TMP($J,"YSCOR",J)=SCLNM_"="_DISPRE
  1. . I SCLID=1499 S ^TMP($J,"YSCOR",J)=SCLNM_"="_ALLNOW
  1. . I SCLID=1500 S ^TMP($J,"YSCOR",J)=SCLNM_"="_ALLPRE
  1. . I SCLID=1485 S ^TMP($J,"YSCOR",J)=SCLNM_"="_OTHSYM
  1. Q
  1. HIGHEST(QSTN,LIST) ; return highest value in LIST
  1. N I,HIGH,SKIPS,QID
  1. S HIGH=0,SKIPS=0
  1. F I=1:1:$L(LIST,",") S QID=$P(LIST,",",I) D
  1. . I '$D(QSTN(QID))!($G(QSTN(QID))="") S SKIPS=SKIPS+1 QUIT
  1. . I QSTN(QID)>HIGH S HIGH=QSTN(QID)
  1. Q HIGH
  1. ;
  1. SUM(QSTN,LIST) ; return sum for questions in LIST
  1. N I,QID,SUM
  1. S SUM=0 F I=1:1:$L(LIST,",") S QID=$P(LIST,",",I) D
  1. . I $G(QSTN(QID)) S SUM=SUM+QSTN(QID)
  1. Q SUM
  1. ;
  1. CHKCNT(QID,VAL) ; return the number of items checked for question
  1. N CLST,CNT,I
  1. D BLDCHKS(.CLST,QID)
  1. S (CNT,I)=0 F S I=$O(CLST(I)) Q:'I I VAL[CLST(I) S CNT=CNT+1
  1. Q CNT
  1. ;
  1. BLDCHKS(CLST,QID) ; build list of checklist items for QID into .CLST
  1. N CTYP,SEQ,CID,X
  1. K CLST ; make sure list is clear
  1. S CTYP=$P($G(^YTT(601.72,QID,2)),U,3)
  1. S SEQ=0 F S SEQ=$O(^YTT(601.751,"AC",CTYP,SEQ)) Q:'SEQ D
  1. . S CID=0 F S CID=$O(^YTT(601.751,"AC",CTYP,SEQ,CID)) Q:'CID D
  1. . . S X=$G(^YTT(601.75,CID,1)),CLST(SEQ)=X
  1. Q
  1. BLDQSTN(QSTN) ; build list of questions and response values in .QSTN
  1. ; expects YSDATA,YSTRNG from DLLSTR
  1. N I,CID,QID
  1. S I=2 F S I=$O(YSDATA(I)) Q:'I D
  1. . S CID=$P(YSDATA(I),U,3),QID=$P(YSDATA(I),U)
  1. . I CID=1155!(CID=1156)!(CID=1157) Q ; don't include skipped questions
  1. . I CID=5548,(YSTRNG=1) Q ; don't include "Don't Know" for score
  1. . I $P($G(^YTT(601.72,QID,2)),U,2)'=1 D QUIT
  1. . . S QSTN(QID)=$G(QSTN(QID))_$P(YSDATA(I),U,3)
  1. . S QSTN(QID)=$P($G(^YTT(601.75,CID,0)),U,2)
  1. Q
  1. REPORT(SCORES,QANDA) ; build the scoring display for the report
  1. ; expects ^TMP($J,"YSCOR",...) and ^TMP($J,"YSG") from DLLSTR
  1. ; YSDATA from DLLSTR
  1. N BLANKS,QSTN
  1. D BLDQSTN(.QSTN)
  1. S $P(BLANKS," ",81)=""
  1. S SCORES=$$BLDSCR()
  1. S QANDA=$$BLDQA()
  1. Q
  1. BLDSCR() ; build the scoring block
  1. ; expects ^TMP($J,"YSCOR") from DLLSTR
  1. N I,NAME,VALUE,SYMNOW,SYMPRE,DISNOW,DISPRE,OTHSYM,ALLNOW,ALLPRE,X
  1. S I=0 F S I=$O(^TMP($J,"YSCOR",I)) Q:'I D
  1. . S NAME=$P(^TMP($J,"YSCOR",I),"=")
  1. . S VALUE=$P(^TMP($J,"YSCOR",I),"=",2)
  1. . I NAME="Symptom Severity Now" S SYMNOW=VALUE
  1. . I NAME="Symptom Severity Pre-COVID" S SYMPRE=VALUE
  1. . I NAME="Functional Disability Now" S DISNOW=VALUE
  1. . I NAME="Functional Disability Pre-COVID" S DISPRE=VALUE
  1. . I NAME="Additional Symptoms" S OTHSYM=VALUE
  1. . I NAME="Overall Health Now" S ALLNOW=VALUE
  1. . I NAME="Overall Health Pre-COVID" S ALLPRE=VALUE
  1. S X=""
  1. S X=X_"| Now Pre-COVID"
  1. S X=X_"| --- ---------"
  1. S X=X_"| Symptom Severity:"_$$SCRTXT(SYMNOW,SYMPRE)
  1. S X=X_"| Functional Disability:"_$$SCRTXT(DISNOW,DISPRE)
  1. S X=X_"| Additional Symptoms:"_$$SCRTXT(OTHSYM,"")
  1. S X=X_"| Overall Health:"_$$SCRTXT(ALLNOW,ALLPRE)
  1. Q X
  1. ;
  1. SCRTXT(NOW,PRE) ; return score string
  1. Q " "_$J(NOW,3)_" "_$J(PRE,3)
  1. ;
  1. BLDQA() ; Build questions & answers
  1. ; expects QSTN, BLANKS from REPORT
  1. N I,TEXT,X,XC,WTEXT,WINDENT,WNOW,WPRE
  1. S WTEXT=56,WINDENT=8
  1. S WNOW=$L("Moderate")+2
  1. S WPRE=$L("Don't Know")
  1. S TEXT="" F I=1:1 S X=$P($T(RPTQA+I),";;",2,99) Q:X="zzzzz" D
  1. . ; handle text, wp and checklists first
  1. . I X=9045 D QUIT ; text
  1. . . S TEXT=TEXT_"|18a) Occupation: "_$G(QSTN(+X))
  1. . I X=9041!(X=9046) D QUIT ; checklist
  1. . . I '$L($G(QSTN(+X))) S TEXT=TEXT_"|" QUIT
  1. . . N CLST,J
  1. . . D BLDCHKS(.CLST,X) ; all checkbox items
  1. . . S J=0 F S J=$O(CLST(J)) Q:'J I QSTN(+X)[CLST(J) D
  1. . . . S TEXT=TEXT_$$WRAP(CLST(J),76,$E(BLANKS,1,WINDENT))
  1. . I X=9042!(X=9047)!(X=9048) D QUIT ; wp text
  1. . . I '$L($G(QSTN(+X))) S TEXT=TEXT_"|" QUIT
  1. . . S TEXT=TEXT_$$WRAP(QSTN(+X),76,$E(BLANKS,1,WINDENT))
  1. . ; handle question / answer text ; now/pre responses
  1. . S NOW=$P(X,U,2),PRE=$P(X,U,3)
  1. . I NOW="",(PRE="") S TEXT=TEXT_"|"_$P(X,U) I 1
  1. . E S TEXT=TEXT_"|"_$E($P(X,U)_BLANKS,1,WTEXT)
  1. . I $L(NOW) S TEXT=TEXT_$E($$ANSTXT(NOW)_BLANKS,1,WNOW)
  1. . I $L(PRE) S TEXT=TEXT_$$ANSTXT(PRE)
  1. Q TEXT
  1. ;
  1. ANSTXT(QID) ; return text for answer to question
  1. ; expects QSTN from REPORT > BLDQA
  1. I QID'=+QID Q QID ; non-numeric, just return text
  1. I QID=9043 Q $J($G(QSTN(QID)),2) ; actual value (range question)
  1. I QID=9044 Q " "_$J($G(QSTN(QID)),2)
  1. I '$D(QSTN(QID)) Q "SKIPPED"
  1. I $G(QSTN(QID))=0 Q "None"
  1. I $G(QSTN(QID))=1 Q "Mild"
  1. I $G(QSTN(QID))=2 Q "Moderate"
  1. I $G(QSTN(QID))=3 Q "Severe"
  1. I $G(QSTN(QID))=4 Q "Don't Know"
  1. Q "??"
  1. ;
  1. WRAP(IN,MAX,PRE) ; Return with | and spacing in correct place
  1. N I,J,L,OUT,PAR,TXT,WORD
  1. S OUT="",TXT="",L=0
  1. F I=1:1:$L(IN,"|") S PAR=$P(IN,"|",I) D
  1. . S L=L+1,OUT(L)=PRE_$P(PAR," ")
  1. . F J=2:1:$L(PAR," ") S WORD=$P(PAR," ",J) D
  1. . . I ($L(OUT(L))+$L(WORD)+1)<MAX S OUT(L)=OUT(L)_" "_WORD I 1
  1. . . E S L=L+1,OUT(L)=PRE_WORD
  1. S L=0 F S L=$O(OUT(L)) Q:'L S TXT=TXT_"|"_OUT(L)
  1. Q TXT
  1. ;
  1. RPTQA ; Questions & Answers for Report
  1. ;;Questions and Answers:
  1. ;;
  1. ;;SYMPTOM SEVERITY^Now^Pre-COVID
  1. ;; ^---^---------
  1. ;;Breathlessness
  1. ;;1a) Breathlessness: At rest^8979^8980
  1. ;;1b) Breathlessness: Changing position e.g. from^8981^8982
  1. ;; lying to sitting or sitting to lying
  1. ;;1c) Breathlessness: On dressing yourself^8983^8984
  1. ;;1d) Breathlessness: On walking up a flight of stairs^8985^8986
  1. ;;
  1. ;;Cough/ throat sensitivity/ voice change
  1. ;;2a) Cough / throat sensitivity^8987^8988
  1. ;;2b) Change of voice^8989^8990
  1. ;;
  1. ;;Fatigue (tiredness not improved by rest)
  1. ;;3) Fatigue levels in your usual activities^8991^8992
  1. ;;
  1. ;;Smell / taste
  1. ;;4a) Altered smell^8993^8994
  1. ;;4b) Altered taste^8995^8996
  1. ;;
  1. ;;Pain / discomfort
  1. ;;5a) Chest pain^8997^8998
  1. ;;5b) Joint pain^8999^9000
  1. ;;5c) Muscle pain^9001^9002
  1. ;;5d) Headache^9003^9004
  1. ;;5e) Abdominal pain^9005^9006
  1. ;;
  1. ;;Cognition
  1. ;;6a) Problems with concentration^9007^9008
  1. ;;6b) Problems with memory^9009^9010
  1. ;;6c) Problems with planning^9011^9012
  1. ;;
  1. ;;Palpitations / dizziness
  1. ;;7a) Palpitations in certain positions, activity or^9013^9014
  1. ;; at rest
  1. ;;7b) Dizziness in certain positions, activity or at^9015^9016
  1. ;; rest
  1. ;;
  1. ;;Post-exertional malaise (worsening of symptoms)
  1. ;; 8) Crashing or relapse hours or days after physical,^9017^9018
  1. ;; cognitive or emotional exertion
  1. ;;
  1. ;;Anxiety / mood
  1. ;;9a) Feeling anxious^9019^9020
  1. ;;9b) Feeling depressed^9021^9022
  1. ;;9c) Having unwanted memories of your illness or^9023^9024
  1. ;; time in hospital
  1. ;;9d) Having unpleasant dreams about your illness or^9025^9026
  1. ;; time in hospital
  1. ;;9e) Trying to avoid thoughts or feelings about your^9027^9028
  1. ;; illness or time in hospital
  1. ;;
  1. ;;Sleep
  1. ;;10) Sleep problems, such as difficulty falling^9029^9030
  1. ;; asleep, staying asleep or oversleeping
  1. ;;
  1. ;;
  1. ;;FUNCTIONAL ABILITY
  1. ;;
  1. ;;Communication
  1. ;;11) Difficulty with communication / word finding^9031^9032
  1. ;; difficulty / understanding others
  1. ;;
  1. ;;
  1. ;;Walking or moving around
  1. ;;12) Difficulties with walking or moving around^9033^9034
  1. ;;
  1. ;;Personal Care
  1. ;;13) Difficulties with personal tasks such as using^9035^9036
  1. ;; the toilet or getting washed and dressed
  1. ;;
  1. ;;Other activities of Daily Living^9037^9038
  1. ;;14) Difficulty doing wider activities, such as
  1. ;; household work, leisure/sporting activities,
  1. ;; paid/unpaid work, study or shopping
  1. ;;
  1. ;;Social Role
  1. ;;15) Problems with socializing / interacting with^9039^9040
  1. ;; friends* or caring for dependents
  1. ;; *related to your illness and not due to social
  1. ;; distancing / lockdown measures
  1. ;;
  1. ;;
  1. ;;OTHER SYMPTOMS
  1. ;;
  1. ;;16a) Please select any of the following symptoms you have experienced
  1. ;; since your illness in the last 7 days. Please also select any
  1. ;; previous problems that have worsened for you following your illness.
  1. ;;9041
  1. ;;16b) Other symptoms - free text
  1. ;;9042
  1. ;;
  1. ;;
  1. ;;OVERALL HEALTH^Now^Pre-COVID
  1. ;; ^---^---------
  1. ;;17a) How good or bad is your health overall in the^9043^9044
  1. ;; last 7 days?
  1. ;;
  1. ;;
  1. ;;EMPLOYMENT
  1. ;;
  1. ;;9045
  1. ;;18b) Has your COVID-19 illness affected your work??
  1. ;;9046
  1. ;;18c) Any other comments/concerns
  1. ;;9047
  1. ;;
  1. ;;
  1. ;;PARTNER / FAMILY / CAREGIVER PERSPECTIVE
  1. ;;
  1. ;;19) This is space for your partner, family or caregiver to add anything
  1. ;; from their perspective:
  1. ;;9048
  1. ;;zzzzz
  1. ;
  1. TESTSCR(YSAD) ; Test scoring routine
  1. N YS,YSDATA
  1. S YS("AD")=YSAD,YS("CODE")="C19-YRS"
  1. D LOADANSW^YTSCORE(.YSDATA,.YS)
  1. D SCALEG^YTQAPI3(.YSDATA,.YS)
  1. D DLLSTR(.YSDATA,.YS,1)
  1. Q