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

YTSWHOQO.m

Go to the documentation of this file.
  1. YTSWHOQO ;SLC/DJE- ANSWERS SPECIAL HANDLING - WHOQOL-BREF ; 10/16/18 9:35am
  1. ;;5.01;MENTAL HEALTH;**151**;DEC 30,1994;Build 92
  1. ;
  1. DATA1(SCORE) ;expects YSDATA, returns SCORE, multiple scales so we use nodes i.e. SCORE(SCALEIEN)=###
  1. ;specialized DATA1 uses SCOREDATA table to map question to score relationships
  1. N LINE,TEXT,SKIP,SCALE,RAW,NEWVAL,I,TRANSFORM
  1. F LINE=1:1 S TEXT=$P($T(SCOREDAT+LINE),";",2) Q:TEXT="QUIT" D
  1. .N RAWTYPE,QUESTIONS,I
  1. .S SCALE=$P(TEXT,"|",1) S RAWTYPE=$P(TEXT,"|",2) S QUESTIONS=$P(TEXT,"|",3)
  1. .F I=1:1:$L(QUESTIONS,U) D
  1. ..N NODE,DATA
  1. ..S NODE=$P(QUESTIONS,U,I)+2 ;YSDATA question nodes start at 3
  1. ..S DATA=YSDATA(NODE)
  1. ..;retrieval method section. For each RAWTYPE assign a value to RAW
  1. ..;typical case, YSDATA piece 3 has the MH CHOICE IEN and raw value is in LEGACY field
  1. ..I RAWTYPE="LEGACY" S RAW=$$GET1^DIQ(601.75,$P($G(DATA),U,3)_",",4,"I")
  1. ..I RAW="X" S SKIP(SCALE)=$G(SKIP(SCALE))+1 ;Need to keep count of skipped questions
  1. ..S SCORE(SCALE)=$G(SCORE(SCALE))+RAW
  1. ;
  1. ;logic to handle skipped questions.
  1. S SCALE=""
  1. F S SCALE=$O(SKIP(SCALE)) Q:SCALE="" D
  1. .I SCALE=884 D Q
  1. ..I SKIP(884)>1 S SCORE(884)="" Q
  1. ..S RAW=SCORE(884)
  1. ..S NEWVAL=RAW/6,RAW=RAW+$FN(NEWVAL,"",0) ;set missing value to average of others
  1. ..S SCORE(884)=RAW
  1. .;
  1. .I SCALE=885 S SCORE(885)="" Q
  1. .;
  1. .I SCALE=886 S SCORE(886)="" Q
  1. .;
  1. .I SCALE=887 D Q
  1. ..I SKIP(887)>1 S SCORE(887)="" Q
  1. ..S RAW=SCORE(887)
  1. ..S NEWVAL=RAW/6,RAW=RAW+$FN(NEWVAL,"",0) ;set missing value to average of others
  1. ..S SCORE(887)=RAW
  1. ;
  1. ;logic for t-scores
  1. F I=1:1:4 D ;Only 4 scales have transformed scores
  1. .S RAW=SCORE(883+I) ;1 to 4 -> 884 to 887
  1. .I RAW="" Q
  1. .S TRANSFORM=$$GETTRANS(RAW,I)
  1. .S SCORE(883+I)=RAW_U_TRANSFORM
  1. ;
  1. Q
  1. ;
  1. ;SCOREDATA maps questions to their scale and to the method we use to retrieve the raw value.
  1. ;A scale can have multiple lines and does not need to match the scalegroup order
  1. ;You can create your own RAW RETRIEVAL METHOD, just make sure we handle the case in DATA1
  1. SCOREDAT ; SCALE IEN|RAW RETRIEVAL METHOD|QUES#^QUES#...
  1. ;1307|LEGACY|1
  1. ;1308|LEGACY|2
  1. ;884|LEGACY|3^4^10^15^16^17^18
  1. ;885|LEGACY|5^6^7^11^19^26
  1. ;886|LEGACY|20^21^22
  1. ;887|LEGACY|8^9^12^13^14^23^24^25
  1. ;QUIT
  1. Q
  1. ;
  1. SCORESV(SCORE) ;Expects SCORE to be in format SCORE(SCALE_IEN)=###. Also expects ^TMP($J,"YSG")
  1. N YSCORNODE,YSGNODE
  1. I $D(^TMP($J,"YSG",1)),^TMP($J,"YSG",1)="[ERROR]" D Q ;-->out
  1. .K ^TMP($J,"YSCOR")
  1. .S ^TMP($J,"YSCOR",1)="[ERROR]"
  1. .S ^TMP($J,"YSCOR",2)="No Scale found for ADMIN"
  1. ;
  1. K ^TMP($J,"YSCOR")
  1. S ^TMP($J,"YSCOR",1)="[DATA]"
  1. S YSCORNODE=2
  1. S YSGNODE=2 F S YSGNODE=$O(^TMP($J,"YSG",YSGNODE)) Q:YSGNODE="" D
  1. .N SCALEIEN
  1. .I $E(^TMP($J,"YSG",YSGNODE),1,5)'="Scale" Q ;only read the lines for scales
  1. .S SCALEIEN=+$P(^TMP($J,"YSG",YSGNODE),"=",2) ;grab the first number after "=" sign
  1. .S ^TMP($J,"YSCOR",YSCORNODE)=$$GET1^DIQ(601.87,SCALEIEN_",",3,"I")_"="_SCORE(SCALEIEN)
  1. .S YSCORNODE=YSCORNODE+1
  1. ;
  1. Q
  1. ;
  1. DLLSTR(YSDATA,YS,YSTRNG) ;
  1. ; YSTRNG = 1 Score Instrument
  1. ; YSTRNG = 2 get Report Answers and Text
  1. N SCORE,TSARR
  1. ;
  1. I YSTRNG=1 D DATA1(.SCORE),SCORESV(.SCORE)
  1. ;LDSCORES is not retrieving t-scores for TMP($J,"YSCOR") so we need to run LDTSCOR.
  1. I YSTRNG=2 D LDTSCOR^YTSCORE(.TSARR,YS("AD")),BUILDANS(.TSARR,.YSDATA)
  1. Q
  1. ;
  1. BUILDANS(TSARR,YSDATA) ;
  1. N SCORE,I
  1. S N=N+1
  1. ;
  1. S YSDATA(N)="7771^9999;1^"_$P(TSARR("QoL"),U,2),N=N+1
  1. S YSDATA(N)="7772^9999;1^"_$P(TSARR("GenHealth"),U,2),N=N+1
  1. ;
  1. S I=3
  1. F SCORE="PhyHealth","Psy","SocRel","Envi" D
  1. .N TEXT,RAW,TRANSFORM
  1. .D ;do domains with transformed
  1. ..S RAW=$P(TSARR(SCORE),U,2)
  1. ..I RAW="" S TEXT="-- --" D Q
  1. ..S TRANSFORM=$P(TSARR(SCORE),U,3)
  1. ..S TEXT=RAW_" "_TRANSFORM
  1. .S YSDATA(N)="777"_I_"^9999;1^"_TEXT,N=N+1,I=I+1
  1. ;
  1. Q
  1. ;
  1. GETTRANS(RAW,SCOREIDX) ; get the transformed score given a score's raw #
  1. N TEXT,LOW,RANGE,RETURN
  1. S TEXT=$P($T(TABLE+SCOREIDX),U,2)
  1. I TEXT="" Q ""
  1. S LOW=$P(TEXT,"|"),RANGE=$P(TEXT,"|",2)
  1. S RETURN=((RAW-LOW)/RANGE)*100
  1. S RETURN=$FN(RETURN,"",0) ;$P(RETURN,".")
  1. Q RETURN
  1. ;
  1. TABLE ; Transform scores data Score^low score|range
  1. ; Domain 1 Physical Health^7|28
  1. ; Domain 2 Psychological^6|24
  1. ; Domain 3 Social Relationships^3|12
  1. ; Domain 4 Environment^8|32
  1. ;