@blackcode_sa/metaestetics-api 1.15.16 → 1.15.17-staging.0
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 +377 -222
- package/dist/admin/index.d.ts +377 -222
- package/dist/admin/index.js +625 -206
- package/dist/admin/index.mjs +624 -206
- package/dist/backoffice/index.d.mts +24 -0
- package/dist/backoffice/index.d.ts +24 -0
- package/dist/index.d.mts +292 -4
- package/dist/index.d.ts +292 -4
- package/dist/index.js +1142 -630
- package/dist/index.mjs +1137 -617
- package/package.json +2 -1
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +151 -129
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +2137 -2091
- 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 +966 -966
- 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 +184 -125
- package/src/admin/booking/booking.admin.ts +1330 -1073
- package/src/admin/booking/booking.calculator.ts +850 -712
- package/src/admin/booking/booking.types.ts +76 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +62 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +2 -1
- package/src/admin/calendar/resource-calendar.admin.ts +198 -0
- 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 +83 -83
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +139 -139
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +1253 -1253
- 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/clinicWelcome/clinicWelcome.mailing.ts +292 -292
- package/src/admin/mailing/clinicWelcome/index.ts +1 -1
- package/src/admin/mailing/clinicWelcome/templates/welcome.template.ts +225 -225
- package/src/admin/mailing/index.ts +5 -5
- package/src/admin/mailing/patientInvite/index.ts +2 -2
- package/src/admin/mailing/patientInvite/patientInvite.mailing.ts +415 -415
- package/src/admin/mailing/patientInvite/templates/invitation.template.ts +105 -105
- 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 +818 -818
- 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 +260 -260
- 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 +557 -557
- 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 +1153 -1153
- 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 +239 -239
- 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 +17 -17
- package/src/config/tiers.config.ts +255 -229
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +211 -211
- 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 +298 -298
- package/src/services/__tests__/auth.service.test.ts +310 -310
- package/src/services/__tests__/base.service.test.ts +36 -36
- package/src/services/__tests__/user.service.test.ts +530 -530
- 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 +2148 -2148
- 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 +2943 -2941
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +620 -620
- package/src/services/appointment/utils/extended-procedure.utils.ts +354 -354
- package/src/services/appointment/utils/form-initialization.utils.ts +516 -516
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +468 -468
- package/src/services/appointment/utils/zone-photo.utils.ts +302 -302
- package/src/services/auth/auth.service.ts +1435 -1435
- 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 +1693 -1693
- 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 +676 -676
- 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 +265 -265
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +222 -222
- package/src/services/clinic/__tests__/clinic.service.test.ts +302 -302
- 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 +720 -720
- 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 +1023 -1023
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +462 -462
- package/src/services/clinic/utils/index.ts +10 -10
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +83 -83
- 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 +597 -597
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +16 -15
- 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 +286 -286
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +1021 -1021
- package/src/services/patient/patientRequirements.service.ts +309 -309
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/body-assessment.utils.ts +159 -159
- package/src/services/patient/utils/clinic.utils.ts +159 -159
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/hair-scalp-assessment.utils.ts +158 -158
- 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/pre-surgical-assessment.utils.ts +161 -161
- 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/skin-quality-assessment.utils.ts +160 -160
- 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 +2355 -2354
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +2521 -2521
- package/src/services/resource/README.md +119 -0
- package/src/services/resource/index.ts +1 -0
- package/src/services/resource/resource.service.ts +555 -0
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +745 -745
- package/src/services/tier-enforcement.ts +240 -240
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +533 -533
- package/src/services/user/user.v2.service.ts +467 -467
- 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 +524 -517
- package/src/types/calendar/index.ts +261 -260
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +530 -529
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/rbac.types.ts +64 -63
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +50 -47
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +300 -300
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/body-assessment.types.ts +93 -93
- package/src/types/patient/hair-scalp-assessment.types.ts +98 -98
- package/src/types/patient/index.ts +279 -279
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- package/src/types/patient/pre-surgical-assessment.types.ts +95 -95
- package/src/types/patient/skin-quality-assessment.types.ts +105 -105
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +208 -208
- package/src/types/procedure/index.ts +189 -183
- package/src/types/profile/index.ts +39 -39
- package/src/types/resource/README.md +153 -0
- package/src/types/resource/index.ts +199 -0
- package/src/types/reviews/index.ts +132 -132
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +60 -60
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/README.md +94 -0
- package/src/validations/appointment.schema.ts +589 -589
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +494 -494
- 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 +21 -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/body-assessment.schema.ts +82 -82
- package/src/validations/patient/hair-scalp-assessment.schema.ts +70 -70
- package/src/validations/patient/medical-info.schema.ts +177 -177
- package/src/validations/patient/patient-requirements.schema.ts +84 -84
- package/src/validations/patient/pre-surgical-assessment.schema.ts +78 -78
- package/src/validations/patient/skin-quality-assessment.schema.ts +70 -70
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -217
- package/src/validations/practitioner.schema.ts +224 -224
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +136 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/resource.schema.ts +57 -0
- package/src/validations/reviews.schema.ts +195 -195
- package/src/validations/schemas.ts +109 -109
- package/src/validations/shared.schema.ts +78 -78
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
+
import type { CalendarEventTime, CalendarEventStatus } from "../calendar";
|
|
3
|
+
import { CalendarEventType } from "../calendar";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Firestore collection/subcollection names for the resource system
|
|
7
|
+
*/
|
|
8
|
+
export const RESOURCES_COLLECTION = "resources";
|
|
9
|
+
export const RESOURCE_INSTANCES_SUBCOLLECTION = "instances";
|
|
10
|
+
export const RESOURCE_CALENDAR_SUBCOLLECTION = "calendar";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Category of a clinic resource
|
|
14
|
+
*/
|
|
15
|
+
export enum ResourceCategory {
|
|
16
|
+
MEDICAL_DEVICE = "medical_device",
|
|
17
|
+
ROOM = "room",
|
|
18
|
+
SURGERY_SUITE = "surgery_suite",
|
|
19
|
+
EQUIPMENT = "equipment",
|
|
20
|
+
OTHER = "other",
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Status of a resource or resource instance
|
|
25
|
+
*/
|
|
26
|
+
export enum ResourceStatus {
|
|
27
|
+
ACTIVE = "active",
|
|
28
|
+
INACTIVE = "inactive",
|
|
29
|
+
MAINTENANCE = "maintenance",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A resource definition owned by a clinic branch.
|
|
34
|
+
* Stored at: clinics/{clinicId}/resources/{resourceId}
|
|
35
|
+
*/
|
|
36
|
+
export interface Resource {
|
|
37
|
+
/** Unique identifier */
|
|
38
|
+
id: string;
|
|
39
|
+
/** Clinic branch this resource belongs to */
|
|
40
|
+
clinicBranchId: string;
|
|
41
|
+
/** Display name of the resource */
|
|
42
|
+
name: string;
|
|
43
|
+
/** Lowercase name for case-insensitive search */
|
|
44
|
+
nameLower: string;
|
|
45
|
+
/** Category of the resource */
|
|
46
|
+
category: ResourceCategory;
|
|
47
|
+
/** Optional description */
|
|
48
|
+
description?: string;
|
|
49
|
+
/** Number of physical instances (e.g., 3 surgery rooms) */
|
|
50
|
+
quantity: number;
|
|
51
|
+
/** Current status */
|
|
52
|
+
status: ResourceStatus;
|
|
53
|
+
/** IDs of procedures that require this resource (denormalized for quick lookup) */
|
|
54
|
+
linkedProcedureIds: string[];
|
|
55
|
+
createdAt: Timestamp;
|
|
56
|
+
updatedAt: Timestamp;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A single physical instance of a resource (e.g., "Surgery Room #2").
|
|
61
|
+
* Each instance has its own calendar for tracking bookings.
|
|
62
|
+
* Stored at: clinics/{clinicId}/resources/{resourceId}/instances/{instanceId}
|
|
63
|
+
*/
|
|
64
|
+
export interface ResourceInstance {
|
|
65
|
+
/** Unique identifier */
|
|
66
|
+
id: string;
|
|
67
|
+
/** Parent resource ID */
|
|
68
|
+
resourceId: string;
|
|
69
|
+
/** Clinic branch this instance belongs to */
|
|
70
|
+
clinicBranchId: string;
|
|
71
|
+
/** Display label, auto-generated: "{Resource.name} #{index}" */
|
|
72
|
+
label: string;
|
|
73
|
+
/** 1-based index among instances of the same resource */
|
|
74
|
+
index: number;
|
|
75
|
+
/** Current status */
|
|
76
|
+
status: ResourceStatus;
|
|
77
|
+
createdAt: Timestamp;
|
|
78
|
+
updatedAt: Timestamp;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Calendar event on a resource instance.
|
|
83
|
+
* Can be either a booking event (created during appointment creation) or a blocking event (created manually by admin).
|
|
84
|
+
* Stored at: clinics/{clinicId}/resources/{resourceId}/instances/{instanceId}/calendar/{eventId}
|
|
85
|
+
*/
|
|
86
|
+
export interface ResourceCalendarEvent {
|
|
87
|
+
/** Unique identifier */
|
|
88
|
+
id: string;
|
|
89
|
+
/** Parent resource ID */
|
|
90
|
+
resourceId: string;
|
|
91
|
+
/** Instance this event is on */
|
|
92
|
+
resourceInstanceId: string;
|
|
93
|
+
/** Clinic branch */
|
|
94
|
+
clinicBranchId: string;
|
|
95
|
+
/** Type of event — RESOURCE_BOOKING for appointment bookings, BLOCKING for manual blocks */
|
|
96
|
+
eventType: CalendarEventType;
|
|
97
|
+
/** Appointment that booked this resource (only for RESOURCE_BOOKING events) */
|
|
98
|
+
appointmentId?: string;
|
|
99
|
+
/** Procedure requiring this resource (only for RESOURCE_BOOKING events) */
|
|
100
|
+
procedureId?: string;
|
|
101
|
+
/** Practitioner performing the procedure (only for RESOURCE_BOOKING events) */
|
|
102
|
+
practitionerId?: string;
|
|
103
|
+
/** Patient for the appointment (only for RESOURCE_BOOKING events) */
|
|
104
|
+
patientId?: string;
|
|
105
|
+
/** Time range of the event */
|
|
106
|
+
eventTime: CalendarEventTime;
|
|
107
|
+
/** Event status — CONFIRMED for blocking events, mirrors appointment status for bookings */
|
|
108
|
+
status: CalendarEventStatus;
|
|
109
|
+
/** Display name for the event */
|
|
110
|
+
eventName: string;
|
|
111
|
+
/** Optional description (primarily for blocking events, e.g., reason for maintenance) */
|
|
112
|
+
description?: string;
|
|
113
|
+
createdAt: Timestamp;
|
|
114
|
+
updatedAt: Timestamp;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Lightweight reference stored on procedures to indicate which resources are required.
|
|
119
|
+
* Denormalized snapshot of resource info at the time of linking.
|
|
120
|
+
*/
|
|
121
|
+
export interface ResourceRequirement {
|
|
122
|
+
/** ID of the required resource */
|
|
123
|
+
resourceId: string;
|
|
124
|
+
/** Name of the resource (snapshot) */
|
|
125
|
+
resourceName: string;
|
|
126
|
+
/** Category of the resource (snapshot) */
|
|
127
|
+
resourceCategory: ResourceCategory;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Info about a specific resource instance booking, stored on the appointment
|
|
132
|
+
* after a resource has been allocated during appointment creation.
|
|
133
|
+
*/
|
|
134
|
+
export interface ResourceBookingInfo {
|
|
135
|
+
/** ID of the booked resource */
|
|
136
|
+
resourceId: string;
|
|
137
|
+
/** Name of the resource (snapshot) */
|
|
138
|
+
resourceName: string;
|
|
139
|
+
/** ID of the specific instance that was allocated */
|
|
140
|
+
resourceInstanceId: string;
|
|
141
|
+
/** Label of the instance (e.g., "Surgery Room #2") */
|
|
142
|
+
resourceInstanceLabel: string;
|
|
143
|
+
/** ID of the calendar event created on the instance */
|
|
144
|
+
calendarEventId: string;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Data required to create a new resource
|
|
149
|
+
*/
|
|
150
|
+
export interface CreateResourceData {
|
|
151
|
+
clinicBranchId: string;
|
|
152
|
+
name: string;
|
|
153
|
+
category: ResourceCategory;
|
|
154
|
+
description?: string;
|
|
155
|
+
quantity: number;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Data allowed for updating an existing resource
|
|
160
|
+
*/
|
|
161
|
+
export interface UpdateResourceData {
|
|
162
|
+
name?: string;
|
|
163
|
+
category?: ResourceCategory;
|
|
164
|
+
description?: string;
|
|
165
|
+
/** Changing quantity: increase creates new instances, decrease is blocked if instances have future bookings */
|
|
166
|
+
quantity?: number;
|
|
167
|
+
status?: ResourceStatus;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Parameters for creating a blocking event on a resource instance.
|
|
172
|
+
* Used to mark an instance as unavailable for a time period (maintenance, out of order, etc.).
|
|
173
|
+
*/
|
|
174
|
+
export interface CreateResourceBlockingEventParams {
|
|
175
|
+
clinicBranchId: string;
|
|
176
|
+
resourceId: string;
|
|
177
|
+
resourceInstanceId: string;
|
|
178
|
+
/** Display name for the blocking event (e.g., "Maintenance", "Out of Order") */
|
|
179
|
+
eventName: string;
|
|
180
|
+
/** Time range during which the instance is blocked */
|
|
181
|
+
eventTime: CalendarEventTime;
|
|
182
|
+
/** Optional reason/description for the block */
|
|
183
|
+
description?: string;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Parameters for updating an existing blocking event on a resource instance.
|
|
188
|
+
* Only provided fields are updated.
|
|
189
|
+
*/
|
|
190
|
+
export interface UpdateResourceBlockingEventParams {
|
|
191
|
+
clinicBranchId: string;
|
|
192
|
+
resourceId: string;
|
|
193
|
+
resourceInstanceId: string;
|
|
194
|
+
/** ID of the blocking event to update */
|
|
195
|
+
eventId: string;
|
|
196
|
+
eventName?: string;
|
|
197
|
+
eventTime?: CalendarEventTime;
|
|
198
|
+
description?: string;
|
|
199
|
+
}
|
|
@@ -1,132 +1,132 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review system type definitions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Base review interface with common properties
|
|
7
|
-
*/
|
|
8
|
-
interface BaseReview {
|
|
9
|
-
id: string;
|
|
10
|
-
fullReviewId: string;
|
|
11
|
-
patientId: string;
|
|
12
|
-
createdAt: Date;
|
|
13
|
-
updatedAt: Date;
|
|
14
|
-
comment: string;
|
|
15
|
-
isVerified: boolean;
|
|
16
|
-
isPublished: boolean;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Clinic review interface
|
|
21
|
-
* @description Full review for a clinic
|
|
22
|
-
*/
|
|
23
|
-
export interface ClinicReview extends BaseReview {
|
|
24
|
-
clinicId: string;
|
|
25
|
-
clinicName?: string; // Enhanced field: clinic name from appointment
|
|
26
|
-
cleanliness: number; // 1-5 stars
|
|
27
|
-
facilities: number; // 1-5 stars
|
|
28
|
-
staffFriendliness: number; // 1-5 stars
|
|
29
|
-
waitingTime: number; // 1-5 stars
|
|
30
|
-
accessibility: number; // 1-5 stars
|
|
31
|
-
overallRating: number; // Average of all ratings
|
|
32
|
-
wouldRecommend: boolean;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Practitioner review interface
|
|
37
|
-
* @description Full review for a healthcare practitioner
|
|
38
|
-
*/
|
|
39
|
-
export interface PractitionerReview extends BaseReview {
|
|
40
|
-
practitionerId: string;
|
|
41
|
-
practitionerName?: string; // Enhanced field: practitioner name from appointment
|
|
42
|
-
knowledgeAndExpertise: number; // 1-5 stars
|
|
43
|
-
communicationSkills: number; // 1-5 stars
|
|
44
|
-
bedSideManner: number; // 1-5 stars
|
|
45
|
-
thoroughness: number; // 1-5 stars
|
|
46
|
-
trustworthiness: number; // 1-5 stars
|
|
47
|
-
overallRating: number; // Average of all ratings
|
|
48
|
-
wouldRecommend: boolean;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Procedure review interface
|
|
53
|
-
* @description Full review for a medical procedure
|
|
54
|
-
* Used for both main and extended procedures
|
|
55
|
-
*/
|
|
56
|
-
export interface ProcedureReview extends BaseReview {
|
|
57
|
-
procedureId: string;
|
|
58
|
-
procedureName?: string; // Enhanced field: procedure name from appointment
|
|
59
|
-
effectivenessOfTreatment: number; // 1-5 stars
|
|
60
|
-
outcomeExplanation: number; // 1-5 stars
|
|
61
|
-
painManagement: number; // 1-5 stars
|
|
62
|
-
followUpCare: number; // 1-5 stars
|
|
63
|
-
valueForMoney: number; // 1-5 stars
|
|
64
|
-
overallRating: number; // Average of all ratings
|
|
65
|
-
wouldRecommend: boolean;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Condensed clinic review information
|
|
70
|
-
* @description Used for aggregated data attached to clinic documents
|
|
71
|
-
*/
|
|
72
|
-
export interface ClinicReviewInfo {
|
|
73
|
-
totalReviews: number;
|
|
74
|
-
averageRating: number;
|
|
75
|
-
cleanliness: number;
|
|
76
|
-
facilities: number;
|
|
77
|
-
staffFriendliness: number;
|
|
78
|
-
waitingTime: number;
|
|
79
|
-
accessibility: number;
|
|
80
|
-
recommendationPercentage: number;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Condensed practitioner review information
|
|
85
|
-
* @description Used for aggregated data attached to practitioner documents
|
|
86
|
-
*/
|
|
87
|
-
export interface PractitionerReviewInfo {
|
|
88
|
-
totalReviews: number;
|
|
89
|
-
averageRating: number;
|
|
90
|
-
knowledgeAndExpertise: number;
|
|
91
|
-
communicationSkills: number;
|
|
92
|
-
bedSideManner: number;
|
|
93
|
-
thoroughness: number;
|
|
94
|
-
trustworthiness: number;
|
|
95
|
-
recommendationPercentage: number;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Condensed procedure review information
|
|
100
|
-
* @description Used for aggregated data attached to procedure documents
|
|
101
|
-
*/
|
|
102
|
-
export interface ProcedureReviewInfo {
|
|
103
|
-
totalReviews: number;
|
|
104
|
-
averageRating: number;
|
|
105
|
-
effectivenessOfTreatment: number;
|
|
106
|
-
outcomeExplanation: number;
|
|
107
|
-
painManagement: number;
|
|
108
|
-
followUpCare: number;
|
|
109
|
-
valueForMoney: number;
|
|
110
|
-
recommendationPercentage: number;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Crown review object
|
|
115
|
-
* @description Combined review data for clinic, practitioner, and procedure
|
|
116
|
-
*/
|
|
117
|
-
export interface Review {
|
|
118
|
-
id: string;
|
|
119
|
-
appointmentId: string;
|
|
120
|
-
patientId: string;
|
|
121
|
-
patientName?: string; // Enhanced field: patient name from appointment
|
|
122
|
-
createdAt: Date;
|
|
123
|
-
updatedAt: Date;
|
|
124
|
-
clinicReview?: ClinicReview;
|
|
125
|
-
practitionerReview?: PractitionerReview;
|
|
126
|
-
procedureReview?: ProcedureReview; // Review for the main/default procedure
|
|
127
|
-
extendedProcedureReviews?: ProcedureReview[]; // Reviews for extended procedures (same structure as main)
|
|
128
|
-
overallComment: string;
|
|
129
|
-
overallRating: number; // Average of all available ratings
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export const REVIEWS_COLLECTION = 'reviews';
|
|
1
|
+
/**
|
|
2
|
+
* Review system type definitions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Base review interface with common properties
|
|
7
|
+
*/
|
|
8
|
+
interface BaseReview {
|
|
9
|
+
id: string;
|
|
10
|
+
fullReviewId: string;
|
|
11
|
+
patientId: string;
|
|
12
|
+
createdAt: Date;
|
|
13
|
+
updatedAt: Date;
|
|
14
|
+
comment: string;
|
|
15
|
+
isVerified: boolean;
|
|
16
|
+
isPublished: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Clinic review interface
|
|
21
|
+
* @description Full review for a clinic
|
|
22
|
+
*/
|
|
23
|
+
export interface ClinicReview extends BaseReview {
|
|
24
|
+
clinicId: string;
|
|
25
|
+
clinicName?: string; // Enhanced field: clinic name from appointment
|
|
26
|
+
cleanliness: number; // 1-5 stars
|
|
27
|
+
facilities: number; // 1-5 stars
|
|
28
|
+
staffFriendliness: number; // 1-5 stars
|
|
29
|
+
waitingTime: number; // 1-5 stars
|
|
30
|
+
accessibility: number; // 1-5 stars
|
|
31
|
+
overallRating: number; // Average of all ratings
|
|
32
|
+
wouldRecommend: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Practitioner review interface
|
|
37
|
+
* @description Full review for a healthcare practitioner
|
|
38
|
+
*/
|
|
39
|
+
export interface PractitionerReview extends BaseReview {
|
|
40
|
+
practitionerId: string;
|
|
41
|
+
practitionerName?: string; // Enhanced field: practitioner name from appointment
|
|
42
|
+
knowledgeAndExpertise: number; // 1-5 stars
|
|
43
|
+
communicationSkills: number; // 1-5 stars
|
|
44
|
+
bedSideManner: number; // 1-5 stars
|
|
45
|
+
thoroughness: number; // 1-5 stars
|
|
46
|
+
trustworthiness: number; // 1-5 stars
|
|
47
|
+
overallRating: number; // Average of all ratings
|
|
48
|
+
wouldRecommend: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Procedure review interface
|
|
53
|
+
* @description Full review for a medical procedure
|
|
54
|
+
* Used for both main and extended procedures
|
|
55
|
+
*/
|
|
56
|
+
export interface ProcedureReview extends BaseReview {
|
|
57
|
+
procedureId: string;
|
|
58
|
+
procedureName?: string; // Enhanced field: procedure name from appointment
|
|
59
|
+
effectivenessOfTreatment: number; // 1-5 stars
|
|
60
|
+
outcomeExplanation: number; // 1-5 stars
|
|
61
|
+
painManagement: number; // 1-5 stars
|
|
62
|
+
followUpCare: number; // 1-5 stars
|
|
63
|
+
valueForMoney: number; // 1-5 stars
|
|
64
|
+
overallRating: number; // Average of all ratings
|
|
65
|
+
wouldRecommend: boolean;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Condensed clinic review information
|
|
70
|
+
* @description Used for aggregated data attached to clinic documents
|
|
71
|
+
*/
|
|
72
|
+
export interface ClinicReviewInfo {
|
|
73
|
+
totalReviews: number;
|
|
74
|
+
averageRating: number;
|
|
75
|
+
cleanliness: number;
|
|
76
|
+
facilities: number;
|
|
77
|
+
staffFriendliness: number;
|
|
78
|
+
waitingTime: number;
|
|
79
|
+
accessibility: number;
|
|
80
|
+
recommendationPercentage: number;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Condensed practitioner review information
|
|
85
|
+
* @description Used for aggregated data attached to practitioner documents
|
|
86
|
+
*/
|
|
87
|
+
export interface PractitionerReviewInfo {
|
|
88
|
+
totalReviews: number;
|
|
89
|
+
averageRating: number;
|
|
90
|
+
knowledgeAndExpertise: number;
|
|
91
|
+
communicationSkills: number;
|
|
92
|
+
bedSideManner: number;
|
|
93
|
+
thoroughness: number;
|
|
94
|
+
trustworthiness: number;
|
|
95
|
+
recommendationPercentage: number;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Condensed procedure review information
|
|
100
|
+
* @description Used for aggregated data attached to procedure documents
|
|
101
|
+
*/
|
|
102
|
+
export interface ProcedureReviewInfo {
|
|
103
|
+
totalReviews: number;
|
|
104
|
+
averageRating: number;
|
|
105
|
+
effectivenessOfTreatment: number;
|
|
106
|
+
outcomeExplanation: number;
|
|
107
|
+
painManagement: number;
|
|
108
|
+
followUpCare: number;
|
|
109
|
+
valueForMoney: number;
|
|
110
|
+
recommendationPercentage: number;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Crown review object
|
|
115
|
+
* @description Combined review data for clinic, practitioner, and procedure
|
|
116
|
+
*/
|
|
117
|
+
export interface Review {
|
|
118
|
+
id: string;
|
|
119
|
+
appointmentId: string;
|
|
120
|
+
patientId: string;
|
|
121
|
+
patientName?: string; // Enhanced field: patient name from appointment
|
|
122
|
+
createdAt: Date;
|
|
123
|
+
updatedAt: Date;
|
|
124
|
+
clinicReview?: ClinicReview;
|
|
125
|
+
practitionerReview?: PractitionerReview;
|
|
126
|
+
procedureReview?: ProcedureReview; // Review for the main/default procedure
|
|
127
|
+
extendedProcedureReviews?: ProcedureReview[]; // Reviews for extended procedures (same structure as main)
|
|
128
|
+
overallComment: string;
|
|
129
|
+
overallRating: number; // Average of all available ratings
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export const REVIEWS_COLLECTION = 'reviews';
|
package/src/types/tz-lookup.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare module 'tz-lookup' {
|
|
2
|
-
function tzlookup(lat: number, lng: number): string;
|
|
3
|
-
export default tzlookup;
|
|
4
|
-
}
|
|
1
|
+
declare module 'tz-lookup' {
|
|
2
|
+
function tzlookup(lat: number, lng: number): string;
|
|
3
|
+
export default tzlookup;
|
|
4
|
+
}
|
package/src/types/user/index.ts
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import { User as FirebaseAuthUser } from "firebase/auth";
|
|
2
|
-
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
3
|
-
|
|
4
|
-
// User tipovi
|
|
5
|
-
export enum UserRole {
|
|
6
|
-
PATIENT = "patient",
|
|
7
|
-
PRACTITIONER = "practitioner",
|
|
8
|
-
APP_ADMIN = "app_admin",
|
|
9
|
-
CLINIC_ADMIN = "clinic_admin",
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Enum for acquisition source - how the user found out about the app
|
|
14
|
-
*/
|
|
15
|
-
export enum AcquisitionSource {
|
|
16
|
-
FRIEND_FAMILY = "friend_family",
|
|
17
|
-
ONLINE_SEARCH = "online_search",
|
|
18
|
-
SOCIAL_MEDIA_AD = "social_media_ad",
|
|
19
|
-
TRADITIONAL_AD = "traditional_ad",
|
|
20
|
-
BLOG_ARTICLE = "blog_article",
|
|
21
|
-
HEALTHCARE_PROVIDER = "healthcare_provider",
|
|
22
|
-
OTHER = "other",
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface User {
|
|
26
|
-
uid: string;
|
|
27
|
-
email: string | null;
|
|
28
|
-
roles: UserRole[];
|
|
29
|
-
isAnonymous: boolean;
|
|
30
|
-
createdAt: any;
|
|
31
|
-
updatedAt: any;
|
|
32
|
-
lastLoginAt: any;
|
|
33
|
-
patientProfile?: string;
|
|
34
|
-
practitionerProfile?: string;
|
|
35
|
-
adminProfile?: string;
|
|
36
|
-
/** How the user found out about the app (marketing attribution) */
|
|
37
|
-
acquisitionSource?: AcquisitionSource | null;
|
|
38
|
-
/** Custom text when acquisitionSource is 'other' */
|
|
39
|
-
acquisitionSourceOther?: string | null;
|
|
40
|
-
/** Timestamp when acquisition source was collected */
|
|
41
|
-
acquisitionSourceTimestamp?: Timestamp | null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface CreateUserData {
|
|
45
|
-
uid: string;
|
|
46
|
-
email: string | null;
|
|
47
|
-
roles: UserRole[];
|
|
48
|
-
isAnonymous: boolean;
|
|
49
|
-
createdAt: FieldValue;
|
|
50
|
-
updatedAt: FieldValue;
|
|
51
|
-
lastLoginAt: FieldValue;
|
|
52
|
-
acquisitionSource?: AcquisitionSource | null;
|
|
53
|
-
acquisitionSourceOther?: string | null;
|
|
54
|
-
acquisitionSourceTimestamp?: FieldValue | Timestamp | null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export const USERS_COLLECTION = "users";
|
|
58
|
-
|
|
59
|
-
// Firebase tipovi
|
|
60
|
-
export type FirebaseUser = FirebaseAuthUser;
|
|
1
|
+
import { User as FirebaseAuthUser } from "firebase/auth";
|
|
2
|
+
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
3
|
+
|
|
4
|
+
// User tipovi
|
|
5
|
+
export enum UserRole {
|
|
6
|
+
PATIENT = "patient",
|
|
7
|
+
PRACTITIONER = "practitioner",
|
|
8
|
+
APP_ADMIN = "app_admin",
|
|
9
|
+
CLINIC_ADMIN = "clinic_admin",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Enum for acquisition source - how the user found out about the app
|
|
14
|
+
*/
|
|
15
|
+
export enum AcquisitionSource {
|
|
16
|
+
FRIEND_FAMILY = "friend_family",
|
|
17
|
+
ONLINE_SEARCH = "online_search",
|
|
18
|
+
SOCIAL_MEDIA_AD = "social_media_ad",
|
|
19
|
+
TRADITIONAL_AD = "traditional_ad",
|
|
20
|
+
BLOG_ARTICLE = "blog_article",
|
|
21
|
+
HEALTHCARE_PROVIDER = "healthcare_provider",
|
|
22
|
+
OTHER = "other",
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface User {
|
|
26
|
+
uid: string;
|
|
27
|
+
email: string | null;
|
|
28
|
+
roles: UserRole[];
|
|
29
|
+
isAnonymous: boolean;
|
|
30
|
+
createdAt: any;
|
|
31
|
+
updatedAt: any;
|
|
32
|
+
lastLoginAt: any;
|
|
33
|
+
patientProfile?: string;
|
|
34
|
+
practitionerProfile?: string;
|
|
35
|
+
adminProfile?: string;
|
|
36
|
+
/** How the user found out about the app (marketing attribution) */
|
|
37
|
+
acquisitionSource?: AcquisitionSource | null;
|
|
38
|
+
/** Custom text when acquisitionSource is 'other' */
|
|
39
|
+
acquisitionSourceOther?: string | null;
|
|
40
|
+
/** Timestamp when acquisition source was collected */
|
|
41
|
+
acquisitionSourceTimestamp?: Timestamp | null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface CreateUserData {
|
|
45
|
+
uid: string;
|
|
46
|
+
email: string | null;
|
|
47
|
+
roles: UserRole[];
|
|
48
|
+
isAnonymous: boolean;
|
|
49
|
+
createdAt: FieldValue;
|
|
50
|
+
updatedAt: FieldValue;
|
|
51
|
+
lastLoginAt: FieldValue;
|
|
52
|
+
acquisitionSource?: AcquisitionSource | null;
|
|
53
|
+
acquisitionSourceOther?: string | null;
|
|
54
|
+
acquisitionSourceTimestamp?: FieldValue | Timestamp | null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export const USERS_COLLECTION = "users";
|
|
58
|
+
|
|
59
|
+
// Firebase tipovi
|
|
60
|
+
export type FirebaseUser = FirebaseAuthUser;
|