YTSVR12 ;SLC/LLH - Score VR12 ; 01/08/2016
;;5.01;MENTAL HEALTH;**123**;DEC 30,1994;Build 73
;
;Public, Supported ICRs
; #2056 - Fileman API - $$GET1^DIQ
;
Q
;
SETSC(DES,LEG) ;
N QUES,ANS
S QUES=$E(DES)
I QUES=1 Q $S(LEG=1:100,LEG=2:85,LEG=3:60,LEG=4:35,1:"")
I QUES=2 Q $S(LEG'="":((LEG-1)*50),1:"")
I (QUES>2)&(QUES<6) Q $S(LEG'="":((5-LEG)*25),1:"")
I QUES=6 D Q ANS
.I $E(DES,2)'="C" S ANS=$S(LEG'="":((6-LEG)*20),1:"")
.I $E(DES,2)="C" S ANS=$S(LEG'="":((LEG-1)*20),1:"")
I QUES=7 Q $S(LEG'="":((LEG-1)*25),1:"")
Q
;
SETKEY(DES) ;
;
I DES=1 Q $$PWR^XLFMTH(2,11)
I DES="2A" Q $$PWR^XLFMTH(2,10)
I DES="2B" Q $$PWR^XLFMTH(2,9)
I DES="3A" Q $$PWR^XLFMTH(2,8)
I DES="3B" Q $$PWR^XLFMTH(2,7)
I DES="4A" Q $$PWR^XLFMTH(2,6)
I DES="4B" Q $$PWR^XLFMTH(2,5)
I DES="5" Q $$PWR^XLFMTH(2,4)
I DES="6A" Q $$PWR^XLFMTH(2,3)
I DES="6B" Q $$PWR^XLFMTH(2,2)
I DES="6C" Q $$PWR^XLFMTH(2,1)
I DES="7" Q $$PWR^XLFMTH(2,0)
Q
;
SUMKEY(KEY) ;
N QN,SUM
S SUM=0,QN=0
I '$D(KEY) Q SUM
F S QN=$O(KEY(QN)) Q:'QN S SUM=SUM+KEY(QN)
Q SUM
MCALC(SC,KEYSUM,ROU,MCS,PCS) ;
N I,MROW,PROW,MLABEL,PLABEL
S MLABEL=KEYSUM_U_ROU("MKS")
S MROW=$P($T(@MLABEL),";;",2,99)
S PLABEL=KEYSUM_U_ROU("PKS")
S PROW=$P($T(@PLABEL),";;",2,99)
F I=1:1:12 D
.S MCS=MCS+($P(MROW,"~",I)*SC(I))
.S PCS=PCS+($P(PROW,"~",I)*SC(I))
S MCS=MCS+$P(MROW,"~",13)
S PCS=PCS+$P(PROW,"~",13)
Q
GETROU(KEYSUM,ROU) ; get routine to look up values to use in calculations
N I,K1,K2,TMP
K ROU
S K1=""
F I="MKS","PKS" F S K1=$O(@I@(K1)) Q:K1="" S K2="" D
.F S K2=$O(@I@(K1,K2)) Q:'K2 D
..I KEYSUM=K1 S ROU(I)=@I@(K1,K2)
..I (KEYSUM>K1)&((KEYSUM<K2)!(KEYSUM=K2)) S ROU(I)=@I@(K1,K2)
Q
DATA1 ;
N I,KEY,KEYSUM,VN,MTCH,ROU,SC
S YSINSNAM=$P($G(YSDATA(2)),U,3)
I $G(YSINSNAM)="" S YSINSNAM=$G(YS("CODE"),"NO NAME PASSED")
S NODE=2 F S NODE=$O(YSDATA(NODE)) Q:NODE="" D ; Start at YSDATA(3)
.S DATA=YSDATA(NODE)
.S YSQN=$P(DATA,U,1)
.S YSSEQ=$P(DATA,U,2),YSSEQ=$P(YSSEQ,";",1) ; Sequence Number
.S YSCDA=$P($G(DATA),U,3) ; Choice ID
.I (YSCDA=1155)!(YSCDA=1156)!(YSCDA="NOT ASKED") S YSCDA=""
.D DESGNTR^YTSCORE(YSQN,.DES)
.S LEG=$S(YSCDA'="":$$GET1^DIQ(601.75,YSCDA_",",4,"I"),1:"")
.;Questions 8 and 9 are not scored
.I DES<8 D
..;convert DES to Variable Name
..;S VN=$S(DES=1:"gh1x",DES="2A":"pf02x",DES="2B":"pf04x",DES="3A":"rp2x",DES="3B":"rp3x",DES="4A":"re2x",DES="4B":"re3x",DES="5":"bp2x",DES="6A":"mh3x",DES="6B":"vt2x",DES="6C":"mh4x",DES="7":"sf2x",1:"unk")
..;rather than use Var Names, use piece in row found in table routines
..S VN=$S(DES=1:1,DES="2A":2,DES="2B":3,DES="3A":4,DES="3B":5,DES="4A":6,DES="4B":7,DES="5":8,DES="6A":9,DES="6B":10,DES="6C":11,DES="7":12,1:"unk")
..S SC(VN)=$$SETSC(DES,LEG)
..I LEG="" S KEY(DES)=$$SETKEY(DES)
S KEYSUM=$$SUMKEY(.KEY)
I $G(KEYSUM)'="" D GETROU(.KEYSUM,.ROU)
D MCALC(.SC,.KEYSUM,.ROU,.MCS,.PCS)
Q
;
SCORESV ;
I $D(^TMP($J,"YSG",1)),^TMP($J,"YSG",1)="[ERROR]" D Q ;-->out
.K ^TMP($J,"YSCOR")
.S ^TMP($J,"YSCOR",1)="[ERROR]"
.S ^TMP($J,"YSCOR",2)="VR-12 Scale not found"
;
S PCS=$J(PCS,0,4)
S MCS=$J(MCS,0,4)
;
K ^TMP($J,"YSCOR")
S ^TMP($J,"YSCOR",1)="[DATA]"
S ^TMP($J,"YSCOR",2)=$$GET1^DIQ(601.87,627_",",3,"I")_"="_PCS
S ^TMP($J,"YSCOR",3)=$$GET1^DIQ(601.87,628_",",3,"I")_"="_MCS
Q
;
BLDLKU ;
N I,ROU,SCR,X
F I=1:1 S X=$P($T(MCSKEY+I),";;",2,99) Q:X="zzzzz" D
.S SCR=$P(X,"~"),ROU=$P(X,"~",2)
.S MKS($P(SCR,U),$P(SCR,U,2))=ROU
F I=1:1 S X=$P($T(PCSKEY+I),";;",2,99) Q:X="zzzzz" D
.S SCR=$P(X,"~"),ROU=$P(X,"~",2)
.S PKS($P(SCR,U),$P(SCR,U,2))=ROU
Q
DLLSTR(YSDATA,YS,YSTRNG) ;
; YSTRNG = 1 Score Instrument
; YSTRNG = 2 get Report Answers and Text
;
N DATA,DES,NODE,LEG,YSCDA,YSAN,YSSEQ,YSQN,YSINSNAM
N PCS,MCS,MKS,PKS
;
S PCS=0,MCS=0
;
;Can use stored scores, all special text is in MH REPORTS
I YSTRNG=2 Q
;
D BLDLKU
D DATA1
D SCORESV
Q
;
MCSKEY ;
;;0^105~YTSVRM1
;;106^229~YTSVRM2
;;230^354~YTSVRM3
;;355^489~YTSVRM4
;;490^618~YTSVRM5
;;620^759~YTSVRM6
;;760^900~YTSVRM7
;;901^1046~YTSVRM8
;;1047^1174~YTSVRM9
;;1175^1312~YTSVRM10
;;1313^1454~YTSVRM11
;;1455^1600~YTSVRM12
;;1601^1745~YTSVRM13
;;1746^1898~YTSVRM14
;;1900^2063~YTSVRM15
;;2064^2190~YTSVRM16
;;2191^2327~YTSVRM17
;;2328^2467~YTSVRM18
;;2468^2612~YTSVRM19
;;2613^2756~YTSVRM20
;;2757^2907~YTSVRM21
;;2908^3074~YTSVRM22
;;3075^3210~YTSVRM23
;;3211^3359~YTSVRM24
;;3360^3514~YTSVRM25
;;3515^3671~YTSVRM26
;;3672^3829~YTSVRM27
;;3830^3989~YTSVRM28
;;3990^4094~YTSVRM29
;;zzzzz
Q
PCSKEY ;
;;0^112~YTSVRP1
;;113^234~YTSVRP2
;;235^359~YTSVRP3
;;360^494~YTSVRP4
;;495^620~YTSVRP5
;;621^755~YTSVRP6
;;756^893~YTSVRP7
;;894^1037~YTSVRP8
;;1038^1162~YTSVRP9
;;1163^1296~YTSVRP10
;;1297^1432~YTSVRP11
;;1433^1576~YTSVRP12
;;1577^1715~YTSVRP13
;;1716^1863~YTSVRP14
;;1864^2023~YTSVRP15
;;2024^2153~YTSVRP16
;;2154^2286~YTSVRP17
;;2287^2422~YTSVRP18
;;2423^2569~YTSVRP19
;;2570^2704~YTSVRP20
;;2705^2851~YTSVRP21
;;2852^3006~YTSVRP22
;;3007^3152~YTSVRP23
;;3153^3296~YTSVRP24
;;3297^3445~YTSVRP25
;;3446^3604~YTSVRP26
;;3605^3754~YTSVRP27
;;3755^3909~YTSVRP28
;;3910^4090~YTSVRP29
;;zzzzz
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HYTSVR12 5320 printed Oct 16, 2024@18:21:37 Page 2
YTSVR12 ;SLC/LLH - Score VR12 ; 01/08/2016
+1 ;;5.01;MENTAL HEALTH;**123**;DEC 30,1994;Build 73
+2 ;
+3 ;Public, Supported ICRs
+4 ; #2056 - Fileman API - $$GET1^DIQ
+5 ;
+6 QUIT
+7 ;
SETSC(DES,LEG) ;
+1 NEW QUES,ANS
+2 SET QUES=$EXTRACT(DES)
+3 IF QUES=1
QUIT $SELECT(LEG=1:100,LEG=2:85,LEG=3:60,LEG=4:35,1:"")
+4 IF QUES=2
QUIT $SELECT(LEG'="":((LEG-1)*50),1:"")
+5 IF (QUES>2)&(QUES<6)
QUIT $SELECT(LEG'="":((5-LEG)*25),1:"")
+6 IF QUES=6
Begin DoDot:1
+7 IF $EXTRACT(DES,2)'="C"
SET ANS=$SELECT(LEG'="":((6-LEG)*20),1:"")
+8 IF $EXTRACT(DES,2)="C"
SET ANS=$SELECT(LEG'="":((LEG-1)*20),1:"")
End DoDot:1
QUIT ANS
+9 IF QUES=7
QUIT $SELECT(LEG'="":((LEG-1)*25),1:"")
+10 QUIT
+11 ;
SETKEY(DES) ;
+1 ;
+2 IF DES=1
QUIT $$PWR^XLFMTH(2,11)
+3 IF DES="2A"
QUIT $$PWR^XLFMTH(2,10)
+4 IF DES="2B"
QUIT $$PWR^XLFMTH(2,9)
+5 IF DES="3A"
QUIT $$PWR^XLFMTH(2,8)
+6 IF DES="3B"
QUIT $$PWR^XLFMTH(2,7)
+7 IF DES="4A"
QUIT $$PWR^XLFMTH(2,6)
+8 IF DES="4B"
QUIT $$PWR^XLFMTH(2,5)
+9 IF DES="5"
QUIT $$PWR^XLFMTH(2,4)
+10 IF DES="6A"
QUIT $$PWR^XLFMTH(2,3)
+11 IF DES="6B"
QUIT $$PWR^XLFMTH(2,2)
+12 IF DES="6C"
QUIT $$PWR^XLFMTH(2,1)
+13 IF DES="7"
QUIT $$PWR^XLFMTH(2,0)
+14 QUIT
+15 ;
SUMKEY(KEY) ;
+1 NEW QN,SUM
+2 SET SUM=0
SET QN=0
+3 IF '$DATA(KEY)
QUIT SUM
+4 FOR
SET QN=$ORDER(KEY(QN))
if 'QN
QUIT
SET SUM=SUM+KEY(QN)
+5 QUIT SUM
MCALC(SC,KEYSUM,ROU,MCS,PCS) ;
+1 NEW I,MROW,PROW,MLABEL,PLABEL
+2 SET MLABEL=KEYSUM_U_ROU("MKS")
+3 SET MROW=$PIECE($TEXT(@MLABEL),";;",2,99)
+4 SET PLABEL=KEYSUM_U_ROU("PKS")
+5 SET PROW=$PIECE($TEXT(@PLABEL),";;",2,99)
+6 FOR I=1:1:12
Begin DoDot:1
+7 SET MCS=MCS+($PIECE(MROW,"~",I)*SC(I))
+8 SET PCS=PCS+($PIECE(PROW,"~",I)*SC(I))
End DoDot:1
+9 SET MCS=MCS+$PIECE(MROW,"~",13)
+10 SET PCS=PCS+$PIECE(PROW,"~",13)
+11 QUIT
GETROU(KEYSUM,ROU) ; get routine to look up values to use in calculations
+1 NEW I,K1,K2,TMP
+2 KILL ROU
+3 SET K1=""
+4 FOR I="MKS","PKS"
FOR
SET K1=$ORDER(@I@(K1))
if K1=""
QUIT
SET K2=""
Begin DoDot:1
+5 FOR
SET K2=$ORDER(@I@(K1,K2))
if 'K2
QUIT
Begin DoDot:2
+6 IF KEYSUM=K1
SET ROU(I)=@I@(K1,K2)
+7 IF (KEYSUM>K1)&((KEYSUM<K2)!(KEYSUM=K2))
SET ROU(I)=@I@(K1,K2)
End DoDot:2
End DoDot:1
+8 QUIT
DATA1 ;
+1 NEW I,KEY,KEYSUM,VN,MTCH,ROU,SC
+2 SET YSINSNAM=$PIECE($GET(YSDATA(2)),U,3)
+3 IF $GET(YSINSNAM)=""
SET YSINSNAM=$GET(YS("CODE"),"NO NAME PASSED")
+4 ; Start at YSDATA(3)
SET NODE=2
FOR
SET NODE=$ORDER(YSDATA(NODE))
if NODE=""
QUIT
Begin DoDot:1
+5 SET DATA=YSDATA(NODE)
+6 SET YSQN=$PIECE(DATA,U,1)
+7 ; Sequence Number
SET YSSEQ=$PIECE(DATA,U,2)
SET YSSEQ=$PIECE(YSSEQ,";",1)
+8 ; Choice ID
SET YSCDA=$PIECE($GET(DATA),U,3)
+9 IF (YSCDA=1155)!(YSCDA=1156)!(YSCDA="NOT ASKED")
SET YSCDA=""
+10 DO DESGNTR^YTSCORE(YSQN,.DES)
+11 SET LEG=$SELECT(YSCDA'="":$$GET1^DIQ(601.75,YSCDA_",",4,"I"),1:"")
+12 ;Questions 8 and 9 are not scored
+13 IF DES<8
Begin DoDot:2
+14 ;convert DES to Variable Name
+15 ;S VN=$S(DES=1:"gh1x",DES="2A":"pf02x",DES="2B":"pf04x",DES="3A":"rp2x",DES="3B":"rp3x",DES="4A":"re2x",DES="4B":"re3x",DES="5":"bp2x",DES="6A":"mh3x",DES="6B":"vt2x",DES="6C":"mh4x",DES="7":"sf2x",1:"unk")
+16 ;rather than use Var Names, use piece in row found in table routines
+17 SET VN=$SELECT(DES=1:1,DES="2A":2,DES="2B":3,DES="3A":4,DES="3B":5,DES="4A":6,DES="4B":7,DES="5":8,DES="6A":9,DES="6B":10,DES="6C":11,DES="7":12,1:"unk")
+18 SET SC(VN)=$$SETSC(DES,LEG)
+19 IF LEG=""
SET KEY(DES)=$$SETKEY(DES)
End DoDot:2
End DoDot:1
+20 SET KEYSUM=$$SUMKEY(.KEY)
+21 IF $GET(KEYSUM)'=""
DO GETROU(.KEYSUM,.ROU)
+22 DO MCALC(.SC,.KEYSUM,.ROU,.MCS,.PCS)
+23 QUIT
+24 ;
SCORESV ;
+1 ;-->out
IF $DATA(^TMP($JOB,"YSG",1))
IF ^TMP($JOB,"YSG",1)="[ERROR]"
Begin DoDot:1
+2 KILL ^TMP($JOB,"YSCOR")
+3 SET ^TMP($JOB,"YSCOR",1)="[ERROR]"
+4 SET ^TMP($JOB,"YSCOR",2)="VR-12 Scale not found"
End DoDot:1
QUIT
+5 ;
+6 SET PCS=$JUSTIFY(PCS,0,4)
+7 SET MCS=$JUSTIFY(MCS,0,4)
+8 ;
+9 KILL ^TMP($JOB,"YSCOR")
+10 SET ^TMP($JOB,"YSCOR",1)="[DATA]"
+11 SET ^TMP($JOB,"YSCOR",2)=$$GET1^DIQ(601.87,627_",",3,"I")_"="_PCS
+12 SET ^TMP($JOB,"YSCOR",3)=$$GET1^DIQ(601.87,628_",",3,"I")_"="_MCS
+13 QUIT
+14 ;
BLDLKU ;
+1 NEW I,ROU,SCR,X
+2 FOR I=1:1
SET X=$PIECE($TEXT(MCSKEY+I),";;",2,99)
if X="zzzzz"
QUIT
Begin DoDot:1
+3 SET SCR=$PIECE(X,"~")
SET ROU=$PIECE(X,"~",2)
+4 SET MKS($PIECE(SCR,U),$PIECE(SCR,U,2))=ROU
End DoDot:1
+5 FOR I=1:1
SET X=$PIECE($TEXT(PCSKEY+I),";;",2,99)
if X="zzzzz"
QUIT
Begin DoDot:1
+6 SET SCR=$PIECE(X,"~")
SET ROU=$PIECE(X,"~",2)
+7 SET PKS($PIECE(SCR,U),$PIECE(SCR,U,2))=ROU
End DoDot:1
+8 QUIT
DLLSTR(YSDATA,YS,YSTRNG) ;
+1 ; YSTRNG = 1 Score Instrument
+2 ; YSTRNG = 2 get Report Answers and Text
+3 ;
+4 NEW DATA,DES,NODE,LEG,YSCDA,YSAN,YSSEQ,YSQN,YSINSNAM
+5 NEW PCS,MCS,MKS,PKS
+6 ;
+7 SET PCS=0
SET MCS=0
+8 ;
+9 ;Can use stored scores, all special text is in MH REPORTS
+10 IF YSTRNG=2
QUIT
+11 ;
+12 DO BLDLKU
+13 DO DATA1
+14 DO SCORESV
+15 QUIT
+16 ;
MCSKEY ;
+1 ;;0^105~YTSVRM1
+2 ;;106^229~YTSVRM2
+3 ;;230^354~YTSVRM3
+4 ;;355^489~YTSVRM4
+5 ;;490^618~YTSVRM5
+6 ;;620^759~YTSVRM6
+7 ;;760^900~YTSVRM7
+8 ;;901^1046~YTSVRM8
+9 ;;1047^1174~YTSVRM9
+10 ;;1175^1312~YTSVRM10
+11 ;;1313^1454~YTSVRM11
+12 ;;1455^1600~YTSVRM12
+13 ;;1601^1745~YTSVRM13
+14 ;;1746^1898~YTSVRM14
+15 ;;1900^2063~YTSVRM15
+16 ;;2064^2190~YTSVRM16
+17 ;;2191^2327~YTSVRM17
+18 ;;2328^2467~YTSVRM18
+19 ;;2468^2612~YTSVRM19
+20 ;;2613^2756~YTSVRM20
+21 ;;2757^2907~YTSVRM21
+22 ;;2908^3074~YTSVRM22
+23 ;;3075^3210~YTSVRM23
+24 ;;3211^3359~YTSVRM24
+25 ;;3360^3514~YTSVRM25
+26 ;;3515^3671~YTSVRM26
+27 ;;3672^3829~YTSVRM27
+28 ;;3830^3989~YTSVRM28
+29 ;;3990^4094~YTSVRM29
+30 ;;zzzzz
+31 QUIT
PCSKEY ;
+1 ;;0^112~YTSVRP1
+2 ;;113^234~YTSVRP2
+3 ;;235^359~YTSVRP3
+4 ;;360^494~YTSVRP4
+5 ;;495^620~YTSVRP5
+6 ;;621^755~YTSVRP6
+7 ;;756^893~YTSVRP7
+8 ;;894^1037~YTSVRP8
+9 ;;1038^1162~YTSVRP9
+10 ;;1163^1296~YTSVRP10
+11 ;;1297^1432~YTSVRP11
+12 ;;1433^1576~YTSVRP12
+13 ;;1577^1715~YTSVRP13
+14 ;;1716^1863~YTSVRP14
+15 ;;1864^2023~YTSVRP15
+16 ;;2024^2153~YTSVRP16
+17 ;;2154^2286~YTSVRP17
+18 ;;2287^2422~YTSVRP18
+19 ;;2423^2569~YTSVRP19
+20 ;;2570^2704~YTSVRP20
+21 ;;2705^2851~YTSVRP21
+22 ;;2852^3006~YTSVRP22
+23 ;;3007^3152~YTSVRP23
+24 ;;3153^3296~YTSVRP24
+25 ;;3297^3445~YTSVRP25
+26 ;;3446^3604~YTSVRP26
+27 ;;3605^3754~YTSVRP27
+28 ;;3755^3909~YTSVRP28
+29 ;;3910^4090~YTSVRP29
+30 ;;zzzzz
+31 QUIT