@blackcode_sa/metaestetics-api 1.13.5 → 1.13.6
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 +20 -1
- package/dist/admin/index.d.ts +20 -1
- package/dist/admin/index.js +217 -1
- package/dist/admin/index.mjs +217 -1
- package/package.json +121 -121
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +128 -128
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +1984 -1984
- package/src/admin/aggregation/appointment/index.ts +1 -1
- package/src/admin/aggregation/clinic/README.md +52 -52
- package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +966 -703
- package/src/admin/aggregation/clinic/index.ts +1 -1
- package/src/admin/aggregation/forms/README.md +13 -13
- package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
- package/src/admin/aggregation/forms/index.ts +1 -1
- package/src/admin/aggregation/index.ts +8 -8
- package/src/admin/aggregation/patient/README.md +27 -27
- package/src/admin/aggregation/patient/index.ts +1 -1
- package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
- package/src/admin/aggregation/practitioner/README.md +42 -42
- package/src/admin/aggregation/practitioner/index.ts +1 -1
- package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
- package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
- package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
- package/src/admin/aggregation/procedure/README.md +43 -43
- package/src/admin/aggregation/procedure/index.ts +1 -1
- package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
- package/src/admin/aggregation/reviews/index.ts +1 -1
- package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +689 -689
- package/src/admin/analytics/analytics.admin.service.ts +278 -278
- package/src/admin/analytics/index.ts +2 -2
- package/src/admin/booking/README.md +125 -125
- package/src/admin/booking/booking.admin.ts +1037 -1037
- package/src/admin/booking/booking.calculator.ts +712 -712
- package/src/admin/booking/booking.types.ts +59 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +7 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +1 -1
- package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
- package/src/admin/documentation-templates/index.ts +1 -1
- package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
- package/src/admin/free-consultation/index.ts +1 -1
- package/src/admin/index.ts +81 -81
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +95 -95
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +732 -732
- package/src/admin/mailing/appointment/index.ts +1 -1
- package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
- package/src/admin/mailing/base.mailing.service.ts +208 -208
- package/src/admin/mailing/index.ts +3 -3
- package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
- package/src/admin/mailing/practitionerInvite/index.ts +2 -2
- package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
- package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
- package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
- package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
- package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
- package/src/admin/notifications/index.ts +1 -1
- package/src/admin/notifications/notifications.admin.ts +710 -710
- package/src/admin/requirements/README.md +128 -128
- package/src/admin/requirements/index.ts +1 -1
- package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
- package/src/admin/users/index.ts +1 -1
- package/src/admin/users/user-profile.admin.ts +405 -405
- package/src/backoffice/constants/certification.constants.ts +13 -13
- package/src/backoffice/constants/index.ts +1 -1
- package/src/backoffice/errors/backoffice.errors.ts +181 -181
- package/src/backoffice/errors/index.ts +1 -1
- package/src/backoffice/expo-safe/README.md +26 -26
- package/src/backoffice/expo-safe/index.ts +41 -41
- package/src/backoffice/index.ts +5 -5
- package/src/backoffice/services/FIXES_README.md +102 -102
- package/src/backoffice/services/README.md +57 -57
- package/src/backoffice/services/analytics.service.proposal.md +863 -863
- package/src/backoffice/services/analytics.service.summary.md +143 -143
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +384 -384
- package/src/backoffice/services/constants.service.ts +385 -385
- package/src/backoffice/services/documentation-template.service.ts +202 -202
- package/src/backoffice/services/index.ts +10 -10
- package/src/backoffice/services/migrate-products.ts +116 -116
- package/src/backoffice/services/product.service.ts +553 -553
- package/src/backoffice/services/requirement.service.ts +235 -235
- package/src/backoffice/services/subcategory.service.ts +461 -461
- package/src/backoffice/services/technology.service.ts +1151 -1151
- package/src/backoffice/types/README.md +12 -12
- package/src/backoffice/types/admin-constants.types.ts +69 -69
- package/src/backoffice/types/brand.types.ts +29 -29
- package/src/backoffice/types/category.types.ts +67 -67
- package/src/backoffice/types/documentation-templates.types.ts +28 -28
- package/src/backoffice/types/index.ts +10 -10
- package/src/backoffice/types/procedure-product.types.ts +38 -38
- package/src/backoffice/types/product.types.ts +240 -240
- package/src/backoffice/types/requirement.types.ts +63 -63
- package/src/backoffice/types/static/README.md +18 -18
- package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
- package/src/backoffice/types/static/certification.types.ts +37 -37
- package/src/backoffice/types/static/contraindication.types.ts +19 -19
- package/src/backoffice/types/static/index.ts +6 -6
- package/src/backoffice/types/static/pricing.types.ts +16 -16
- package/src/backoffice/types/static/procedure-family.types.ts +14 -14
- package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
- package/src/backoffice/types/subcategory.types.ts +34 -34
- package/src/backoffice/types/technology.types.ts +168 -168
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -164
- package/src/config/__mocks__/firebase.ts +99 -99
- package/src/config/firebase.ts +78 -78
- package/src/config/index.ts +9 -9
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +200 -200
- package/src/errors/clinic.errors.ts +32 -32
- package/src/errors/firebase.errors.ts +47 -47
- package/src/errors/user.errors.ts +99 -99
- package/src/index.backup.ts +407 -407
- package/src/index.ts +6 -6
- package/src/locales/en.ts +31 -31
- package/src/recommender/admin/index.ts +1 -1
- package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
- package/src/recommender/front/index.ts +1 -1
- package/src/recommender/front/services/onboarding.service.ts +5 -5
- package/src/recommender/front/services/recommender.service.ts +3 -3
- package/src/recommender/index.ts +1 -1
- package/src/services/PATIENTAUTH.MD +197 -197
- package/src/services/README.md +106 -106
- package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
- package/src/services/__tests__/auth/auth.setup.ts +293 -293
- package/src/services/__tests__/auth.service.test.ts +346 -346
- package/src/services/__tests__/base.service.test.ts +77 -77
- package/src/services/__tests__/user.service.test.ts +528 -528
- package/src/services/analytics/ARCHITECTURE.md +199 -199
- package/src/services/analytics/CLOUD_FUNCTIONS.md +225 -225
- package/src/services/analytics/GROUPED_ANALYTICS.md +501 -501
- package/src/services/analytics/QUICK_START.md +393 -393
- package/src/services/analytics/README.md +304 -304
- package/src/services/analytics/SUMMARY.md +141 -141
- package/src/services/analytics/TRENDS.md +380 -380
- package/src/services/analytics/USAGE_GUIDE.md +518 -518
- package/src/services/analytics/analytics-cloud.service.ts +222 -222
- package/src/services/analytics/analytics.service.ts +2142 -2142
- package/src/services/analytics/index.ts +4 -4
- package/src/services/analytics/review-analytics.service.ts +941 -941
- package/src/services/analytics/utils/appointment-filtering.utils.ts +138 -138
- package/src/services/analytics/utils/cost-calculation.utils.ts +182 -182
- package/src/services/analytics/utils/grouping.utils.ts +434 -434
- package/src/services/analytics/utils/stored-analytics.utils.ts +347 -347
- package/src/services/analytics/utils/time-calculation.utils.ts +186 -186
- package/src/services/analytics/utils/trend-calculation.utils.ts +200 -200
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2558 -2558
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +552 -552
- package/src/services/appointment/utils/extended-procedure.utils.ts +314 -314
- package/src/services/appointment/utils/form-initialization.utils.ts +225 -225
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +353 -353
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -152
- package/src/services/auth/auth.service.ts +989 -989
- package/src/services/auth/auth.v2.service.ts +961 -961
- package/src/services/auth/index.ts +7 -7
- package/src/services/auth/utils/error.utils.ts +90 -90
- package/src/services/auth/utils/firebase.utils.ts +49 -49
- package/src/services/auth/utils/index.ts +21 -21
- package/src/services/auth/utils/practitioner.utils.ts +125 -125
- package/src/services/base.service.ts +41 -41
- package/src/services/calendar/calendar.service.ts +1077 -1077
- package/src/services/calendar/calendar.v2.service.ts +1683 -1683
- package/src/services/calendar/calendar.v3.service.ts +313 -313
- package/src/services/calendar/externalCalendar.service.ts +178 -178
- package/src/services/calendar/index.ts +5 -5
- package/src/services/calendar/synced-calendars.service.ts +743 -743
- package/src/services/calendar/utils/appointment.utils.ts +265 -265
- package/src/services/calendar/utils/calendar-event.utils.ts +646 -646
- package/src/services/calendar/utils/clinic.utils.ts +237 -237
- package/src/services/calendar/utils/docs.utils.ts +157 -157
- package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
- package/src/services/calendar/utils/index.ts +8 -8
- package/src/services/calendar/utils/patient.utils.ts +198 -198
- package/src/services/calendar/utils/practitioner.utils.ts +221 -221
- package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
- package/src/services/clinic/README.md +204 -204
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +287 -287
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +352 -352
- package/src/services/clinic/__tests__/clinic.service.test.ts +354 -354
- package/src/services/clinic/billing-transactions.service.ts +217 -217
- package/src/services/clinic/clinic-admin.service.ts +202 -202
- package/src/services/clinic/clinic-group.service.ts +310 -310
- package/src/services/clinic/clinic.service.ts +708 -708
- package/src/services/clinic/index.ts +5 -5
- package/src/services/clinic/practitioner-invite.service.ts +519 -519
- package/src/services/clinic/utils/admin.utils.ts +551 -551
- package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
- package/src/services/clinic/utils/clinic.utils.ts +949 -949
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +446 -446
- package/src/services/clinic/utils/index.ts +11 -11
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +84 -84
- package/src/services/clinic/utils/tag.utils.ts +124 -124
- package/src/services/documentation-templates/documentation-template.service.ts +537 -537
- package/src/services/documentation-templates/filled-document.service.ts +587 -587
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +14 -14
- package/src/services/media/index.ts +1 -1
- package/src/services/media/media.service.ts +418 -418
- package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
- package/src/services/notifications/index.ts +1 -1
- package/src/services/notifications/notification.service.ts +215 -215
- package/src/services/patient/README.md +48 -48
- package/src/services/patient/To-Do.md +43 -43
- package/src/services/patient/__tests__/patient.service.test.ts +294 -294
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +883 -883
- package/src/services/patient/patientRequirements.service.ts +285 -285
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/clinic.utils.ts +80 -80
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/index.ts +9 -9
- package/src/services/patient/utils/location.utils.ts +126 -126
- package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
- package/src/services/patient/utils/medical.utils.ts +458 -458
- package/src/services/patient/utils/practitioner.utils.ts +260 -260
- package/src/services/patient/utils/profile.utils.ts +510 -510
- package/src/services/patient/utils/sensitive.utils.ts +260 -260
- package/src/services/patient/utils/token.utils.ts +211 -211
- package/src/services/practitioner/README.md +145 -145
- package/src/services/practitioner/index.ts +1 -1
- package/src/services/practitioner/practitioner.service.ts +1742 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +2200 -2200
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +734 -734
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +489 -489
- package/src/services/user/user.v2.service.ts +466 -466
- package/src/types/analytics/analytics.types.ts +597 -597
- package/src/types/analytics/grouped-analytics.types.ts +173 -173
- package/src/types/analytics/index.ts +4 -4
- package/src/types/analytics/stored-analytics.types.ts +137 -137
- package/src/types/appointment/index.ts +480 -480
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +498 -498
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +47 -47
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +286 -286
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/index.ts +275 -275
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +206 -206
- package/src/types/procedure/index.ts +181 -181
- package/src/types/profile/index.ts +39 -39
- package/src/types/reviews/index.ts +132 -132
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +38 -38
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/appointment.schema.ts +574 -574
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +494 -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 +20 -20
- package/src/validations/media.schema.ts +10 -10
- package/src/validations/notification.schema.ts +90 -90
- package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
- package/src/validations/patient/medical-info.schema.ts +125 -125
- package/src/validations/patient/patient-requirements.schema.ts +84 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -217
- package/src/validations/practitioner.schema.ts +222 -222
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +124 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/reviews.schema.ts +195 -195
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
-
import {
|
|
3
|
-
CertificationLevel,
|
|
4
|
-
CertificationSpecialty,
|
|
5
|
-
} from "../../backoffice/types/static/certification.types";
|
|
6
|
-
import { PractitionerReviewInfo } from "../reviews";
|
|
7
|
-
import { ClinicInfo } from "../profile";
|
|
8
|
-
import { ProcedureFamily } from "../../backoffice/types/static/procedure-family.types";
|
|
9
|
-
import {
|
|
10
|
-
Currency,
|
|
11
|
-
PricingMeasure,
|
|
12
|
-
} from "../../backoffice/types/static/pricing.types";
|
|
13
|
-
import { ProcedureSummaryInfo } from "../procedure";
|
|
14
|
-
import type { MediaResource } from "../../services/media/media.service";
|
|
15
|
-
|
|
16
|
-
export const PRACTITIONERS_COLLECTION = "practitioners";
|
|
17
|
-
export const REGISTER_TOKENS_COLLECTION = "register_tokens";
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Osnovne informacije o zdravstvenom radniku
|
|
21
|
-
*/
|
|
22
|
-
export interface PractitionerBasicInfo {
|
|
23
|
-
firstName: string;
|
|
24
|
-
lastName: string;
|
|
25
|
-
title: string;
|
|
26
|
-
email: string;
|
|
27
|
-
phoneNumber: string | null;
|
|
28
|
-
dateOfBirth: Timestamp | Date | null;
|
|
29
|
-
gender: "male" | "female" | "other";
|
|
30
|
-
profileImageUrl?: MediaResource | null;
|
|
31
|
-
bio?: string;
|
|
32
|
-
languages: string[];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Sertifikacija zdravstvenog radnika
|
|
37
|
-
*/
|
|
38
|
-
export interface PractitionerCertification {
|
|
39
|
-
level: CertificationLevel;
|
|
40
|
-
specialties: CertificationSpecialty[];
|
|
41
|
-
licenseNumber: string;
|
|
42
|
-
issuingAuthority: string;
|
|
43
|
-
issueDate: Timestamp | Date;
|
|
44
|
-
expiryDate?: Timestamp | Date | null;
|
|
45
|
-
verificationStatus: "pending" | "verified" | "rejected";
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Interfejs za radno vreme zdravstvenog radnika u klinici
|
|
50
|
-
*/
|
|
51
|
-
export interface PractitionerClinicWorkingHours {
|
|
52
|
-
clinicId: string;
|
|
53
|
-
workingHours: {
|
|
54
|
-
monday: { start: string; end: string } | null;
|
|
55
|
-
tuesday: { start: string; end: string } | null;
|
|
56
|
-
wednesday: { start: string; end: string } | null;
|
|
57
|
-
thursday: { start: string; end: string } | null;
|
|
58
|
-
friday: { start: string; end: string } | null;
|
|
59
|
-
saturday: { start: string; end: string } | null;
|
|
60
|
-
sunday: { start: string; end: string } | null;
|
|
61
|
-
};
|
|
62
|
-
isActive: boolean;
|
|
63
|
-
createdAt: Timestamp | Date;
|
|
64
|
-
updatedAt: Timestamp | Date;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Status of practitioner profile
|
|
69
|
-
*/
|
|
70
|
-
export enum PractitionerStatus {
|
|
71
|
-
DRAFT = "draft",
|
|
72
|
-
ACTIVE = "active",
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Token status for practitioner invitations
|
|
77
|
-
*/
|
|
78
|
-
export enum PractitionerTokenStatus {
|
|
79
|
-
ACTIVE = "active",
|
|
80
|
-
USED = "used",
|
|
81
|
-
EXPIRED = "expired",
|
|
82
|
-
REVOKED = "revoked",
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Interfejs za zdravstvenog radnika
|
|
87
|
-
*/
|
|
88
|
-
export interface Practitioner {
|
|
89
|
-
id: string;
|
|
90
|
-
userRef: string;
|
|
91
|
-
basicInfo: PractitionerBasicInfo;
|
|
92
|
-
fullNameLower: string; // Add this line
|
|
93
|
-
certification: PractitionerCertification;
|
|
94
|
-
clinics: string[]; // Reference na klinike gde radi
|
|
95
|
-
clinicWorkingHours: PractitionerClinicWorkingHours[]; // Radno vreme za svaku kliniku
|
|
96
|
-
clinicsInfo: ClinicInfo[]; // Aggregated clinic information
|
|
97
|
-
procedures: string[]; // Reference na procedure koje izvodi
|
|
98
|
-
freeConsultations?: Record<string, string> | null; // Map of clinic IDs to procedure ID for free consultations (one per clinic)
|
|
99
|
-
proceduresInfo: ProcedureSummaryInfo[]; // Aggregated procedure information
|
|
100
|
-
reviewInfo: PractitionerReviewInfo; // Aggregated review information
|
|
101
|
-
isActive: boolean;
|
|
102
|
-
isVerified: boolean;
|
|
103
|
-
status: PractitionerStatus;
|
|
104
|
-
createdAt: Timestamp;
|
|
105
|
-
updatedAt: Timestamp;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Tip za kreiranje novog zdravstvenog radnika
|
|
110
|
-
*/
|
|
111
|
-
export interface CreatePractitionerData {
|
|
112
|
-
userRef: string;
|
|
113
|
-
basicInfo: PractitionerBasicInfo;
|
|
114
|
-
certification: PractitionerCertification;
|
|
115
|
-
clinics?: string[];
|
|
116
|
-
clinicWorkingHours?: PractitionerClinicWorkingHours[];
|
|
117
|
-
clinicsInfo?: ClinicInfo[];
|
|
118
|
-
freeConsultations?: Record<string, string> | null;
|
|
119
|
-
isActive: boolean;
|
|
120
|
-
isVerified: boolean;
|
|
121
|
-
status?: PractitionerStatus;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Tip za kreiranje draft profila zdravstvenog radnika
|
|
126
|
-
*/
|
|
127
|
-
export interface CreateDraftPractitionerData {
|
|
128
|
-
basicInfo: PractitionerBasicInfo;
|
|
129
|
-
certification: PractitionerCertification;
|
|
130
|
-
clinics?: string[];
|
|
131
|
-
clinicWorkingHours?: PractitionerClinicWorkingHours[];
|
|
132
|
-
clinicsInfo?: ClinicInfo[];
|
|
133
|
-
freeConsultations?: Record<string, string> | null;
|
|
134
|
-
isActive?: boolean;
|
|
135
|
-
isVerified?: boolean;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Tip za ažuriranje zdravstvenog radnika
|
|
140
|
-
*/
|
|
141
|
-
export interface UpdatePractitionerData
|
|
142
|
-
extends Partial<CreatePractitionerData> {
|
|
143
|
-
updatedAt?: FieldValue;
|
|
144
|
-
proceduresInfo?: ProcedureSummaryInfo[];
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Interfejs za procedure koje zdravstveni radnik izvodi u određenoj klinici
|
|
149
|
-
*/
|
|
150
|
-
export interface PractitionerClinicProcedures {
|
|
151
|
-
practitionerId: string;
|
|
152
|
-
clinicId: string;
|
|
153
|
-
procedures: string[]; // ID-jevi procedura koje izvodi
|
|
154
|
-
isActive: boolean;
|
|
155
|
-
createdAt: Timestamp;
|
|
156
|
-
updatedAt: Timestamp;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Interfejs za radno vreme zdravstvenog radnika u klinici
|
|
161
|
-
*/
|
|
162
|
-
export interface PractitionerWorkingHours {
|
|
163
|
-
practitionerId: string;
|
|
164
|
-
clinicId: string;
|
|
165
|
-
monday: { start: string; end: string } | null;
|
|
166
|
-
tuesday: { start: string; end: string } | null;
|
|
167
|
-
wednesday: { start: string; end: string } | null;
|
|
168
|
-
thursday: { start: string; end: string } | null;
|
|
169
|
-
friday: { start: string; end: string } | null;
|
|
170
|
-
saturday: { start: string; end: string } | null;
|
|
171
|
-
sunday: { start: string; end: string } | null;
|
|
172
|
-
createdAt: Timestamp;
|
|
173
|
-
updatedAt: Timestamp;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Token za pozivanje zdravstvenog radnika
|
|
178
|
-
*/
|
|
179
|
-
export interface PractitionerToken {
|
|
180
|
-
id: string;
|
|
181
|
-
token: string;
|
|
182
|
-
practitionerId: string;
|
|
183
|
-
email: string;
|
|
184
|
-
clinicId: string;
|
|
185
|
-
status: PractitionerTokenStatus;
|
|
186
|
-
createdBy: string;
|
|
187
|
-
createdAt: Timestamp;
|
|
188
|
-
expiresAt: Timestamp;
|
|
189
|
-
usedBy?: string;
|
|
190
|
-
usedAt?: Timestamp;
|
|
191
|
-
// Email tracking fields added by Cloud Function
|
|
192
|
-
emailSent?: boolean;
|
|
193
|
-
emailSentAt?: Timestamp;
|
|
194
|
-
emailError?: string;
|
|
195
|
-
emailErrorAt?: Timestamp;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Tip za kreiranje tokena za zdravstvenog radnika
|
|
200
|
-
*/
|
|
201
|
-
export interface CreatePractitionerTokenData {
|
|
202
|
-
practitionerId: string;
|
|
203
|
-
email: string;
|
|
204
|
-
clinicId: string;
|
|
205
|
-
expiresAt?: Date;
|
|
206
|
-
}
|
|
1
|
+
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
+
import {
|
|
3
|
+
CertificationLevel,
|
|
4
|
+
CertificationSpecialty,
|
|
5
|
+
} from "../../backoffice/types/static/certification.types";
|
|
6
|
+
import { PractitionerReviewInfo } from "../reviews";
|
|
7
|
+
import { ClinicInfo } from "../profile";
|
|
8
|
+
import { ProcedureFamily } from "../../backoffice/types/static/procedure-family.types";
|
|
9
|
+
import {
|
|
10
|
+
Currency,
|
|
11
|
+
PricingMeasure,
|
|
12
|
+
} from "../../backoffice/types/static/pricing.types";
|
|
13
|
+
import { ProcedureSummaryInfo } from "../procedure";
|
|
14
|
+
import type { MediaResource } from "../../services/media/media.service";
|
|
15
|
+
|
|
16
|
+
export const PRACTITIONERS_COLLECTION = "practitioners";
|
|
17
|
+
export const REGISTER_TOKENS_COLLECTION = "register_tokens";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Osnovne informacije o zdravstvenom radniku
|
|
21
|
+
*/
|
|
22
|
+
export interface PractitionerBasicInfo {
|
|
23
|
+
firstName: string;
|
|
24
|
+
lastName: string;
|
|
25
|
+
title: string;
|
|
26
|
+
email: string;
|
|
27
|
+
phoneNumber: string | null;
|
|
28
|
+
dateOfBirth: Timestamp | Date | null;
|
|
29
|
+
gender: "male" | "female" | "other";
|
|
30
|
+
profileImageUrl?: MediaResource | null;
|
|
31
|
+
bio?: string;
|
|
32
|
+
languages: string[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Sertifikacija zdravstvenog radnika
|
|
37
|
+
*/
|
|
38
|
+
export interface PractitionerCertification {
|
|
39
|
+
level: CertificationLevel;
|
|
40
|
+
specialties: CertificationSpecialty[];
|
|
41
|
+
licenseNumber: string;
|
|
42
|
+
issuingAuthority: string;
|
|
43
|
+
issueDate: Timestamp | Date;
|
|
44
|
+
expiryDate?: Timestamp | Date | null;
|
|
45
|
+
verificationStatus: "pending" | "verified" | "rejected";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Interfejs za radno vreme zdravstvenog radnika u klinici
|
|
50
|
+
*/
|
|
51
|
+
export interface PractitionerClinicWorkingHours {
|
|
52
|
+
clinicId: string;
|
|
53
|
+
workingHours: {
|
|
54
|
+
monday: { start: string; end: string } | null;
|
|
55
|
+
tuesday: { start: string; end: string } | null;
|
|
56
|
+
wednesday: { start: string; end: string } | null;
|
|
57
|
+
thursday: { start: string; end: string } | null;
|
|
58
|
+
friday: { start: string; end: string } | null;
|
|
59
|
+
saturday: { start: string; end: string } | null;
|
|
60
|
+
sunday: { start: string; end: string } | null;
|
|
61
|
+
};
|
|
62
|
+
isActive: boolean;
|
|
63
|
+
createdAt: Timestamp | Date;
|
|
64
|
+
updatedAt: Timestamp | Date;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Status of practitioner profile
|
|
69
|
+
*/
|
|
70
|
+
export enum PractitionerStatus {
|
|
71
|
+
DRAFT = "draft",
|
|
72
|
+
ACTIVE = "active",
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Token status for practitioner invitations
|
|
77
|
+
*/
|
|
78
|
+
export enum PractitionerTokenStatus {
|
|
79
|
+
ACTIVE = "active",
|
|
80
|
+
USED = "used",
|
|
81
|
+
EXPIRED = "expired",
|
|
82
|
+
REVOKED = "revoked",
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Interfejs za zdravstvenog radnika
|
|
87
|
+
*/
|
|
88
|
+
export interface Practitioner {
|
|
89
|
+
id: string;
|
|
90
|
+
userRef: string;
|
|
91
|
+
basicInfo: PractitionerBasicInfo;
|
|
92
|
+
fullNameLower: string; // Add this line
|
|
93
|
+
certification: PractitionerCertification;
|
|
94
|
+
clinics: string[]; // Reference na klinike gde radi
|
|
95
|
+
clinicWorkingHours: PractitionerClinicWorkingHours[]; // Radno vreme za svaku kliniku
|
|
96
|
+
clinicsInfo: ClinicInfo[]; // Aggregated clinic information
|
|
97
|
+
procedures: string[]; // Reference na procedure koje izvodi
|
|
98
|
+
freeConsultations?: Record<string, string> | null; // Map of clinic IDs to procedure ID for free consultations (one per clinic)
|
|
99
|
+
proceduresInfo: ProcedureSummaryInfo[]; // Aggregated procedure information
|
|
100
|
+
reviewInfo: PractitionerReviewInfo; // Aggregated review information
|
|
101
|
+
isActive: boolean;
|
|
102
|
+
isVerified: boolean;
|
|
103
|
+
status: PractitionerStatus;
|
|
104
|
+
createdAt: Timestamp;
|
|
105
|
+
updatedAt: Timestamp;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Tip za kreiranje novog zdravstvenog radnika
|
|
110
|
+
*/
|
|
111
|
+
export interface CreatePractitionerData {
|
|
112
|
+
userRef: string;
|
|
113
|
+
basicInfo: PractitionerBasicInfo;
|
|
114
|
+
certification: PractitionerCertification;
|
|
115
|
+
clinics?: string[];
|
|
116
|
+
clinicWorkingHours?: PractitionerClinicWorkingHours[];
|
|
117
|
+
clinicsInfo?: ClinicInfo[];
|
|
118
|
+
freeConsultations?: Record<string, string> | null;
|
|
119
|
+
isActive: boolean;
|
|
120
|
+
isVerified: boolean;
|
|
121
|
+
status?: PractitionerStatus;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Tip za kreiranje draft profila zdravstvenog radnika
|
|
126
|
+
*/
|
|
127
|
+
export interface CreateDraftPractitionerData {
|
|
128
|
+
basicInfo: PractitionerBasicInfo;
|
|
129
|
+
certification: PractitionerCertification;
|
|
130
|
+
clinics?: string[];
|
|
131
|
+
clinicWorkingHours?: PractitionerClinicWorkingHours[];
|
|
132
|
+
clinicsInfo?: ClinicInfo[];
|
|
133
|
+
freeConsultations?: Record<string, string> | null;
|
|
134
|
+
isActive?: boolean;
|
|
135
|
+
isVerified?: boolean;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Tip za ažuriranje zdravstvenog radnika
|
|
140
|
+
*/
|
|
141
|
+
export interface UpdatePractitionerData
|
|
142
|
+
extends Partial<CreatePractitionerData> {
|
|
143
|
+
updatedAt?: FieldValue;
|
|
144
|
+
proceduresInfo?: ProcedureSummaryInfo[];
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Interfejs za procedure koje zdravstveni radnik izvodi u određenoj klinici
|
|
149
|
+
*/
|
|
150
|
+
export interface PractitionerClinicProcedures {
|
|
151
|
+
practitionerId: string;
|
|
152
|
+
clinicId: string;
|
|
153
|
+
procedures: string[]; // ID-jevi procedura koje izvodi
|
|
154
|
+
isActive: boolean;
|
|
155
|
+
createdAt: Timestamp;
|
|
156
|
+
updatedAt: Timestamp;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Interfejs za radno vreme zdravstvenog radnika u klinici
|
|
161
|
+
*/
|
|
162
|
+
export interface PractitionerWorkingHours {
|
|
163
|
+
practitionerId: string;
|
|
164
|
+
clinicId: string;
|
|
165
|
+
monday: { start: string; end: string } | null;
|
|
166
|
+
tuesday: { start: string; end: string } | null;
|
|
167
|
+
wednesday: { start: string; end: string } | null;
|
|
168
|
+
thursday: { start: string; end: string } | null;
|
|
169
|
+
friday: { start: string; end: string } | null;
|
|
170
|
+
saturday: { start: string; end: string } | null;
|
|
171
|
+
sunday: { start: string; end: string } | null;
|
|
172
|
+
createdAt: Timestamp;
|
|
173
|
+
updatedAt: Timestamp;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Token za pozivanje zdravstvenog radnika
|
|
178
|
+
*/
|
|
179
|
+
export interface PractitionerToken {
|
|
180
|
+
id: string;
|
|
181
|
+
token: string;
|
|
182
|
+
practitionerId: string;
|
|
183
|
+
email: string;
|
|
184
|
+
clinicId: string;
|
|
185
|
+
status: PractitionerTokenStatus;
|
|
186
|
+
createdBy: string;
|
|
187
|
+
createdAt: Timestamp;
|
|
188
|
+
expiresAt: Timestamp;
|
|
189
|
+
usedBy?: string;
|
|
190
|
+
usedAt?: Timestamp;
|
|
191
|
+
// Email tracking fields added by Cloud Function
|
|
192
|
+
emailSent?: boolean;
|
|
193
|
+
emailSentAt?: Timestamp;
|
|
194
|
+
emailError?: string;
|
|
195
|
+
emailErrorAt?: Timestamp;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Tip za kreiranje tokena za zdravstvenog radnika
|
|
200
|
+
*/
|
|
201
|
+
export interface CreatePractitionerTokenData {
|
|
202
|
+
practitionerId: string;
|
|
203
|
+
email: string;
|
|
204
|
+
clinicId: string;
|
|
205
|
+
expiresAt?: Date;
|
|
206
|
+
}
|