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

YTSQOLI.m

Go to the documentation of this file.
  1. YTSQOLI ;SLC/PIJ - Score QOLI ; 01/08/2016
  1. ;;5.01;MENTAL HEALTH;**123,142,141**;DEC 30,1994;Build 85
  1. ;
  1. ;Public, Supported ICRs
  1. ; #2056 - Fileman API - $$GET1^DIQ
  1. ;
  1. Q
  1. ;
  1. DATA1 ;
  1. N RAWSCORE
  1. S RAWSCORE=0
  1. S YSINSNAM=$P($G(YSDATA(2)),U,3)
  1. I $G(YSINSNAM)="" S YSINSNAM=$G(YS("CODE"),"NO NAME PASSED")
  1. S NODE=2 F S NODE=$O(YSDATA(NODE)) Q:NODE="" D
  1. .S DATA=YSDATA(NODE)
  1. .S YSQN=$P(DATA,U,1)
  1. .S YSCDA=$P($G(DATA),U,3)
  1. .D DESGNTR^YTSCORE(YSQN,.DES)
  1. .S LEG=$$GET1^DIQ(601.75,YSCDA_",",4,"I")
  1. .I (YSCDA=1155)!(YSCDA=1156) S LEG=1155 ; Skipped
  1. .I YSCDA=3131 S LEG=0 ; Not Important
  1. .I YSCDA=3132 S LEG=1 ; Important
  1. .I YSCDA=3133 S LEG=2 ; Extremely Important
  1. .I YSCDA=1718 S LEG=0 ; S LEG=-3 ; Very dissatisfied (prior to 139)
  1. .I YSCDA=4110 S LEG=0 ; S LEG=-3 ; Very dissatisfied
  1. .I YSCDA=2357 S LEG=1 ; S LEG=-2 ; Somewhat dissatisfied
  1. .I YSCDA=3134 S LEG=2 ; S LEG=-1 ; A little dissatisfied
  1. .I YSCDA=3135 S LEG=3 ; S LEG=1 ; A little satisfied
  1. .I YSCDA=2356 S LEG=4 ; S LEG=2 ; Somewhat satisfied
  1. .I YSCDA=1714 S LEG=5 ; S LEG=3 ; Very satisfied (prior to 139)
  1. .I YSCDA=4109 S LEG=5 ; S LEG=3 ; Very satisfied
  1. .D SCORANS
  1. D SCORANS1
  1. Q
  1. ;
  1. STRING ;
  1. S INDENT=" "
  1. ; The reason for the next 3 lines is that the QOLI calculation does not add zeros to the result
  1. ; e.g. the RAW score = .8, s/b 0.8
  1. I (RAW="-.0")!(RAW="0.0") S RAW=0
  1. ;
  1. S TSCORE=$$GETTSCOR^YTSQOLI1(RAW,WGHTSAT0,WGHTSAT99)
  1. S SCORESTR=$$GETPSCOR^YTSQOLI1(RAW,WGHTSAT0,WGHTSAT99)
  1. F I=1:1:TSCORE S TSCORBAR=TSCORBAR_"*"
  1. ;
  1. S STRING=STRING_INDENT_"||(Raw Score: "_RAW_")"
  1. S STRING=STRING_INDENT_"| T Score: "_TSCORE
  1. S STRING=STRING_INDENT_"|(%ile Score: "_SCORESTR_")"
  1. S STRING=STRING_INDENT_"||Overall Quality of Life"
  1. S STRING=STRING_INDENT_"|| VERY LOW LOW AVERAGE HIGH"
  1. S STRING=STRING_INDENT_"|-----------------------------------------------------------------------------"
  1. S STRING=STRING_INDENT_"|"_TSCORBAR
  1. S STRING=STRING_INDENT_"|-----------------------------------------------------------------------------"
  1. S STRING=STRING_INDENT_"|: : : : :"
  1. S STRING=STRING_INDENT_"|0 37 43 58 77"
  1. S STRING=STRING_INDENT_"|||Weighted Satisfaction Profile"
  1. S STRING=STRING_INDENT_"|| DISSATISFACTION SATISFACTION"
  1. S STRING=STRING_INDENT_"| -6 -4 -3 -2 -1 0 1 2 3 4 6"
  1. S STRING=STRING_INDENT_"| ---------------------------------------------"
  1. ;
  1. D PADINFO("Health",SCALE(1))
  1. D PADINFO("Self-Esteem",SCALE(2))
  1. D PADINFO("Goals-and-Values",SCALE(3))
  1. D PADINFO("Money",SCALE(4))
  1. D PADINFO("Work",SCALE(5))
  1. D PADINFO("Play",SCALE(6))
  1. D PADINFO("Learning",SCALE(7))
  1. D PADINFO("Creativity",SCALE(8))
  1. D PADINFO("Helping",SCALE(9))
  1. D PADINFO("Love",SCALE(10))
  1. D PADINFO("Friends",SCALE(11))
  1. D PADINFO("Children",SCALE(12))
  1. D PADINFO("Relatives",SCALE(13))
  1. D PADINFO("Home",SCALE(14))
  1. D PADINFO("Neighborhood",SCALE(15))
  1. D PADINFO("Community",SCALE(16))
  1. ;
  1. S STRING=STRING_INDENT_"| ---------------------------------------------"
  1. S STRING=STRING_INDENT_"| -6 -4 -3 -2 -1 0 1 2 3 4 6"
  1. ;
  1. S STRING=STRING_"||||"_INDENT_"|The following weighted satisfaction ratings indicate areas of dissatisfaction"
  1. S STRING=STRING_"|for this person:"
  1. S STRING=STRING_"||"_INDENT_" Weighted "
  1. S STRING=STRING_"|Area Satisfaction Rating"
  1. S STRING=STRING_"|---- -------------------"
  1. D SORTSAT^YTSQOLI1
  1. ;
  1. S STRING=STRING_"|||OMITTED ITEMS"
  1. I OMITITEM'="" S STRING=STRING_"|"_INDENT_$E(OMITITEM,1,$L(OMITITEM)-1)
  1. I OMITITEM="" S STRING=STRING_"|"_INDENT_"None omitted"
  1. ; Response summary, but first convert any response of -99 to ''
  1. S STRING=STRING_"||ITEM RESPONSES|"
  1. S STRING=STRING_"|"
  1. ;
  1. F I=1:1:9 S STRING=STRING_" "_$P(RESPONSE,"|",I)_INDENT
  1. S STRING=STRING_" "_$P(RESPONSE,"|",10)_"|"
  1. F I=11:1:19 S STRING=STRING_$P(RESPONSE,"|",I)_INDENT
  1. S STRING=STRING_" "_$P(RESPONSE,"|",20)_"|"
  1. F I=21:1:29 S STRING=STRING_$P(RESPONSE,"|",I)_INDENT
  1. S STRING=STRING_" "_$P(RESPONSE,"|",30)_"|"
  1. F I=31:1:32 S STRING=STRING_$P(RESPONSE,"|",I)_INDENT
  1. S STRING=STRING_"|"
  1. Q
  1. ;
  1. PADINFO(NAME,SC) ;
  1. N I,PAD,PAD1,SP,Z,Z1
  1. S (PAD,PAD1,SP,Z,Z1)=""
  1. F I=1:1:(16-$L(NAME)) S SP=SP_" "
  1. S PAD=$S(SC="-6":2,SC="-4":6,SC="-3":10,SC="-2":14,SC="-1":18,SC="0":22,SC="1":26,SC="2":30,SC="3":34,SC="4":38,SC="6":42,1:"")
  1. F I=1:1:PAD S Z=Z_" "
  1. S PAD1=61-($L(SP)+$L(NAME)+$L(Z)+1)
  1. F I=1:1:PAD1 S Z1=Z1_" "
  1. S STRING=STRING_"|"_SP_NAME_":"_Z_"*"_Z1_":"_NAME
  1. Q
  1. ;
  1. SCORANS ;
  1. S TMPRSLT=LEG
  1. S TMPANS=YSCDA
  1. S (RESULT)=""
  1. ;
  1. ; must convert entered response of 1 (itemindex=0) to 1 for display
  1. S ITEMSCOR(DES)=$S(TMPRSLT=0:1,TMPRSLT=1:2,TMPRSLT=2:3,TMPRSLT=3:4,TMPRSLT=4:5,TMPRSLT=5:6,1:"")
  1. ;
  1. ; no conversion yet, itemIndex will be non negative, if unanswered
  1. I (TMPANS=1155) D
  1. .S TMPSCALE(DES)="-99"
  1. .S OMITITEM=OMITITEM_DES_","
  1. E D
  1. .S TMPSCALE(DES)=TMPRSLT ; TMPANS
  1. ; need to have a 2nd question before can do any calculations
  1. I (DES=1) S RESPONSE=RESPONSE_DES_":"_ITEMSCOR(DES)_"|" Q
  1. ; getting even numbered questions, satisfaction rating, needs conversion
  1. ; importance rating does not need any conversion.
  1. I (DES#2)=0 D
  1. .S TMPSCALE(DES)=$S(TMPSCALE(DES)=0:"-3",TMPSCALE(DES)=1:"-2",TMPSCALE(DES)=2:"-1",TMPSCALE(DES)=3:"1",TMPSCALE(DES)=4:"2",TMPSCALE(DES)=5:"3",1:TMPSCALE(DES))
  1. .; compute the scale, -99 = unendorsed
  1. .I (DES=26),(TMPSCALE(DES-1)=0),(TMPSCALE(DES)="-99") D
  1. ..S SCALE(DES/2)=0
  1. .; else if
  1. .E D
  1. ..I (TMPSCALE(DES-1)="-99")!(TMPSCALE(DES)="-99") D
  1. ...S SCALE(DES/2)="-99"
  1. ..E D
  1. ...S SCALE(DES/2)=(TMPSCALE(DES-1)*TMPSCALE(DES))
  1. .; compute the raw score and determine if a valid importance item (odd # question)
  1. .I SCALE(DES/2)'="-99" D
  1. ..S RAWSCORE=RAWSCORE+(SCALE(DES/2))
  1. ..I (TMPSCALE(DES-1)>0) S VALIDSCR=VALIDSCR+1
  1. .; used to compute invalid percentile score
  1. .I SCALE(DES/2)=0 S WGHTSAT0=WGHTSAT0+1
  1. .I SCALE(DES/2)="-99" S WGHTSAT99=WGHTSAT99+1
  1. ;collect value of all individual questions with the value entered
  1. S RESPONSE=RESPONSE_DES_":"_ITEMSCOR(DES)_"|"
  1. Q
  1. ;
  1. SCORANS1 ;
  1. ; compute rawScore
  1. I (VALIDSCR=0) S RAWSCORE="0.05"
  1. I (VALIDSCR'=0) S RAWSCORE=$J(((RAWSCORE/VALIDSCR)+.05),0,1)
  1. S RAW=$P(RAWSCORE,".",1)_"."_$E($P(RAWSCORE,".",2),0,1)
  1. Q
  1. SCORESV ;
  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)=YSINSNAM_" Scale not found"
  1. ;
  1. K ^TMP($J,"YSCOR")
  1. S ^TMP($J,"YSCOR",1)="[DATA]"
  1. S ^TMP($J,"YSCOR",2)=$$GET1^DIQ(601.87,762_",",3,"I")_"="_SCALE("1")
  1. S ^TMP($J,"YSCOR",3)=$$GET1^DIQ(601.87,763_",",3,"I")_"="_SCALE("2")
  1. S ^TMP($J,"YSCOR",4)=$$GET1^DIQ(601.87,764_",",3,"I")_"="_SCALE("3")
  1. S ^TMP($J,"YSCOR",5)=$$GET1^DIQ(601.87,765_",",3,"I")_"="_SCALE("4")
  1. S ^TMP($J,"YSCOR",6)=$$GET1^DIQ(601.87,766_",",3,"I")_"="_SCALE("5")
  1. S ^TMP($J,"YSCOR",7)=$$GET1^DIQ(601.87,767_",",3,"I")_"="_SCALE("6")
  1. S ^TMP($J,"YSCOR",8)=$$GET1^DIQ(601.87,768_",",3,"I")_"="_SCALE("7")
  1. S ^TMP($J,"YSCOR",9)=$$GET1^DIQ(601.87,769_",",3,"I")_"="_SCALE("8")
  1. S ^TMP($J,"YSCOR",10)=$$GET1^DIQ(601.87,770_",",3,"I")_"="_SCALE("9")
  1. S ^TMP($J,"YSCOR",11)=$$GET1^DIQ(601.87,771_",",3,"I")_"="_SCALE("10")
  1. S ^TMP($J,"YSCOR",12)=$$GET1^DIQ(601.87,772_",",3,"I")_"="_SCALE("11")
  1. S ^TMP($J,"YSCOR",13)=$$GET1^DIQ(601.87,773_",",3,"I")_"="_SCALE("12")
  1. S ^TMP($J,"YSCOR",14)=$$GET1^DIQ(601.87,774_",",3,"I")_"="_SCALE("13")
  1. S ^TMP($J,"YSCOR",15)=$$GET1^DIQ(601.87,775_",",3,"I")_"="_SCALE("14")
  1. S ^TMP($J,"YSCOR",16)=$$GET1^DIQ(601.87,776_",",3,"I")_"="_SCALE("15")
  1. S ^TMP($J,"YSCOR",17)=$$GET1^DIQ(601.87,777_",",3,"I")_"="_SCALE("16")
  1. Q
  1. ;
  1. DLLSTR(YSDATA,YS,YSTRNG) ;
  1. ; YSTRNG = 1 Score Instrument
  1. ; YSTRNG = 2 get Report Answers and Text
  1. N DATA,DES,I,NODE,LEG,YSQN,YSCDA,INDENT,TMPANS
  1. N YSINSNAM,ITEMSCOR,SCALE,TMPSCALE
  1. N TMPRSLT,VALIDSCR
  1. N SCORESTR,TSCORBAR,TSCORE,OMITTED,FLAG
  1. N OMITITEM,RESPONSE,STRING,STRING1
  1. N PROTECT,USE,RISK,RESULT
  1. N RAW,WGHTSAT0,WGHTSAT99
  1. ;
  1. S (TSCORE,SCORESTR,VALIDSCR)=0
  1. S (OMITTED,TSCORBAR)=""
  1. ;
  1. F I=1:1:32 S TMPSCALE(I)=0
  1. F I=1:1:32 S ITEMSCOR(I)=""
  1. F I=1:1:16 S SCALE(I)=0,SCALE(I_"."_5)=0
  1. ;
  1. S (OMITITEM,RESPONSE,STRING,STRING1)=""
  1. S (PROTECT,USE,RISK)=0
  1. S (RAW,WGHTSAT0,WGHTSAT99)=0
  1. S TMPRSLT=0
  1. ;
  1. D DATA1
  1. ;
  1. I YSTRNG=1 D SCORESV
  1. ;
  1. I YSTRNG=2 D
  1. .D LDSCORES^YTSCORE(.YSDATA,.YS)
  1. .D STRING
  1. .S YSDATA($O(YSDATA(""),-1)+1)=999999999999_U_U_STRING
  1. Q