@medicus.ai/medicus-report-pdf-generator 1.3.13 → 1.3.15

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 (178) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/HANDOVER.md +146 -0
  3. package/README.md +26 -26
  4. package/app/i18n.config.js +20 -20
  5. package/app/i18n_wellbeing.config.js +20 -20
  6. package/app/services/localeService.js +28 -28
  7. package/assets/Mediclinic/css/nasco_report.css +6297 -6297
  8. package/assets/Mediclinic/css/nasco_report_rtl.css +851 -851
  9. package/assets/Mediclinic/css/style.css +33 -33
  10. package/assets/Mediclinic/js/js.js +112 -112
  11. package/assets/Mediclinic/js/raphael.js +8437 -8437
  12. package/assets/arabic.css +275 -275
  13. package/assets/charts.min.js +7 -7
  14. package/assets/corporate_report/css/report.css +582 -582
  15. package/assets/corporate_report/css/report_rtl.css +144 -144
  16. package/assets/corporate_report/js/js.js +14 -14
  17. package/assets/data/data.json +124 -124
  18. package/assets/data/data2.json +675 -675
  19. package/assets/data/pdf_data_with_history.json +1255 -1255
  20. package/assets/doctor-note-insight-icon.svg +11 -11
  21. package/assets/imc/css/style.css +61 -61
  22. package/assets/jquery-1.4.min.js +151 -151
  23. package/assets/jquery-2.1.0.min.js +3 -3
  24. package/assets/js.js +201 -201
  25. package/assets/medicus_pdf/arabic.css +444 -444
  26. package/assets/medicus_pdf/styles.css +2427 -2427
  27. package/assets/print.css +4 -4
  28. package/assets/qr-code-style.css +68 -68
  29. package/assets/qrcode.min.js +3 -3
  30. package/assets/raphael-min.js +10 -10
  31. package/assets/sanusx/css/sanusx_report.css +707 -707
  32. package/assets/sizing.js +2 -2
  33. package/assets/styles.css +1545 -1545
  34. package/assets/styles.min.css +1358 -1358
  35. package/assets/translation.js +30 -30
  36. package/assets/wellbeing/css/nasco_report.css +3472 -3472
  37. package/assets/wellbeing/css/nasco_report_rtl.css +679 -679
  38. package/assets/wellbeing/js/js.js +111 -111
  39. package/assets/wellbeing/js/raphael.js +8437 -8437
  40. package/base64/cairo-font.js +2 -2
  41. package/config/Mediclinic.json +37 -37
  42. package/config/Najeeb.ai.json +35 -35
  43. package/config/Pha.json +64 -64
  44. package/config/bionext.json +37 -37
  45. package/config/default.json +35 -35
  46. package/config/diagnostikare.json +34 -34
  47. package/config/maisonsante.json +39 -39
  48. package/config/nasco.json +35 -35
  49. package/config/sanitas.json +35 -35
  50. package/config/sanusx.json +34 -34
  51. package/config/test.txt +4 -4
  52. package/data converter.js +53 -53
  53. package/docs/01-architecture-overview.md +149 -0
  54. package/docs/02-configuration-and-whitelabelling.md +111 -0
  55. package/docs/03-templating-and-rendering.md +71 -0
  56. package/docs/04-report-pipelines.md +128 -0
  57. package/docs/05-questions-and-data-model.md +67 -0
  58. package/docs/06-internationalization.md +59 -0
  59. package/docs/07-email-notifications.md +59 -0
  60. package/docs/08-known-issues-and-technical-debt.md +41 -0
  61. package/docs/README.md +22 -0
  62. package/downloadfile.js +6 -6
  63. package/example.txt +1188 -1188
  64. package/index.js +481 -480
  65. package/lib/big_integral_questionnaire.js +370 -298
  66. package/lib/corporate_report_generator.js +399 -399
  67. package/lib/pdf_generator.min.js +525 -525
  68. package/lib/sanusx_report_generator.js +533 -533
  69. package/lib/sendEmail.js +343 -343
  70. package/lib/template.js +2227 -2227
  71. package/lib/wellbeing_report_generator.js +2164 -2134
  72. package/locales/ar-AE.json +169 -169
  73. package/locales/ar-SA.json +169 -169
  74. package/locales/ar.json +397 -397
  75. package/locales/de.json +169 -169
  76. package/locales/en.json +229 -229
  77. package/locales/fr.json +168 -168
  78. package/locales/pt.json +165 -165
  79. package/locales/wellbeing/ar-AE.json +149 -149
  80. package/locales/wellbeing/ar-SA.json +257 -257
  81. package/locales/wellbeing/de.json +301 -301
  82. package/locales/wellbeing/en.json +423 -423
  83. package/locales/wellbeing/es.json +133 -133
  84. package/locales/wellbeing/fr.json +121 -121
  85. package/locales/wellbeing/it-IT.json +121 -121
  86. package/locales/wellbeing/pt.json +121 -121
  87. package/locales/wellbeing/tr.json +121 -121
  88. package/locales/wellbeing/zh-CN.json +121 -121
  89. package/locales/zh-CN.json +165 -165
  90. package/package.json +47 -47
  91. package/preview-big-integral.js +75 -75
  92. package/run.js +15 -15
  93. package/templates/Mediclinic/blocks/first-section.html +205 -205
  94. package/templates/Mediclinic/blocks/footer.html +7 -7
  95. package/templates/Mediclinic/blocks/header-template.html +5 -5
  96. package/templates/Mediclinic/blocks/header.html +20 -20
  97. package/templates/Mediclinic/blocks/patient-table.html +38 -38
  98. package/templates/Mediclinic/blocks/pdf-header.html +9 -9
  99. package/templates/Mediclinic/blocks/tips.html +8 -8
  100. package/templates/Mediclinic/ltr_no_pages.html +37 -37
  101. package/templates/Mediclinic/rtl_no_pages.html +42 -42
  102. package/templates/Mediclinic/wellbeing_template.html +41 -41
  103. package/templates/Pha/blocks/first-section.html +207 -207
  104. package/templates/Pha/blocks/footer.html +7 -7
  105. package/templates/Pha/blocks/header-template.html +5 -5
  106. package/templates/Pha/blocks/header.html +20 -20
  107. package/templates/Pha/blocks/patient-table.html +38 -38
  108. package/templates/Pha/blocks/pdf-header.html +8 -8
  109. package/templates/Pha/blocks/tips.html +8 -8
  110. package/templates/Pha/ltr_no_pages.html +37 -37
  111. package/templates/Pha/rtl_no_pages.html +42 -42
  112. package/templates/Pha/wellbeing_template.html +41 -41
  113. package/templates/base.html +23 -23
  114. package/templates/blocks/ar-first-page-header.html +68 -68
  115. package/templates/blocks/ar-footer.html +54 -54
  116. package/templates/blocks/ar-header.html +67 -67
  117. package/templates/blocks/biomarker-compact-ar.html +27 -27
  118. package/templates/blocks/biomarker-compact.html +27 -27
  119. package/templates/blocks/biomarker-details.html +41 -41
  120. package/templates/blocks/biomarker-insight.html +22 -22
  121. package/templates/blocks/biomarker-min.html +9 -9
  122. package/templates/blocks/doctor-note.html +11 -11
  123. package/templates/blocks/footer.html +35 -35
  124. package/templates/blocks/header-first-page.html +46 -46
  125. package/templates/blocks/header.html +49 -49
  126. package/templates/blocks/panel-compact.html +38 -38
  127. package/templates/blocks/panel-details.html +16 -16
  128. package/templates/blocks/report-summary.html +16 -16
  129. package/templates/blocks/section-title.html +4 -4
  130. package/templates/blocks/signature.html +16 -16
  131. package/templates/blocks/summary-insight.html +15 -15
  132. package/templates/blocks/summary.html +9 -9
  133. package/templates/corporate_report/cover_page.html +23 -23
  134. package/templates/corporate_report/footer.html +9 -9
  135. package/templates/corporate_report/ltr_no_pages.html +20 -20
  136. package/templates/corporate_report/page.html +24 -24
  137. package/templates/corporate_report/participant_analytics.html +5 -5
  138. package/templates/corporate_report/rtl_no_pages.html +20 -20
  139. package/templates/empty.html +10 -10
  140. package/templates/first_page_head.html +157 -157
  141. package/templates/imc/first-header-template.html +53 -53
  142. package/templates/ltr.html +1368 -1368
  143. package/templates/ltr_no_pages.html +89 -89
  144. package/templates/maisonsante/blocks/first-section.html +151 -207
  145. package/templates/maisonsante/blocks/footer.html +7 -7
  146. package/templates/maisonsante/blocks/header-template.html +5 -5
  147. package/templates/maisonsante/blocks/header.html +20 -20
  148. package/templates/maisonsante/blocks/patient-table.html +38 -38
  149. package/templates/maisonsante/blocks/pdf-header.html +8 -8
  150. package/templates/maisonsante/blocks/tips.html +8 -8
  151. package/templates/maisonsante/ltr_no_pages.html +38 -38
  152. package/templates/maisonsante/rtl_no_pages.html +43 -43
  153. package/templates/maisonsante/wellbeing_template.html +41 -41
  154. package/templates/no_pages.html +1224 -1224
  155. package/templates/popup/popup-template.html +129 -129
  156. package/templates/rtl_no_pages.html +92 -92
  157. package/templates/sanusx/blocks/footer.html +6 -6
  158. package/templates/sanusx/blocks/header.html +20 -20
  159. package/templates/sanusx/blocks/personal-details.html +123 -123
  160. package/templates/sanusx/blocks/predictions-section.html +57 -57
  161. package/templates/sanusx/blocks/recommendations-section.html +6 -6
  162. package/templates/sanusx/blocks/super-power-section.html +29 -29
  163. package/templates/sanusx/blocks/tips.html +8 -8
  164. package/templates/sanusx/ltr_no_pages.html +26 -26
  165. package/templates/sanusx/rtl_no_pages.html +36 -36
  166. package/templates/template.html +1377 -1377
  167. package/templates/wellbeing/blocks/first-section.html +106 -106
  168. package/templates/wellbeing/blocks/footer.html +7 -7
  169. package/templates/wellbeing/blocks/header.html +37 -37
  170. package/templates/wellbeing/blocks/tips.html +8 -8
  171. package/templates/wellbeing/ltr_no_pages.html +35 -35
  172. package/templates/wellbeing/rtl_no_pages.html +36 -36
  173. package/templates/wellbeing/wellbeing_template.html +43 -43
  174. package/test.js +74 -74
  175. package/testing-reports/mediclinic/arabic-data.js +0 -439
  176. package/testing-reports/mediclinic/doctor-data.js +0 -523
  177. package/testing-reports/mediclinic/with-wellbeing.js +0 -415
  178. package/testing-reports/pha/notes-example.js +0 -397
@@ -1,113 +1,113 @@
1
- $(function () {
2
- $("div[key=\"healthRisk\"]").appendTo("div[key=\"mind\"]");
3
- drawPercentageMeters();
4
-
5
- let bodyHeight = $("body").height()
6
- let contentHeight = $(".score-main").height()
7
- let FooterTop = parseFloat(bodyHeight) - parseFloat(contentHeight)
8
- if(contentHeight < bodyHeight && FooterTop > 24){
9
- $(".recommended-tips-title").css({"margin-top": FooterTop - 45})
10
- }
11
- });
12
-
13
- function drawPercentageMeters() {
14
- let windowWidth = window.innerWidth
15
- let dimensions = [250, 200];
16
-
17
- if (windowWidth < 769 && windowWidth > 480) {
18
- dimensions = [200, 200];
19
- }
20
- console.log("allScores", allScores)
21
- for (let score in allScores) {
22
- console.log("score", score)
23
- if (score !== "healthRisk")
24
- ResultPie(allScores[score], score, dimensions);
25
- }
26
- }
27
-
28
- let paper
29
- let OUTER_WIDTH_SIZE = 200;
30
- let OUTER_HEIGHT_SIZE = 200;
31
- const BOTTOM_CUTOUT_ANGLE = 120;
32
- const ICON_SIZE = 18;
33
-
34
- const STROKE_WIDTH = 4;
35
- const STROKE_SPACE = 2;
36
-
37
- function ResultPie(data, html_element, dimensions) {
38
- document.getElementById(html_element).innerHTML = "";
39
- paper = new Raphael(document.getElementById(html_element), OUTER_WIDTH_SIZE, OUTER_HEIGHT_SIZE);
40
- for (let i = 0; i < data.length; i++) {
41
- addStepIcon(i, data);
42
- drawPieceArcs(i, data);
43
- }
44
- }
45
-
46
- let num = 2.1
47
-
48
- function addStepIcon(step, data) {
49
- let center = [OUTER_WIDTH_SIZE / num, OUTER_WIDTH_SIZE / num];
50
- let radius = OUTER_WIDTH_SIZE / num - ICON_SIZE;
51
- let a = getPieceAngles(step, data);
52
- let angle = a[0] + (a[1] - a[0]) / num;
53
-
54
- let score_segments = Math.ceil(data[step].percentage); // get score between 1 and 5
55
-
56
- let color = data[step].key!='mind'?RANGE_COLORS[Math.max(0, score_segments - 1)]:RANGE_COLORS[Math.max(0, RANGE_COLORS.length - (score_segments==0?1:score_segments))]
57
- let coords = toCoords(center, radius, angle);
58
- let c = paper.path(data[step].icon);
59
-
60
- c.node.style = "transform: translate(" + (coords[0] - ICON_SIZE + 3) + "px," + (coords[1] - ICON_SIZE) + "px); stroke-opacity: 0.2";
61
- c.attr({width: ICON_SIZE});
62
- c.attr({stroke: color, fill: color});
63
-
64
- if (data[step].percentage == 0) c.attr({opacity: 0.2});
65
- if (typeof data[step].title != "undefined") c.attr({title: data[step].title});
66
- }
67
-
68
- function getPieceAngles(index, data) {
69
- // Returns an array with start and end angles
70
- let step_angle = (360 - BOTTOM_CUTOUT_ANGLE) / data.length;
71
- let start_angle = index * step_angle - 90 - (360 - BOTTOM_CUTOUT_ANGLE) / 2;
72
- return [start_angle, start_angle + step_angle];
73
- }
74
-
75
- function toCoords(center, radius, angle) {
76
- let radians = (angle / 180) * Math.PI;
77
- let x = center[0] + Math.cos(radians) * radius;
78
- let y = center[1] + Math.sin(radians) * radius;
79
- return [x, y];
80
- }
81
-
82
- function drawPieceArcs(index, data) {
83
- let radius = OUTER_WIDTH_SIZE / num - ICON_SIZE * num;
84
- let angles = getPieceAngles(index, data);
85
- let score_segments = Math.ceil(data[index].percentage); // get score between 1 and 5
86
- let color = data[index].key!='mind'?RANGE_COLORS[Math.max(0, score_segments - 1)]:RANGE_COLORS[Math.max(0, RANGE_COLORS.length - (score_segments==0?1:score_segments))]
87
- for (let i = 0; i < 5; i++) {
88
- drawArc(radius, angles[0] + (STROKE_SPACE / num), angles[1] - (STROKE_SPACE / num), color, score_segments >= (5 - i) ? 1 : 0.25, index, data);
89
- radius -= STROKE_WIDTH + STROKE_SPACE;
90
- }
91
- }
92
-
93
- function drawArc(radius, startAngle, endAngle, color, opacity, index, data) {
94
- let center = [OUTER_WIDTH_SIZE / num, OUTER_WIDTH_SIZE / num];
95
- let angle = startAngle;
96
- let coords = toCoords(center, radius, angle);
97
- let path = "M " + coords[0] + " " + coords[1];
98
- while (angle <= endAngle) {
99
- coords = toCoords(center, radius, angle);
100
- path += " L " + coords[0] + " " + coords[1];
101
- angle += 1;
102
- }
103
-
104
- let p = paper.path(path);
105
- p.attr({stroke: color, 'stroke-width': STROKE_WIDTH, opacity: opacity});
106
- if (typeof data[index].title != "undefined") p.attr({title: data[index].title});
107
- }
108
-
109
- function reset() {
110
- if (typeof paper != "undefined") {
111
- paper.remove();
112
- }
1
+ $(function () {
2
+ $("div[key=\"healthRisk\"]").appendTo("div[key=\"mind\"]");
3
+ drawPercentageMeters();
4
+
5
+ let bodyHeight = $("body").height()
6
+ let contentHeight = $(".score-main").height()
7
+ let FooterTop = parseFloat(bodyHeight) - parseFloat(contentHeight)
8
+ if(contentHeight < bodyHeight && FooterTop > 24){
9
+ $(".recommended-tips-title").css({"margin-top": FooterTop - 45})
10
+ }
11
+ });
12
+
13
+ function drawPercentageMeters() {
14
+ let windowWidth = window.innerWidth
15
+ let dimensions = [250, 200];
16
+
17
+ if (windowWidth < 769 && windowWidth > 480) {
18
+ dimensions = [200, 200];
19
+ }
20
+ console.log("allScores", allScores)
21
+ for (let score in allScores) {
22
+ console.log("score", score)
23
+ if (score !== "healthRisk")
24
+ ResultPie(allScores[score], score, dimensions);
25
+ }
26
+ }
27
+
28
+ let paper
29
+ let OUTER_WIDTH_SIZE = 200;
30
+ let OUTER_HEIGHT_SIZE = 200;
31
+ const BOTTOM_CUTOUT_ANGLE = 120;
32
+ const ICON_SIZE = 18;
33
+
34
+ const STROKE_WIDTH = 4;
35
+ const STROKE_SPACE = 2;
36
+
37
+ function ResultPie(data, html_element, dimensions) {
38
+ document.getElementById(html_element).innerHTML = "";
39
+ paper = new Raphael(document.getElementById(html_element), OUTER_WIDTH_SIZE, OUTER_HEIGHT_SIZE);
40
+ for (let i = 0; i < data.length; i++) {
41
+ addStepIcon(i, data);
42
+ drawPieceArcs(i, data);
43
+ }
44
+ }
45
+
46
+ let num = 2.1
47
+
48
+ function addStepIcon(step, data) {
49
+ let center = [OUTER_WIDTH_SIZE / num, OUTER_WIDTH_SIZE / num];
50
+ let radius = OUTER_WIDTH_SIZE / num - ICON_SIZE;
51
+ let a = getPieceAngles(step, data);
52
+ let angle = a[0] + (a[1] - a[0]) / num;
53
+
54
+ let score_segments = Math.ceil(data[step].percentage); // get score between 1 and 5
55
+
56
+ let color = data[step].key!='mind'?RANGE_COLORS[Math.max(0, score_segments - 1)]:RANGE_COLORS[Math.max(0, RANGE_COLORS.length - (score_segments==0?1:score_segments))]
57
+ let coords = toCoords(center, radius, angle);
58
+ let c = paper.path(data[step].icon);
59
+
60
+ c.node.style = "transform: translate(" + (coords[0] - ICON_SIZE + 3) + "px," + (coords[1] - ICON_SIZE) + "px); stroke-opacity: 0.2";
61
+ c.attr({width: ICON_SIZE});
62
+ c.attr({stroke: color, fill: color});
63
+
64
+ if (data[step].percentage == 0) c.attr({opacity: 0.2});
65
+ if (typeof data[step].title != "undefined") c.attr({title: data[step].title});
66
+ }
67
+
68
+ function getPieceAngles(index, data) {
69
+ // Returns an array with start and end angles
70
+ let step_angle = (360 - BOTTOM_CUTOUT_ANGLE) / data.length;
71
+ let start_angle = index * step_angle - 90 - (360 - BOTTOM_CUTOUT_ANGLE) / 2;
72
+ return [start_angle, start_angle + step_angle];
73
+ }
74
+
75
+ function toCoords(center, radius, angle) {
76
+ let radians = (angle / 180) * Math.PI;
77
+ let x = center[0] + Math.cos(radians) * radius;
78
+ let y = center[1] + Math.sin(radians) * radius;
79
+ return [x, y];
80
+ }
81
+
82
+ function drawPieceArcs(index, data) {
83
+ let radius = OUTER_WIDTH_SIZE / num - ICON_SIZE * num;
84
+ let angles = getPieceAngles(index, data);
85
+ let score_segments = Math.ceil(data[index].percentage); // get score between 1 and 5
86
+ let color = data[index].key!='mind'?RANGE_COLORS[Math.max(0, score_segments - 1)]:RANGE_COLORS[Math.max(0, RANGE_COLORS.length - (score_segments==0?1:score_segments))]
87
+ for (let i = 0; i < 5; i++) {
88
+ drawArc(radius, angles[0] + (STROKE_SPACE / num), angles[1] - (STROKE_SPACE / num), color, score_segments >= (5 - i) ? 1 : 0.25, index, data);
89
+ radius -= STROKE_WIDTH + STROKE_SPACE;
90
+ }
91
+ }
92
+
93
+ function drawArc(radius, startAngle, endAngle, color, opacity, index, data) {
94
+ let center = [OUTER_WIDTH_SIZE / num, OUTER_WIDTH_SIZE / num];
95
+ let angle = startAngle;
96
+ let coords = toCoords(center, radius, angle);
97
+ let path = "M " + coords[0] + " " + coords[1];
98
+ while (angle <= endAngle) {
99
+ coords = toCoords(center, radius, angle);
100
+ path += " L " + coords[0] + " " + coords[1];
101
+ angle += 1;
102
+ }
103
+
104
+ let p = paper.path(path);
105
+ p.attr({stroke: color, 'stroke-width': STROKE_WIDTH, opacity: opacity});
106
+ if (typeof data[index].title != "undefined") p.attr({title: data[index].title});
107
+ }
108
+
109
+ function reset() {
110
+ if (typeof paper != "undefined") {
111
+ paper.remove();
112
+ }
113
113
  }