@blackcode_sa/metaestetics-api 1.13.3 → 1.13.5
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/dist/admin/index.d.mts +15 -28
- package/dist/admin/index.d.ts +15 -28
- package/dist/index.d.mts +18 -30
- package/dist/index.d.ts +18 -30
- package/dist/index.js +11 -3
- package/dist/index.mjs +11 -3
- package/package.json +121 -119
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +128 -128
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +1984 -1984
- package/src/admin/aggregation/appointment/index.ts +1 -1
- package/src/admin/aggregation/clinic/README.md +52 -52
- package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +703 -703
- package/src/admin/aggregation/clinic/index.ts +1 -1
- package/src/admin/aggregation/forms/README.md +13 -13
- package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
- package/src/admin/aggregation/forms/index.ts +1 -1
- package/src/admin/aggregation/index.ts +8 -8
- package/src/admin/aggregation/patient/README.md +27 -27
- package/src/admin/aggregation/patient/index.ts +1 -1
- package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
- package/src/admin/aggregation/practitioner/README.md +42 -42
- package/src/admin/aggregation/practitioner/index.ts +1 -1
- package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
- package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
- package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
- package/src/admin/aggregation/procedure/README.md +43 -43
- package/src/admin/aggregation/procedure/index.ts +1 -1
- package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
- package/src/admin/aggregation/reviews/index.ts +1 -1
- package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +689 -689
- package/src/admin/analytics/analytics.admin.service.ts +278 -278
- package/src/admin/analytics/index.ts +2 -2
- package/src/admin/booking/README.md +125 -125
- package/src/admin/booking/booking.admin.ts +1037 -1037
- package/src/admin/booking/booking.calculator.ts +712 -712
- package/src/admin/booking/booking.types.ts +59 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +7 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +1 -1
- package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
- package/src/admin/documentation-templates/index.ts +1 -1
- package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
- package/src/admin/free-consultation/index.ts +1 -1
- package/src/admin/index.ts +81 -81
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +95 -95
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +732 -732
- package/src/admin/mailing/appointment/index.ts +1 -1
- package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
- package/src/admin/mailing/base.mailing.service.ts +208 -208
- package/src/admin/mailing/index.ts +3 -3
- package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
- package/src/admin/mailing/practitionerInvite/index.ts +2 -2
- package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
- package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
- package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
- package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
- package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
- package/src/admin/notifications/index.ts +1 -1
- package/src/admin/notifications/notifications.admin.ts +710 -710
- package/src/admin/requirements/README.md +128 -128
- package/src/admin/requirements/index.ts +1 -1
- package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
- package/src/admin/users/index.ts +1 -1
- package/src/admin/users/user-profile.admin.ts +405 -405
- package/src/backoffice/constants/certification.constants.ts +13 -13
- package/src/backoffice/constants/index.ts +1 -1
- package/src/backoffice/errors/backoffice.errors.ts +181 -181
- package/src/backoffice/errors/index.ts +1 -1
- package/src/backoffice/expo-safe/README.md +26 -26
- package/src/backoffice/expo-safe/index.ts +41 -41
- package/src/backoffice/index.ts +5 -5
- package/src/backoffice/services/FIXES_README.md +102 -102
- package/src/backoffice/services/README.md +57 -57
- package/src/backoffice/services/analytics.service.proposal.md +863 -863
- package/src/backoffice/services/analytics.service.summary.md +143 -143
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +384 -384
- package/src/backoffice/services/constants.service.ts +385 -385
- package/src/backoffice/services/documentation-template.service.ts +202 -202
- package/src/backoffice/services/index.ts +10 -10
- package/src/backoffice/services/migrate-products.ts +116 -116
- package/src/backoffice/services/product.service.ts +553 -553
- package/src/backoffice/services/requirement.service.ts +235 -235
- package/src/backoffice/services/subcategory.service.ts +461 -461
- package/src/backoffice/services/technology.service.ts +1151 -1151
- package/src/backoffice/types/README.md +12 -12
- package/src/backoffice/types/admin-constants.types.ts +69 -69
- package/src/backoffice/types/brand.types.ts +29 -29
- package/src/backoffice/types/category.types.ts +67 -67
- package/src/backoffice/types/documentation-templates.types.ts +28 -28
- package/src/backoffice/types/index.ts +10 -10
- package/src/backoffice/types/procedure-product.types.ts +38 -38
- package/src/backoffice/types/product.types.ts +240 -240
- package/src/backoffice/types/requirement.types.ts +63 -63
- package/src/backoffice/types/static/README.md +18 -18
- package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
- package/src/backoffice/types/static/certification.types.ts +37 -37
- package/src/backoffice/types/static/contraindication.types.ts +19 -19
- package/src/backoffice/types/static/index.ts +6 -6
- package/src/backoffice/types/static/pricing.types.ts +16 -16
- package/src/backoffice/types/static/procedure-family.types.ts +14 -14
- package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
- package/src/backoffice/types/subcategory.types.ts +34 -34
- package/src/backoffice/types/technology.types.ts +168 -168
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -164
- package/src/config/__mocks__/firebase.ts +99 -99
- package/src/config/firebase.ts +78 -78
- package/src/config/index.ts +9 -9
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +200 -200
- package/src/errors/clinic.errors.ts +32 -32
- package/src/errors/firebase.errors.ts +47 -47
- package/src/errors/user.errors.ts +99 -99
- package/src/index.backup.ts +407 -407
- package/src/index.ts +6 -6
- package/src/locales/en.ts +31 -31
- package/src/recommender/admin/index.ts +1 -1
- package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
- package/src/recommender/front/index.ts +1 -1
- package/src/recommender/front/services/onboarding.service.ts +5 -5
- package/src/recommender/front/services/recommender.service.ts +3 -3
- package/src/recommender/index.ts +1 -1
- package/src/services/PATIENTAUTH.MD +197 -197
- package/src/services/README.md +106 -106
- package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
- package/src/services/__tests__/auth/auth.setup.ts +293 -293
- package/src/services/__tests__/auth.service.test.ts +346 -346
- package/src/services/__tests__/base.service.test.ts +77 -77
- package/src/services/__tests__/user.service.test.ts +528 -528
- package/src/services/analytics/ARCHITECTURE.md +199 -199
- package/src/services/analytics/CLOUD_FUNCTIONS.md +225 -225
- package/src/services/analytics/GROUPED_ANALYTICS.md +501 -501
- package/src/services/analytics/QUICK_START.md +393 -393
- package/src/services/analytics/README.md +304 -304
- package/src/services/analytics/SUMMARY.md +141 -141
- package/src/services/analytics/TRENDS.md +380 -380
- package/src/services/analytics/USAGE_GUIDE.md +518 -518
- package/src/services/analytics/analytics-cloud.service.ts +222 -222
- package/src/services/analytics/analytics.service.ts +2142 -2142
- package/src/services/analytics/index.ts +4 -4
- package/src/services/analytics/review-analytics.service.ts +941 -941
- package/src/services/analytics/utils/appointment-filtering.utils.ts +138 -138
- package/src/services/analytics/utils/cost-calculation.utils.ts +182 -182
- package/src/services/analytics/utils/grouping.utils.ts +434 -434
- package/src/services/analytics/utils/stored-analytics.utils.ts +347 -347
- package/src/services/analytics/utils/time-calculation.utils.ts +186 -186
- package/src/services/analytics/utils/trend-calculation.utils.ts +200 -200
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2558 -2558
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +552 -552
- package/src/services/appointment/utils/extended-procedure.utils.ts +314 -314
- package/src/services/appointment/utils/form-initialization.utils.ts +225 -225
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +353 -353
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -152
- package/src/services/auth/auth.service.ts +989 -989
- package/src/services/auth/auth.v2.service.ts +961 -961
- package/src/services/auth/index.ts +7 -7
- package/src/services/auth/utils/error.utils.ts +90 -90
- package/src/services/auth/utils/firebase.utils.ts +49 -49
- package/src/services/auth/utils/index.ts +21 -21
- package/src/services/auth/utils/practitioner.utils.ts +125 -125
- package/src/services/base.service.ts +41 -41
- package/src/services/calendar/calendar.service.ts +1077 -1077
- package/src/services/calendar/calendar.v2.service.ts +1683 -1683
- package/src/services/calendar/calendar.v3.service.ts +313 -313
- package/src/services/calendar/externalCalendar.service.ts +178 -178
- package/src/services/calendar/index.ts +5 -5
- package/src/services/calendar/synced-calendars.service.ts +743 -743
- package/src/services/calendar/utils/appointment.utils.ts +265 -265
- package/src/services/calendar/utils/calendar-event.utils.ts +646 -646
- package/src/services/calendar/utils/clinic.utils.ts +237 -237
- package/src/services/calendar/utils/docs.utils.ts +157 -157
- package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
- package/src/services/calendar/utils/index.ts +8 -8
- package/src/services/calendar/utils/patient.utils.ts +198 -198
- package/src/services/calendar/utils/practitioner.utils.ts +221 -221
- package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
- package/src/services/clinic/README.md +204 -204
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +287 -287
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +352 -352
- package/src/services/clinic/__tests__/clinic.service.test.ts +354 -354
- package/src/services/clinic/billing-transactions.service.ts +217 -217
- package/src/services/clinic/clinic-admin.service.ts +202 -202
- package/src/services/clinic/clinic-group.service.ts +310 -310
- package/src/services/clinic/clinic.service.ts +708 -708
- package/src/services/clinic/index.ts +5 -5
- package/src/services/clinic/practitioner-invite.service.ts +519 -519
- package/src/services/clinic/utils/admin.utils.ts +551 -551
- package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
- package/src/services/clinic/utils/clinic.utils.ts +949 -949
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +446 -446
- package/src/services/clinic/utils/index.ts +11 -11
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +84 -84
- package/src/services/clinic/utils/tag.utils.ts +124 -124
- package/src/services/documentation-templates/documentation-template.service.ts +537 -537
- package/src/services/documentation-templates/filled-document.service.ts +587 -587
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +14 -14
- package/src/services/media/index.ts +1 -1
- package/src/services/media/media.service.ts +418 -418
- package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
- package/src/services/notifications/index.ts +1 -1
- package/src/services/notifications/notification.service.ts +215 -215
- package/src/services/patient/README.md +48 -48
- package/src/services/patient/To-Do.md +43 -43
- package/src/services/patient/__tests__/patient.service.test.ts +294 -294
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +883 -883
- package/src/services/patient/patientRequirements.service.ts +285 -285
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/clinic.utils.ts +80 -80
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/index.ts +9 -9
- package/src/services/patient/utils/location.utils.ts +126 -126
- package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
- package/src/services/patient/utils/medical.utils.ts +458 -458
- package/src/services/patient/utils/practitioner.utils.ts +260 -260
- package/src/services/patient/utils/profile.utils.ts +510 -510
- package/src/services/patient/utils/sensitive.utils.ts +260 -260
- package/src/services/patient/utils/token.utils.ts +211 -211
- package/src/services/practitioner/README.md +145 -145
- package/src/services/practitioner/index.ts +1 -1
- package/src/services/practitioner/practitioner.service.ts +1742 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +2200 -2191
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +734 -734
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +489 -489
- package/src/services/user/user.v2.service.ts +466 -466
- package/src/types/analytics/analytics.types.ts +597 -597
- package/src/types/analytics/grouped-analytics.types.ts +173 -173
- package/src/types/analytics/index.ts +4 -4
- package/src/types/analytics/stored-analytics.types.ts +137 -137
- package/src/types/appointment/index.ts +480 -480
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +498 -489
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +47 -47
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +286 -286
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/index.ts +275 -275
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +206 -206
- package/src/types/procedure/index.ts +181 -181
- package/src/types/profile/index.ts +39 -39
- package/src/types/reviews/index.ts +132 -132
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +38 -38
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/appointment.schema.ts +574 -574
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +494 -493
- package/src/validations/common.schema.ts +25 -25
- package/src/validations/documentation-templates/index.ts +1 -1
- package/src/validations/documentation-templates/template.schema.ts +220 -220
- package/src/validations/documentation-templates.schema.ts +10 -10
- package/src/validations/index.ts +20 -20
- package/src/validations/media.schema.ts +10 -10
- package/src/validations/notification.schema.ts +90 -90
- package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
- package/src/validations/patient/medical-info.schema.ts +125 -125
- package/src/validations/patient/patient-requirements.schema.ts +84 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -217
- package/src/validations/practitioner.schema.ts +222 -222
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +124 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/reviews.schema.ts +195 -195
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts
CHANGED
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Email template for inviting existing practitioners to join a clinic
|
|
3
|
-
* This template is used when a clinic invites an active practitioner to join their clinic
|
|
4
|
-
*/
|
|
5
|
-
export const existingPractitionerInvitationTemplate = `
|
|
6
|
-
<!DOCTYPE html>
|
|
7
|
-
<html lang="en">
|
|
8
|
-
<head>
|
|
9
|
-
<meta charset="UTF-8">
|
|
10
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
11
|
-
<title>Invitation to Join {{clinicName}}</title>
|
|
12
|
-
<style>
|
|
13
|
-
body {
|
|
14
|
-
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
15
|
-
line-height: 1.6;
|
|
16
|
-
color: #333;
|
|
17
|
-
max-width: 600px;
|
|
18
|
-
margin: 0 auto;
|
|
19
|
-
padding: 20px;
|
|
20
|
-
background-color: #f4f4f4;
|
|
21
|
-
}
|
|
22
|
-
.container {
|
|
23
|
-
background-color: #ffffff;
|
|
24
|
-
padding: 30px;
|
|
25
|
-
border-radius: 10px;
|
|
26
|
-
box-shadow: 0 0 20px rgba(0,0,0,0.1);
|
|
27
|
-
}
|
|
28
|
-
.header {
|
|
29
|
-
text-align: center;
|
|
30
|
-
margin-bottom: 30px;
|
|
31
|
-
border-bottom: 2px solid #007bff;
|
|
32
|
-
padding-bottom: 20px;
|
|
33
|
-
}
|
|
34
|
-
.logo {
|
|
35
|
-
font-size: 28px;
|
|
36
|
-
font-weight: bold;
|
|
37
|
-
color: #007bff;
|
|
38
|
-
margin-bottom: 10px;
|
|
39
|
-
}
|
|
40
|
-
h1 {
|
|
41
|
-
color: #007bff;
|
|
42
|
-
text-align: center;
|
|
43
|
-
margin-bottom: 20px;
|
|
44
|
-
}
|
|
45
|
-
.highlight {
|
|
46
|
-
background-color: #e7f3ff;
|
|
47
|
-
padding: 15px;
|
|
48
|
-
border-left: 4px solid #007bff;
|
|
49
|
-
margin: 20px 0;
|
|
50
|
-
}
|
|
51
|
-
.button {
|
|
52
|
-
display: inline-block;
|
|
53
|
-
background-color: #28a745;
|
|
54
|
-
color: white;
|
|
55
|
-
padding: 12px 25px;
|
|
56
|
-
text-decoration: none;
|
|
57
|
-
border-radius: 5px;
|
|
58
|
-
margin: 10px 5px;
|
|
59
|
-
font-weight: bold;
|
|
60
|
-
text-align: center;
|
|
61
|
-
}
|
|
62
|
-
.button.reject {
|
|
63
|
-
background-color: #dc3545;
|
|
64
|
-
}
|
|
65
|
-
.button:hover {
|
|
66
|
-
opacity: 0.9;
|
|
67
|
-
}
|
|
68
|
-
.action-section {
|
|
69
|
-
text-align: center;
|
|
70
|
-
margin: 30px 0;
|
|
71
|
-
padding: 20px;
|
|
72
|
-
background-color: #f8f9fa;
|
|
73
|
-
border-radius: 5px;
|
|
74
|
-
}
|
|
75
|
-
.details {
|
|
76
|
-
background-color: #f8f9fa;
|
|
77
|
-
padding: 15px;
|
|
78
|
-
border-radius: 5px;
|
|
79
|
-
margin: 15px 0;
|
|
80
|
-
}
|
|
81
|
-
.footer {
|
|
82
|
-
margin-top: 30px;
|
|
83
|
-
padding-top: 20px;
|
|
84
|
-
border-top: 1px solid #eee;
|
|
85
|
-
font-size: 14px;
|
|
86
|
-
color: #666;
|
|
87
|
-
text-align: center;
|
|
88
|
-
}
|
|
89
|
-
.contact-info {
|
|
90
|
-
margin-top: 15px;
|
|
91
|
-
padding: 10px;
|
|
92
|
-
background-color: #e9ecef;
|
|
93
|
-
border-radius: 5px;
|
|
94
|
-
}
|
|
95
|
-
</style>
|
|
96
|
-
</head>
|
|
97
|
-
<body>
|
|
98
|
-
<div class="container">
|
|
99
|
-
<div class="header">
|
|
100
|
-
<div class="logo">MetaEstetics</div>
|
|
101
|
-
<p>Professional Medical Network</p>
|
|
102
|
-
</div>
|
|
103
|
-
|
|
104
|
-
<h1>You're Invited to Join {{clinicName}}!</h1>
|
|
105
|
-
|
|
106
|
-
<p>Dear Dr. {{practitionerName}},</p>
|
|
107
|
-
|
|
108
|
-
<p>We hope this message finds you well. You have been invited to join <strong>{{clinicName}}</strong> as a practicing medical professional.</p>
|
|
109
|
-
|
|
110
|
-
<div class="highlight">
|
|
111
|
-
<strong>Invitation Details:</strong>
|
|
112
|
-
<div class="details">
|
|
113
|
-
<p><strong>Clinic:</strong> {{clinicName}}</p>
|
|
114
|
-
<p><strong>Location:</strong> {{clinicAddress}}</p>
|
|
115
|
-
<p><strong>Proposed Working Hours:</strong> {{workingHours}}</p>
|
|
116
|
-
<p><strong>Invitation Expires:</strong> {{expirationDate}}</p>
|
|
117
|
-
</div>
|
|
118
|
-
</div>
|
|
119
|
-
|
|
120
|
-
<p>By accepting this invitation, you will:</p>
|
|
121
|
-
<ul>
|
|
122
|
-
<li>Join the {{clinicName}} team as a featured practitioner</li>
|
|
123
|
-
<li>Have your profile displayed on their clinic page</li>
|
|
124
|
-
<li>Be available for appointments at the specified working hours</li>
|
|
125
|
-
<li>Access their patient booking system and clinic resources</li>
|
|
126
|
-
</ul>
|
|
127
|
-
|
|
128
|
-
<div class="action-section">
|
|
129
|
-
<p><strong>Please respond to this invitation:</strong></p>
|
|
130
|
-
<a href="{{acceptUrl}}" class="button">Accept Invitation</a>
|
|
131
|
-
<a href="{{rejectUrl}}" class="button reject">Decline Invitation</a>
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
<div class="contact-info">
|
|
135
|
-
<p><strong>Questions?</strong> Contact the clinic administrator:</p>
|
|
136
|
-
<p>📧 {{contactEmail}}<br>
|
|
137
|
-
📞 {{contactPhone}}</p>
|
|
138
|
-
</div>
|
|
139
|
-
|
|
140
|
-
<p>We look forward to welcoming you to the {{clinicName}} team!</p>
|
|
141
|
-
|
|
142
|
-
<div class="footer">
|
|
143
|
-
<p>Best regards,<br>
|
|
144
|
-
<strong>The MetaEstetics Team</strong></p>
|
|
145
|
-
<p>This invitation will expire on {{expirationDate}}. Please respond before this date.</p>
|
|
146
|
-
<hr>
|
|
147
|
-
<p style="font-size: 12px; color: #999;">
|
|
148
|
-
This is an automated message from MetaEstetics. If you received this email in error, please ignore it.
|
|
149
|
-
<br>© {{currentYear}} MetaEstetics. All rights reserved.
|
|
150
|
-
</p>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
</body>
|
|
154
|
-
</html>
|
|
155
|
-
`;
|
|
1
|
+
/**
|
|
2
|
+
* Email template for inviting existing practitioners to join a clinic
|
|
3
|
+
* This template is used when a clinic invites an active practitioner to join their clinic
|
|
4
|
+
*/
|
|
5
|
+
export const existingPractitionerInvitationTemplate = `
|
|
6
|
+
<!DOCTYPE html>
|
|
7
|
+
<html lang="en">
|
|
8
|
+
<head>
|
|
9
|
+
<meta charset="UTF-8">
|
|
10
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
11
|
+
<title>Invitation to Join {{clinicName}}</title>
|
|
12
|
+
<style>
|
|
13
|
+
body {
|
|
14
|
+
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
15
|
+
line-height: 1.6;
|
|
16
|
+
color: #333;
|
|
17
|
+
max-width: 600px;
|
|
18
|
+
margin: 0 auto;
|
|
19
|
+
padding: 20px;
|
|
20
|
+
background-color: #f4f4f4;
|
|
21
|
+
}
|
|
22
|
+
.container {
|
|
23
|
+
background-color: #ffffff;
|
|
24
|
+
padding: 30px;
|
|
25
|
+
border-radius: 10px;
|
|
26
|
+
box-shadow: 0 0 20px rgba(0,0,0,0.1);
|
|
27
|
+
}
|
|
28
|
+
.header {
|
|
29
|
+
text-align: center;
|
|
30
|
+
margin-bottom: 30px;
|
|
31
|
+
border-bottom: 2px solid #007bff;
|
|
32
|
+
padding-bottom: 20px;
|
|
33
|
+
}
|
|
34
|
+
.logo {
|
|
35
|
+
font-size: 28px;
|
|
36
|
+
font-weight: bold;
|
|
37
|
+
color: #007bff;
|
|
38
|
+
margin-bottom: 10px;
|
|
39
|
+
}
|
|
40
|
+
h1 {
|
|
41
|
+
color: #007bff;
|
|
42
|
+
text-align: center;
|
|
43
|
+
margin-bottom: 20px;
|
|
44
|
+
}
|
|
45
|
+
.highlight {
|
|
46
|
+
background-color: #e7f3ff;
|
|
47
|
+
padding: 15px;
|
|
48
|
+
border-left: 4px solid #007bff;
|
|
49
|
+
margin: 20px 0;
|
|
50
|
+
}
|
|
51
|
+
.button {
|
|
52
|
+
display: inline-block;
|
|
53
|
+
background-color: #28a745;
|
|
54
|
+
color: white;
|
|
55
|
+
padding: 12px 25px;
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
border-radius: 5px;
|
|
58
|
+
margin: 10px 5px;
|
|
59
|
+
font-weight: bold;
|
|
60
|
+
text-align: center;
|
|
61
|
+
}
|
|
62
|
+
.button.reject {
|
|
63
|
+
background-color: #dc3545;
|
|
64
|
+
}
|
|
65
|
+
.button:hover {
|
|
66
|
+
opacity: 0.9;
|
|
67
|
+
}
|
|
68
|
+
.action-section {
|
|
69
|
+
text-align: center;
|
|
70
|
+
margin: 30px 0;
|
|
71
|
+
padding: 20px;
|
|
72
|
+
background-color: #f8f9fa;
|
|
73
|
+
border-radius: 5px;
|
|
74
|
+
}
|
|
75
|
+
.details {
|
|
76
|
+
background-color: #f8f9fa;
|
|
77
|
+
padding: 15px;
|
|
78
|
+
border-radius: 5px;
|
|
79
|
+
margin: 15px 0;
|
|
80
|
+
}
|
|
81
|
+
.footer {
|
|
82
|
+
margin-top: 30px;
|
|
83
|
+
padding-top: 20px;
|
|
84
|
+
border-top: 1px solid #eee;
|
|
85
|
+
font-size: 14px;
|
|
86
|
+
color: #666;
|
|
87
|
+
text-align: center;
|
|
88
|
+
}
|
|
89
|
+
.contact-info {
|
|
90
|
+
margin-top: 15px;
|
|
91
|
+
padding: 10px;
|
|
92
|
+
background-color: #e9ecef;
|
|
93
|
+
border-radius: 5px;
|
|
94
|
+
}
|
|
95
|
+
</style>
|
|
96
|
+
</head>
|
|
97
|
+
<body>
|
|
98
|
+
<div class="container">
|
|
99
|
+
<div class="header">
|
|
100
|
+
<div class="logo">MetaEstetics</div>
|
|
101
|
+
<p>Professional Medical Network</p>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<h1>You're Invited to Join {{clinicName}}!</h1>
|
|
105
|
+
|
|
106
|
+
<p>Dear Dr. {{practitionerName}},</p>
|
|
107
|
+
|
|
108
|
+
<p>We hope this message finds you well. You have been invited to join <strong>{{clinicName}}</strong> as a practicing medical professional.</p>
|
|
109
|
+
|
|
110
|
+
<div class="highlight">
|
|
111
|
+
<strong>Invitation Details:</strong>
|
|
112
|
+
<div class="details">
|
|
113
|
+
<p><strong>Clinic:</strong> {{clinicName}}</p>
|
|
114
|
+
<p><strong>Location:</strong> {{clinicAddress}}</p>
|
|
115
|
+
<p><strong>Proposed Working Hours:</strong> {{workingHours}}</p>
|
|
116
|
+
<p><strong>Invitation Expires:</strong> {{expirationDate}}</p>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<p>By accepting this invitation, you will:</p>
|
|
121
|
+
<ul>
|
|
122
|
+
<li>Join the {{clinicName}} team as a featured practitioner</li>
|
|
123
|
+
<li>Have your profile displayed on their clinic page</li>
|
|
124
|
+
<li>Be available for appointments at the specified working hours</li>
|
|
125
|
+
<li>Access their patient booking system and clinic resources</li>
|
|
126
|
+
</ul>
|
|
127
|
+
|
|
128
|
+
<div class="action-section">
|
|
129
|
+
<p><strong>Please respond to this invitation:</strong></p>
|
|
130
|
+
<a href="{{acceptUrl}}" class="button">Accept Invitation</a>
|
|
131
|
+
<a href="{{rejectUrl}}" class="button reject">Decline Invitation</a>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
<div class="contact-info">
|
|
135
|
+
<p><strong>Questions?</strong> Contact the clinic administrator:</p>
|
|
136
|
+
<p>📧 {{contactEmail}}<br>
|
|
137
|
+
📞 {{contactPhone}}</p>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<p>We look forward to welcoming you to the {{clinicName}} team!</p>
|
|
141
|
+
|
|
142
|
+
<div class="footer">
|
|
143
|
+
<p>Best regards,<br>
|
|
144
|
+
<strong>The MetaEstetics Team</strong></p>
|
|
145
|
+
<p>This invitation will expire on {{expirationDate}}. Please respond before this date.</p>
|
|
146
|
+
<hr>
|
|
147
|
+
<p style="font-size: 12px; color: #999;">
|
|
148
|
+
This is an automated message from MetaEstetics. If you received this email in error, please ignore it.
|
|
149
|
+
<br>© {{currentYear}} MetaEstetics. All rights reserved.
|
|
150
|
+
</p>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</body>
|
|
154
|
+
</html>
|
|
155
|
+
`;
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTML email template for practitioner invitation
|
|
3
|
-
*/
|
|
4
|
-
export const practitionerInvitationTemplate = `
|
|
5
|
-
<!DOCTYPE html>
|
|
6
|
-
<html>
|
|
7
|
-
<head>
|
|
8
|
-
<meta charset="UTF-8">
|
|
9
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
10
|
-
<title>Join {{clinicName}} as a Practitioner</title>
|
|
11
|
-
<style>
|
|
12
|
-
body {
|
|
13
|
-
font-family: Arial, sans-serif;
|
|
14
|
-
line-height: 1.6;
|
|
15
|
-
color: #333;
|
|
16
|
-
margin: 0;
|
|
17
|
-
padding: 0;
|
|
18
|
-
}
|
|
19
|
-
.container {
|
|
20
|
-
max-width: 600px;
|
|
21
|
-
margin: 0 auto;
|
|
22
|
-
padding: 20px;
|
|
23
|
-
}
|
|
24
|
-
.header {
|
|
25
|
-
background-color: #4A90E2;
|
|
26
|
-
padding: 20px;
|
|
27
|
-
text-align: center;
|
|
28
|
-
color: white;
|
|
29
|
-
}
|
|
30
|
-
.content {
|
|
31
|
-
padding: 20px;
|
|
32
|
-
background-color: #f9f9f9;
|
|
33
|
-
}
|
|
34
|
-
.footer {
|
|
35
|
-
padding: 20px;
|
|
36
|
-
text-align: center;
|
|
37
|
-
font-size: 12px;
|
|
38
|
-
color: #888;
|
|
39
|
-
}
|
|
40
|
-
.button {
|
|
41
|
-
display: inline-block;
|
|
42
|
-
background-color: #4A90E2;
|
|
43
|
-
color: white;
|
|
44
|
-
text-decoration: none;
|
|
45
|
-
padding: 12px 24px;
|
|
46
|
-
border-radius: 4px;
|
|
47
|
-
margin: 20px 0;
|
|
48
|
-
font-weight: bold;
|
|
49
|
-
}
|
|
50
|
-
.token {
|
|
51
|
-
font-size: 24px;
|
|
52
|
-
font-weight: bold;
|
|
53
|
-
color: #4A90E2;
|
|
54
|
-
padding: 10px;
|
|
55
|
-
background-color: #e9f0f9;
|
|
56
|
-
border-radius: 4px;
|
|
57
|
-
display: inline-block;
|
|
58
|
-
letter-spacing: 2px;
|
|
59
|
-
margin: 10px 0;
|
|
60
|
-
}
|
|
61
|
-
</style>
|
|
62
|
-
</head>
|
|
63
|
-
<body>
|
|
64
|
-
<div class="container">
|
|
65
|
-
<div class="header">
|
|
66
|
-
<h1>You've Been Invited</h1>
|
|
67
|
-
</div>
|
|
68
|
-
<div class="content">
|
|
69
|
-
<p>Hello {{practitionerName}},</p>
|
|
70
|
-
|
|
71
|
-
<p>You have been invited to join <strong>{{clinicName}}</strong> as a healthcare practitioner.</p>
|
|
72
|
-
|
|
73
|
-
<p>Your profile has been created and is ready for you to claim. Please use the following token to register:</p>
|
|
74
|
-
|
|
75
|
-
<div style="text-align: center;">
|
|
76
|
-
<span class="token">{{inviteToken}}</span>
|
|
77
|
-
</div>
|
|
78
|
-
|
|
79
|
-
<p>This token will expire on <strong>{{expirationDate}}</strong>.</p>
|
|
80
|
-
|
|
81
|
-
<p>To create your account:</p>
|
|
82
|
-
<ol>
|
|
83
|
-
<li>Visit {{registrationUrl}}</li>
|
|
84
|
-
<li>Enter your email and create a password</li>
|
|
85
|
-
<li>When prompted, enter the token above</li>
|
|
86
|
-
</ol>
|
|
87
|
-
|
|
88
|
-
<div style="text-align: center;">
|
|
89
|
-
<a href="{{registrationUrl}}" class="button">Create Your Account</a>
|
|
90
|
-
</div>
|
|
91
|
-
|
|
92
|
-
<p>If you have any questions, please contact {{contactName}} at {{contactEmail}}.</p>
|
|
93
|
-
</div>
|
|
94
|
-
<div class="footer">
|
|
95
|
-
<p>This is an automated message from {{clinicName}}. Please do not reply to this email.</p>
|
|
96
|
-
<p>© {{currentYear}} {{clinicName}}. All rights reserved.</p>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</body>
|
|
100
|
-
</html>
|
|
101
|
-
`;
|
|
1
|
+
/**
|
|
2
|
+
* HTML email template for practitioner invitation
|
|
3
|
+
*/
|
|
4
|
+
export const practitionerInvitationTemplate = `
|
|
5
|
+
<!DOCTYPE html>
|
|
6
|
+
<html>
|
|
7
|
+
<head>
|
|
8
|
+
<meta charset="UTF-8">
|
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
10
|
+
<title>Join {{clinicName}} as a Practitioner</title>
|
|
11
|
+
<style>
|
|
12
|
+
body {
|
|
13
|
+
font-family: Arial, sans-serif;
|
|
14
|
+
line-height: 1.6;
|
|
15
|
+
color: #333;
|
|
16
|
+
margin: 0;
|
|
17
|
+
padding: 0;
|
|
18
|
+
}
|
|
19
|
+
.container {
|
|
20
|
+
max-width: 600px;
|
|
21
|
+
margin: 0 auto;
|
|
22
|
+
padding: 20px;
|
|
23
|
+
}
|
|
24
|
+
.header {
|
|
25
|
+
background-color: #4A90E2;
|
|
26
|
+
padding: 20px;
|
|
27
|
+
text-align: center;
|
|
28
|
+
color: white;
|
|
29
|
+
}
|
|
30
|
+
.content {
|
|
31
|
+
padding: 20px;
|
|
32
|
+
background-color: #f9f9f9;
|
|
33
|
+
}
|
|
34
|
+
.footer {
|
|
35
|
+
padding: 20px;
|
|
36
|
+
text-align: center;
|
|
37
|
+
font-size: 12px;
|
|
38
|
+
color: #888;
|
|
39
|
+
}
|
|
40
|
+
.button {
|
|
41
|
+
display: inline-block;
|
|
42
|
+
background-color: #4A90E2;
|
|
43
|
+
color: white;
|
|
44
|
+
text-decoration: none;
|
|
45
|
+
padding: 12px 24px;
|
|
46
|
+
border-radius: 4px;
|
|
47
|
+
margin: 20px 0;
|
|
48
|
+
font-weight: bold;
|
|
49
|
+
}
|
|
50
|
+
.token {
|
|
51
|
+
font-size: 24px;
|
|
52
|
+
font-weight: bold;
|
|
53
|
+
color: #4A90E2;
|
|
54
|
+
padding: 10px;
|
|
55
|
+
background-color: #e9f0f9;
|
|
56
|
+
border-radius: 4px;
|
|
57
|
+
display: inline-block;
|
|
58
|
+
letter-spacing: 2px;
|
|
59
|
+
margin: 10px 0;
|
|
60
|
+
}
|
|
61
|
+
</style>
|
|
62
|
+
</head>
|
|
63
|
+
<body>
|
|
64
|
+
<div class="container">
|
|
65
|
+
<div class="header">
|
|
66
|
+
<h1>You've Been Invited</h1>
|
|
67
|
+
</div>
|
|
68
|
+
<div class="content">
|
|
69
|
+
<p>Hello {{practitionerName}},</p>
|
|
70
|
+
|
|
71
|
+
<p>You have been invited to join <strong>{{clinicName}}</strong> as a healthcare practitioner.</p>
|
|
72
|
+
|
|
73
|
+
<p>Your profile has been created and is ready for you to claim. Please use the following token to register:</p>
|
|
74
|
+
|
|
75
|
+
<div style="text-align: center;">
|
|
76
|
+
<span class="token">{{inviteToken}}</span>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<p>This token will expire on <strong>{{expirationDate}}</strong>.</p>
|
|
80
|
+
|
|
81
|
+
<p>To create your account:</p>
|
|
82
|
+
<ol>
|
|
83
|
+
<li>Visit {{registrationUrl}}</li>
|
|
84
|
+
<li>Enter your email and create a password</li>
|
|
85
|
+
<li>When prompted, enter the token above</li>
|
|
86
|
+
</ol>
|
|
87
|
+
|
|
88
|
+
<div style="text-align: center;">
|
|
89
|
+
<a href="{{registrationUrl}}" class="button">Create Your Account</a>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<p>If you have any questions, please contact {{contactName}} at {{contactEmail}}.</p>
|
|
93
|
+
</div>
|
|
94
|
+
<div class="footer">
|
|
95
|
+
<p>This is an automated message from {{clinicName}}. Please do not reply to this email.</p>
|
|
96
|
+
<p>© {{currentYear}} {{clinicName}}. All rights reserved.</p>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</body>
|
|
100
|
+
</html>
|
|
101
|
+
`;
|