@baravak/risloo-profile-cli 4.17.0 → 4.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/publish/json/profiles/CBCL93.json +1427 -0
- package/src/samples/CBCL93.js +243 -0
- package/views/profiles/samples/CBCL93.hbs +220 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
const { Profile } = require("../Profile");
|
|
2
|
+
|
|
3
|
+
class CBCL93 extends Profile {
|
|
4
|
+
// Number of pages
|
|
5
|
+
static pages = 1;
|
|
6
|
+
|
|
7
|
+
// Labels of the sample
|
|
8
|
+
labels = {
|
|
9
|
+
L1: { eng: "anxious_depressed_value", fa: 'اضطراب / افسردگی' },
|
|
10
|
+
L2: { eng: "anxious_depressed_t" },
|
|
11
|
+
L3: { eng: "anxious_depressed_pr" },
|
|
12
|
+
L03: { eng: "anxious_depressed_status" },
|
|
13
|
+
|
|
14
|
+
L4: { eng: "depressed_value", fa: 'گوشهگیری / افسردگی' },
|
|
15
|
+
L5: { eng: "depressed_t" },
|
|
16
|
+
L6: { eng: "depressed_pr" },
|
|
17
|
+
L06: { eng: "depressed_status" },
|
|
18
|
+
|
|
19
|
+
L7: { eng: "somatic_complaints_value", fa: 'شکایات جسمانی' },
|
|
20
|
+
L8: { eng: "somatic_complaints_t" },
|
|
21
|
+
L9: { eng: "somatic_complaints_pr" },
|
|
22
|
+
L09: { eng: "somatic_complaints_status" },
|
|
23
|
+
|
|
24
|
+
L10: { eng: "social_problems_value", fa: 'مشکلات اجتماعی' },
|
|
25
|
+
L11: { eng: "social_problems_t" },
|
|
26
|
+
L12: { eng: "social_problems_pr" },
|
|
27
|
+
L012: { eng: "social_problems_status" },
|
|
28
|
+
|
|
29
|
+
L13: { eng: "thought_problems_value", fa: 'مشکلات تفکر' },
|
|
30
|
+
L14: { eng: "thought_problems_t" },
|
|
31
|
+
L15: { eng: "thought_problems_pr" },
|
|
32
|
+
L015: { eng: "thought_problems_status" },
|
|
33
|
+
|
|
34
|
+
L16: { eng: "attention_problems_value", fa: 'مشکلات توجه' },
|
|
35
|
+
L17: { eng: "attention_problems_t" },
|
|
36
|
+
L18: { eng: "attention_problems_pr" },
|
|
37
|
+
L018: { eng: "attention_problems_status" },
|
|
38
|
+
|
|
39
|
+
L19: { eng: "rule_breaking_behaviour_value", fa: 'رفتار قانونشکنی' },
|
|
40
|
+
L20: { eng: "rule_breaking_behaviour_t" },
|
|
41
|
+
L21: { eng: "rule_breaking_behaviour_pr" },
|
|
42
|
+
L021: { eng: "rule_breaking_behaviour_status" },
|
|
43
|
+
|
|
44
|
+
L22: { eng: "aggressive_behaviour_value", fa: 'رفتار پرخاشگرانه' },
|
|
45
|
+
L23: { eng: "aggressive_behaviour_t" },
|
|
46
|
+
L24: { eng: "aggressive_behaviour_pr" },
|
|
47
|
+
L024: { eng: "aggressive_behaviour_status" },
|
|
48
|
+
|
|
49
|
+
L25: { eng: "internalizing_value", fa: 'درونیسازی' },
|
|
50
|
+
L26: { eng: "internalizing_t" },
|
|
51
|
+
L27: { eng: "internalizing_pr" },
|
|
52
|
+
L027: { eng: "internalizing_status" },
|
|
53
|
+
|
|
54
|
+
L28: { eng: "externalizing_value", fa: 'برونی سازی' },
|
|
55
|
+
L29: { eng: "externalizing_t" },
|
|
56
|
+
L30: { eng: "externalizing_pr" },
|
|
57
|
+
L030: { eng: "externalizing_status" },
|
|
58
|
+
|
|
59
|
+
L31: { eng: "total_value", fa: 'مشکلات کلی (نمره کل)' },
|
|
60
|
+
L32: { eng: "total_t" },
|
|
61
|
+
L33: { eng: "total_pr" },
|
|
62
|
+
L033: { eng: "total_status" },
|
|
63
|
+
|
|
64
|
+
L34: { eng: "affective_problems_value", fa: ['مشکلات','عاطفی'] },
|
|
65
|
+
L35: { eng: "affective_problems_t" },
|
|
66
|
+
L36: { eng: "affective_problems_pr" },
|
|
67
|
+
L036: { eng: "affective_problems_status" },
|
|
68
|
+
|
|
69
|
+
L37: { eng: "anxiety_problems_value", fa: ['مشکلات','اضطرابی'] },
|
|
70
|
+
L38: { eng: "anxiety_problems_t" },
|
|
71
|
+
L39: { eng: "anxiety_problems_pr" },
|
|
72
|
+
L039: { eng: "anxiety_problems_status" },
|
|
73
|
+
|
|
74
|
+
L40: { eng: "somatic_problems_value", fa: ['مشکلات','جسمانی (تنی)'] },
|
|
75
|
+
L41: { eng: "somatic_problems_t" },
|
|
76
|
+
L42: { eng: "somatic_problems_pr" },
|
|
77
|
+
L042: { eng: "somatic_problems_status" },
|
|
78
|
+
|
|
79
|
+
L43: { eng: "adhd_value", fa: ['مشکلات','ADHD'] },
|
|
80
|
+
L44: { eng: "adhd_t" },
|
|
81
|
+
L45: { eng: "adhd_pr" },
|
|
82
|
+
L045: { eng: "adhd_status" },
|
|
83
|
+
|
|
84
|
+
L46: { eng: "oppositional_defiant_problems_value", fa: ['مشکلات','رفتار مقابلهای'] },
|
|
85
|
+
L47: { eng: "oppositional_defiant_problems_t" },
|
|
86
|
+
L48: { eng: "oppositional_defiant_problems_pr" },
|
|
87
|
+
L048: { eng: "oppositional_defiant_problems_status" },
|
|
88
|
+
|
|
89
|
+
L49: { eng: "conduct_problems_value", fa: ['مشکلات','سلوک'] },
|
|
90
|
+
L50: { eng: "conduct_problems_t" },
|
|
91
|
+
L51: { eng: "conduct_problems_pr" },
|
|
92
|
+
L051: { eng: "conduct_problems_status" },
|
|
93
|
+
|
|
94
|
+
L52: {eng: "other_problems", fa: 'سایر مشکلات'}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
profileSpec = {
|
|
98
|
+
/* "sample" determines some important info about the sample and profile */
|
|
99
|
+
/* Default prerequisites: 1. gender, 2. age, 3. education */
|
|
100
|
+
/* "prerequisites" is synonym to "fields" in our program */
|
|
101
|
+
sample: {
|
|
102
|
+
name: "پرسشنامه افسردگی کودکان و نوجوانان - جانبزرگی" /* Name of the sample */,
|
|
103
|
+
multiProfile: false /* Whether the sample has multiple profiles or not */,
|
|
104
|
+
questions: true /* Determines whether to get questions from inital dataset or not */,
|
|
105
|
+
defaultFields: false /* Determines whether to have default prerequisites in the profile or not */,
|
|
106
|
+
fields: ['child_name', 'gender', 'age', 'education','filler_name', 'relationship'] /* In case you want to get some additional fields and show in the profile */,
|
|
107
|
+
},
|
|
108
|
+
/* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
|
|
109
|
+
/* calculating its dimensions carefully is of great importance */
|
|
110
|
+
profile: {
|
|
111
|
+
get dimensions() {
|
|
112
|
+
return {
|
|
113
|
+
width: 863 + 2 * this.padding.x,
|
|
114
|
+
height: 653 + 2 * this.padding.y,
|
|
115
|
+
};
|
|
116
|
+
},
|
|
117
|
+
padding: {
|
|
118
|
+
x: 28,
|
|
119
|
+
y: 20,
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
/* "labels" part which has to be provided for each profile */
|
|
124
|
+
labels: Object.values(this.labels),
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
constructor(dataset, options, config = {}) {
|
|
128
|
+
super();
|
|
129
|
+
this._init(dataset, options, config);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
_calcContext() {
|
|
133
|
+
const {
|
|
134
|
+
spec: { parameters: spec },
|
|
135
|
+
dataset,
|
|
136
|
+
} = this;
|
|
137
|
+
|
|
138
|
+
// Deconstructing the Spec of the Profile
|
|
139
|
+
|
|
140
|
+
// Separate Raw Data from the Dataset
|
|
141
|
+
const items = []
|
|
142
|
+
for(let i=0; i < 68; i+=4){
|
|
143
|
+
const value = dataset.score[i]
|
|
144
|
+
const t = dataset.score[i +1]
|
|
145
|
+
const pr = dataset.score[i +2]
|
|
146
|
+
const status = dataset.score[i +3]
|
|
147
|
+
items.push({
|
|
148
|
+
label: value.label.fa,
|
|
149
|
+
value: value.mark ?? 0,
|
|
150
|
+
t: t.mark ?? 0,
|
|
151
|
+
pr: pr.mark ?? 0,
|
|
152
|
+
status: status.mark,
|
|
153
|
+
height: 0
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
const group1 = [
|
|
157
|
+
items[0],
|
|
158
|
+
items[1],
|
|
159
|
+
items[2],
|
|
160
|
+
items[3],
|
|
161
|
+
items[4],
|
|
162
|
+
items[5],
|
|
163
|
+
items[6],
|
|
164
|
+
items[7]
|
|
165
|
+
].map((item, index) => {
|
|
166
|
+
const height = calculateTotalLength(item.t, ...groupRange1)
|
|
167
|
+
return {
|
|
168
|
+
...item,
|
|
169
|
+
height,
|
|
170
|
+
transform: `translate(0, ${165 - height})`,
|
|
171
|
+
fill: `url(#gradient-${item.status})`,
|
|
172
|
+
rawColor: statusColor[item.status][0],
|
|
173
|
+
clipPath: 'url(#bar24x165)',
|
|
174
|
+
}
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
const group2 = [
|
|
178
|
+
items[8],
|
|
179
|
+
items[9],
|
|
180
|
+
items[10],
|
|
181
|
+
].map(item => {
|
|
182
|
+
const height = calculateTotalLength(item.t, ...groupRange2)
|
|
183
|
+
return {
|
|
184
|
+
...item,
|
|
185
|
+
height,
|
|
186
|
+
transform: `translate(0, ${162 - height})`,
|
|
187
|
+
fill: `url(#gradient-${item.status})`,
|
|
188
|
+
rawColor: statusColor[item.status][0],
|
|
189
|
+
clipPath: 'url(#bar24x162)',
|
|
190
|
+
}
|
|
191
|
+
})
|
|
192
|
+
const group3 = [
|
|
193
|
+
items[11],
|
|
194
|
+
items[12],
|
|
195
|
+
items[13],
|
|
196
|
+
items[14],
|
|
197
|
+
items[15],
|
|
198
|
+
items[16]
|
|
199
|
+
].map(item => {
|
|
200
|
+
const height = calculateTotalLength(item.t, ...groupRange1)
|
|
201
|
+
return {
|
|
202
|
+
...item,
|
|
203
|
+
height,
|
|
204
|
+
transform: `translate(0, ${165 - height})`,
|
|
205
|
+
fill: `url(#gradient-${item.status})`,
|
|
206
|
+
rawColor: statusColor[item.status][0],
|
|
207
|
+
clipPath: 'url(#bar24x165)',
|
|
208
|
+
}
|
|
209
|
+
})
|
|
210
|
+
return [{ group1, group2, group3, statusColor }];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function calculateTotalLength(score, ...ranges) {
|
|
214
|
+
let total = 0;
|
|
215
|
+
for(let i = 0; i < ranges.length; i++){
|
|
216
|
+
const [start, weight] = ranges[i]
|
|
217
|
+
if(score < start) break
|
|
218
|
+
const next = ranges[i + 1]?.[0] ?? 90
|
|
219
|
+
const length = Math.min(next - start, score - start)
|
|
220
|
+
total += length * weight
|
|
221
|
+
}
|
|
222
|
+
return total;
|
|
223
|
+
}
|
|
224
|
+
const statusColor = {
|
|
225
|
+
'normal': ['#059669', '#6EE7B7'],
|
|
226
|
+
'borderline': ['#EAB308', '#FEF08A'],
|
|
227
|
+
'clinical': ['#DC2626', '#FCA5A5'],
|
|
228
|
+
}
|
|
229
|
+
const groupRange1 = [
|
|
230
|
+
[0, 1],
|
|
231
|
+
[30, 2],
|
|
232
|
+
[64, 5],
|
|
233
|
+
[69, 2]
|
|
234
|
+
];
|
|
235
|
+
const groupRange2 = [
|
|
236
|
+
[0, 1],
|
|
237
|
+
[30, 2],
|
|
238
|
+
[59, 5],
|
|
239
|
+
[63, 2]
|
|
240
|
+
];
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
module.exports = CBCL93;
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
{{#> layout}}
|
|
2
|
+
<defs>
|
|
3
|
+
{{#each statusColor as |bar index|}}
|
|
4
|
+
<linearGradient id="gradient-{{index}}" gradientTransform="rotate(90)">
|
|
5
|
+
<stop offset="0%" stop-color="{{bar.[0]}}" />
|
|
6
|
+
<stop offset="100%" stop-color="{{bar.[1]}}" />
|
|
7
|
+
</linearGradient>
|
|
8
|
+
{{/each}}
|
|
9
|
+
<clipPath id="bar24x165">
|
|
10
|
+
{{bar 24 165 (object tl=4 tr=4 bl=0 br=0) (toRad 0) }}
|
|
11
|
+
</clipPath>
|
|
12
|
+
<clipPath id="bar24x162">
|
|
13
|
+
{{bar 24 162 (object tl=4 tr=4 bl=0 br=0) (toRad 0) }}
|
|
14
|
+
</clipPath>
|
|
15
|
+
<filter id="lineShadow1" x="0" y="0" width="345" height="7" filterUnits="userSpaceOnUse"
|
|
16
|
+
color-interpolation-filters="sRGB">
|
|
17
|
+
<feFlood flood-opacity="0" result="lineShadow1-bf" />
|
|
18
|
+
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
|
19
|
+
result="hardAlpha" />
|
|
20
|
+
<feOffset dy="-1" />
|
|
21
|
+
<feGaussianBlur stdDeviation="1.5" />
|
|
22
|
+
<feComposite in2="hardAlpha" operator="out" />
|
|
23
|
+
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0" />
|
|
24
|
+
<feBlend mode="normal" in2="lineShadow1-bf" result="lineShadow1-ed" />
|
|
25
|
+
<feBlend mode="normal" in="SourceGraphic" in2="lineShadow1-ed" result="shape" />
|
|
26
|
+
</filter>
|
|
27
|
+
<filter id="lineShadow2" x="0" y="0" width="195" height="7" filterUnits="userSpaceOnUse"
|
|
28
|
+
color-interpolation-filters="sRGB">
|
|
29
|
+
<feFlood flood-opacity="0" result="lineShadow1-bf" />
|
|
30
|
+
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
|
31
|
+
result="hardAlpha" />
|
|
32
|
+
<feOffset dy="-1" />
|
|
33
|
+
<feGaussianBlur stdDeviation="1.5" />
|
|
34
|
+
<feComposite in2="hardAlpha" operator="out" />
|
|
35
|
+
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0" />
|
|
36
|
+
<feBlend mode="normal" in2="lineShadow1-bf" result="lineShadow1-ed" />
|
|
37
|
+
<feBlend mode="normal" in="SourceGraphic" in2="lineShadow1-ed" result="shape" />
|
|
38
|
+
</filter>
|
|
39
|
+
<filter id="lineShadow3" x="0" y="0" width="499" height="7" filterUnits="userSpaceOnUse"
|
|
40
|
+
color-interpolation-filters="sRGB">
|
|
41
|
+
<feFlood flood-opacity="0" result="lineShadow1-bf" />
|
|
42
|
+
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
|
43
|
+
result="hardAlpha" />
|
|
44
|
+
<feOffset dy="-1" />
|
|
45
|
+
<feGaussianBlur stdDeviation="1.5" />
|
|
46
|
+
<feComposite in2="hardAlpha" operator="out" />
|
|
47
|
+
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0" />
|
|
48
|
+
<feBlend mode="normal" in2="lineShadow1-bf" result="lineShadow1-ed" />
|
|
49
|
+
<feBlend mode="normal" in="SourceGraphic" in2="lineShadow1-ed" result="shape" />
|
|
50
|
+
</filter>
|
|
51
|
+
</defs>
|
|
52
|
+
<g transform="translate({{spec.profile.padding.x}}, {{spec.profile.padding.y}})">
|
|
53
|
+
<rect width="863" x="0" y="360" height="1" rx="0.5" fill="#E2E8F0"/>
|
|
54
|
+
<g transform="translate(24, 0)">
|
|
55
|
+
<text font-size="14" font-weight="600" fill="#334155" transform="translate(12, 32.5), rotate(-90, 0, 0)">
|
|
56
|
+
مقیاسهای مبتنی بر تجربه
|
|
57
|
+
</text>
|
|
58
|
+
<g transform="translate(80, 0)">
|
|
59
|
+
<rect height="42" width="339" x="60" y="46" fill="#FEF2F2" opacity=".25" />
|
|
60
|
+
<text x="52" y="1" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">رتبه درصدی</text>
|
|
61
|
+
<path d="m 60.5 7 l 7 0 m 0 0 l -3 -3 m 3 3 l -3 3" stroke="#94A3B8" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
|
|
62
|
+
<path d="m 60.5 27 l 7 0 m 0 0 l -3 -3 m 3 3 l -3 3" stroke="#94A3B8" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
|
|
63
|
+
<text x="52" y="21" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">نمره خام</text>
|
|
64
|
+
<text x="52" y="46.5" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">90</text>
|
|
65
|
+
<text x="68" y="61" dy=".77em" font-size="12" font-weight="400" fill="#B91C1C" text-anchor="end">بالینی</text>
|
|
66
|
+
<rect height="25" width="339" x="60" y="88" fill="#FEFCE8" opacity=".25" />
|
|
67
|
+
<text x="52" y="83.5" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">69</text>
|
|
68
|
+
<text x="68" y="94" dy=".77em" font-size="12" font-weight="400" fill="#CA8A04" text-anchor="end">مرزی</text>
|
|
69
|
+
<rect height="99" width="339" x="60" y="113" fill="#ECFDF5" opacity=".25" />
|
|
70
|
+
<text x="52" y="108" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">64</text>
|
|
71
|
+
<text x="68" y="140" dy=".77em" font-size="12" font-weight="400" fill="#15803D" text-anchor="end">بهنجار</text>
|
|
72
|
+
<text x="52" y="176" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">30</text>
|
|
73
|
+
<text x="52" y="206" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">0</text>
|
|
74
|
+
<g transform="translate(121, 46)">
|
|
75
|
+
{{#each group1 as |item index|}}
|
|
76
|
+
<g transform="translate({{math 34 '*' index}}, 0)">
|
|
77
|
+
{{bar 24 165 (object tl=4 tr=4 bl=0 br=0) (toRad 0) fill='#F1F5F9' clip-path=item.clipPath}}
|
|
78
|
+
</g>
|
|
79
|
+
{{/each}}
|
|
80
|
+
</g>
|
|
81
|
+
<line x1="59.5" y1="45.5" x2="398.5" y2="45.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
82
|
+
<line x1="59.5" y1="88.5" x2="398.5" y2="88.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
83
|
+
<line x1="59.5" y1="113.5" x2="398.5" y2="113.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
84
|
+
<line x1="59.5" y1="181.5" x2="398.5" y2="181.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
85
|
+
<g transform="translate(121, 0)">
|
|
86
|
+
<g transform="translate(0, 46)">
|
|
87
|
+
{{#each group1 as |item index|}}
|
|
88
|
+
<g transform="translate({{math 34 '*' index}}, 0)">
|
|
89
|
+
<rect x="0" y="-45.5" width="24" height="14" fill="#ffffff" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
90
|
+
<text x="12" y="-38.5" dy=".33em" font-size="10" font-weight="400" fill="#64748B" text-anchor="middle" direction="ltr">{{item.pr}}</text>
|
|
91
|
+
|
|
92
|
+
<rect x="0" y="-26" width="24" height="14" fill="{{item.rawColor}}" rx="4"/>
|
|
93
|
+
<text x="12" y="-19" dy=".33em" font-size="12" font-weight="400" fill="#ffffff" text-anchor="middle">{{item.value}}</text>
|
|
94
|
+
|
|
95
|
+
{{bar 24 item.height (object tl=4 tr=4 bl=0 br=0) (toRad 0) transform=item.transform fill=item.fill clip-path=item.clipPath}}
|
|
96
|
+
<text x="12" y="{{math (math 165 '-' item.height) '+' 6}}" dy=".77em" font-size="12" font-weight="400" fill="#ffffff" text-anchor="middle">{{item.t}}</text>
|
|
97
|
+
<text x="-174" y="6" dy=".77em" font-size="12" font-weight="400" fill="#475569" text-anchor="start" transform="rotate(-90, 0, 0)">{{item.label}}</text>
|
|
98
|
+
</g>
|
|
99
|
+
{{/each}}
|
|
100
|
+
</g>
|
|
101
|
+
</g>
|
|
102
|
+
<g opacity="0.5" filter="url(#lineShadow1)" transform="translate(56.5, 207.5)">
|
|
103
|
+
<line x1="3.5" y1="4.5" x2="341.5" y2="4.5" stroke="white" stroke-linecap="round" />
|
|
104
|
+
</g>
|
|
105
|
+
</g>
|
|
106
|
+
<g transform="translate(527, 0)">
|
|
107
|
+
<g transform="translate(0, 3)">
|
|
108
|
+
<rect height="54" width="189" x="60" y="46" fill="#FEF2F2" opacity=".25" />
|
|
109
|
+
<text x="52" y="1" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">رتبه درصدی</text>
|
|
110
|
+
<path d="m 60.5 7 l 7 0 m 0 0 l -3 -3 m 3 3 l -3 3" stroke="#94A3B8" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
|
|
111
|
+
<path d="m 60.5 27 l 7 0 m 0 0 l -3 -3 m 3 3 l -3 3" stroke="#94A3B8" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
|
|
112
|
+
<text x="52" y="21" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">نمره خام</text>
|
|
113
|
+
<text x="52" y="46.5" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">90</text>
|
|
114
|
+
<text x="68" y="66" dy=".77em" font-size="12" font-weight="400" fill="#B91C1C" text-anchor="end">بالینی</text>
|
|
115
|
+
|
|
116
|
+
{{!-- <rect height="20" width="189" x="60" y="100" fill="#FEFCE8" opacity=".25" /> --}}
|
|
117
|
+
<text x="52" y="95.5" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">63</text>
|
|
118
|
+
<text x="68" y="103" dy=".77em" font-size="12" font-weight="400" fill="#CA8A04" text-anchor="end">مرزی</text>
|
|
119
|
+
|
|
120
|
+
<rect height="88" width="189" x="60" y="120" fill="#ECFDF540" opacity=".25" />
|
|
121
|
+
<text x="52" y="115" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">59</text>
|
|
122
|
+
<text x="68" y="142" dy=".77em" font-size="12" font-weight="400" fill="#15803D" text-anchor="end">بهنجار</text>
|
|
123
|
+
<text x="52" y="176" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">30</text>
|
|
124
|
+
<text x="52" y="203" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">0</text>
|
|
125
|
+
<g transform="translate(121, 46)">
|
|
126
|
+
{{#each group2 as |item index|}}
|
|
127
|
+
<g transform="translate({{math 40 '*' index}}, 0)">
|
|
128
|
+
{{bar 24 162 (object tl=4 tr=4 bl=0 br=0) (toRad 0) fill='#F1F5F9' clip-path=item.clipPath}}
|
|
129
|
+
</g>
|
|
130
|
+
{{/each}}
|
|
131
|
+
</g>
|
|
132
|
+
<line x1="59.5" y1="45.5" x2="250" y2="45.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
133
|
+
<line x1="59.5" y1="100.5" x2="250" y2="100.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
134
|
+
<line x1="59.5" y1="120.5" x2="250" y2="120.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
135
|
+
<line x1="59.5" y1="178.5" x2="250" y2="178.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
136
|
+
<g transform="translate(121, 46)">
|
|
137
|
+
{{#each group2 as |item index|}}
|
|
138
|
+
<g transform="translate({{math 40 '*' index}}, 0)">
|
|
139
|
+
<rect x="0" y="-45.5" width="24" height="14" fill="#ffffff" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
140
|
+
<text x="12" y="-38.5" dy=".33em" font-size="10" font-weight="400" fill="#64748B" text-anchor="middle" direction="ltr">{{item.pr}}</text>
|
|
141
|
+
|
|
142
|
+
<rect x="0" y="-26" width="24" height="14" fill="{{item.rawColor}}" rx="4"/>
|
|
143
|
+
<text x="12" y="-19" dy=".33em" font-size="12" font-weight="400" fill="#ffffff" text-anchor="middle">{{item.value}}</text>
|
|
144
|
+
{{bar 24 item.height (object tl=4 tr=4 bl=0 br=0) (toRad 0) transform=item.transform fill=item.fill clip-path=item.clipPath}}
|
|
145
|
+
<text x="12" y="{{math (math 162 '-' item.height) '+' 6}}" dy=".77em" font-size="12" font-weight="400" fill="#ffffff" text-anchor="middle">{{item.t}}</text>
|
|
146
|
+
{{#if (boolean index '===' 2)}}
|
|
147
|
+
<text x="-174" y="6" dy=".77em" font-size="12" font-weight="400" fill="#475569" text-anchor="start" transform="rotate(-90, 0, 0)">مشکلات کلی</text>
|
|
148
|
+
<text x="-180" y="22" dy=".77em" font-size="12" font-weight="400" fill="#475569" text-anchor="start" transform="rotate(-90, 0, 0)">(نمره کل)</text>
|
|
149
|
+
{{else}}
|
|
150
|
+
<text x="-174" y="6" dy=".77em" font-size="12" font-weight="400" fill="#475569" text-anchor="start" transform="rotate(-90, 0, 0)">{{item.label}}</text>
|
|
151
|
+
{{/if}}
|
|
152
|
+
</g>
|
|
153
|
+
{{/each}}
|
|
154
|
+
</g>
|
|
155
|
+
<g opacity="0.5" filter="url(#lineShadow2)" transform="translate(56.5, 204.5)">
|
|
156
|
+
<line x1="3.5" y1="4.5" x2="191.5" y2="4.5" stroke="white" stroke-linecap="round" />
|
|
157
|
+
</g>
|
|
158
|
+
</g>
|
|
159
|
+
</g>
|
|
160
|
+
</g>
|
|
161
|
+
<g transform="translate(24, 401)">
|
|
162
|
+
<text font-size="14" font-weight="600" fill="#334155" transform="translate(12, 33.5), rotate(-90, 0, 0)">
|
|
163
|
+
مقیاسهای مبتنی بر DSM
|
|
164
|
+
</text>
|
|
165
|
+
<g transform="translate(168, 0)">
|
|
166
|
+
<rect height="42" width="493" x="60" y="46" fill="#FEF2F2" opacity=".25" />
|
|
167
|
+
<text x="52" y="1" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">رتبه درصدی</text>
|
|
168
|
+
<path d="m 60.5 7 l 7 0 m 0 0 l -3 -3 m 3 3 l -3 3" stroke="#94A3B8" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
|
|
169
|
+
<path d="m 60.5 27 l 7 0 m 0 0 l -3 -3 m 3 3 l -3 3" stroke="#94A3B8" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
|
|
170
|
+
<text x="52" y="21" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">نمره خام</text>
|
|
171
|
+
<text x="52" y="46.5" dy=".6em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">90</text>
|
|
172
|
+
<text x="68" y="61" dy=".77em" font-size="12" font-weight="400" fill="#B91C1C" text-anchor="end">بالینی</text>
|
|
173
|
+
<rect height="25" width="493" x="60" y="88" fill="#FEFCE8" opacity=".25" />
|
|
174
|
+
<text x="52" y="83.5" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">69</text>
|
|
175
|
+
<text x="68" y="94" dy=".9em" font-size="12" font-weight="400" fill="#CA8A04" text-anchor="end">مرزی</text>
|
|
176
|
+
<rect height="99" width="493" x="60" y="113" fill="#ECFDF5" opacity=".25" />
|
|
177
|
+
<text x="52" y="108" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">64</text>
|
|
178
|
+
<text x="68" y="140" dy=".77em" font-size="12" font-weight="400" fill="#15803D" text-anchor="end">بهنجار</text>
|
|
179
|
+
<text x="52" y="176" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">30</text>
|
|
180
|
+
<text x="52" y="206" dy=".77em" font-size="12" font-weight="400" fill="#94A3B8" text-anchor="start">0</text>
|
|
181
|
+
<g transform="translate(145, 46)">
|
|
182
|
+
{{#each group3 as |item index|}}
|
|
183
|
+
<g transform="translate({{math 72 '*' index}}, 0)">
|
|
184
|
+
{{bar 24 165 (object tl=4 tr=4 bl=0 br=0) (toRad 0) fill='#F1F5F9' clip-path=item.clipPath}}
|
|
185
|
+
</g>
|
|
186
|
+
{{/each}}
|
|
187
|
+
</g>
|
|
188
|
+
<line x1="59.5" y1="45.5" x2="553" y2="45.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
189
|
+
<line x1="59.5" y1="88.5" x2="553" y2="88.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
190
|
+
<line x1="59.5" y1="113.5" x2="553" y2="113.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
191
|
+
<line x1="59.5" y1="181.5" x2="553" y2="181.5" stroke="#E2E8F0" stroke-linecap="round" stroke-dasharray="6 6"/>
|
|
192
|
+
<g transform="translate(121, 0)">
|
|
193
|
+
<g transform="translate(24, 46)">
|
|
194
|
+
{{#each group3 as |item index|}}
|
|
195
|
+
<g transform="translate({{math 72 '*' index}}, 0)">
|
|
196
|
+
<rect x="0" y="-45.5" width="24" height="14" fill="#ffffff" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
197
|
+
<text x="12" y="-38.5" dy=".33em" font-size="10" font-weight="400" fill="#64748B" text-anchor="middle" direction="ltr">{{item.pr}}</text>
|
|
198
|
+
|
|
199
|
+
<rect x="0" y="-26" width="24" height="14" fill="{{item.rawColor}}" rx="4"/>
|
|
200
|
+
<text x="12" y="-19" dy=".33em" font-size="12" font-weight="400" fill="#ffffff" text-anchor="middle">{{item.value}}</text>
|
|
201
|
+
|
|
202
|
+
{{bar 24 item.height (object tl=4 tr=4 bl=0 br=0) (toRad 0) transform=item.transform fill=item.fill clip-path=item.clipPath}}
|
|
203
|
+
<text x="12" y="{{math (math 165 '-' item.height) '+' 6}}" dy=".77em" font-size="12" font-weight="400" fill="#ffffff" text-anchor="middle">{{item.t}}</text>
|
|
204
|
+
{{#each item.label as |label index|}}
|
|
205
|
+
<text x="12" y="{{math 174 '+' (math 15 '*' index)}}" dy=".9em" font-size="12" font-weight="400" fill="#475569" text-anchor="middle">
|
|
206
|
+
{{label}}
|
|
207
|
+
</text>
|
|
208
|
+
{{/each}}
|
|
209
|
+
</g>
|
|
210
|
+
{{/each}}
|
|
211
|
+
</g>
|
|
212
|
+
</g>
|
|
213
|
+
<g opacity="0.5" filter="url(#lineShadow3)" transform="translate(56.5, 207.5)">
|
|
214
|
+
<line x1="3.5" y1="4.5" x2="495.5" y2="4.5" stroke="white" stroke-linecap="round" />
|
|
215
|
+
</g>
|
|
216
|
+
</g>
|
|
217
|
+
</g>
|
|
218
|
+
</g>
|
|
219
|
+
|
|
220
|
+
{{/layout}}
|