@blackcode_sa/metaestetics-api 1.12.65 → 1.12.67
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 +2 -0
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.js +45 -4
- package/dist/admin/index.mjs +45 -4
- package/dist/backoffice/index.d.mts +33 -0
- package/dist/backoffice/index.d.ts +33 -0
- package/dist/backoffice/index.js +63 -0
- package/dist/backoffice/index.mjs +63 -0
- package/dist/index.d.mts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +116 -11
- package/dist/index.mjs +116 -11
- package/package.json +119 -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 +1844 -1844
- 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 -641
- 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 +75 -75
- 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 +40 -40
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +341 -318
- 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 +417 -395
- package/src/backoffice/services/technology.service.ts +1104 -1083
- 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 -62
- 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 -163
- 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/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2505 -2505
- 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 +13 -13
- 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 +1715 -1715
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +683 -636
- 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/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 +489 -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 +44 -44
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +265 -265
- 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 -130
- 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 +493 -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 -189
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts
CHANGED
|
@@ -1,242 +1,242 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Email template for notifying clinic admins when a practitioner rejects an invitation
|
|
3
|
-
* This template is sent to the clinic admin when a practitioner declines their invitation
|
|
4
|
-
*/
|
|
5
|
-
export const inviteRejectedNotificationTemplate = `
|
|
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>Practitioner Invitation Declined - {{practitionerName}}</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 #dc3545;
|
|
32
|
-
padding-bottom: 20px;
|
|
33
|
-
}
|
|
34
|
-
.logo {
|
|
35
|
-
font-size: 28px;
|
|
36
|
-
font-weight: bold;
|
|
37
|
-
color: #dc3545;
|
|
38
|
-
margin-bottom: 10px;
|
|
39
|
-
}
|
|
40
|
-
h1 {
|
|
41
|
-
color: #dc3545;
|
|
42
|
-
text-align: center;
|
|
43
|
-
margin-bottom: 20px;
|
|
44
|
-
}
|
|
45
|
-
.notice-badge {
|
|
46
|
-
background-color: #f8d7da;
|
|
47
|
-
color: #721c24;
|
|
48
|
-
padding: 15px;
|
|
49
|
-
border-left: 4px solid #dc3545;
|
|
50
|
-
margin: 20px 0;
|
|
51
|
-
border-radius: 0 5px 5px 0;
|
|
52
|
-
}
|
|
53
|
-
.practitioner-card {
|
|
54
|
-
background-color: #f8f9fa;
|
|
55
|
-
padding: 20px;
|
|
56
|
-
border-radius: 8px;
|
|
57
|
-
margin: 20px 0;
|
|
58
|
-
border: 1px solid #dee2e6;
|
|
59
|
-
}
|
|
60
|
-
.practitioner-photo {
|
|
61
|
-
width: 80px;
|
|
62
|
-
height: 80px;
|
|
63
|
-
border-radius: 50%;
|
|
64
|
-
object-fit: cover;
|
|
65
|
-
float: left;
|
|
66
|
-
margin-right: 15px;
|
|
67
|
-
border: 3px solid #dc3545;
|
|
68
|
-
}
|
|
69
|
-
.practitioner-info {
|
|
70
|
-
overflow: hidden;
|
|
71
|
-
}
|
|
72
|
-
.practitioner-name {
|
|
73
|
-
font-size: 18px;
|
|
74
|
-
font-weight: bold;
|
|
75
|
-
color: #333;
|
|
76
|
-
margin-bottom: 5px;
|
|
77
|
-
}
|
|
78
|
-
.practitioner-details {
|
|
79
|
-
color: #666;
|
|
80
|
-
font-size: 14px;
|
|
81
|
-
line-height: 1.4;
|
|
82
|
-
}
|
|
83
|
-
.details-grid {
|
|
84
|
-
display: grid;
|
|
85
|
-
grid-template-columns: 1fr 1fr;
|
|
86
|
-
gap: 15px;
|
|
87
|
-
margin: 20px 0;
|
|
88
|
-
}
|
|
89
|
-
.detail-item {
|
|
90
|
-
background-color: #f8f9fa;
|
|
91
|
-
padding: 10px;
|
|
92
|
-
border-radius: 5px;
|
|
93
|
-
border-left: 3px solid #dc3545;
|
|
94
|
-
}
|
|
95
|
-
.detail-label {
|
|
96
|
-
font-weight: bold;
|
|
97
|
-
color: #495057;
|
|
98
|
-
font-size: 12px;
|
|
99
|
-
text-transform: uppercase;
|
|
100
|
-
margin-bottom: 5px;
|
|
101
|
-
}
|
|
102
|
-
.detail-value {
|
|
103
|
-
color: #333;
|
|
104
|
-
font-size: 14px;
|
|
105
|
-
}
|
|
106
|
-
.button {
|
|
107
|
-
display: inline-block;
|
|
108
|
-
background-color: #007bff;
|
|
109
|
-
color: white;
|
|
110
|
-
padding: 12px 25px;
|
|
111
|
-
text-decoration: none;
|
|
112
|
-
border-radius: 5px;
|
|
113
|
-
margin: 10px 5px;
|
|
114
|
-
font-weight: bold;
|
|
115
|
-
text-align: center;
|
|
116
|
-
}
|
|
117
|
-
.button.secondary {
|
|
118
|
-
background-color: #6c757d;
|
|
119
|
-
}
|
|
120
|
-
.button:hover {
|
|
121
|
-
opacity: 0.9;
|
|
122
|
-
}
|
|
123
|
-
.action-section {
|
|
124
|
-
text-align: center;
|
|
125
|
-
margin: 30px 0;
|
|
126
|
-
padding: 20px;
|
|
127
|
-
background-color: #e9ecef;
|
|
128
|
-
border-radius: 5px;
|
|
129
|
-
}
|
|
130
|
-
.footer {
|
|
131
|
-
margin-top: 30px;
|
|
132
|
-
padding-top: 20px;
|
|
133
|
-
border-top: 1px solid #eee;
|
|
134
|
-
font-size: 14px;
|
|
135
|
-
color: #666;
|
|
136
|
-
text-align: center;
|
|
137
|
-
}
|
|
138
|
-
.suggestions {
|
|
139
|
-
background-color: #d1ecf1;
|
|
140
|
-
border: 1px solid #bee5eb;
|
|
141
|
-
border-radius: 5px;
|
|
142
|
-
padding: 15px;
|
|
143
|
-
margin: 15px 0;
|
|
144
|
-
}
|
|
145
|
-
.suggestions h4 {
|
|
146
|
-
color: #0c5460;
|
|
147
|
-
margin-top: 0;
|
|
148
|
-
}
|
|
149
|
-
.reason-box {
|
|
150
|
-
background-color: #fff3cd;
|
|
151
|
-
border: 1px solid #ffeaa7;
|
|
152
|
-
border-radius: 5px;
|
|
153
|
-
padding: 15px;
|
|
154
|
-
margin: 15px 0;
|
|
155
|
-
}
|
|
156
|
-
</style>
|
|
157
|
-
</head>
|
|
158
|
-
<body>
|
|
159
|
-
<div class="container">
|
|
160
|
-
<div class="header">
|
|
161
|
-
<div class="logo">MetaEstetics</div>
|
|
162
|
-
<p>Clinic Management System</p>
|
|
163
|
-
</div>
|
|
164
|
-
|
|
165
|
-
<h1>Invitation Update</h1>
|
|
166
|
-
|
|
167
|
-
<div class="notice-badge">
|
|
168
|
-
<strong>❌ Dr. {{practitionerName}} has declined your invitation</strong>
|
|
169
|
-
<p style="margin: 5px 0 0 0;">They will not be joining {{clinicName}} at this time.</p>
|
|
170
|
-
</div>
|
|
171
|
-
|
|
172
|
-
<p>Dear {{clinicAdminName}},</p>
|
|
173
|
-
|
|
174
|
-
<p>We wanted to let you know that <strong>Dr. {{practitionerName}}</strong> has declined your invitation to join <strong>{{clinicName}}</strong>.</p>
|
|
175
|
-
|
|
176
|
-
<div class="practitioner-card">
|
|
177
|
-
{{#practitionerPhoto}}
|
|
178
|
-
<img src="{{practitionerPhoto}}" alt="{{practitionerName}}" class="practitioner-photo">
|
|
179
|
-
{{/practitionerPhoto}}
|
|
180
|
-
<div class="practitioner-info">
|
|
181
|
-
<div class="practitioner-name">Dr. {{practitionerName}}</div>
|
|
182
|
-
<div class="practitioner-details">
|
|
183
|
-
{{#practitionerSpecialties}}
|
|
184
|
-
<p><strong>Specialties:</strong> {{practitionerSpecialties}}</p>
|
|
185
|
-
{{/practitionerSpecialties}}
|
|
186
|
-
<p><strong>Decision Date:</strong> {{rejectedDate}}</p>
|
|
187
|
-
</div>
|
|
188
|
-
</div>
|
|
189
|
-
</div>
|
|
190
|
-
|
|
191
|
-
<div class="details-grid">
|
|
192
|
-
<div class="detail-item">
|
|
193
|
-
<div class="detail-label">Status</div>
|
|
194
|
-
<div class="detail-value">❌ Invitation Declined</div>
|
|
195
|
-
</div>
|
|
196
|
-
<div class="detail-item">
|
|
197
|
-
<div class="detail-label">Original Invitation</div>
|
|
198
|
-
<div class="detail-value">{{invitationDate}}</div>
|
|
199
|
-
</div>
|
|
200
|
-
</div>
|
|
201
|
-
|
|
202
|
-
{{#rejectionReason}}
|
|
203
|
-
<div class="reason-box">
|
|
204
|
-
<h4>📝 Reason Provided:</h4>
|
|
205
|
-
<p>"{{rejectionReason}}"</p>
|
|
206
|
-
</div>
|
|
207
|
-
{{/rejectionReason}}
|
|
208
|
-
|
|
209
|
-
<div class="suggestions">
|
|
210
|
-
<h4>💡 What you can do next:</h4>
|
|
211
|
-
<ul>
|
|
212
|
-
<li><strong>Reach out directly:</strong> Consider contacting Dr. {{practitionerName}} to discuss their concerns</li>
|
|
213
|
-
<li><strong>Adjust your offer:</strong> Review your working hours, compensation, or clinic benefits</li>
|
|
214
|
-
<li><strong>Invite other practitioners:</strong> Look for other qualified professionals in your area</li>
|
|
215
|
-
<li><strong>Try again later:</strong> Their circumstances may change in the future</li>
|
|
216
|
-
</ul>
|
|
217
|
-
</div>
|
|
218
|
-
|
|
219
|
-
<div class="action-section">
|
|
220
|
-
<p><strong>Explore your options:</strong></p>
|
|
221
|
-
<a href="{{findPractitionersUrl}}" class="button">Find More Practitioners</a>
|
|
222
|
-
<a href="{{clinicDashboardUrl}}" class="button secondary">View Dashboard</a>
|
|
223
|
-
</div>
|
|
224
|
-
|
|
225
|
-
<p>Don't let this discourage you! Finding the right team members takes time, and there are many talented practitioners who would be excited to join your clinic.</p>
|
|
226
|
-
|
|
227
|
-
<div class="footer">
|
|
228
|
-
<p>Best regards,<br>
|
|
229
|
-
<strong>The MetaEstetics Team</strong></p>
|
|
230
|
-
<hr>
|
|
231
|
-
<p style="font-size: 12px; color: #999;">
|
|
232
|
-
This is an automated notification from MetaEstetics.
|
|
233
|
-
<br>© {{currentYear}} MetaEstetics. All rights reserved.
|
|
234
|
-
</p>
|
|
235
|
-
<p style="font-size: 12px; color: #999;">
|
|
236
|
-
<strong>Note:</strong> Practitioner contact information is not shared without their consent.
|
|
237
|
-
</p>
|
|
238
|
-
</div>
|
|
239
|
-
</div>
|
|
240
|
-
</body>
|
|
241
|
-
</html>
|
|
242
|
-
`;
|
|
1
|
+
/**
|
|
2
|
+
* Email template for notifying clinic admins when a practitioner rejects an invitation
|
|
3
|
+
* This template is sent to the clinic admin when a practitioner declines their invitation
|
|
4
|
+
*/
|
|
5
|
+
export const inviteRejectedNotificationTemplate = `
|
|
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>Practitioner Invitation Declined - {{practitionerName}}</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 #dc3545;
|
|
32
|
+
padding-bottom: 20px;
|
|
33
|
+
}
|
|
34
|
+
.logo {
|
|
35
|
+
font-size: 28px;
|
|
36
|
+
font-weight: bold;
|
|
37
|
+
color: #dc3545;
|
|
38
|
+
margin-bottom: 10px;
|
|
39
|
+
}
|
|
40
|
+
h1 {
|
|
41
|
+
color: #dc3545;
|
|
42
|
+
text-align: center;
|
|
43
|
+
margin-bottom: 20px;
|
|
44
|
+
}
|
|
45
|
+
.notice-badge {
|
|
46
|
+
background-color: #f8d7da;
|
|
47
|
+
color: #721c24;
|
|
48
|
+
padding: 15px;
|
|
49
|
+
border-left: 4px solid #dc3545;
|
|
50
|
+
margin: 20px 0;
|
|
51
|
+
border-radius: 0 5px 5px 0;
|
|
52
|
+
}
|
|
53
|
+
.practitioner-card {
|
|
54
|
+
background-color: #f8f9fa;
|
|
55
|
+
padding: 20px;
|
|
56
|
+
border-radius: 8px;
|
|
57
|
+
margin: 20px 0;
|
|
58
|
+
border: 1px solid #dee2e6;
|
|
59
|
+
}
|
|
60
|
+
.practitioner-photo {
|
|
61
|
+
width: 80px;
|
|
62
|
+
height: 80px;
|
|
63
|
+
border-radius: 50%;
|
|
64
|
+
object-fit: cover;
|
|
65
|
+
float: left;
|
|
66
|
+
margin-right: 15px;
|
|
67
|
+
border: 3px solid #dc3545;
|
|
68
|
+
}
|
|
69
|
+
.practitioner-info {
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
}
|
|
72
|
+
.practitioner-name {
|
|
73
|
+
font-size: 18px;
|
|
74
|
+
font-weight: bold;
|
|
75
|
+
color: #333;
|
|
76
|
+
margin-bottom: 5px;
|
|
77
|
+
}
|
|
78
|
+
.practitioner-details {
|
|
79
|
+
color: #666;
|
|
80
|
+
font-size: 14px;
|
|
81
|
+
line-height: 1.4;
|
|
82
|
+
}
|
|
83
|
+
.details-grid {
|
|
84
|
+
display: grid;
|
|
85
|
+
grid-template-columns: 1fr 1fr;
|
|
86
|
+
gap: 15px;
|
|
87
|
+
margin: 20px 0;
|
|
88
|
+
}
|
|
89
|
+
.detail-item {
|
|
90
|
+
background-color: #f8f9fa;
|
|
91
|
+
padding: 10px;
|
|
92
|
+
border-radius: 5px;
|
|
93
|
+
border-left: 3px solid #dc3545;
|
|
94
|
+
}
|
|
95
|
+
.detail-label {
|
|
96
|
+
font-weight: bold;
|
|
97
|
+
color: #495057;
|
|
98
|
+
font-size: 12px;
|
|
99
|
+
text-transform: uppercase;
|
|
100
|
+
margin-bottom: 5px;
|
|
101
|
+
}
|
|
102
|
+
.detail-value {
|
|
103
|
+
color: #333;
|
|
104
|
+
font-size: 14px;
|
|
105
|
+
}
|
|
106
|
+
.button {
|
|
107
|
+
display: inline-block;
|
|
108
|
+
background-color: #007bff;
|
|
109
|
+
color: white;
|
|
110
|
+
padding: 12px 25px;
|
|
111
|
+
text-decoration: none;
|
|
112
|
+
border-radius: 5px;
|
|
113
|
+
margin: 10px 5px;
|
|
114
|
+
font-weight: bold;
|
|
115
|
+
text-align: center;
|
|
116
|
+
}
|
|
117
|
+
.button.secondary {
|
|
118
|
+
background-color: #6c757d;
|
|
119
|
+
}
|
|
120
|
+
.button:hover {
|
|
121
|
+
opacity: 0.9;
|
|
122
|
+
}
|
|
123
|
+
.action-section {
|
|
124
|
+
text-align: center;
|
|
125
|
+
margin: 30px 0;
|
|
126
|
+
padding: 20px;
|
|
127
|
+
background-color: #e9ecef;
|
|
128
|
+
border-radius: 5px;
|
|
129
|
+
}
|
|
130
|
+
.footer {
|
|
131
|
+
margin-top: 30px;
|
|
132
|
+
padding-top: 20px;
|
|
133
|
+
border-top: 1px solid #eee;
|
|
134
|
+
font-size: 14px;
|
|
135
|
+
color: #666;
|
|
136
|
+
text-align: center;
|
|
137
|
+
}
|
|
138
|
+
.suggestions {
|
|
139
|
+
background-color: #d1ecf1;
|
|
140
|
+
border: 1px solid #bee5eb;
|
|
141
|
+
border-radius: 5px;
|
|
142
|
+
padding: 15px;
|
|
143
|
+
margin: 15px 0;
|
|
144
|
+
}
|
|
145
|
+
.suggestions h4 {
|
|
146
|
+
color: #0c5460;
|
|
147
|
+
margin-top: 0;
|
|
148
|
+
}
|
|
149
|
+
.reason-box {
|
|
150
|
+
background-color: #fff3cd;
|
|
151
|
+
border: 1px solid #ffeaa7;
|
|
152
|
+
border-radius: 5px;
|
|
153
|
+
padding: 15px;
|
|
154
|
+
margin: 15px 0;
|
|
155
|
+
}
|
|
156
|
+
</style>
|
|
157
|
+
</head>
|
|
158
|
+
<body>
|
|
159
|
+
<div class="container">
|
|
160
|
+
<div class="header">
|
|
161
|
+
<div class="logo">MetaEstetics</div>
|
|
162
|
+
<p>Clinic Management System</p>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<h1>Invitation Update</h1>
|
|
166
|
+
|
|
167
|
+
<div class="notice-badge">
|
|
168
|
+
<strong>❌ Dr. {{practitionerName}} has declined your invitation</strong>
|
|
169
|
+
<p style="margin: 5px 0 0 0;">They will not be joining {{clinicName}} at this time.</p>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<p>Dear {{clinicAdminName}},</p>
|
|
173
|
+
|
|
174
|
+
<p>We wanted to let you know that <strong>Dr. {{practitionerName}}</strong> has declined your invitation to join <strong>{{clinicName}}</strong>.</p>
|
|
175
|
+
|
|
176
|
+
<div class="practitioner-card">
|
|
177
|
+
{{#practitionerPhoto}}
|
|
178
|
+
<img src="{{practitionerPhoto}}" alt="{{practitionerName}}" class="practitioner-photo">
|
|
179
|
+
{{/practitionerPhoto}}
|
|
180
|
+
<div class="practitioner-info">
|
|
181
|
+
<div class="practitioner-name">Dr. {{practitionerName}}</div>
|
|
182
|
+
<div class="practitioner-details">
|
|
183
|
+
{{#practitionerSpecialties}}
|
|
184
|
+
<p><strong>Specialties:</strong> {{practitionerSpecialties}}</p>
|
|
185
|
+
{{/practitionerSpecialties}}
|
|
186
|
+
<p><strong>Decision Date:</strong> {{rejectedDate}}</p>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div class="details-grid">
|
|
192
|
+
<div class="detail-item">
|
|
193
|
+
<div class="detail-label">Status</div>
|
|
194
|
+
<div class="detail-value">❌ Invitation Declined</div>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="detail-item">
|
|
197
|
+
<div class="detail-label">Original Invitation</div>
|
|
198
|
+
<div class="detail-value">{{invitationDate}}</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
{{#rejectionReason}}
|
|
203
|
+
<div class="reason-box">
|
|
204
|
+
<h4>📝 Reason Provided:</h4>
|
|
205
|
+
<p>"{{rejectionReason}}"</p>
|
|
206
|
+
</div>
|
|
207
|
+
{{/rejectionReason}}
|
|
208
|
+
|
|
209
|
+
<div class="suggestions">
|
|
210
|
+
<h4>💡 What you can do next:</h4>
|
|
211
|
+
<ul>
|
|
212
|
+
<li><strong>Reach out directly:</strong> Consider contacting Dr. {{practitionerName}} to discuss their concerns</li>
|
|
213
|
+
<li><strong>Adjust your offer:</strong> Review your working hours, compensation, or clinic benefits</li>
|
|
214
|
+
<li><strong>Invite other practitioners:</strong> Look for other qualified professionals in your area</li>
|
|
215
|
+
<li><strong>Try again later:</strong> Their circumstances may change in the future</li>
|
|
216
|
+
</ul>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<div class="action-section">
|
|
220
|
+
<p><strong>Explore your options:</strong></p>
|
|
221
|
+
<a href="{{findPractitionersUrl}}" class="button">Find More Practitioners</a>
|
|
222
|
+
<a href="{{clinicDashboardUrl}}" class="button secondary">View Dashboard</a>
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
<p>Don't let this discourage you! Finding the right team members takes time, and there are many talented practitioners who would be excited to join your clinic.</p>
|
|
226
|
+
|
|
227
|
+
<div class="footer">
|
|
228
|
+
<p>Best regards,<br>
|
|
229
|
+
<strong>The MetaEstetics Team</strong></p>
|
|
230
|
+
<hr>
|
|
231
|
+
<p style="font-size: 12px; color: #999;">
|
|
232
|
+
This is an automated notification from MetaEstetics.
|
|
233
|
+
<br>© {{currentYear}} MetaEstetics. All rights reserved.
|
|
234
|
+
</p>
|
|
235
|
+
<p style="font-size: 12px; color: #999;">
|
|
236
|
+
<strong>Note:</strong> Practitioner contact information is not shared without their consent.
|
|
237
|
+
</p>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
</body>
|
|
241
|
+
</html>
|
|
242
|
+
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./notifications.admin";
|
|
1
|
+
export * from "./notifications.admin";
|