@blackcode_sa/metaestetics-api 1.15.16 → 1.15.17-staging.1
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
|
@@ -1,239 +1,239 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Product used in procedures
|
|
3
|
-
* Simplified structure with only essential fields and flexible metadata
|
|
4
|
-
*
|
|
5
|
-
* @property id - Unique identifier of the product
|
|
6
|
-
* @property name - Name of the product
|
|
7
|
-
* @property brandId - Reference to the Brand document ID
|
|
8
|
-
* @property brandName - Display name of the brand (denormalized for performance)
|
|
9
|
-
* @property description - Detailed description of the product
|
|
10
|
-
* @property assignedTechnologyIds - Array of technology IDs this product is assigned to
|
|
11
|
-
* @property metadata - Flexible key-value pairs for additional product information
|
|
12
|
-
* @property isActive - Whether the product is active in the system
|
|
13
|
-
* @property createdAt - Creation date
|
|
14
|
-
* @property updatedAt - Last update date
|
|
15
|
-
*/
|
|
16
|
-
export interface Product {
|
|
17
|
-
id?: string;
|
|
18
|
-
name: string;
|
|
19
|
-
brandId: string; // Reference to Brand document
|
|
20
|
-
brandName: string; // Denormalized brand name for display
|
|
21
|
-
description: string;
|
|
22
|
-
category?: string; // "Injectables", "Laser Devices", "Skincare", etc.
|
|
23
|
-
|
|
24
|
-
// Technology assignment tracking
|
|
25
|
-
assignedTechnologyIds?: string[];
|
|
26
|
-
|
|
27
|
-
// Flexible metadata for any additional information
|
|
28
|
-
metadata?: Record<string, string | number | boolean>;
|
|
29
|
-
|
|
30
|
-
// System fields
|
|
31
|
-
isActive: boolean;
|
|
32
|
-
createdAt: Date;
|
|
33
|
-
updatedAt: Date;
|
|
34
|
-
|
|
35
|
-
// LEGACY FIELDS: Only present in technology subcollections (/technologies/{id}/products/)
|
|
36
|
-
// These fields are synced by Cloud Functions for backward compatibility
|
|
37
|
-
// NOT stored in top-level /products collection
|
|
38
|
-
/** Present only in subcollections - synced from technology metadata */
|
|
39
|
-
technologyId?: string;
|
|
40
|
-
/** Present only in subcollections - synced from technology name */
|
|
41
|
-
technologyName?: string;
|
|
42
|
-
/** Present only in subcollections - synced from technology categoryId */
|
|
43
|
-
categoryId?: string;
|
|
44
|
-
/** Present only in subcollections - synced from technology subcategoryId */
|
|
45
|
-
subcategoryId?: string;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Collection in Firestore database where products are stored
|
|
50
|
-
*/
|
|
51
|
-
export const PRODUCTS_COLLECTION = 'products';
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Interface for the ProductService class
|
|
55
|
-
*
|
|
56
|
-
* NOTE: This interface maintains backward compatibility while adding new top-level collection methods.
|
|
57
|
-
* Old methods using technologyId are kept for existing code, new methods work with top-level collection.
|
|
58
|
-
*/
|
|
59
|
-
export interface IProductService {
|
|
60
|
-
// ==========================================
|
|
61
|
-
// NEW METHODS: Top-level collection (preferred)
|
|
62
|
-
// ==========================================
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Creates a new product in the top-level collection
|
|
66
|
-
* @param product - Product data
|
|
67
|
-
* @param technologyIds - Optional array of technology IDs to assign this product to
|
|
68
|
-
*/
|
|
69
|
-
createTopLevel(
|
|
70
|
-
product: Omit<Product, 'id' | 'createdAt' | 'updatedAt' | 'assignedTechnologyIds'>,
|
|
71
|
-
technologyIds?: string[],
|
|
72
|
-
): Promise<Product>;
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Gets all products from the top-level collection
|
|
76
|
-
* @param options - Query options
|
|
77
|
-
*/
|
|
78
|
-
getAllTopLevel(options: {
|
|
79
|
-
rowsPerPage: number;
|
|
80
|
-
lastVisible?: any;
|
|
81
|
-
brandId?: string;
|
|
82
|
-
category?: string;
|
|
83
|
-
}): Promise<{ products: Product[]; lastVisible: any }>;
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Gets a product by ID from the top-level collection
|
|
87
|
-
* @param productId - ID of the product
|
|
88
|
-
*/
|
|
89
|
-
getByIdTopLevel(productId: string): Promise<Product | null>;
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Updates a product in the top-level collection
|
|
93
|
-
* @param productId - ID of the product to update
|
|
94
|
-
* @param product - Updated product data
|
|
95
|
-
*/
|
|
96
|
-
updateTopLevel(
|
|
97
|
-
productId: string,
|
|
98
|
-
product: Partial<Omit<Product, 'id' | 'createdAt'>>,
|
|
99
|
-
): Promise<Product | null>;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Deletes a product from the top-level collection (soft delete)
|
|
103
|
-
* @param productId - ID of the product to delete
|
|
104
|
-
*/
|
|
105
|
-
deleteTopLevel(productId: string): Promise<void>;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Assigns a product to a technology
|
|
109
|
-
* @param productId - ID of the product
|
|
110
|
-
* @param technologyId - ID of the technology
|
|
111
|
-
*/
|
|
112
|
-
assignToTechnology(productId: string, technologyId: string): Promise<void>;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Unassigns a product from a technology
|
|
116
|
-
* @param productId - ID of the product
|
|
117
|
-
* @param technologyId - ID of the technology
|
|
118
|
-
*/
|
|
119
|
-
unassignFromTechnology(productId: string, technologyId: string): Promise<void>;
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Gets products assigned to a specific technology
|
|
123
|
-
* @param technologyId - ID of the technology
|
|
124
|
-
*/
|
|
125
|
-
getAssignedProducts(technologyId: string): Promise<Product[]>;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Gets products NOT assigned to a specific technology
|
|
129
|
-
* @param technologyId - ID of the technology
|
|
130
|
-
*/
|
|
131
|
-
getUnassignedProducts(technologyId: string): Promise<Product[]>;
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Gets all products for a brand
|
|
135
|
-
* @param brandId - ID of the brand
|
|
136
|
-
*/
|
|
137
|
-
getByBrand(brandId: string): Promise<Product[]>;
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Exports products to CSV format
|
|
141
|
-
* @param options - Export options
|
|
142
|
-
*/
|
|
143
|
-
exportToCsv(options?: {
|
|
144
|
-
includeInactive?: boolean;
|
|
145
|
-
includeBom?: boolean;
|
|
146
|
-
}): Promise<string>;
|
|
147
|
-
|
|
148
|
-
// ==========================================
|
|
149
|
-
// DEPRECATED METHODS: Kept for backward compatibility
|
|
150
|
-
// ==========================================
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* @deprecated Use createTopLevel instead
|
|
154
|
-
* Creates a new product
|
|
155
|
-
* @param technologyId - ID of the technology this product is used with
|
|
156
|
-
* @param brandId - ID of the brand that manufactures this product
|
|
157
|
-
* @param product - Product data
|
|
158
|
-
*/
|
|
159
|
-
create(
|
|
160
|
-
technologyId: string,
|
|
161
|
-
brandId: string,
|
|
162
|
-
product: Omit<Product, 'id' | 'createdAt' | 'updatedAt' | 'brandId' | 'technologyId'>,
|
|
163
|
-
): Promise<Product>;
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* @deprecated Use getAllTopLevel instead
|
|
167
|
-
* Gets a paginated list of all products, with optional filters.
|
|
168
|
-
*/
|
|
169
|
-
getAll(options: {
|
|
170
|
-
rowsPerPage: number;
|
|
171
|
-
lastVisible?: any;
|
|
172
|
-
categoryId?: string;
|
|
173
|
-
subcategoryId?: string;
|
|
174
|
-
technologyId?: string;
|
|
175
|
-
}): Promise<{ products: Product[]; lastVisible: any }>;
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* @deprecated Use alternative counting methods
|
|
179
|
-
* Gets the total count of active products, with optional filters.
|
|
180
|
-
*/
|
|
181
|
-
getProductsCount(options: {
|
|
182
|
-
categoryId?: string;
|
|
183
|
-
subcategoryId?: string;
|
|
184
|
-
technologyId?: string;
|
|
185
|
-
}): Promise<number>;
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* @deprecated Use alternative counting methods
|
|
189
|
-
* Gets counts of active products grouped by category, subcategory, and technology.
|
|
190
|
-
*/
|
|
191
|
-
getProductCounts(): Promise<{
|
|
192
|
-
byCategory: Record<string, number>;
|
|
193
|
-
bySubcategory: Record<string, number>;
|
|
194
|
-
byTechnology: Record<string, number>;
|
|
195
|
-
}>;
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* @deprecated Use getAssignedProducts instead
|
|
199
|
-
* Gets all products for a specific technology (non-paginated, for filters/dropdowns)
|
|
200
|
-
* @param technologyId - ID of the technology
|
|
201
|
-
*/
|
|
202
|
-
getAllByTechnology(technologyId: string): Promise<Product[]>;
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* @deprecated Use getByBrand instead
|
|
206
|
-
* Gets all products for a brand
|
|
207
|
-
* @param brandId - ID of the brand
|
|
208
|
-
*/
|
|
209
|
-
getAllByBrand(brandId: string): Promise<Product[]>;
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* @deprecated Use updateTopLevel instead
|
|
213
|
-
* Updates a product
|
|
214
|
-
* @param technologyId - ID of the technology
|
|
215
|
-
* @param productId - ID of the product to update
|
|
216
|
-
* @param product - Updated product data
|
|
217
|
-
*/
|
|
218
|
-
update(
|
|
219
|
-
technologyId: string,
|
|
220
|
-
productId: string,
|
|
221
|
-
product: Partial<Omit<Product, 'id' | 'createdAt' | 'brandId' | 'technologyId'>>,
|
|
222
|
-
): Promise<Product | null>;
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* @deprecated Use deleteTopLevel instead
|
|
226
|
-
* Deletes a product (soft delete)
|
|
227
|
-
* @param technologyId - ID of the technology
|
|
228
|
-
* @param productId - ID of the product to delete
|
|
229
|
-
*/
|
|
230
|
-
delete(technologyId: string, productId: string): Promise<void>;
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* @deprecated Use getByIdTopLevel instead
|
|
234
|
-
* Gets a product by ID
|
|
235
|
-
* @param technologyId - ID of the technology
|
|
236
|
-
* @param productId - ID of the product
|
|
237
|
-
*/
|
|
238
|
-
getById(technologyId: string, productId: string): Promise<Product | null>;
|
|
239
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Product used in procedures
|
|
3
|
+
* Simplified structure with only essential fields and flexible metadata
|
|
4
|
+
*
|
|
5
|
+
* @property id - Unique identifier of the product
|
|
6
|
+
* @property name - Name of the product
|
|
7
|
+
* @property brandId - Reference to the Brand document ID
|
|
8
|
+
* @property brandName - Display name of the brand (denormalized for performance)
|
|
9
|
+
* @property description - Detailed description of the product
|
|
10
|
+
* @property assignedTechnologyIds - Array of technology IDs this product is assigned to
|
|
11
|
+
* @property metadata - Flexible key-value pairs for additional product information
|
|
12
|
+
* @property isActive - Whether the product is active in the system
|
|
13
|
+
* @property createdAt - Creation date
|
|
14
|
+
* @property updatedAt - Last update date
|
|
15
|
+
*/
|
|
16
|
+
export interface Product {
|
|
17
|
+
id?: string;
|
|
18
|
+
name: string;
|
|
19
|
+
brandId: string; // Reference to Brand document
|
|
20
|
+
brandName: string; // Denormalized brand name for display
|
|
21
|
+
description: string;
|
|
22
|
+
category?: string; // "Injectables", "Laser Devices", "Skincare", etc.
|
|
23
|
+
|
|
24
|
+
// Technology assignment tracking
|
|
25
|
+
assignedTechnologyIds?: string[];
|
|
26
|
+
|
|
27
|
+
// Flexible metadata for any additional information
|
|
28
|
+
metadata?: Record<string, string | number | boolean>;
|
|
29
|
+
|
|
30
|
+
// System fields
|
|
31
|
+
isActive: boolean;
|
|
32
|
+
createdAt: Date;
|
|
33
|
+
updatedAt: Date;
|
|
34
|
+
|
|
35
|
+
// LEGACY FIELDS: Only present in technology subcollections (/technologies/{id}/products/)
|
|
36
|
+
// These fields are synced by Cloud Functions for backward compatibility
|
|
37
|
+
// NOT stored in top-level /products collection
|
|
38
|
+
/** Present only in subcollections - synced from technology metadata */
|
|
39
|
+
technologyId?: string;
|
|
40
|
+
/** Present only in subcollections - synced from technology name */
|
|
41
|
+
technologyName?: string;
|
|
42
|
+
/** Present only in subcollections - synced from technology categoryId */
|
|
43
|
+
categoryId?: string;
|
|
44
|
+
/** Present only in subcollections - synced from technology subcategoryId */
|
|
45
|
+
subcategoryId?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Collection in Firestore database where products are stored
|
|
50
|
+
*/
|
|
51
|
+
export const PRODUCTS_COLLECTION = 'products';
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Interface for the ProductService class
|
|
55
|
+
*
|
|
56
|
+
* NOTE: This interface maintains backward compatibility while adding new top-level collection methods.
|
|
57
|
+
* Old methods using technologyId are kept for existing code, new methods work with top-level collection.
|
|
58
|
+
*/
|
|
59
|
+
export interface IProductService {
|
|
60
|
+
// ==========================================
|
|
61
|
+
// NEW METHODS: Top-level collection (preferred)
|
|
62
|
+
// ==========================================
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Creates a new product in the top-level collection
|
|
66
|
+
* @param product - Product data
|
|
67
|
+
* @param technologyIds - Optional array of technology IDs to assign this product to
|
|
68
|
+
*/
|
|
69
|
+
createTopLevel(
|
|
70
|
+
product: Omit<Product, 'id' | 'createdAt' | 'updatedAt' | 'assignedTechnologyIds'>,
|
|
71
|
+
technologyIds?: string[],
|
|
72
|
+
): Promise<Product>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Gets all products from the top-level collection
|
|
76
|
+
* @param options - Query options
|
|
77
|
+
*/
|
|
78
|
+
getAllTopLevel(options: {
|
|
79
|
+
rowsPerPage: number;
|
|
80
|
+
lastVisible?: any;
|
|
81
|
+
brandId?: string;
|
|
82
|
+
category?: string;
|
|
83
|
+
}): Promise<{ products: Product[]; lastVisible: any }>;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Gets a product by ID from the top-level collection
|
|
87
|
+
* @param productId - ID of the product
|
|
88
|
+
*/
|
|
89
|
+
getByIdTopLevel(productId: string): Promise<Product | null>;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Updates a product in the top-level collection
|
|
93
|
+
* @param productId - ID of the product to update
|
|
94
|
+
* @param product - Updated product data
|
|
95
|
+
*/
|
|
96
|
+
updateTopLevel(
|
|
97
|
+
productId: string,
|
|
98
|
+
product: Partial<Omit<Product, 'id' | 'createdAt'>>,
|
|
99
|
+
): Promise<Product | null>;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Deletes a product from the top-level collection (soft delete)
|
|
103
|
+
* @param productId - ID of the product to delete
|
|
104
|
+
*/
|
|
105
|
+
deleteTopLevel(productId: string): Promise<void>;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Assigns a product to a technology
|
|
109
|
+
* @param productId - ID of the product
|
|
110
|
+
* @param technologyId - ID of the technology
|
|
111
|
+
*/
|
|
112
|
+
assignToTechnology(productId: string, technologyId: string): Promise<void>;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Unassigns a product from a technology
|
|
116
|
+
* @param productId - ID of the product
|
|
117
|
+
* @param technologyId - ID of the technology
|
|
118
|
+
*/
|
|
119
|
+
unassignFromTechnology(productId: string, technologyId: string): Promise<void>;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Gets products assigned to a specific technology
|
|
123
|
+
* @param technologyId - ID of the technology
|
|
124
|
+
*/
|
|
125
|
+
getAssignedProducts(technologyId: string): Promise<Product[]>;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Gets products NOT assigned to a specific technology
|
|
129
|
+
* @param technologyId - ID of the technology
|
|
130
|
+
*/
|
|
131
|
+
getUnassignedProducts(technologyId: string): Promise<Product[]>;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Gets all products for a brand
|
|
135
|
+
* @param brandId - ID of the brand
|
|
136
|
+
*/
|
|
137
|
+
getByBrand(brandId: string): Promise<Product[]>;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Exports products to CSV format
|
|
141
|
+
* @param options - Export options
|
|
142
|
+
*/
|
|
143
|
+
exportToCsv(options?: {
|
|
144
|
+
includeInactive?: boolean;
|
|
145
|
+
includeBom?: boolean;
|
|
146
|
+
}): Promise<string>;
|
|
147
|
+
|
|
148
|
+
// ==========================================
|
|
149
|
+
// DEPRECATED METHODS: Kept for backward compatibility
|
|
150
|
+
// ==========================================
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @deprecated Use createTopLevel instead
|
|
154
|
+
* Creates a new product
|
|
155
|
+
* @param technologyId - ID of the technology this product is used with
|
|
156
|
+
* @param brandId - ID of the brand that manufactures this product
|
|
157
|
+
* @param product - Product data
|
|
158
|
+
*/
|
|
159
|
+
create(
|
|
160
|
+
technologyId: string,
|
|
161
|
+
brandId: string,
|
|
162
|
+
product: Omit<Product, 'id' | 'createdAt' | 'updatedAt' | 'brandId' | 'technologyId'>,
|
|
163
|
+
): Promise<Product>;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @deprecated Use getAllTopLevel instead
|
|
167
|
+
* Gets a paginated list of all products, with optional filters.
|
|
168
|
+
*/
|
|
169
|
+
getAll(options: {
|
|
170
|
+
rowsPerPage: number;
|
|
171
|
+
lastVisible?: any;
|
|
172
|
+
categoryId?: string;
|
|
173
|
+
subcategoryId?: string;
|
|
174
|
+
technologyId?: string;
|
|
175
|
+
}): Promise<{ products: Product[]; lastVisible: any }>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @deprecated Use alternative counting methods
|
|
179
|
+
* Gets the total count of active products, with optional filters.
|
|
180
|
+
*/
|
|
181
|
+
getProductsCount(options: {
|
|
182
|
+
categoryId?: string;
|
|
183
|
+
subcategoryId?: string;
|
|
184
|
+
technologyId?: string;
|
|
185
|
+
}): Promise<number>;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @deprecated Use alternative counting methods
|
|
189
|
+
* Gets counts of active products grouped by category, subcategory, and technology.
|
|
190
|
+
*/
|
|
191
|
+
getProductCounts(): Promise<{
|
|
192
|
+
byCategory: Record<string, number>;
|
|
193
|
+
bySubcategory: Record<string, number>;
|
|
194
|
+
byTechnology: Record<string, number>;
|
|
195
|
+
}>;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @deprecated Use getAssignedProducts instead
|
|
199
|
+
* Gets all products for a specific technology (non-paginated, for filters/dropdowns)
|
|
200
|
+
* @param technologyId - ID of the technology
|
|
201
|
+
*/
|
|
202
|
+
getAllByTechnology(technologyId: string): Promise<Product[]>;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* @deprecated Use getByBrand instead
|
|
206
|
+
* Gets all products for a brand
|
|
207
|
+
* @param brandId - ID of the brand
|
|
208
|
+
*/
|
|
209
|
+
getAllByBrand(brandId: string): Promise<Product[]>;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @deprecated Use updateTopLevel instead
|
|
213
|
+
* Updates a product
|
|
214
|
+
* @param technologyId - ID of the technology
|
|
215
|
+
* @param productId - ID of the product to update
|
|
216
|
+
* @param product - Updated product data
|
|
217
|
+
*/
|
|
218
|
+
update(
|
|
219
|
+
technologyId: string,
|
|
220
|
+
productId: string,
|
|
221
|
+
product: Partial<Omit<Product, 'id' | 'createdAt' | 'brandId' | 'technologyId'>>,
|
|
222
|
+
): Promise<Product | null>;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* @deprecated Use deleteTopLevel instead
|
|
226
|
+
* Deletes a product (soft delete)
|
|
227
|
+
* @param technologyId - ID of the technology
|
|
228
|
+
* @param productId - ID of the product to delete
|
|
229
|
+
*/
|
|
230
|
+
delete(technologyId: string, productId: string): Promise<void>;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @deprecated Use getByIdTopLevel instead
|
|
234
|
+
* Gets a product by ID
|
|
235
|
+
* @param technologyId - ID of the technology
|
|
236
|
+
* @param productId - ID of the product
|
|
237
|
+
*/
|
|
238
|
+
getById(technologyId: string, productId: string): Promise<Product | null>;
|
|
239
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Jedinica mere za vremenski period
|
|
3
|
-
*/
|
|
4
|
-
export enum TimeUnit {
|
|
5
|
-
HOURS = "hours",
|
|
6
|
-
DAYS = "days",
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Tip zahteva - da li se odnosi na period pre ili posle procedure
|
|
11
|
-
*/
|
|
12
|
-
export enum RequirementType {
|
|
13
|
-
PRE = "pre",
|
|
14
|
-
POST = "post",
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Nivo važnosti zahteva
|
|
19
|
-
*/
|
|
20
|
-
export type RequirementImportance = "low" | "medium" | "high";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Vremenski okvir za zahtev
|
|
24
|
-
* @property duration - Trajanje u odabranoj jedinici vremena
|
|
25
|
-
* @property unit - Jedinica vremena (sati ili dani)
|
|
26
|
-
* @property notifyAt - Lista trenutaka kada treba poslati obaveštenje (u istoj jedinici)
|
|
27
|
-
*/
|
|
28
|
-
export interface TimeFrame {
|
|
29
|
-
duration: number;
|
|
30
|
-
unit: TimeUnit;
|
|
31
|
-
notifyAt: number[];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Zahtev koji se može povezati sa tehnologijom
|
|
36
|
-
* Može biti zahtev pre procedure (pre) ili posle procedure (post)
|
|
37
|
-
*
|
|
38
|
-
* @property id - Jedinstveni identifikator zahteva
|
|
39
|
-
* @property type - Tip zahteva (pre/post)
|
|
40
|
-
* @property name - Naziv zahteva
|
|
41
|
-
* @property description - Detaljan opis zahteva
|
|
42
|
-
* @property timeframe - Vremenski okvir za zahtev
|
|
43
|
-
* @property importance - Nivo važnosti zahteva
|
|
44
|
-
* @property isActive - Da li je zahtev aktivan u sistemu
|
|
45
|
-
* @property createdAt - Datum kreiranja
|
|
46
|
-
* @property updatedAt - Datum poslednjeg ažuriranja
|
|
47
|
-
*/
|
|
48
|
-
export interface Requirement {
|
|
49
|
-
id: string;
|
|
50
|
-
type: RequirementType;
|
|
51
|
-
name: string;
|
|
52
|
-
description: string;
|
|
53
|
-
timeframe: TimeFrame;
|
|
54
|
-
importance: RequirementImportance;
|
|
55
|
-
isActive: boolean;
|
|
56
|
-
createdAt: Date;
|
|
57
|
-
updatedAt: Date;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Kolekcija u Firestore bazi gde se čuvaju globalni zahtevi
|
|
62
|
-
*/
|
|
63
|
-
export const REQUIREMENTS_COLLECTION = "backoffice_requirements";
|
|
1
|
+
/**
|
|
2
|
+
* Jedinica mere za vremenski period
|
|
3
|
+
*/
|
|
4
|
+
export enum TimeUnit {
|
|
5
|
+
HOURS = "hours",
|
|
6
|
+
DAYS = "days",
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Tip zahteva - da li se odnosi na period pre ili posle procedure
|
|
11
|
+
*/
|
|
12
|
+
export enum RequirementType {
|
|
13
|
+
PRE = "pre",
|
|
14
|
+
POST = "post",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Nivo važnosti zahteva
|
|
19
|
+
*/
|
|
20
|
+
export type RequirementImportance = "low" | "medium" | "high";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Vremenski okvir za zahtev
|
|
24
|
+
* @property duration - Trajanje u odabranoj jedinici vremena
|
|
25
|
+
* @property unit - Jedinica vremena (sati ili dani)
|
|
26
|
+
* @property notifyAt - Lista trenutaka kada treba poslati obaveštenje (u istoj jedinici)
|
|
27
|
+
*/
|
|
28
|
+
export interface TimeFrame {
|
|
29
|
+
duration: number;
|
|
30
|
+
unit: TimeUnit;
|
|
31
|
+
notifyAt: number[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Zahtev koji se može povezati sa tehnologijom
|
|
36
|
+
* Može biti zahtev pre procedure (pre) ili posle procedure (post)
|
|
37
|
+
*
|
|
38
|
+
* @property id - Jedinstveni identifikator zahteva
|
|
39
|
+
* @property type - Tip zahteva (pre/post)
|
|
40
|
+
* @property name - Naziv zahteva
|
|
41
|
+
* @property description - Detaljan opis zahteva
|
|
42
|
+
* @property timeframe - Vremenski okvir za zahtev
|
|
43
|
+
* @property importance - Nivo važnosti zahteva
|
|
44
|
+
* @property isActive - Da li je zahtev aktivan u sistemu
|
|
45
|
+
* @property createdAt - Datum kreiranja
|
|
46
|
+
* @property updatedAt - Datum poslednjeg ažuriranja
|
|
47
|
+
*/
|
|
48
|
+
export interface Requirement {
|
|
49
|
+
id: string;
|
|
50
|
+
type: RequirementType;
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
timeframe: TimeFrame;
|
|
54
|
+
importance: RequirementImportance;
|
|
55
|
+
isActive: boolean;
|
|
56
|
+
createdAt: Date;
|
|
57
|
+
updatedAt: Date;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Kolekcija u Firestore bazi gde se čuvaju globalni zahtevi
|
|
62
|
+
*/
|
|
63
|
+
export const REQUIREMENTS_COLLECTION = "backoffice_requirements";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# Static Types
|
|
2
|
-
|
|
3
|
-
This directory contains all static type definitions used throughout the backoffice application. These types are considered "static" because they represent data that is generally fixed and does not change frequently.
|
|
4
|
-
|
|
5
|
-
## Available Types
|
|
6
|
-
|
|
7
|
-
The following static types are available for import:
|
|
8
|
-
|
|
9
|
-
- `BlockingCondition`: Defines conditions that may prevent a procedure.
|
|
10
|
-
- `Certification`: Represents professional certifications.
|
|
11
|
-
- `Contraindication`: Specifies conditions or factors that serve as a reason to withhold a certain medical treatment.
|
|
12
|
-
- `Pricing`: Defines the structure for pricing information.
|
|
13
|
-
- `ProcedureFamily`: Groups related medical procedures.
|
|
14
|
-
- `TreatmentBenefit`: Describes the benefits of a treatment.
|
|
15
|
-
|
|
16
|
-
## Usage
|
|
17
|
-
|
|
18
|
-
All types in this directory are exported from the main `index.ts` file. You can import them directly from this module.
|
|
1
|
+
# Static Types
|
|
2
|
+
|
|
3
|
+
This directory contains all static type definitions used throughout the backoffice application. These types are considered "static" because they represent data that is generally fixed and does not change frequently.
|
|
4
|
+
|
|
5
|
+
## Available Types
|
|
6
|
+
|
|
7
|
+
The following static types are available for import:
|
|
8
|
+
|
|
9
|
+
- `BlockingCondition`: Defines conditions that may prevent a procedure.
|
|
10
|
+
- `Certification`: Represents professional certifications.
|
|
11
|
+
- `Contraindication`: Specifies conditions or factors that serve as a reason to withhold a certain medical treatment.
|
|
12
|
+
- `Pricing`: Defines the structure for pricing information.
|
|
13
|
+
- `ProcedureFamily`: Groups related medical procedures.
|
|
14
|
+
- `TreatmentBenefit`: Describes the benefits of a treatment.
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
All types in this directory are exported from the main `index.ts` file. You can import them directly from this module.
|