@baravak/risloo-profile-cli 4.4.2 → 4.5.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baravak/risloo-profile-cli",
3
- "version": "4.4.2",
3
+ "version": "4.5.0",
4
4
  "description": "**Risloo Profile CLI** is a library for creating profiles, reports and sheets for *psychological* samples.",
5
5
  "main": "bin/risloo.js",
6
6
  "publishConfig": {
@@ -0,0 +1 @@
1
+ {"id":"$X1H12Y266","scale":{"id":"$GHQ28-93","title":"آزمون سلامت عمومی"},"version":"1","edition":"","edition_version":null,"client":{"id":"GH9666XXXX","name":"مراجع"},"room":{"id":"RS96XXXX","manager":{"id":"GH9XXXX","name":"درمانگر","user_id":"IR9XXXXX","avatar":null},"center":{"id":"RS96XXXXX","acceptation":null,"status":"active","type":"counseling_center","detail":{"title":"مرکز"}},"acceptation":null,"status":"active","type":"room"},"code":null,"created_at":1705939691,"started_at":1705947533,"scored_at":1709800667,"closed_at":1705947855,"total_amount":0,"prepayment":false,"purchased":false,"amount":0,"billing":null,"description":"## دستور اجرای آزمون\n\nمی‌خواهیم درباره کسالت و ناراحتی‌های پزشکی و اینکه سلامت عمومی‌شما در طی یک ماه گذشته تا به امروز چگونه بوده است، اطلاعاتی به دست آوریم.\n\nلطفاً در تمامی سوال‌های زیر، پاسخی را که فکر می‌کنید با وضع شما بیشتر مطابقت دارد مشخص کنید. به خاطر داشته باشید که ما می‌خواهیم درباره ناراحتی‌های اخیر شما اطلاعاتی به دست آوریم، نه مشکلات و ناراحتی‌هایی که در گذشته داشته‌اید.\n\nسعی کنید به تمامی سوال‌ها پاسخ دهید.","psychologist_description":null,"items":[{"type":"text","text":"آیا از یک ماه گذشته تا به امروز کاملاً احساس کرده‌اید که خوب و سالم هستید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"4"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که به داروهای تقویتی نیاز دارید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"4"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس ضعف و سستی کرده‌اید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"4"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که بیمار هستید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"4"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز سردرد داشته‌اید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"3"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که سرتان را محکم با چیزی مثل دستمال بسته‌اند یا اینکه فشاری به سرتان وارد می‌شود؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"3"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که بعضی وقت‌ها بدنتان داغ و یا سرد می‌شود؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"3"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز اتفاق افتاده که بر اثر اثر نگرانی دچار بی‌خوابی شده باشید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز شب‌ها وسط خواب بیدار می‌شوید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که دائماً تحت فشار هستید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"3"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز عصبانی و بد خلق شده‌اید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"3"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز بدون هیچ دلیل قانع کننده‌ایهراسان و یا وحشت‌زده شده‌اید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز متوجه شده‌اید که انجام هر کاری از توانایی شما خارج است؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که در تمامی مدت عصبی هستید و دل شوره دارید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز توانسته‌اید خودتان را مشغول و سرگرم نگه دارید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز اتفاق افتاده که وقت بیشتری را صرف انجام کارها نمایید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز به طور کلی احساس کرده‌اید که کارها را به خوبی انجام می‌دهید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز از نحوه انجام کارهایتان احساس رضایت می‌کنید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که نقش مفیدی در انجام کارها به عهده دارید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز توانایی تصمیم گیری درباره مسائل را داشته‌اید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز قادر بوده‌اید از فعالیت‌های روزمره زندگی لذت ببرید؟","answer":{"type":"optional","options":["بیشتر از همیشه","مثل همیشه","بدتر از همیشه","خیلی بدتر از همیشه"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز فکر کرده‌اید که شخص بی‌ارزشی هستید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"1"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که زندگی کاملاً ناامید کننده است؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که زندگی ارزش زنده بودن را ندارد؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"1"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز به این مسئله فکر کرده‌اید که ممکن است دست به خودکشی بزنید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"1"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز احساس کرده‌اید که چون اعصابتان خراب است نمی‌توانید کاری انجام دهید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"3"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز به این نتیجه رسیده اید که ای کاش مرده بودی و کلاً از شر زندگی خلاص می‌شدید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"2"},{"type":"text","text":"آیا از یک ماه گذشته تا به امروز این فکر به ذهنتان رسیده است که بخواهید که زندگی خاتمه دهید؟","answer":{"type":"optional","options":["خیر","کمی","زیاد","خیلی زیاد"]},"user_answered":"1"}],"prerequisites":[{"type":"text","label":"gender","text":"جنسیت","answer":{"type":"select","options":["زن","مرد"]},"alias":"gender","force":true,"user_answered":"1"},{"type":"text","label":"age","text":"سن","answer":{"type":"number"},"alias":"age","force":true,"user_answered":"30"},{"type":"text","label":"education","text":"تحصیلات","answer":{"type":"select","options":["ابتدایی اول","ابتدایی دوم","متوسطه اول","متوسطه دوم","دیپلم","کارشناسی","کارشناسی ارشد","پزشکی عمومی","متخصص","دکتری تخصصی","حوزوی مقدمات","حوزوی سطح۱","حوزوی سطح۲","حوزوی سطح۳","حوزوی سطح۴"]},"alias":"education","force":true,"user_answered":"5"},{"type":"text","label":"marital_status","text":"وضعیت تأهل","answer":{"type":"select","options":["مجرد","متأهل"]},"alias":"marital_status","force":true,"user_answered":"1"}],"cornometer":5,"score":{"raw":38,"range":1,"a":18,"a_range":3,"b":9,"b_range":1,"c":7,"c_range":1,"d":4,"d_range":0},"score_current_version":"1.0.0","score_last_version":"1.0.0"}
@@ -0,0 +1,85 @@
1
+ const { Profile, FS, Mappings } = require("../Profile");
2
+
3
+ const colorLevel = [
4
+ '#65A30D',
5
+ '#EAB308',
6
+ '#EA580C',
7
+ '#E11D48',
8
+ ]
9
+
10
+ const colorSubLevel = [
11
+ '#BEF264',
12
+ '#FEF08A',
13
+ '#FDBA74',
14
+ '#FDA4AF',
15
+ ]
16
+
17
+ class GHQ2893 extends Profile {
18
+ // Number of pages
19
+ static pages = 1;
20
+
21
+ // Labels of the sample
22
+ labels = {
23
+ L1: { eng: "a", fr: ['نشانه‌های', 'جسمانی']},
24
+ L2: { eng: "b", fr: ['اضطراب و', 'بی‌خوابی']},
25
+ L3: { eng: "c", fr: ['نارساکنش‌وری', 'اجتماعی']},
26
+ L4: { eng: "d", fr: ['افسردگی']},
27
+
28
+ L5: { eng: "raw", fr: "وسواسی - اجباری"},
29
+ L6: { eng: "range", fr: "وسواسی - اجباری"},
30
+
31
+ L7: { eng: "a_range"},
32
+ L8: { eng: "b_range"},
33
+ L9: { eng: "c_range"},
34
+ L10: { eng: "d_range"},
35
+ };
36
+
37
+ profileSpec = {
38
+ /* "sample" determines some important info about the sample and profile */
39
+ /* Default prerequisites: 1. gender, 2. age, 3. education */
40
+ /* "prerequisites" is synonym to "fields" in our program */
41
+ sample: {
42
+ name: "پرسشنامه سلامت عمومی" /* Name of the sample */,
43
+ multiProfile: false /* Whether the sample has multiple profiles or not */,
44
+ questions: false /* Determines whether to get questions from inital dataset or not */,
45
+ defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
46
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
47
+ },
48
+ /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
49
+ /* calculating its dimensions carefully is of great importance */
50
+ profile: {
51
+ get dimensions() {
52
+ return {
53
+ width: 477 + 2 * this.padding.x,
54
+ height: 522 + 2 * this.padding.y,
55
+ };
56
+ },
57
+ padding: {
58
+ x: 213,
59
+ y: 96,
60
+ },
61
+ },
62
+
63
+ /* "labels" part which has to be provided for each profile */
64
+ labels: Object.values(this.labels),
65
+ };
66
+
67
+ constructor(dataset, options, config = {}) {
68
+ super();
69
+ this._init(dataset, options, config);
70
+ }
71
+
72
+ _calcContext() {
73
+ const {
74
+ dataset,
75
+ } = this;
76
+ const items = dataset.score.slice(0, 4).map((item, i) => {
77
+ return {...item, range: `url(#gradiant-${dataset.score[6 + i].mark ?? 0}-y)`, mark: item.mark ?? 0, eng: item.label.eng.toUpperCase()}
78
+ })
79
+
80
+ const total = {...dataset.score[4], mark: dataset.score[4].mark ?? 0, range: `url(#gradiant-${dataset.score[5].mark ?? 0}-x)`, ranger:dataset.score[5].mark ?? 0};
81
+ return [{ items, total }];
82
+ }
83
+ }
84
+
85
+ module.exports = GHQ2893;
@@ -0,0 +1,120 @@
1
+ {{#> layout}}
2
+ <defs>
3
+ <linearGradient id="gradiant-3-y" x1="0%" y1="0%" x2="0%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#E11D48;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#FDA4AF;stop-opacity:1" />
6
+ </linearGradient>
7
+ <linearGradient id="gradiant-2-y" x1="0%" y1="0%" x2="0%" y2="100%">
8
+ <stop offset="0%" style="stop-color:#EA580C;stop-opacity:1" />
9
+ <stop offset="100%" style="stop-color:#FDBA74;stop-opacity:1" />
10
+ </linearGradient>
11
+ <linearGradient id="gradiant-1-y" x1="0%" y1="0%" x2="0%" y2="100%">
12
+ <stop offset="0%" style="stop-color:#EAB308;stop-opacity:1" />
13
+ <stop offset="100%" style="stop-color:#FEF08A;stop-opacity:1" />
14
+ </linearGradient>
15
+ <linearGradient id="gradiant-0-y" x1="0%" y1="0%" x2="0%" y2="100%">
16
+ <stop offset="0%" style="stop-color:#65A30D;stop-opacity:1" />
17
+ <stop offset="100%" style="stop-color:#BEF264;stop-opacity:1" />
18
+ </linearGradient>
19
+ <linearGradient id="gradiant-bg-y" x1="0%" y1="100%" x2="0%" y2="0%">
20
+ <stop offset="28.6%" style="stop-color:#F7FEE7;stop-opacity:0.5" />
21
+ <stop offset="52.4%" style="stop-color:#FEFCE8;stop-opacity:0.5" />
22
+ <stop offset="76.2%" style="stop-color:#FFF7ED;stop-opacity:0.5" />
23
+ <stop offset="100%" style="stop-color:#FFF1F2;stop-opacity:0.5" />
24
+ </linearGradient>
25
+
26
+ <linearGradient id="gradiant-3-x" x1="100%" y1="0%" x2="0%" y2="0%">
27
+ <stop offset="0%" style="stop-color:#E11D48;stop-opacity:1" />
28
+ <stop offset="100%" style="stop-color:#FDA4AF;stop-opacity:1" />
29
+ </linearGradient>
30
+ <linearGradient id="gradiant-2-x" x1="100%" y1="0%" x2="0%" y2="0%">
31
+ <stop offset="0%" style="stop-color:#EA580C;stop-opacity:1" />
32
+ <stop offset="100%" style="stop-color:#FDBA74;stop-opacity:1" />
33
+ </linearGradient>
34
+ <linearGradient id="gradiant-1-x" x1="100%" y1="0%" x2="0%" y2="0%">
35
+ <stop offset="0%" style="stop-color:#EAB308;stop-opacity:1" />
36
+ <stop offset="100%" style="stop-color:#FEF08A;stop-opacity:1" />
37
+ </linearGradient>
38
+ <linearGradient id="gradiant-0-x" x1="100%" y1="0%" x2="0%" y2="0%">
39
+ <stop offset="0%" style="stop-color:#65A30D;stop-opacity:1" />
40
+ <stop offset="100%" style="stop-color:#BEF264;stop-opacity:1" />
41
+ </linearGradient>
42
+ <linearGradient id="gradiant-bg-x" x1="0%" y1="0%" x2="100%" y2="0%">
43
+ <stop offset="26.19%" style="stop-color:#F7FEE7;stop-opacity:0.5" />
44
+ <stop offset="47.6%" style="stop-color:#FEFCE8;stop-opacity:0.5" />
45
+ <stop offset="71.4%" style="stop-color:#FFF7ED;stop-opacity:0.5" />
46
+ <stop offset="100%" style="stop-color:#FFF1F2;stop-opacity:0.5" />
47
+ </linearGradient>
48
+ <filter id="shadow" x="0.5" y="0.5" width="480" height="7" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
49
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
50
+ <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" result="hardAlpha"/>
51
+ <feOffset dy="-1"/>
52
+ <feGaussianBlur stdDeviation="1.5"/>
53
+ <feComposite in2="hardAlpha" operator="out"/>
54
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
55
+ <feBlend mode="normal" in2="BackgroundImageFix" result="dropshadow"/>
56
+ <feBlend mode="normal" in="SourceGraphic" in2="dropshadow" result="shape"/>
57
+ </filter>
58
+ </defs>
59
+ <g transform="translate({{spec.profile.padding.x}}, {{spec.profile.padding.y}})">
60
+ <g transform="translate(1.5, 0.5)">
61
+ {{#each items as |item index|}}
62
+ <g transform="translate({{math 122 '+' (math 88 '*' index) }}, 5)">
63
+ {{bar 28 315 (object tr=4 br=0 bl=0 tl=4) (toRad 0) fill="url(#gradiant-bg-y)"}}
64
+ </g>
65
+ {{/each}}
66
+ <line x1="1" y1="1" x2="383" y2="1" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6" transform="translate(59, 4.5)"/>
67
+ <text y="4.5" x="43" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="start" dy=".35em">21</text>
68
+ <text font-size="13px" font-weight="400" fill="#E11D48" text-anchor="middle" dy=".7em" transform="rotate(-90) translate(-41.5, 60)">شدید</text>
69
+
70
+ <line x1="1" y1="1" x2="383" y2="1" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6" transform="translate(59, 78.5)"/>
71
+ <text y="78.5" x="43" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="start" dy=".35em">16</text>
72
+ <text font-size="13px" font-weight="400" fill="#EA580C" text-anchor="middle" dy=".7em" transform="rotate(-90) translate(-115.5, 60)">متوسط</text>
73
+
74
+ <line x1="1" y1="1" x2="383" y2="1" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6" transform="translate(59, 154.5)"/>
75
+ <text y="154.5" x="43" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="start" dy=".35em">11</text>
76
+ <text font-size="13px" font-weight="400" fill="#EAB308" text-anchor="middle" dy=".7em" transform="rotate(-90) translate(-191.5, 60)">خفیف</text>
77
+
78
+ <line x1="1" y1="1" x2="383" y2="1" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6" transform="translate(59, 228.5)"/>
79
+ <text y="228.5" x="43" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="start" dy=".35em">6</text>
80
+ <text font-size="13px" font-weight="400" fill="#65A30D" text-anchor="middle" dy=".7em" transform="rotate(-90) translate(-273, 60)">کمترین حد</text>
81
+
82
+ {{#each items as |item index|}}
83
+ <g transform="translate({{math 122 '+' (math 88 '*' index) }}, {{math 5 '+' (math 15 '*' (math 21 '-' mark)) }})">
84
+ {{bar 28 (math 15 '*' mark) (object tr=4 br=0 bl=0 tl=4) (toRad 0) fill=range}}
85
+ <text y="{{ternary (boolean mark '>' 1) 8 -20}}" x="14" font-size="16px" font-weight="500" fill="{{ternary (boolean mark '>' 1) '#ffffff' '#65a30d'}}" text-anchor="middle" dy=".75em">{{mark}}</text>
86
+ </g>
87
+ <text y="335" x="{{math 136 '+' (math 88 '*' index) }}" font-size="13px" font-weight="400" fill="#4B5563" text-anchor="middle" dy="1em">{{eng}}</text>
88
+ <text y="353" x="{{math 136 '+' (math 88 '*' index) }}" font-size="13px" font-weight="400" fill="#4B5563" text-anchor="middle" dy="1em">{{label.fr.[0]}}</text>
89
+ <text y="368" x="{{math 136 '+' (math 88 '*' index) }}" font-size="13px" font-weight="400" fill="#4B5563" text-anchor="middle" dy="1em">{{label.fr.[1]}}</text>
90
+ {{/each}}
91
+ <g opacity="0.5" filter="url(#shadow)" transform="translate(0, 316)">
92
+ <line x1="4" y1="5" x2="477" y2="5" stroke="white" stroke-linecap="round"/>
93
+ </g>
94
+ <g transform="translate(0.5, 457.5)">
95
+ <g transform="translate(48, 0.5)">
96
+ {{bar 420 28 (object tr=4 br=4 bl=0 tl=0) (toRad 0) fill="url(#gradiant-bg-x)"}}
97
+ {{bar (math 5 '*' total.mark) 28 (object tr=4 br=4 bl=0 tl=0) (toRad 0) fill=total.range}}
98
+ <text x="{{ternary (boolean total.mark '>' 5) (math (math 5 '*' total.mark) '-' 8) (math (math 5 '*' total.mark) '+' 20)}}" y="14" font-size="16px" font-weight="600" fill="{{ternary (boolean total.mark '>' 5) '#ffffff' '#ea580c'}}" text-anchor="start" dy=".35em">{{total.mark}}</text>
99
+ </g>
100
+ <text y="14" x="0" font-size="13px" font-weight="500" fill="#4B5563" text-anchor="end" dy=".35em">نمره کل</text>
101
+ <line x1="158" y1="32.5" x2="158" y2="48.5" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="3 4"/>
102
+ <text y="52.5" x="158" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="middle" dy=".9em">22</text>
103
+ <text y="40.5" x="103" font-size="12px" font-weight="{{ternary (boolean total.ranger '==' 0) 600 400}}" fill="{{ternary (boolean total.ranger '==' 0) '#65A30D' '#9CA3AF'}}" text-anchor="middle" dy=".9em">کمترین حد</text>
104
+
105
+ <line x1="248" y1="32.5" x2="248" y2="48.5" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="3 4"/>
106
+ <text y="52.5" x="248" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="middle" dy=".9em">40</text>
107
+ <text y="40.5" x="203" font-size="12px" font-weight="{{ternary (boolean total.ranger '==' 1) 600 400}}" fill="{{ternary (boolean total.ranger '==' 1) '#EAB308' '#9CA3AF'}}" text-anchor="middle" dy=".9em">خفیف</text>
108
+
109
+ <line x1="348" y1="32.5" x2="348" y2="48.5" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="3 4"/>
110
+ <text y="52.5" x="348" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="middle" dy=".9em">60</text>
111
+ <text y="40.5" x="298" font-size="12px" font-weight="{{ternary (boolean total.ranger '==' 2) 600 400}}" fill="{{ternary (boolean total.ranger '==' 2) '#EA580C' '#9CA3AF'}}" text-anchor="middle" dy=".9em">متوسط</text>
112
+
113
+ <line x1="468" y1="32.5" x2="468" y2="48.5" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="3 4"/>
114
+ <text y="52.5" x="468" font-size="12px" font-weight="400" fill="#9CA3AF" text-anchor="middle" dy=".9em">84</text>
115
+ <text y="40.5" x="408" font-size="12px" font-weight="{{ternary (boolean total.ranger '==' 3) 600 400}}" fill="{{ternary (boolean total.ranger '==' 3) '#E11D48' '#9CA3AF'}}" text-anchor="middle" dy=".9em">شدید</text>
116
+ </g>
117
+ </g>
118
+ </g>
119
+
120
+ {{/layout}}