@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.
- package/.vscode/settings.json +3 -3
- package/HANDOVER.md +146 -0
- package/README.md +26 -26
- package/app/i18n.config.js +20 -20
- package/app/i18n_wellbeing.config.js +20 -20
- package/app/services/localeService.js +28 -28
- package/assets/Mediclinic/css/nasco_report.css +6297 -6297
- package/assets/Mediclinic/css/nasco_report_rtl.css +851 -851
- package/assets/Mediclinic/css/style.css +33 -33
- package/assets/Mediclinic/js/js.js +112 -112
- package/assets/Mediclinic/js/raphael.js +8437 -8437
- package/assets/arabic.css +275 -275
- package/assets/charts.min.js +7 -7
- package/assets/corporate_report/css/report.css +582 -582
- package/assets/corporate_report/css/report_rtl.css +144 -144
- package/assets/corporate_report/js/js.js +14 -14
- package/assets/data/data.json +124 -124
- package/assets/data/data2.json +675 -675
- package/assets/data/pdf_data_with_history.json +1255 -1255
- package/assets/doctor-note-insight-icon.svg +11 -11
- package/assets/imc/css/style.css +61 -61
- package/assets/jquery-1.4.min.js +151 -151
- package/assets/jquery-2.1.0.min.js +3 -3
- package/assets/js.js +201 -201
- package/assets/medicus_pdf/arabic.css +444 -444
- package/assets/medicus_pdf/styles.css +2427 -2427
- package/assets/print.css +4 -4
- package/assets/qr-code-style.css +68 -68
- package/assets/qrcode.min.js +3 -3
- package/assets/raphael-min.js +10 -10
- package/assets/sanusx/css/sanusx_report.css +707 -707
- package/assets/sizing.js +2 -2
- package/assets/styles.css +1545 -1545
- package/assets/styles.min.css +1358 -1358
- package/assets/translation.js +30 -30
- package/assets/wellbeing/css/nasco_report.css +3472 -3472
- package/assets/wellbeing/css/nasco_report_rtl.css +679 -679
- package/assets/wellbeing/js/js.js +111 -111
- package/assets/wellbeing/js/raphael.js +8437 -8437
- package/base64/cairo-font.js +2 -2
- package/config/Mediclinic.json +37 -37
- package/config/Najeeb.ai.json +35 -35
- package/config/Pha.json +64 -64
- package/config/bionext.json +37 -37
- package/config/default.json +35 -35
- package/config/diagnostikare.json +34 -34
- package/config/maisonsante.json +39 -39
- package/config/nasco.json +35 -35
- package/config/sanitas.json +35 -35
- package/config/sanusx.json +34 -34
- package/config/test.txt +4 -4
- package/data converter.js +53 -53
- package/docs/01-architecture-overview.md +149 -0
- package/docs/02-configuration-and-whitelabelling.md +111 -0
- package/docs/03-templating-and-rendering.md +71 -0
- package/docs/04-report-pipelines.md +128 -0
- package/docs/05-questions-and-data-model.md +67 -0
- package/docs/06-internationalization.md +59 -0
- package/docs/07-email-notifications.md +59 -0
- package/docs/08-known-issues-and-technical-debt.md +41 -0
- package/docs/README.md +22 -0
- package/downloadfile.js +6 -6
- package/example.txt +1188 -1188
- package/index.js +481 -480
- package/lib/big_integral_questionnaire.js +370 -298
- package/lib/corporate_report_generator.js +399 -399
- package/lib/pdf_generator.min.js +525 -525
- package/lib/sanusx_report_generator.js +533 -533
- package/lib/sendEmail.js +343 -343
- package/lib/template.js +2227 -2227
- package/lib/wellbeing_report_generator.js +2164 -2134
- package/locales/ar-AE.json +169 -169
- package/locales/ar-SA.json +169 -169
- package/locales/ar.json +397 -397
- package/locales/de.json +169 -169
- package/locales/en.json +229 -229
- package/locales/fr.json +168 -168
- package/locales/pt.json +165 -165
- package/locales/wellbeing/ar-AE.json +149 -149
- package/locales/wellbeing/ar-SA.json +257 -257
- package/locales/wellbeing/de.json +301 -301
- package/locales/wellbeing/en.json +423 -423
- package/locales/wellbeing/es.json +133 -133
- package/locales/wellbeing/fr.json +121 -121
- package/locales/wellbeing/it-IT.json +121 -121
- package/locales/wellbeing/pt.json +121 -121
- package/locales/wellbeing/tr.json +121 -121
- package/locales/wellbeing/zh-CN.json +121 -121
- package/locales/zh-CN.json +165 -165
- package/package.json +47 -47
- package/preview-big-integral.js +75 -75
- package/run.js +15 -15
- package/templates/Mediclinic/blocks/first-section.html +205 -205
- package/templates/Mediclinic/blocks/footer.html +7 -7
- package/templates/Mediclinic/blocks/header-template.html +5 -5
- package/templates/Mediclinic/blocks/header.html +20 -20
- package/templates/Mediclinic/blocks/patient-table.html +38 -38
- package/templates/Mediclinic/blocks/pdf-header.html +9 -9
- package/templates/Mediclinic/blocks/tips.html +8 -8
- package/templates/Mediclinic/ltr_no_pages.html +37 -37
- package/templates/Mediclinic/rtl_no_pages.html +42 -42
- package/templates/Mediclinic/wellbeing_template.html +41 -41
- package/templates/Pha/blocks/first-section.html +207 -207
- package/templates/Pha/blocks/footer.html +7 -7
- package/templates/Pha/blocks/header-template.html +5 -5
- package/templates/Pha/blocks/header.html +20 -20
- package/templates/Pha/blocks/patient-table.html +38 -38
- package/templates/Pha/blocks/pdf-header.html +8 -8
- package/templates/Pha/blocks/tips.html +8 -8
- package/templates/Pha/ltr_no_pages.html +37 -37
- package/templates/Pha/rtl_no_pages.html +42 -42
- package/templates/Pha/wellbeing_template.html +41 -41
- package/templates/base.html +23 -23
- package/templates/blocks/ar-first-page-header.html +68 -68
- package/templates/blocks/ar-footer.html +54 -54
- package/templates/blocks/ar-header.html +67 -67
- package/templates/blocks/biomarker-compact-ar.html +27 -27
- package/templates/blocks/biomarker-compact.html +27 -27
- package/templates/blocks/biomarker-details.html +41 -41
- package/templates/blocks/biomarker-insight.html +22 -22
- package/templates/blocks/biomarker-min.html +9 -9
- package/templates/blocks/doctor-note.html +11 -11
- package/templates/blocks/footer.html +35 -35
- package/templates/blocks/header-first-page.html +46 -46
- package/templates/blocks/header.html +49 -49
- package/templates/blocks/panel-compact.html +38 -38
- package/templates/blocks/panel-details.html +16 -16
- package/templates/blocks/report-summary.html +16 -16
- package/templates/blocks/section-title.html +4 -4
- package/templates/blocks/signature.html +16 -16
- package/templates/blocks/summary-insight.html +15 -15
- package/templates/blocks/summary.html +9 -9
- package/templates/corporate_report/cover_page.html +23 -23
- package/templates/corporate_report/footer.html +9 -9
- package/templates/corporate_report/ltr_no_pages.html +20 -20
- package/templates/corporate_report/page.html +24 -24
- package/templates/corporate_report/participant_analytics.html +5 -5
- package/templates/corporate_report/rtl_no_pages.html +20 -20
- package/templates/empty.html +10 -10
- package/templates/first_page_head.html +157 -157
- package/templates/imc/first-header-template.html +53 -53
- package/templates/ltr.html +1368 -1368
- package/templates/ltr_no_pages.html +89 -89
- package/templates/maisonsante/blocks/first-section.html +151 -207
- package/templates/maisonsante/blocks/footer.html +7 -7
- package/templates/maisonsante/blocks/header-template.html +5 -5
- package/templates/maisonsante/blocks/header.html +20 -20
- package/templates/maisonsante/blocks/patient-table.html +38 -38
- package/templates/maisonsante/blocks/pdf-header.html +8 -8
- package/templates/maisonsante/blocks/tips.html +8 -8
- package/templates/maisonsante/ltr_no_pages.html +38 -38
- package/templates/maisonsante/rtl_no_pages.html +43 -43
- package/templates/maisonsante/wellbeing_template.html +41 -41
- package/templates/no_pages.html +1224 -1224
- package/templates/popup/popup-template.html +129 -129
- package/templates/rtl_no_pages.html +92 -92
- package/templates/sanusx/blocks/footer.html +6 -6
- package/templates/sanusx/blocks/header.html +20 -20
- package/templates/sanusx/blocks/personal-details.html +123 -123
- package/templates/sanusx/blocks/predictions-section.html +57 -57
- package/templates/sanusx/blocks/recommendations-section.html +6 -6
- package/templates/sanusx/blocks/super-power-section.html +29 -29
- package/templates/sanusx/blocks/tips.html +8 -8
- package/templates/sanusx/ltr_no_pages.html +26 -26
- package/templates/sanusx/rtl_no_pages.html +36 -36
- package/templates/template.html +1377 -1377
- package/templates/wellbeing/blocks/first-section.html +106 -106
- package/templates/wellbeing/blocks/footer.html +7 -7
- package/templates/wellbeing/blocks/header.html +37 -37
- package/templates/wellbeing/blocks/tips.html +8 -8
- package/templates/wellbeing/ltr_no_pages.html +35 -35
- package/templates/wellbeing/rtl_no_pages.html +36 -36
- package/templates/wellbeing/wellbeing_template.html +43 -43
- package/test.js +74 -74
- package/testing-reports/mediclinic/arabic-data.js +0 -439
- package/testing-reports/mediclinic/doctor-data.js +0 -523
- package/testing-reports/mediclinic/with-wellbeing.js +0 -415
- package/testing-reports/pha/notes-example.js +0 -397
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="de">
|
|
3
|
-
<head>
|
|
4
|
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
6
|
-
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700" rel="stylesheet">
|
|
7
|
-
<link rel="stylesheet" href="../../assets/wellbeing/css/wellbeing-new-layout.css">
|
|
8
|
-
<link rel="stylesheet" href="../../assets/wellbeing/css/wellbeing-new-layout-print.css">
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
</head>
|
|
12
|
-
<body>
|
|
13
|
-
<div class='ui grid print-page-main'>
|
|
14
|
-
<div class="ui container pdf-container">
|
|
15
|
-
<div class='score-main'>
|
|
16
|
-
<div class="row">
|
|
17
|
-
<div class="pdf-top-logo">
|
|
18
|
-
<div class='report-logo'>
|
|
19
|
-
<img class='ukv-logo ui image' src="../../assets/wellbeing/images/vkb/vkb-blue.png"/>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
<div class="row">
|
|
25
|
-
<div class="sixteen wide computer sixteen wide large screen sixteen wide mobile sixteen wide tablet column">
|
|
26
|
-
<div class="score-page-header">
|
|
27
|
-
Dein Ergebnis
|
|
28
|
-
</div>
|
|
29
|
-
<div class="physical-score-intro">
|
|
30
|
-
<div class="lingualReading-text">
|
|
31
|
-
Du hast eine solide Basis an guten Gewohnheiten entwickelt. Jetzt ist es an der Zeit, sie
|
|
32
|
-
auszubauen, mehr zu erreichen und noch gesünder zu werden!
|
|
33
|
-
</div>
|
|
34
|
-
<img src="../../assets/wellbeing/images/fair-score-female.png"
|
|
35
|
-
class="ui image score-gender-image">
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</body>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="de">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
6
|
+
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700" rel="stylesheet">
|
|
7
|
+
<link rel="stylesheet" href="../../assets/wellbeing/css/wellbeing-new-layout.css">
|
|
8
|
+
<link rel="stylesheet" href="../../assets/wellbeing/css/wellbeing-new-layout-print.css">
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div class='ui grid print-page-main'>
|
|
14
|
+
<div class="ui container pdf-container">
|
|
15
|
+
<div class='score-main'>
|
|
16
|
+
<div class="row">
|
|
17
|
+
<div class="pdf-top-logo">
|
|
18
|
+
<div class='report-logo'>
|
|
19
|
+
<img class='ukv-logo ui image' src="../../assets/wellbeing/images/vkb/vkb-blue.png"/>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="row">
|
|
25
|
+
<div class="sixteen wide computer sixteen wide large screen sixteen wide mobile sixteen wide tablet column">
|
|
26
|
+
<div class="score-page-header">
|
|
27
|
+
Dein Ergebnis
|
|
28
|
+
</div>
|
|
29
|
+
<div class="physical-score-intro">
|
|
30
|
+
<div class="lingualReading-text">
|
|
31
|
+
Du hast eine solide Basis an guten Gewohnheiten entwickelt. Jetzt ist es an der Zeit, sie
|
|
32
|
+
auszubauen, mehr zu erreichen und noch gesünder zu werden!
|
|
33
|
+
</div>
|
|
34
|
+
<img src="../../assets/wellbeing/images/fair-score-female.png"
|
|
35
|
+
class="ui image score-gender-image">
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</body>
|
|
44
44
|
</html>
|
package/test.js
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
const fs = require("fs");
|
|
2
|
-
const {
|
|
3
|
-
generateHTMLWellbeingReportWithSmartReport,
|
|
4
|
-
generatePDFReport,
|
|
5
|
-
} = require("./lib/wellbeing_report_generator");
|
|
6
|
-
|
|
7
|
-
const CLIENTS = {
|
|
8
|
-
Mediclinic: 'Mediclinic',
|
|
9
|
-
PHA: 'pha',
|
|
10
|
-
MaisonSante: 'maisonsante'
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const client = CLIENTS.PHA;
|
|
14
|
-
|
|
15
|
-
const path = require("path");
|
|
16
|
-
const phaNotesExample = require("./testing-reports/pha/notes-example");
|
|
17
|
-
const mediclinicReportWithWellbeing = require("./testing-reports/mediclinic/with-wellbeing");
|
|
18
|
-
const mediclinicDoctorData = require("./testing-reports/mediclinic/doctor-data");
|
|
19
|
-
const mediclinicArabicData = require("./testing-reports/mediclinic/arabic-data");
|
|
20
|
-
// PHA examples: phaNotesExample
|
|
21
|
-
// Mediclinic examples: mediclinicReportWithWellbeing | mediclinicDoctorData | mediclinicArabicData
|
|
22
|
-
// Using mediclinicDoctorData (IsDoctor:true) so the Big Integral Questionnaire section renders for Maison Sante
|
|
23
|
-
const data = phaNotesExample;
|
|
24
|
-
const doctorData = mediclinicDoctorData;
|
|
25
|
-
const arabicData = mediclinicArabicData;
|
|
26
|
-
|
|
27
|
-
async function generateTestPDF() {
|
|
28
|
-
const PDF_FILE_PATH = path.resolve(__dirname, "output/nasco-sample.pdf");
|
|
29
|
-
const ENCRYPTED_PATH = path.resolve(__dirname, "output/nasco-sample-encrypted.pdf");
|
|
30
|
-
|
|
31
|
-
// Generate HTML - uses `data` (swap with any example variable above)
|
|
32
|
-
const html = await generateHTMLWellbeingReportWithSmartReport(
|
|
33
|
-
data,
|
|
34
|
-
true,
|
|
35
|
-
client,
|
|
36
|
-
"en",
|
|
37
|
-
['Lab Corp'],
|
|
38
|
-
true
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const configPath = path.resolve(__dirname, "config", `${client}.json`);
|
|
42
|
-
let defaultConfig = require("./config/default.json");
|
|
43
|
-
|
|
44
|
-
if (fs.existsSync(configPath)) {
|
|
45
|
-
defaultConfig = require(configPath);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Generate the raw PDF buffer (pass data.footer for PHA + LabCorp address)
|
|
49
|
-
const fileBuffer = await generatePDFReport({
|
|
50
|
-
...html,
|
|
51
|
-
client: client,
|
|
52
|
-
logo: defaultConfig.logo,
|
|
53
|
-
footer: data.footer,
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// Write original PDF
|
|
57
|
-
fs.writeFileSync(PDF_FILE_PATH, fileBuffer);
|
|
58
|
-
(async () => {
|
|
59
|
-
const qpdf = await import('node-qpdf2');
|
|
60
|
-
qpdf.encrypt({
|
|
61
|
-
input: PDF_FILE_PATH,
|
|
62
|
-
output: ENCRYPTED_PATH,
|
|
63
|
-
keyLength: 256,
|
|
64
|
-
password: 'yourpassword',
|
|
65
|
-
}).then(() => {
|
|
66
|
-
console.log('Encrypted!');
|
|
67
|
-
});
|
|
68
|
-
})();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
generateTestPDF();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const {
|
|
3
|
+
generateHTMLWellbeingReportWithSmartReport,
|
|
4
|
+
generatePDFReport,
|
|
5
|
+
} = require("./lib/wellbeing_report_generator");
|
|
6
|
+
|
|
7
|
+
const CLIENTS = {
|
|
8
|
+
Mediclinic: 'Mediclinic',
|
|
9
|
+
PHA: 'pha',
|
|
10
|
+
MaisonSante: 'maisonsante'
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const client = CLIENTS.PHA;
|
|
14
|
+
|
|
15
|
+
const path = require("path");
|
|
16
|
+
const phaNotesExample = require("./testing-reports/pha/notes-example");
|
|
17
|
+
const mediclinicReportWithWellbeing = require("./testing-reports/mediclinic/with-wellbeing");
|
|
18
|
+
const mediclinicDoctorData = require("./testing-reports/mediclinic/doctor-data");
|
|
19
|
+
const mediclinicArabicData = require("./testing-reports/mediclinic/arabic-data");
|
|
20
|
+
// PHA examples: phaNotesExample
|
|
21
|
+
// Mediclinic examples: mediclinicReportWithWellbeing | mediclinicDoctorData | mediclinicArabicData
|
|
22
|
+
// Using mediclinicDoctorData (IsDoctor:true) so the Big Integral Questionnaire section renders for Maison Sante
|
|
23
|
+
const data = phaNotesExample;
|
|
24
|
+
const doctorData = mediclinicDoctorData;
|
|
25
|
+
const arabicData = mediclinicArabicData;
|
|
26
|
+
|
|
27
|
+
async function generateTestPDF() {
|
|
28
|
+
const PDF_FILE_PATH = path.resolve(__dirname, "output/nasco-sample.pdf");
|
|
29
|
+
const ENCRYPTED_PATH = path.resolve(__dirname, "output/nasco-sample-encrypted.pdf");
|
|
30
|
+
|
|
31
|
+
// Generate HTML - uses `data` (swap with any example variable above)
|
|
32
|
+
const html = await generateHTMLWellbeingReportWithSmartReport(
|
|
33
|
+
data,
|
|
34
|
+
true,
|
|
35
|
+
client,
|
|
36
|
+
"en",
|
|
37
|
+
['Lab Corp'],
|
|
38
|
+
true
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const configPath = path.resolve(__dirname, "config", `${client}.json`);
|
|
42
|
+
let defaultConfig = require("./config/default.json");
|
|
43
|
+
|
|
44
|
+
if (fs.existsSync(configPath)) {
|
|
45
|
+
defaultConfig = require(configPath);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Generate the raw PDF buffer (pass data.footer for PHA + LabCorp address)
|
|
49
|
+
const fileBuffer = await generatePDFReport({
|
|
50
|
+
...html,
|
|
51
|
+
client: client,
|
|
52
|
+
logo: defaultConfig.logo,
|
|
53
|
+
footer: data.footer,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Write original PDF
|
|
57
|
+
fs.writeFileSync(PDF_FILE_PATH, fileBuffer);
|
|
58
|
+
(async () => {
|
|
59
|
+
const qpdf = await import('node-qpdf2');
|
|
60
|
+
qpdf.encrypt({
|
|
61
|
+
input: PDF_FILE_PATH,
|
|
62
|
+
output: ENCRYPTED_PATH,
|
|
63
|
+
keyLength: 256,
|
|
64
|
+
password: 'yourpassword',
|
|
65
|
+
}).then(() => {
|
|
66
|
+
console.log('Encrypted!');
|
|
67
|
+
});
|
|
68
|
+
})();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
generateTestPDF();
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|