@blackcode_sa/metaestetics-api 1.12.61 → 1.12.62
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/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +53 -11
- package/dist/index.mjs +53 -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 +318 -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 +8 -8
- 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 +395 -395
- package/src/backoffice/services/technology.service.ts +1070 -1070
- 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 +62 -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 +161 -161
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +163 -163
- 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 +2082 -2082
- 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 +1682 -1682
- 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 +453 -453
- 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 +273 -273
- 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 +216 -216
- 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
|
@@ -1,265 +1,265 @@
|
|
|
1
|
-
import { Timestamp } from "firebase/firestore";
|
|
2
|
-
import { UserRole } from "../";
|
|
3
|
-
/**
|
|
4
|
-
* Enumeracija koja definiše sve moguće tipove notifikacija
|
|
5
|
-
*/
|
|
6
|
-
export enum NotificationType {
|
|
7
|
-
// --- Appointment Lifecycle & Reminders ---
|
|
8
|
-
APPOINTMENT_REMINDER = "appointmentReminder", // For upcoming appointments
|
|
9
|
-
APPOINTMENT_STATUS_CHANGE = "appointmentStatusChange", // Generic for status changes like confirmed, checked-in etc.
|
|
10
|
-
APPOINTMENT_RESCHEDULED_PROPOSAL = "appointmentRescheduledProposal", // When clinic proposes a new time
|
|
11
|
-
APPOINTMENT_CANCELLED = "appointmentCancelled", // When an appointment is cancelled
|
|
12
|
-
|
|
13
|
-
// --- Requirement-Driven Instructions ---
|
|
14
|
-
PRE_REQUIREMENT_INSTRUCTION_DUE = "preRequirementInstructionDue",
|
|
15
|
-
POST_REQUIREMENT_INSTRUCTION_DUE = "postRequirementInstructionDue",
|
|
16
|
-
REQUIREMENT_INSTRUCTION_DUE = "requirementInstructionDue", // For specific pre/post care instructions
|
|
17
|
-
|
|
18
|
-
// --- Form Related ---
|
|
19
|
-
FORM_REMINDER = "formReminder", // Reminds user to fill a specific form
|
|
20
|
-
FORM_SUBMISSION_CONFIRMATION = "formSubmissionConfirmation", // Confirms form was submitted
|
|
21
|
-
|
|
22
|
-
// --- Patient Engagement ---
|
|
23
|
-
REVIEW_REQUEST = "reviewRequest", // Request for patient review post-appointment
|
|
24
|
-
|
|
25
|
-
// --- Payment Related (Examples) ---
|
|
26
|
-
PAYMENT_DUE = "paymentDue",
|
|
27
|
-
PAYMENT_CONFIRMATION = "paymentConfirmation",
|
|
28
|
-
PAYMENT_FAILED = "paymentFailed",
|
|
29
|
-
|
|
30
|
-
// --- General & Administrative ---
|
|
31
|
-
GENERAL_MESSAGE = "generalMessage", // For general announcements or direct messages
|
|
32
|
-
ACCOUNT_NOTIFICATION = "accountNotification", // e.g., password change, security alert
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export const NOTIFICATIONS_COLLECTION = "notifications";
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Bazni interfejs za sve notifikacije
|
|
39
|
-
*/
|
|
40
|
-
export interface BaseNotification {
|
|
41
|
-
/** Jedinstveni identifikator notifikacije */
|
|
42
|
-
id: string;
|
|
43
|
-
|
|
44
|
-
/** ID korisnika kome je namenjena notifikacija */
|
|
45
|
-
userId: string;
|
|
46
|
-
|
|
47
|
-
/** Vreme kada notifikacija treba da bude poslata */
|
|
48
|
-
notificationTime: Timestamp;
|
|
49
|
-
|
|
50
|
-
/** Tip notifikacije */
|
|
51
|
-
notificationType: NotificationType;
|
|
52
|
-
|
|
53
|
-
/** Tokeni uređaja na koje treba poslati notifikaciju */
|
|
54
|
-
notificationTokens: string[];
|
|
55
|
-
|
|
56
|
-
/** Status notifikacije */
|
|
57
|
-
status: NotificationStatus;
|
|
58
|
-
|
|
59
|
-
/** Vreme kreiranja */
|
|
60
|
-
createdAt: Timestamp;
|
|
61
|
-
|
|
62
|
-
/** Vreme poslednjeg ažuriranja */
|
|
63
|
-
updatedAt: Timestamp;
|
|
64
|
-
|
|
65
|
-
/** Vreme kada je notifikacija poslata */
|
|
66
|
-
sentAt?: Timestamp;
|
|
67
|
-
|
|
68
|
-
/** Detalji o grešci ako postoje */
|
|
69
|
-
error?: string;
|
|
70
|
-
|
|
71
|
-
/** Naslov notifikacije */
|
|
72
|
-
title: string;
|
|
73
|
-
|
|
74
|
-
/** Tekst notifikacije */
|
|
75
|
-
body: string;
|
|
76
|
-
|
|
77
|
-
/** Da li je notifikacija pročitana */
|
|
78
|
-
isRead: boolean;
|
|
79
|
-
|
|
80
|
-
/** Uloga korisnika kome je namenjena notifikacija */
|
|
81
|
-
userRole: UserRole;
|
|
82
|
-
|
|
83
|
-
// --- Optional Linking IDs ---
|
|
84
|
-
// These help in managing notifications and for deep-linking in the app.
|
|
85
|
-
appointmentId?: string; // Associated appointment
|
|
86
|
-
patientRequirementInstanceId?: string; // Link to PatientRequirementInstance in patient's subcollection
|
|
87
|
-
instructionId?: string; // Specific instruction ID within a PatientRequirementInstance
|
|
88
|
-
formId?: string; // Associated form (FilledDocument ID)
|
|
89
|
-
originalRequirementId?: string; // ID of the base Requirement template
|
|
90
|
-
transactionId?: string; // Associated payment transaction
|
|
91
|
-
// Add other relevant linking IDs as needed, e.g., clinicId, practitionerId if notification is for them
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Status notifikacije
|
|
96
|
-
*/
|
|
97
|
-
export enum NotificationStatus {
|
|
98
|
-
PENDING = "pending",
|
|
99
|
-
PROCESSING = "processing",
|
|
100
|
-
SENT = "sent",
|
|
101
|
-
FAILED = "failed",
|
|
102
|
-
DELIVERED = "delivered",
|
|
103
|
-
CANCELLED = "cancelled",
|
|
104
|
-
PARTIAL_SUCCESS = "partialSuccess",
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Notifikacija za pre-requirement
|
|
109
|
-
*/
|
|
110
|
-
export interface PreRequirementNotification extends BaseNotification {
|
|
111
|
-
notificationType: NotificationType.PRE_REQUIREMENT_INSTRUCTION_DUE;
|
|
112
|
-
/** ID tretmana za koji je vezan pre-requirement */
|
|
113
|
-
treatmentId: string;
|
|
114
|
-
/** Lista pre-requirements koji treba da se ispune */
|
|
115
|
-
requirements: string[];
|
|
116
|
-
/** Rok za ispunjavanje requirements-a */
|
|
117
|
-
deadline: Timestamp;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Notifikacija za post-requirement
|
|
122
|
-
*/
|
|
123
|
-
export interface PostRequirementNotification extends BaseNotification {
|
|
124
|
-
notificationType: NotificationType.POST_REQUIREMENT_INSTRUCTION_DUE;
|
|
125
|
-
/** ID tretmana za koji je vezan post-requirement */
|
|
126
|
-
treatmentId: string;
|
|
127
|
-
/** Lista post-requirements koji treba da se ispune */
|
|
128
|
-
requirements: string[];
|
|
129
|
-
/** Rok za ispunjavanje requirements-a */
|
|
130
|
-
deadline: Timestamp;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Notification for a specific instruction from a PatientRequirementInstance.
|
|
135
|
-
* Example: "Do not eat 2 hours before your [Procedure Name] appointment."
|
|
136
|
-
*/
|
|
137
|
-
export interface RequirementInstructionDueNotification
|
|
138
|
-
extends BaseNotification {
|
|
139
|
-
notificationType: NotificationType.REQUIREMENT_INSTRUCTION_DUE;
|
|
140
|
-
appointmentId: string; // Mandatory
|
|
141
|
-
patientRequirementInstanceId: string; // Mandatory
|
|
142
|
-
instructionId: string; // Mandatory
|
|
143
|
-
// The 'body' will contain the specific instruction text.
|
|
144
|
-
// 'title' could be "Upcoming: [Requirement Name]" or similar.
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Notification reminding about an upcoming appointment.
|
|
149
|
-
* Example: "Reminder: Your appointment for [Procedure Name] is at [Time] today."
|
|
150
|
-
*/
|
|
151
|
-
export interface AppointmentReminderNotification extends BaseNotification {
|
|
152
|
-
notificationType: NotificationType.APPOINTMENT_REMINDER;
|
|
153
|
-
appointmentId: string; // Mandatory
|
|
154
|
-
appointmentTime: Timestamp; // For easy access to construct message body
|
|
155
|
-
procedureName?: string;
|
|
156
|
-
practitionerName?: string;
|
|
157
|
-
clinicName?: string;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Notification about a change in appointment status (e.g., confirmed, checked-in).
|
|
162
|
-
* Excludes cancellations and reschedule proposals, which have their own types.
|
|
163
|
-
* Example: "Your appointment for [Procedure Name] has been Confirmed."
|
|
164
|
-
*/
|
|
165
|
-
export interface AppointmentStatusChangeNotification extends BaseNotification {
|
|
166
|
-
notificationType: NotificationType.APPOINTMENT_STATUS_CHANGE;
|
|
167
|
-
appointmentId: string; // Mandatory
|
|
168
|
-
newStatus: string; // The new AppointmentStatus (e.g., "CONFIRMED", "CHECKED_IN")
|
|
169
|
-
previousStatus?: string;
|
|
170
|
-
procedureName?: string;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Notification informing the patient that the clinic has proposed a new time for their appointment.
|
|
175
|
-
* Example: "Action Required: [Clinic Name] has proposed a new time for your [Procedure Name] appointment."
|
|
176
|
-
*/
|
|
177
|
-
export interface AppointmentRescheduledProposalNotification
|
|
178
|
-
extends BaseNotification {
|
|
179
|
-
notificationType: NotificationType.APPOINTMENT_RESCHEDULED_PROPOSAL;
|
|
180
|
-
appointmentId: string; // Mandatory
|
|
181
|
-
newProposedStartTime: Timestamp;
|
|
182
|
-
newProposedEndTime: Timestamp;
|
|
183
|
-
procedureName?: string;
|
|
184
|
-
// May include a deep link to confirm/reject reschedule.
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Notification informing about a cancelled appointment.
|
|
189
|
-
* Example: "Your appointment for [Procedure Name] on [Date] has been cancelled."
|
|
190
|
-
*/
|
|
191
|
-
export interface AppointmentCancelledNotification extends BaseNotification {
|
|
192
|
-
notificationType: NotificationType.APPOINTMENT_CANCELLED;
|
|
193
|
-
appointmentId: string; // Mandatory
|
|
194
|
-
reason?: string; // Reason for cancellation
|
|
195
|
-
cancelledByRole?: UserRole; // Who initiated the cancellation (PATIENT, CLINIC_ADMIN, etc.)
|
|
196
|
-
procedureName?: string;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Notification reminding a user to fill a specific form.
|
|
201
|
-
* Example: "Reminder: Please complete the '[Form Name]' form for your upcoming appointment."
|
|
202
|
-
*/
|
|
203
|
-
export interface FormReminderNotification extends BaseNotification {
|
|
204
|
-
notificationType: NotificationType.FORM_REMINDER;
|
|
205
|
-
appointmentId: string; // Associated appointment for which the form is required
|
|
206
|
-
formId: string; // The ID of the FilledDocument instance
|
|
207
|
-
formName: string; // Display name of the form
|
|
208
|
-
formDeadline?: Timestamp; // Optional: When the form is due
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Notification confirming a form submission.
|
|
213
|
-
* Example: "Thank you! Your '[Form Name]' form has been submitted successfully."
|
|
214
|
-
*/
|
|
215
|
-
export interface FormSubmissionConfirmationNotification
|
|
216
|
-
extends BaseNotification {
|
|
217
|
-
notificationType: NotificationType.FORM_SUBMISSION_CONFIRMATION;
|
|
218
|
-
appointmentId?: string; // Optional, if form is tied to an appointment
|
|
219
|
-
formId: string;
|
|
220
|
-
formName: string;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Notification requesting a patient to leave a review after an appointment.
|
|
225
|
-
* Example: "Hope you had a great experience! Would you like to share your feedback for your visit on [Date]?"
|
|
226
|
-
*/
|
|
227
|
-
export interface ReviewRequestNotification extends BaseNotification {
|
|
228
|
-
notificationType: NotificationType.REVIEW_REQUEST;
|
|
229
|
-
appointmentId: string; // The completed appointment for which review is requested
|
|
230
|
-
practitionerName?: string;
|
|
231
|
-
procedureName?: string;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Generic notification for direct messages or announcements.
|
|
236
|
-
*/
|
|
237
|
-
export interface GeneralMessageNotification extends BaseNotification {
|
|
238
|
-
notificationType: NotificationType.GENERAL_MESSAGE;
|
|
239
|
-
// Could have senderId, conversationId etc. if it's for a chat-like feature
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Example Payment Notification (can be expanded)
|
|
243
|
-
export interface PaymentConfirmationNotification extends BaseNotification {
|
|
244
|
-
notificationType: NotificationType.PAYMENT_CONFIRMATION;
|
|
245
|
-
transactionId: string;
|
|
246
|
-
appointmentId?: string;
|
|
247
|
-
amount: string; // e.g., "€50.00"
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Unija svih tipova notifikacija
|
|
252
|
-
*/
|
|
253
|
-
export type Notification =
|
|
254
|
-
| PreRequirementNotification
|
|
255
|
-
| PostRequirementNotification
|
|
256
|
-
| RequirementInstructionDueNotification
|
|
257
|
-
| AppointmentReminderNotification
|
|
258
|
-
| AppointmentStatusChangeNotification
|
|
259
|
-
| AppointmentRescheduledProposalNotification
|
|
260
|
-
| AppointmentCancelledNotification
|
|
261
|
-
| FormReminderNotification
|
|
262
|
-
| FormSubmissionConfirmationNotification
|
|
263
|
-
| ReviewRequestNotification
|
|
264
|
-
| GeneralMessageNotification
|
|
265
|
-
| PaymentConfirmationNotification;
|
|
1
|
+
import { Timestamp } from "firebase/firestore";
|
|
2
|
+
import { UserRole } from "../";
|
|
3
|
+
/**
|
|
4
|
+
* Enumeracija koja definiše sve moguće tipove notifikacija
|
|
5
|
+
*/
|
|
6
|
+
export enum NotificationType {
|
|
7
|
+
// --- Appointment Lifecycle & Reminders ---
|
|
8
|
+
APPOINTMENT_REMINDER = "appointmentReminder", // For upcoming appointments
|
|
9
|
+
APPOINTMENT_STATUS_CHANGE = "appointmentStatusChange", // Generic for status changes like confirmed, checked-in etc.
|
|
10
|
+
APPOINTMENT_RESCHEDULED_PROPOSAL = "appointmentRescheduledProposal", // When clinic proposes a new time
|
|
11
|
+
APPOINTMENT_CANCELLED = "appointmentCancelled", // When an appointment is cancelled
|
|
12
|
+
|
|
13
|
+
// --- Requirement-Driven Instructions ---
|
|
14
|
+
PRE_REQUIREMENT_INSTRUCTION_DUE = "preRequirementInstructionDue",
|
|
15
|
+
POST_REQUIREMENT_INSTRUCTION_DUE = "postRequirementInstructionDue",
|
|
16
|
+
REQUIREMENT_INSTRUCTION_DUE = "requirementInstructionDue", // For specific pre/post care instructions
|
|
17
|
+
|
|
18
|
+
// --- Form Related ---
|
|
19
|
+
FORM_REMINDER = "formReminder", // Reminds user to fill a specific form
|
|
20
|
+
FORM_SUBMISSION_CONFIRMATION = "formSubmissionConfirmation", // Confirms form was submitted
|
|
21
|
+
|
|
22
|
+
// --- Patient Engagement ---
|
|
23
|
+
REVIEW_REQUEST = "reviewRequest", // Request for patient review post-appointment
|
|
24
|
+
|
|
25
|
+
// --- Payment Related (Examples) ---
|
|
26
|
+
PAYMENT_DUE = "paymentDue",
|
|
27
|
+
PAYMENT_CONFIRMATION = "paymentConfirmation",
|
|
28
|
+
PAYMENT_FAILED = "paymentFailed",
|
|
29
|
+
|
|
30
|
+
// --- General & Administrative ---
|
|
31
|
+
GENERAL_MESSAGE = "generalMessage", // For general announcements or direct messages
|
|
32
|
+
ACCOUNT_NOTIFICATION = "accountNotification", // e.g., password change, security alert
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const NOTIFICATIONS_COLLECTION = "notifications";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Bazni interfejs za sve notifikacije
|
|
39
|
+
*/
|
|
40
|
+
export interface BaseNotification {
|
|
41
|
+
/** Jedinstveni identifikator notifikacije */
|
|
42
|
+
id: string;
|
|
43
|
+
|
|
44
|
+
/** ID korisnika kome je namenjena notifikacija */
|
|
45
|
+
userId: string;
|
|
46
|
+
|
|
47
|
+
/** Vreme kada notifikacija treba da bude poslata */
|
|
48
|
+
notificationTime: Timestamp;
|
|
49
|
+
|
|
50
|
+
/** Tip notifikacije */
|
|
51
|
+
notificationType: NotificationType;
|
|
52
|
+
|
|
53
|
+
/** Tokeni uređaja na koje treba poslati notifikaciju */
|
|
54
|
+
notificationTokens: string[];
|
|
55
|
+
|
|
56
|
+
/** Status notifikacije */
|
|
57
|
+
status: NotificationStatus;
|
|
58
|
+
|
|
59
|
+
/** Vreme kreiranja */
|
|
60
|
+
createdAt: Timestamp;
|
|
61
|
+
|
|
62
|
+
/** Vreme poslednjeg ažuriranja */
|
|
63
|
+
updatedAt: Timestamp;
|
|
64
|
+
|
|
65
|
+
/** Vreme kada je notifikacija poslata */
|
|
66
|
+
sentAt?: Timestamp;
|
|
67
|
+
|
|
68
|
+
/** Detalji o grešci ako postoje */
|
|
69
|
+
error?: string;
|
|
70
|
+
|
|
71
|
+
/** Naslov notifikacije */
|
|
72
|
+
title: string;
|
|
73
|
+
|
|
74
|
+
/** Tekst notifikacije */
|
|
75
|
+
body: string;
|
|
76
|
+
|
|
77
|
+
/** Da li je notifikacija pročitana */
|
|
78
|
+
isRead: boolean;
|
|
79
|
+
|
|
80
|
+
/** Uloga korisnika kome je namenjena notifikacija */
|
|
81
|
+
userRole: UserRole;
|
|
82
|
+
|
|
83
|
+
// --- Optional Linking IDs ---
|
|
84
|
+
// These help in managing notifications and for deep-linking in the app.
|
|
85
|
+
appointmentId?: string; // Associated appointment
|
|
86
|
+
patientRequirementInstanceId?: string; // Link to PatientRequirementInstance in patient's subcollection
|
|
87
|
+
instructionId?: string; // Specific instruction ID within a PatientRequirementInstance
|
|
88
|
+
formId?: string; // Associated form (FilledDocument ID)
|
|
89
|
+
originalRequirementId?: string; // ID of the base Requirement template
|
|
90
|
+
transactionId?: string; // Associated payment transaction
|
|
91
|
+
// Add other relevant linking IDs as needed, e.g., clinicId, practitionerId if notification is for them
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Status notifikacije
|
|
96
|
+
*/
|
|
97
|
+
export enum NotificationStatus {
|
|
98
|
+
PENDING = "pending",
|
|
99
|
+
PROCESSING = "processing",
|
|
100
|
+
SENT = "sent",
|
|
101
|
+
FAILED = "failed",
|
|
102
|
+
DELIVERED = "delivered",
|
|
103
|
+
CANCELLED = "cancelled",
|
|
104
|
+
PARTIAL_SUCCESS = "partialSuccess",
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Notifikacija za pre-requirement
|
|
109
|
+
*/
|
|
110
|
+
export interface PreRequirementNotification extends BaseNotification {
|
|
111
|
+
notificationType: NotificationType.PRE_REQUIREMENT_INSTRUCTION_DUE;
|
|
112
|
+
/** ID tretmana za koji je vezan pre-requirement */
|
|
113
|
+
treatmentId: string;
|
|
114
|
+
/** Lista pre-requirements koji treba da se ispune */
|
|
115
|
+
requirements: string[];
|
|
116
|
+
/** Rok za ispunjavanje requirements-a */
|
|
117
|
+
deadline: Timestamp;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Notifikacija za post-requirement
|
|
122
|
+
*/
|
|
123
|
+
export interface PostRequirementNotification extends BaseNotification {
|
|
124
|
+
notificationType: NotificationType.POST_REQUIREMENT_INSTRUCTION_DUE;
|
|
125
|
+
/** ID tretmana za koji je vezan post-requirement */
|
|
126
|
+
treatmentId: string;
|
|
127
|
+
/** Lista post-requirements koji treba da se ispune */
|
|
128
|
+
requirements: string[];
|
|
129
|
+
/** Rok za ispunjavanje requirements-a */
|
|
130
|
+
deadline: Timestamp;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Notification for a specific instruction from a PatientRequirementInstance.
|
|
135
|
+
* Example: "Do not eat 2 hours before your [Procedure Name] appointment."
|
|
136
|
+
*/
|
|
137
|
+
export interface RequirementInstructionDueNotification
|
|
138
|
+
extends BaseNotification {
|
|
139
|
+
notificationType: NotificationType.REQUIREMENT_INSTRUCTION_DUE;
|
|
140
|
+
appointmentId: string; // Mandatory
|
|
141
|
+
patientRequirementInstanceId: string; // Mandatory
|
|
142
|
+
instructionId: string; // Mandatory
|
|
143
|
+
// The 'body' will contain the specific instruction text.
|
|
144
|
+
// 'title' could be "Upcoming: [Requirement Name]" or similar.
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Notification reminding about an upcoming appointment.
|
|
149
|
+
* Example: "Reminder: Your appointment for [Procedure Name] is at [Time] today."
|
|
150
|
+
*/
|
|
151
|
+
export interface AppointmentReminderNotification extends BaseNotification {
|
|
152
|
+
notificationType: NotificationType.APPOINTMENT_REMINDER;
|
|
153
|
+
appointmentId: string; // Mandatory
|
|
154
|
+
appointmentTime: Timestamp; // For easy access to construct message body
|
|
155
|
+
procedureName?: string;
|
|
156
|
+
practitionerName?: string;
|
|
157
|
+
clinicName?: string;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Notification about a change in appointment status (e.g., confirmed, checked-in).
|
|
162
|
+
* Excludes cancellations and reschedule proposals, which have their own types.
|
|
163
|
+
* Example: "Your appointment for [Procedure Name] has been Confirmed."
|
|
164
|
+
*/
|
|
165
|
+
export interface AppointmentStatusChangeNotification extends BaseNotification {
|
|
166
|
+
notificationType: NotificationType.APPOINTMENT_STATUS_CHANGE;
|
|
167
|
+
appointmentId: string; // Mandatory
|
|
168
|
+
newStatus: string; // The new AppointmentStatus (e.g., "CONFIRMED", "CHECKED_IN")
|
|
169
|
+
previousStatus?: string;
|
|
170
|
+
procedureName?: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Notification informing the patient that the clinic has proposed a new time for their appointment.
|
|
175
|
+
* Example: "Action Required: [Clinic Name] has proposed a new time for your [Procedure Name] appointment."
|
|
176
|
+
*/
|
|
177
|
+
export interface AppointmentRescheduledProposalNotification
|
|
178
|
+
extends BaseNotification {
|
|
179
|
+
notificationType: NotificationType.APPOINTMENT_RESCHEDULED_PROPOSAL;
|
|
180
|
+
appointmentId: string; // Mandatory
|
|
181
|
+
newProposedStartTime: Timestamp;
|
|
182
|
+
newProposedEndTime: Timestamp;
|
|
183
|
+
procedureName?: string;
|
|
184
|
+
// May include a deep link to confirm/reject reschedule.
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Notification informing about a cancelled appointment.
|
|
189
|
+
* Example: "Your appointment for [Procedure Name] on [Date] has been cancelled."
|
|
190
|
+
*/
|
|
191
|
+
export interface AppointmentCancelledNotification extends BaseNotification {
|
|
192
|
+
notificationType: NotificationType.APPOINTMENT_CANCELLED;
|
|
193
|
+
appointmentId: string; // Mandatory
|
|
194
|
+
reason?: string; // Reason for cancellation
|
|
195
|
+
cancelledByRole?: UserRole; // Who initiated the cancellation (PATIENT, CLINIC_ADMIN, etc.)
|
|
196
|
+
procedureName?: string;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Notification reminding a user to fill a specific form.
|
|
201
|
+
* Example: "Reminder: Please complete the '[Form Name]' form for your upcoming appointment."
|
|
202
|
+
*/
|
|
203
|
+
export interface FormReminderNotification extends BaseNotification {
|
|
204
|
+
notificationType: NotificationType.FORM_REMINDER;
|
|
205
|
+
appointmentId: string; // Associated appointment for which the form is required
|
|
206
|
+
formId: string; // The ID of the FilledDocument instance
|
|
207
|
+
formName: string; // Display name of the form
|
|
208
|
+
formDeadline?: Timestamp; // Optional: When the form is due
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Notification confirming a form submission.
|
|
213
|
+
* Example: "Thank you! Your '[Form Name]' form has been submitted successfully."
|
|
214
|
+
*/
|
|
215
|
+
export interface FormSubmissionConfirmationNotification
|
|
216
|
+
extends BaseNotification {
|
|
217
|
+
notificationType: NotificationType.FORM_SUBMISSION_CONFIRMATION;
|
|
218
|
+
appointmentId?: string; // Optional, if form is tied to an appointment
|
|
219
|
+
formId: string;
|
|
220
|
+
formName: string;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Notification requesting a patient to leave a review after an appointment.
|
|
225
|
+
* Example: "Hope you had a great experience! Would you like to share your feedback for your visit on [Date]?"
|
|
226
|
+
*/
|
|
227
|
+
export interface ReviewRequestNotification extends BaseNotification {
|
|
228
|
+
notificationType: NotificationType.REVIEW_REQUEST;
|
|
229
|
+
appointmentId: string; // The completed appointment for which review is requested
|
|
230
|
+
practitionerName?: string;
|
|
231
|
+
procedureName?: string;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Generic notification for direct messages or announcements.
|
|
236
|
+
*/
|
|
237
|
+
export interface GeneralMessageNotification extends BaseNotification {
|
|
238
|
+
notificationType: NotificationType.GENERAL_MESSAGE;
|
|
239
|
+
// Could have senderId, conversationId etc. if it's for a chat-like feature
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Example Payment Notification (can be expanded)
|
|
243
|
+
export interface PaymentConfirmationNotification extends BaseNotification {
|
|
244
|
+
notificationType: NotificationType.PAYMENT_CONFIRMATION;
|
|
245
|
+
transactionId: string;
|
|
246
|
+
appointmentId?: string;
|
|
247
|
+
amount: string; // e.g., "€50.00"
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Unija svih tipova notifikacija
|
|
252
|
+
*/
|
|
253
|
+
export type Notification =
|
|
254
|
+
| PreRequirementNotification
|
|
255
|
+
| PostRequirementNotification
|
|
256
|
+
| RequirementInstructionDueNotification
|
|
257
|
+
| AppointmentReminderNotification
|
|
258
|
+
| AppointmentStatusChangeNotification
|
|
259
|
+
| AppointmentRescheduledProposalNotification
|
|
260
|
+
| AppointmentCancelledNotification
|
|
261
|
+
| FormReminderNotification
|
|
262
|
+
| FormSubmissionConfirmationNotification
|
|
263
|
+
| ReviewRequestNotification
|
|
264
|
+
| GeneralMessageNotification
|
|
265
|
+
| PaymentConfirmationNotification;
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import { Timestamp } from 'firebase/firestore';
|
|
2
|
-
|
|
3
|
-
export const AESTHETIC_ANALYSIS_COLLECTION = 'aesthetic-analysis';
|
|
4
|
-
|
|
5
|
-
export type AestheticAnalysisStatus = 'incomplete' | 'ready_for_planning' | 'treatment_planned';
|
|
6
|
-
|
|
7
|
-
export interface ClinicalFindingDetail {
|
|
8
|
-
severity: string;
|
|
9
|
-
impact: string;
|
|
10
|
-
notes?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface ClinicalFindings {
|
|
14
|
-
[category: string]: {
|
|
15
|
-
[concern: string]: ClinicalFindingDetail;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface PatientGoals {
|
|
20
|
-
timeline?: string;
|
|
21
|
-
budget?: string;
|
|
22
|
-
naturalness: number;
|
|
23
|
-
priorities: string[];
|
|
24
|
-
selectedTemplate?: string;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface AssessmentScales {
|
|
28
|
-
[scaleName: string]: string;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface AestheticAnalysis {
|
|
32
|
-
id: string;
|
|
33
|
-
patientId: string;
|
|
34
|
-
appointmentId?: string;
|
|
35
|
-
|
|
36
|
-
selectedConcerns: string[];
|
|
37
|
-
clinicalFindings: ClinicalFindings;
|
|
38
|
-
patientGoals: PatientGoals;
|
|
39
|
-
assessmentScales: AssessmentScales;
|
|
40
|
-
|
|
41
|
-
completionPercentage: number;
|
|
42
|
-
status: AestheticAnalysisStatus;
|
|
43
|
-
|
|
44
|
-
lastUpdatedBy: string;
|
|
45
|
-
lastUpdatedByRole: 'PATIENT' | 'PRACTITIONER';
|
|
46
|
-
|
|
47
|
-
createdAt?: Timestamp | any;
|
|
48
|
-
updatedAt?: Timestamp | any;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export interface CreateAestheticAnalysisData {
|
|
52
|
-
patientId: string;
|
|
53
|
-
appointmentId?: string;
|
|
54
|
-
selectedConcerns: string[];
|
|
55
|
-
clinicalFindings: ClinicalFindings;
|
|
56
|
-
patientGoals: PatientGoals;
|
|
57
|
-
assessmentScales?: AssessmentScales;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface UpdateAestheticAnalysisData {
|
|
61
|
-
appointmentId?: string;
|
|
62
|
-
selectedConcerns?: string[];
|
|
63
|
-
clinicalFindings?: ClinicalFindings;
|
|
64
|
-
patientGoals?: PatientGoals;
|
|
65
|
-
assessmentScales?: AssessmentScales;
|
|
66
|
-
}
|
|
1
|
+
import { Timestamp } from 'firebase/firestore';
|
|
2
|
+
|
|
3
|
+
export const AESTHETIC_ANALYSIS_COLLECTION = 'aesthetic-analysis';
|
|
4
|
+
|
|
5
|
+
export type AestheticAnalysisStatus = 'incomplete' | 'ready_for_planning' | 'treatment_planned';
|
|
6
|
+
|
|
7
|
+
export interface ClinicalFindingDetail {
|
|
8
|
+
severity: string;
|
|
9
|
+
impact: string;
|
|
10
|
+
notes?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ClinicalFindings {
|
|
14
|
+
[category: string]: {
|
|
15
|
+
[concern: string]: ClinicalFindingDetail;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface PatientGoals {
|
|
20
|
+
timeline?: string;
|
|
21
|
+
budget?: string;
|
|
22
|
+
naturalness: number;
|
|
23
|
+
priorities: string[];
|
|
24
|
+
selectedTemplate?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface AssessmentScales {
|
|
28
|
+
[scaleName: string]: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface AestheticAnalysis {
|
|
32
|
+
id: string;
|
|
33
|
+
patientId: string;
|
|
34
|
+
appointmentId?: string;
|
|
35
|
+
|
|
36
|
+
selectedConcerns: string[];
|
|
37
|
+
clinicalFindings: ClinicalFindings;
|
|
38
|
+
patientGoals: PatientGoals;
|
|
39
|
+
assessmentScales: AssessmentScales;
|
|
40
|
+
|
|
41
|
+
completionPercentage: number;
|
|
42
|
+
status: AestheticAnalysisStatus;
|
|
43
|
+
|
|
44
|
+
lastUpdatedBy: string;
|
|
45
|
+
lastUpdatedByRole: 'PATIENT' | 'PRACTITIONER';
|
|
46
|
+
|
|
47
|
+
createdAt?: Timestamp | any;
|
|
48
|
+
updatedAt?: Timestamp | any;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface CreateAestheticAnalysisData {
|
|
52
|
+
patientId: string;
|
|
53
|
+
appointmentId?: string;
|
|
54
|
+
selectedConcerns: string[];
|
|
55
|
+
clinicalFindings: ClinicalFindings;
|
|
56
|
+
patientGoals: PatientGoals;
|
|
57
|
+
assessmentScales?: AssessmentScales;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface UpdateAestheticAnalysisData {
|
|
61
|
+
appointmentId?: string;
|
|
62
|
+
selectedConcerns?: string[];
|
|
63
|
+
clinicalFindings?: ClinicalFindings;
|
|
64
|
+
patientGoals?: PatientGoals;
|
|
65
|
+
assessmentScales?: AssessmentScales;
|
|
66
|
+
}
|