@baravak/risloo-profile-cli 4.46.3 → 4.75.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.
Files changed (101) hide show
  1. package/.agents/skills/create-profile/SKILL.md +14 -0
  2. package/.claude/settings.local.json +1 -3
  3. package/.claude/skills/create-profile/SKILL.md +203 -0
  4. package/AGENTS.md +413 -0
  5. package/CLAUDE.md +2 -185
  6. package/package.json +1 -1
  7. package/src/cli-commands/Executor.js +8 -2
  8. package/src/cli-commands/ExtractExecutor.js +55 -21
  9. package/src/cli-commands/GiftExecutor.js +1 -0
  10. package/src/handlebars/importPartials.js +10 -44
  11. package/src/handlebars/init.js +17 -11
  12. package/src/publish/json/profiles/BSSI93.json +392 -0
  13. package/src/publish/json/profiles/FRHPT93.json +2 -2
  14. package/src/publish/json/profiles/ISKS93.json +288 -0
  15. package/src/publish/json/profiles/MCMI9A.json +1540 -0
  16. package/src/publish/json/profiles/NEO93.json +3858 -0
  17. package/src/publish/json/profiles/NEO9A.json +1159 -1
  18. package/src/publish/json/profiles/NEO9Q.json +3856 -0
  19. package/src/publish/json/profiles/NEO9V.json +1157 -0
  20. package/src/publish/json/profiles/RIASEC9A.json +2775 -0
  21. package/src/publish/json/profiles/RSI93.json +359 -0
  22. package/src/samples/AEQ93.js +1 -1
  23. package/src/samples/AMS93.js +1 -1
  24. package/src/samples/AMS9A.js +3 -1
  25. package/src/samples/BAOMEIS93.js +1 -1
  26. package/src/samples/BEQI93.js +1 -1
  27. package/src/samples/BSCT93.js +5 -0
  28. package/src/samples/BSSI93.js +93 -0
  29. package/src/samples/CAATS93.js +1 -1
  30. package/src/samples/CERQ93.js +1 -1
  31. package/src/samples/CRAAS93.js +1 -1
  32. package/src/samples/DSWLS93.js +1 -1
  33. package/src/samples/EMSS93.js +1 -1
  34. package/src/samples/EPQ9A.js +6 -1
  35. package/src/samples/FACES93.js +6 -0
  36. package/src/samples/FRHPT93.js +41 -13
  37. package/src/samples/GMIT93.js +1 -1
  38. package/src/samples/HPL93.js +1 -1
  39. package/src/samples/ISKS93.js +62 -0
  40. package/src/samples/IUS93.js +1 -1
  41. package/src/samples/JCSI93.js +1 -1
  42. package/src/samples/JPFQ93.js +5 -0
  43. package/src/samples/KJGI93.js +1 -1
  44. package/src/samples/LMIQ93.js +1 -1
  45. package/src/samples/MCMI9A.js +530 -0
  46. package/src/samples/MMFAD93.js +1 -1
  47. package/src/samples/MOCI93.js +1 -1
  48. package/src/samples/NEO93.js +279 -0
  49. package/src/samples/NEO9A.js +93 -60
  50. package/src/samples/NEO9Q.js +281 -0
  51. package/src/samples/NEO9V.js +218 -0
  52. package/src/samples/OBQ4493.js +1 -1
  53. package/src/samples/PIES93.js +1 -1
  54. package/src/samples/PIES9A.js +4 -0
  55. package/src/samples/PMCIEF93.js +7 -1
  56. package/src/samples/PSWQ93.js +1 -1
  57. package/src/samples/RIASEC93.js +1 -1
  58. package/src/samples/RIASEC9A.js +256 -0
  59. package/src/samples/RSI93.js +89 -0
  60. package/src/samples/SASQ93.js +1 -1
  61. package/src/samples/SDCAQ93.js +1 -1
  62. package/src/samples/STAIY93.js +1 -1
  63. package/src/samples/WAQ93.js +1 -1
  64. package/src/samples/YBOCS93.js +1 -1
  65. package/src/samples/YPI93.js +5 -1
  66. package/views/profiles/MCMI9A_facets_partial.hbs +96 -0
  67. package/views/profiles/MCMI9A_main_partial.hbs +262 -0
  68. package/views/profiles/MCMI9A_noteworthy_partial.hbs +66 -0
  69. package/views/profiles/MCMI9A_vertical_label_partial.hbs +8 -0
  70. package/views/profiles/NEO_long_facets.hbs +125 -0
  71. package/views/profiles/NEO_main.hbs +152 -0
  72. package/views/profiles/NEO_short_facets.hbs +82 -0
  73. package/views/profiles/samples/BSCT93.hbs +17 -17
  74. package/views/profiles/samples/BSSI93.hbs +102 -0
  75. package/views/profiles/samples/FRHPT93_1.hbs +568 -87
  76. package/views/profiles/samples/FRHPT93_2.hbs +90 -76
  77. package/views/profiles/samples/FRHPT93_3.hbs +2 -2
  78. package/views/profiles/samples/FRHPT93_4.hbs +2 -2
  79. package/views/profiles/samples/FRHPT93_5.hbs +103 -0
  80. package/views/profiles/samples/FRHPT9A.hbs +7 -7
  81. package/views/profiles/samples/ISKS93.hbs +38 -0
  82. package/views/profiles/samples/MCMI9A_1.hbs +3 -0
  83. package/views/profiles/samples/MCMI9A_2.hbs +3 -0
  84. package/views/profiles/samples/MCMI9A_3.hbs +3 -0
  85. package/views/profiles/samples/MCMI9A_4.hbs +3 -0
  86. package/views/profiles/samples/NEO93_1.hbs +14 -0
  87. package/views/profiles/samples/NEO93_2.hbs +15 -0
  88. package/views/profiles/samples/NEO93_3.hbs +15 -0
  89. package/views/profiles/samples/NEO9A.hbs +14 -29
  90. package/views/profiles/samples/NEO9Q_1.hbs +13 -0
  91. package/views/profiles/samples/NEO9Q_2.hbs +14 -0
  92. package/views/profiles/samples/NEO9Q_3.hbs +14 -0
  93. package/views/profiles/samples/NEO9V_1.hbs +13 -0
  94. package/views/profiles/samples/NEO9V_2.hbs +3 -0
  95. package/views/profiles/samples/RIASEC9A_1.hbs +38 -0
  96. package/views/profiles/samples/RIASEC9A_2.hbs +67 -0
  97. package/views/profiles/samples/RIASEC9A_3.hbs +93 -0
  98. package/views/profiles/samples/RSI93.hbs +101 -0
  99. package/a.json +0 -4805
  100. package/src/publish/json/profiles/BSCT93_t1.json +0 -512
  101. package/src/publish/json/profiles/BSCT93_t2.json +0 -512
@@ -0,0 +1,281 @@
1
+ const { Profile } = require("../Profile");
2
+
3
+ const DOMAIN_MAX = 192;
4
+ const FACET_MAX = 32;
5
+ const INSIDE_THRESHOLD = 25;
6
+
7
+ const LEVELS = ["", "بسیار پایین", "پایین", "طبیعی", "بالا", "بسیار بالا"];
8
+
9
+ const DOMAINS = [
10
+ { key: "n", fa: "بی‌ثباتی هیجانی", letter: "N" },
11
+ { key: "e", fa: "برون‌گرایی", letter: "E" },
12
+ { key: "o", fa: "باز بودن به تجربه", letter: "O" },
13
+ { key: "a", fa: "توافق با دیگران", letter: "A" },
14
+ { key: "c", fa: "وجدانی بودن", letter: "C" },
15
+ ];
16
+
17
+ const FACET_NAMES = {
18
+ n: ["اضطراب", "خشم و کینه‌ورزی", "افسردگی", "شرم", "تکانش‌وری", "آسیب‌پذیری از استرس"],
19
+ e: ["صمیمیت", "جمع‌گرایی", "قاطعیت", "جنب‌وجوش", "هیجان‌خواهی", "هیجان‌‌های مثبت"],
20
+ o: ["تخیل", "زیبایی شناسی", "عواطف", "کنش‌ها", "دیدگاه‌ها", "ارزش‌ها"],
21
+ a: ["اعتماد", "سادگی", "نوع‌دوستی", "تبعیت", "تواضع", "نرمش در برابر دیگران"],
22
+ c: ["شایستگی", "نظم", "وظیفه‌شناسی", "تلاش برای موفقیت", "نظم درونی", "انعطاف‌ناپذیری"],
23
+ };
24
+
25
+ const COLOR_THEMES = {
26
+ female: {
27
+ light: "#E9D5FF",
28
+ dark: "#7E22CE",
29
+ accent: "#9333EA",
30
+ stroke: "#C084FC",
31
+ },
32
+ male: {
33
+ light: "#BFDBFE",
34
+ dark: "#1D4ED8",
35
+ accent: "#2563EB",
36
+ stroke: "#60A5FA",
37
+ },
38
+ };
39
+
40
+ const FACTOR_LABELS = {};
41
+ for (const { key } of DOMAINS) {
42
+ for (const suffix of ["raw", "score", "level"]) {
43
+ FACTOR_LABELS[`${key}_${suffix}`] = { eng: `${key}_${suffix}` };
44
+ }
45
+
46
+ for (let index = 1; index <= 6; index += 1) {
47
+ for (const suffix of ["raw", "score", "level"]) {
48
+ FACTOR_LABELS[`${key}${index}_${suffix}`] = {
49
+ eng: `${key}${index}_${suffix}`,
50
+ };
51
+ }
52
+ }
53
+ }
54
+
55
+ function clamp(value, min, max) {
56
+ const number = Number(value);
57
+ if (!Number.isFinite(number)) return min;
58
+ return Math.min(max, Math.max(min, number));
59
+ }
60
+
61
+ function layoutIndicators(indicators) {
62
+ let start = 0;
63
+
64
+ return indicators.map((indicator, index) => {
65
+ const positioned = {
66
+ ...indicator,
67
+ start,
68
+ last: index === indicators.length - 1,
69
+ };
70
+ start += indicator.length + 54;
71
+ return positioned;
72
+ });
73
+ }
74
+
75
+ class NEO9Q extends Profile {
76
+ static pages = 3;
77
+
78
+ static partials = {
79
+ NEO_main: "NEO_main.hbs",
80
+ NEO_long_facets: "NEO_long_facets.hbs",
81
+ };
82
+
83
+ labels = {
84
+ ...FACTOR_LABELS,
85
+ validity: { eng: "validity" },
86
+ options_3_count: { eng: "options_3_count" },
87
+ acquiescence: { eng: "acquiescence" },
88
+ nay_saying: { eng: "nay_saying" },
89
+ random_responding: { eng: "random_responding" },
90
+ };
91
+
92
+ profileSpec = {
93
+ sample: {
94
+ name: "پرسشنامه شخصیت نئو فرم بلند (حق‌شناس)",
95
+ multiProfile: false,
96
+ questions: false,
97
+ defaultFields: true,
98
+ fields: [],
99
+ },
100
+ profile: {
101
+ get dimensions() {
102
+ const [page1, page2, page3] = this.padding;
103
+ return [
104
+ {
105
+ width: 800 + 2 * page1.x,
106
+ height: 674 + 2 * page1.y,
107
+ },
108
+ {
109
+ width: 811 + 2 * page2.x,
110
+ height: 668 + 2 * page2.y,
111
+ },
112
+ {
113
+ width: 811 + 2 * page3.x,
114
+ height: 464 + 2 * page3.y,
115
+ },
116
+ ];
117
+ },
118
+ padding: [
119
+ { x: 71.5, y: 40 },
120
+ { x: 66, y: 43 },
121
+ { x: 66, y: 145 },
122
+ ],
123
+ },
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 { dataset } = this;
134
+ const scoreByKey = new Map(dataset.score.map((item) => [item.label.eng, item]));
135
+
136
+ // Dataset._extractData drops a numeric zero, so every read deliberately
137
+ // restores it with ?? 0 before converting it to a drawing value.
138
+ const mark = (eng) => scoreByKey.get(eng)?.mark ?? 0;
139
+ const number = (eng) => {
140
+ const value = Number(mark(eng));
141
+ return Number.isFinite(value) ? value : 0;
142
+ };
143
+
144
+ const genderField = (dataset.info.fields ?? []).find((field) => field?.eng === "gender");
145
+ const isFemale = Number(genderField?.user_answered) === 1;
146
+ const gender = isFemale ? "female" : "male";
147
+ const colors = COLOR_THEMES[gender];
148
+ const versionTitle = isFemale ? "نسخه بانوان" : "نسخه آقایان";
149
+ const titleAppend = (page) => ` - ${versionTitle} - صفحه ${page}`;
150
+ const sharedContext = {
151
+ gender,
152
+ isFemale,
153
+ theme: gender,
154
+ colors,
155
+ };
156
+
157
+ const items = DOMAINS.map(({ key, fa, letter }) => {
158
+ const raw = number(`${key}_raw`);
159
+ const score = number(`${key}_score`);
160
+ const level = number(`${key}_level`);
161
+ const barW = clamp(8 * score - 140, 0, 500);
162
+
163
+ return {
164
+ key,
165
+ fa,
166
+ letter,
167
+ raw,
168
+ mark: raw,
169
+ max: DOMAIN_MAX,
170
+ score,
171
+ tScore: score,
172
+ percentage: score,
173
+ barW,
174
+ p: barW / 500,
175
+ inside: score >= INSIDE_THRESHOLD,
176
+ level,
177
+ levelText: LEVELS[level] ?? "-",
178
+ };
179
+ });
180
+
181
+ const redErrors = [];
182
+ if (number("validity") === 0) {
183
+ redErrors.push({ text: "پاسخ سؤالات اعتبار", length: 108 });
184
+ }
185
+ if (number("options_3_count") >= 41) {
186
+ redErrors.push({ text: "تعداد پاسخ‌های «نظری ندارم»", length: 170 });
187
+ }
188
+
189
+ const yellowErrors = [];
190
+ if (number("acquiescence") === 1) {
191
+ yellowErrors.push({ text: "احتمال تمایل به پاسخ مثبت", length: 155 });
192
+ }
193
+ if (number("nay_saying") === 1) {
194
+ yellowErrors.push({ text: "احتمال تمایل به پاسخ منفی", length: 143 });
195
+ }
196
+ if (number("random_responding") === 1) {
197
+ yellowErrors.push({ text: "احتمال پاسخ تصادفی", length: 105 });
198
+ }
199
+
200
+ const blocks = DOMAINS.map(({ key, fa, letter }, domainIndex) => {
201
+ const raw = number(`${key}_raw`);
202
+ const score = number(`${key}_score`);
203
+ const level = number(`${key}_level`);
204
+ const barW = clamp(8 * score - 140, 0, 500);
205
+
206
+ const facets = FACET_NAMES[key].map((facetName, facetIndex) => {
207
+ const factorKey = `${key}${facetIndex + 1}`;
208
+ const facetRaw = number(`${factorKey}_raw`);
209
+ const facetScore = number(`${factorKey}_score`);
210
+ const facetLevel = number(`${factorKey}_level`);
211
+ const facetBarW = clamp(6 * facetScore - 100, 0, 380);
212
+
213
+ return {
214
+ key: factorKey,
215
+ fa: facetName,
216
+ raw: facetRaw,
217
+ mark: facetRaw,
218
+ max: FACET_MAX,
219
+ score: facetScore,
220
+ tScore: facetScore,
221
+ percentage: facetScore,
222
+ barW: facetBarW,
223
+ p: facetBarW / 380,
224
+ inside: facetScore >= INSIDE_THRESHOLD,
225
+ level: facetLevel,
226
+ levelText: LEVELS[facetLevel] ?? "-",
227
+ };
228
+ });
229
+
230
+ return {
231
+ key,
232
+ fa,
233
+ letter,
234
+ raw,
235
+ mark: raw,
236
+ max: DOMAIN_MAX,
237
+ score,
238
+ tScore: score,
239
+ percentage: score,
240
+ barW,
241
+ p: barW / 500,
242
+ inside: score >= INSIDE_THRESHOLD,
243
+ level,
244
+ levelText: LEVELS[level] ?? "-",
245
+ isPrimary: domainIndex % 2 === 0,
246
+ isBlue: domainIndex % 2 === 0,
247
+ facetOffsetY: key === "c" ? -1 : 0,
248
+ facets,
249
+ };
250
+ });
251
+
252
+ return [
253
+ {
254
+ ...sharedContext,
255
+ page: 1,
256
+ titleAppend: titleAppend(1),
257
+ items,
258
+ redErrors: layoutIndicators(redErrors),
259
+ yellowErrors: layoutIndicators(yellowErrors),
260
+ showRed: redErrors.length > 0,
261
+ showYellow: yellowErrors.length > 0,
262
+ },
263
+ {
264
+ ...sharedContext,
265
+ page: 2,
266
+ titleAppend: titleAppend(2),
267
+ blocks: blocks.slice(0, 3),
268
+ gridBottom: 664.5,
269
+ },
270
+ {
271
+ ...sharedContext,
272
+ page: 3,
273
+ titleAppend: titleAppend(3),
274
+ blocks: blocks.slice(3, 5),
275
+ gridBottom: 460.5,
276
+ },
277
+ ];
278
+ }
279
+ }
280
+
281
+ module.exports = NEO9Q;
@@ -0,0 +1,218 @@
1
+ const { Profile } = require("../Profile");
2
+
3
+ const DOMAIN_MAX = 48;
4
+ const MAIN_BAR_WIDTH = 500;
5
+ const DETAIL_BAR_WIDTH = 300;
6
+ const INSIDE_THRESHOLD = 25;
7
+ const COLORS = {
8
+ light: "#BAE6FD",
9
+ dark: "#0369A1",
10
+ accent: "#0284C7",
11
+ stroke: "#60A5FA",
12
+ };
13
+ const percentageFromRatio = (ratio) => Math.round(Number(ratio) * 100);
14
+
15
+ const DOMAINS = [
16
+ {
17
+ d: "n",
18
+ fa: "بی‌ثباتی هیجانی",
19
+ letter: "N",
20
+ facets: [
21
+ { d: "n1", fa: "عاطفه منفی", max: 20 },
22
+ { d: "n2", fa: "سرزنش خویش", max: 28 },
23
+ ],
24
+ },
25
+ {
26
+ d: "e",
27
+ fa: "برون‌گرایی",
28
+ letter: "E",
29
+ facets: [
30
+ { d: "e1", fa: "عاطفه مثبت", max: 16 },
31
+ { d: "e2", fa: "جامعه‌پذیری", max: 16 },
32
+ { d: "e3", fa: "فعالیت", max: 16 },
33
+ ],
34
+ },
35
+ {
36
+ d: "o",
37
+ fa: "باز بودن به تجربه",
38
+ letter: "O",
39
+ facets: [
40
+ { d: "o1", fa: "علایق زیبایی‌شناختی", max: 12 },
41
+ { d: "o2", fa: "علایق ذهنی", max: 12 },
42
+ { d: "o3", fa: "غیرسنتی", max: 16 },
43
+ ],
44
+ },
45
+ {
46
+ d: "a",
47
+ fa: "توافق با دیگران",
48
+ letter: "A",
49
+ facets: [
50
+ { d: "a1", fa: "گرایش موافق (نامتضاد)", max: 32 },
51
+ { d: "a2", fa: "گرایش عام‌المنفعه", max: 16 },
52
+ ],
53
+ },
54
+ {
55
+ d: "c",
56
+ fa: "وجدانی بودن",
57
+ letter: "C",
58
+ facets: [
59
+ { d: "c1", fa: "نظم‌پذیری", max: 20 },
60
+ { d: "c2", fa: "تلاش هدفمند", max: 12 },
61
+ { d: "c3", fa: "قابل اتکا بودن", max: 16 },
62
+ ],
63
+ },
64
+ ];
65
+
66
+ const SCORE_LABELS = {};
67
+ for (const domain of DOMAINS) {
68
+ SCORE_LABELS[`${domain.d}_raw`] = {
69
+ eng: `${domain.d}_raw`,
70
+ fa: domain.fa,
71
+ letter: domain.letter,
72
+ max: DOMAIN_MAX,
73
+ };
74
+ SCORE_LABELS[`${domain.d}_score`] = { eng: `${domain.d}_score` };
75
+
76
+ for (const facet of domain.facets) {
77
+ SCORE_LABELS[`${facet.d}_raw`] = {
78
+ eng: `${facet.d}_raw`,
79
+ fa: facet.fa,
80
+ max: facet.max,
81
+ };
82
+ SCORE_LABELS[`${facet.d}_score`] = { eng: `${facet.d}_score` };
83
+ }
84
+ }
85
+
86
+ const layoutErrors = (errors) => {
87
+ let start = 0;
88
+ return errors.map((error, index) => {
89
+ const item = {
90
+ ...error,
91
+ start,
92
+ last: index === errors.length - 1,
93
+ };
94
+ start += error.length + 54;
95
+ return item;
96
+ });
97
+ };
98
+
99
+ class NEO9V extends Profile {
100
+ static pages = 2;
101
+
102
+ static partials = {
103
+ NEO_main: "NEO_main.hbs",
104
+ NEO_short_facets: "NEO_short_facets.hbs",
105
+ };
106
+
107
+ labels = {
108
+ ...SCORE_LABELS,
109
+ validity: { eng: "validity" },
110
+ options_3_count: { eng: "options_3_count" },
111
+ };
112
+
113
+ profileSpec = {
114
+ sample: {
115
+ name: "آزمون شخصیت نئو فرم کوتاه (PI-R)",
116
+ multiProfile: false,
117
+ questions: false,
118
+ defaultFields: true,
119
+ fields: [],
120
+ },
121
+ profile: {
122
+ get dimensions() {
123
+ const [page1, page2] = this.padding;
124
+ return [
125
+ {
126
+ width: 801 + 2 * page1.x,
127
+ height: 674 + 2 * page1.y,
128
+ },
129
+ {
130
+ width: 760 + 2 * page2.x,
131
+ height: 662 + 2 * page2.y,
132
+ },
133
+ ];
134
+ },
135
+ padding: [
136
+ { x: 71, y: 40 },
137
+ { x: 91.5, y: 46 },
138
+ ],
139
+ },
140
+ labels: Object.values(this.labels),
141
+ };
142
+
143
+ constructor(dataset, options, config = {}) {
144
+ super();
145
+ this._init(dataset, options, config);
146
+ }
147
+
148
+ _calcContext() {
149
+ const { dataset } = this;
150
+ const mark = (eng) => dataset.score.find((item) => item.label.eng === eng)?.mark ?? 0;
151
+
152
+ const blocks = DOMAINS.map((domain, index) => {
153
+ const raw = mark(`${domain.d}_raw`);
154
+ const p = Number(mark(`${domain.d}_score`));
155
+ const percentage = percentageFromRatio(p);
156
+ const facets = domain.facets.map((facet) => {
157
+ const facetRaw = mark(`${facet.d}_raw`);
158
+ const facetP = Number(mark(`${facet.d}_score`));
159
+ const facetPercentage = percentageFromRatio(facetP);
160
+ return {
161
+ fa: facet.fa,
162
+ max: facet.max,
163
+ raw: facetRaw,
164
+ mark: facetRaw,
165
+ p: facetP,
166
+ barW: (DETAIL_BAR_WIDTH * facetPercentage) / 100,
167
+ percentage: facetPercentage,
168
+ inside: facetPercentage >= INSIDE_THRESHOLD,
169
+ };
170
+ });
171
+
172
+ return {
173
+ fa: domain.fa,
174
+ letter: domain.letter,
175
+ max: DOMAIN_MAX,
176
+ raw,
177
+ mark: raw,
178
+ p,
179
+ barW: (MAIN_BAR_WIDTH * percentage) / 100,
180
+ percentage,
181
+ inside: percentage >= INSIDE_THRESHOLD,
182
+ isBlue: index % 2 === 0,
183
+ facets,
184
+ };
185
+ });
186
+
187
+ const invalidErrors = [];
188
+ if (mark("validity") === 0) {
189
+ invalidErrors.push({ text: "پاسخ سؤالات اعتبار", length: 108 });
190
+ }
191
+ if (Number(mark("options_3_count")) >= 10) {
192
+ invalidErrors.push({ text: "تعداد پاسخ‌های «نظری ندارم»", length: 170 });
193
+ }
194
+ const redErrors = layoutErrors(invalidErrors);
195
+
196
+ return [
197
+ {
198
+ page: 1,
199
+ titleAppend: " - صفحه 1",
200
+ theme: "blue",
201
+ colors: COLORS,
202
+ items: blocks.map(({ facets, isBlue, ...item }) => item),
203
+ redErrors,
204
+ showRed: redErrors.length > 0,
205
+ },
206
+ {
207
+ page: 2,
208
+ titleAppend: " - صفحه 2",
209
+ theme: "blue",
210
+ colors: COLORS,
211
+ blocks,
212
+ gridBottom: 658.5,
213
+ },
214
+ ];
215
+ }
216
+ }
217
+
218
+ module.exports = NEO9V;
@@ -23,7 +23,7 @@ class OBQ4493 extends Profile {
23
23
  multiProfile: false /* Whether the sample has multiple profiles or not */,
24
24
  questions: false /* Determines whether to get questions from inital dataset or not */,
25
25
  defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
26
- fields: ["marital_status"] /* In case you want to get some additional fields and show in the profile */,
26
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
27
27
  },
28
28
  /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
29
29
  /* calculating its dimensions carefully is of great importance */
@@ -26,7 +26,7 @@ class PIES93 extends Profile {
26
26
  multiProfile: false /* Whether the sample has multiple profiles or not */,
27
27
  questions: false /* Determines whether to get questions from inital dataset or not */,
28
28
  defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
29
- fields: ["marital_status"] /* In case you want to get some additional fields and show in the profile */,
29
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
30
30
  },
31
31
  /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
32
32
  /* calculating its dimensions carefully is of great importance */
@@ -24,6 +24,10 @@ const customConfig = {
24
24
  // This profile is partially identical to PIES93
25
25
 
26
26
  class PIES9A extends PIES93 {
27
+ static partials = {
28
+ PIES93: "samples/PIES93.hbs",
29
+ };
30
+
27
31
  constructor(dataset, options, config = customConfig) {
28
32
  super(dataset, options, config);
29
33
  }
@@ -1,12 +1,18 @@
1
1
  const { Profile, FS } = require("../Profile");
2
2
  const JPFQ93 = require("./JPFQ93");
3
3
  const FACES93 = require("./FACES93");
4
- const Handlebars = require("handlebars");
5
4
 
6
5
  class PMCIEF93 extends Profile {
7
6
  // Number of pages
8
7
  static pages = 1;
9
8
 
9
+ static partials = {
10
+ JPFQ93_partial: "samples/JPFQ93_partial.hbs",
11
+ FACES93_1_partial: "samples/FACES93_1_partial.hbs",
12
+ FACES93_2_1_partial: "samples/FACES93_2_1_partial.hbs",
13
+ FACES93_2_2_partial: "samples/FACES93_2_2_partial.hbs",
14
+ };
15
+
10
16
  // Labels of the sample
11
17
  labels = {
12
18
  L1 : {"eng" : "axis_2_raw", "fr" : ""},
@@ -19,7 +19,7 @@ class PSWQ93 extends Profile {
19
19
  multiProfile: false /* Whether the sample has multiple profiles or not */,
20
20
  questions: false /* Determines whether to get questions from inital dataset or not */,
21
21
  defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
22
- fields: ["marital_status"] /* In case you want to get some additional fields and show in the profile */,
22
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
23
23
  },
24
24
  /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
25
25
  /* calculating its dimensions carefully is of great importance */
@@ -23,7 +23,7 @@ class RIASEC93 extends Profile {
23
23
  multiProfile: false /* Whether the sample has multiple profiles or not */,
24
24
  questions: true /* Determines whether to get questions from inital dataset or not */,
25
25
  defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
26
- fields: ["marital_status"] /* In case you want to get some additional fields and show in the profile */,
26
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
27
27
  },
28
28
  /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
29
29
  /* calculating its dimensions carefully is of great importance */