@blackcode_sa/metaestetics-api 1.12.61 → 1.12.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.d.mts +2 -0
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.js +45 -4
- package/dist/admin/index.mjs +45 -4
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +53 -11
- package/dist/index.mjs +53 -11
- package/package.json +119 -119
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +128 -128
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +1844 -1844
- package/src/admin/aggregation/appointment/index.ts +1 -1
- package/src/admin/aggregation/clinic/README.md +52 -52
- package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +703 -703
- package/src/admin/aggregation/clinic/index.ts +1 -1
- package/src/admin/aggregation/forms/README.md +13 -13
- package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
- package/src/admin/aggregation/forms/index.ts +1 -1
- package/src/admin/aggregation/index.ts +8 -8
- package/src/admin/aggregation/patient/README.md +27 -27
- package/src/admin/aggregation/patient/index.ts +1 -1
- package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
- package/src/admin/aggregation/practitioner/README.md +42 -42
- package/src/admin/aggregation/practitioner/index.ts +1 -1
- package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
- package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
- package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
- package/src/admin/aggregation/procedure/README.md +43 -43
- package/src/admin/aggregation/procedure/index.ts +1 -1
- package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
- package/src/admin/aggregation/reviews/index.ts +1 -1
- package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +689 -641
- package/src/admin/booking/README.md +125 -125
- package/src/admin/booking/booking.admin.ts +1037 -1037
- package/src/admin/booking/booking.calculator.ts +712 -712
- package/src/admin/booking/booking.types.ts +59 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +7 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +1 -1
- package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
- package/src/admin/documentation-templates/index.ts +1 -1
- package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
- package/src/admin/free-consultation/index.ts +1 -1
- package/src/admin/index.ts +75 -75
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +95 -95
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +732 -732
- package/src/admin/mailing/appointment/index.ts +1 -1
- package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
- package/src/admin/mailing/base.mailing.service.ts +208 -208
- package/src/admin/mailing/index.ts +3 -3
- package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
- package/src/admin/mailing/practitionerInvite/index.ts +2 -2
- package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
- package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
- package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
- package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
- package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
- package/src/admin/notifications/index.ts +1 -1
- package/src/admin/notifications/notifications.admin.ts +710 -710
- package/src/admin/requirements/README.md +128 -128
- package/src/admin/requirements/index.ts +1 -1
- package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
- package/src/admin/users/index.ts +1 -1
- package/src/admin/users/user-profile.admin.ts +405 -405
- package/src/backoffice/constants/certification.constants.ts +13 -13
- package/src/backoffice/constants/index.ts +1 -1
- package/src/backoffice/errors/backoffice.errors.ts +181 -181
- package/src/backoffice/errors/index.ts +1 -1
- package/src/backoffice/expo-safe/README.md +26 -26
- package/src/backoffice/expo-safe/index.ts +41 -41
- package/src/backoffice/index.ts +5 -5
- package/src/backoffice/services/FIXES_README.md +102 -102
- package/src/backoffice/services/README.md +40 -40
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +318 -318
- package/src/backoffice/services/constants.service.ts +385 -385
- package/src/backoffice/services/documentation-template.service.ts +202 -202
- package/src/backoffice/services/index.ts +8 -8
- package/src/backoffice/services/migrate-products.ts +116 -116
- package/src/backoffice/services/product.service.ts +553 -553
- package/src/backoffice/services/requirement.service.ts +235 -235
- package/src/backoffice/services/subcategory.service.ts +395 -395
- package/src/backoffice/services/technology.service.ts +1070 -1070
- package/src/backoffice/types/README.md +12 -12
- package/src/backoffice/types/admin-constants.types.ts +69 -69
- package/src/backoffice/types/brand.types.ts +29 -29
- package/src/backoffice/types/category.types.ts +62 -62
- package/src/backoffice/types/documentation-templates.types.ts +28 -28
- package/src/backoffice/types/index.ts +10 -10
- package/src/backoffice/types/procedure-product.types.ts +38 -38
- package/src/backoffice/types/product.types.ts +240 -240
- package/src/backoffice/types/requirement.types.ts +63 -63
- package/src/backoffice/types/static/README.md +18 -18
- package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
- package/src/backoffice/types/static/certification.types.ts +37 -37
- package/src/backoffice/types/static/contraindication.types.ts +19 -19
- package/src/backoffice/types/static/index.ts +6 -6
- package/src/backoffice/types/static/pricing.types.ts +16 -16
- package/src/backoffice/types/static/procedure-family.types.ts +14 -14
- package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
- package/src/backoffice/types/subcategory.types.ts +34 -34
- package/src/backoffice/types/technology.types.ts +161 -161
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +163 -163
- package/src/config/__mocks__/firebase.ts +99 -99
- package/src/config/firebase.ts +78 -78
- package/src/config/index.ts +9 -9
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +200 -200
- package/src/errors/clinic.errors.ts +32 -32
- package/src/errors/firebase.errors.ts +47 -47
- package/src/errors/user.errors.ts +99 -99
- package/src/index.backup.ts +407 -407
- package/src/index.ts +6 -6
- package/src/locales/en.ts +31 -31
- package/src/recommender/admin/index.ts +1 -1
- package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
- package/src/recommender/front/index.ts +1 -1
- package/src/recommender/front/services/onboarding.service.ts +5 -5
- package/src/recommender/front/services/recommender.service.ts +3 -3
- package/src/recommender/index.ts +1 -1
- package/src/services/PATIENTAUTH.MD +197 -197
- package/src/services/README.md +106 -106
- package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
- package/src/services/__tests__/auth/auth.setup.ts +293 -293
- package/src/services/__tests__/auth.service.test.ts +346 -346
- package/src/services/__tests__/base.service.test.ts +77 -77
- package/src/services/__tests__/user.service.test.ts +528 -528
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2082 -2082
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +552 -552
- package/src/services/appointment/utils/extended-procedure.utils.ts +314 -314
- package/src/services/appointment/utils/form-initialization.utils.ts +225 -225
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +353 -353
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -152
- package/src/services/auth/auth.service.ts +989 -989
- package/src/services/auth/auth.v2.service.ts +961 -961
- package/src/services/auth/index.ts +7 -7
- package/src/services/auth/utils/error.utils.ts +90 -90
- package/src/services/auth/utils/firebase.utils.ts +49 -49
- package/src/services/auth/utils/index.ts +21 -21
- package/src/services/auth/utils/practitioner.utils.ts +125 -125
- package/src/services/base.service.ts +41 -41
- package/src/services/calendar/calendar.service.ts +1077 -1077
- package/src/services/calendar/calendar.v2.service.ts +1683 -1683
- package/src/services/calendar/calendar.v3.service.ts +313 -313
- package/src/services/calendar/externalCalendar.service.ts +178 -178
- package/src/services/calendar/index.ts +5 -5
- package/src/services/calendar/synced-calendars.service.ts +743 -743
- package/src/services/calendar/utils/appointment.utils.ts +265 -265
- package/src/services/calendar/utils/calendar-event.utils.ts +646 -646
- package/src/services/calendar/utils/clinic.utils.ts +237 -237
- package/src/services/calendar/utils/docs.utils.ts +157 -157
- package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
- package/src/services/calendar/utils/index.ts +8 -8
- package/src/services/calendar/utils/patient.utils.ts +198 -198
- package/src/services/calendar/utils/practitioner.utils.ts +221 -221
- package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
- package/src/services/clinic/README.md +204 -204
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +287 -287
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +352 -352
- package/src/services/clinic/__tests__/clinic.service.test.ts +354 -354
- package/src/services/clinic/billing-transactions.service.ts +217 -217
- package/src/services/clinic/clinic-admin.service.ts +202 -202
- package/src/services/clinic/clinic-group.service.ts +310 -310
- package/src/services/clinic/clinic.service.ts +708 -708
- package/src/services/clinic/index.ts +5 -5
- package/src/services/clinic/practitioner-invite.service.ts +519 -519
- package/src/services/clinic/utils/admin.utils.ts +551 -551
- package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
- package/src/services/clinic/utils/clinic.utils.ts +949 -949
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +446 -446
- package/src/services/clinic/utils/index.ts +11 -11
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +84 -84
- package/src/services/clinic/utils/tag.utils.ts +124 -124
- package/src/services/documentation-templates/documentation-template.service.ts +537 -537
- package/src/services/documentation-templates/filled-document.service.ts +587 -587
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +13 -13
- package/src/services/media/index.ts +1 -1
- package/src/services/media/media.service.ts +418 -418
- package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
- package/src/services/notifications/index.ts +1 -1
- package/src/services/notifications/notification.service.ts +215 -215
- package/src/services/patient/README.md +48 -48
- package/src/services/patient/To-Do.md +43 -43
- package/src/services/patient/__tests__/patient.service.test.ts +294 -294
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +883 -883
- package/src/services/patient/patientRequirements.service.ts +285 -285
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/clinic.utils.ts +80 -80
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/index.ts +9 -9
- package/src/services/patient/utils/location.utils.ts +126 -126
- package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
- package/src/services/patient/utils/medical.utils.ts +458 -458
- package/src/services/patient/utils/practitioner.utils.ts +260 -260
- package/src/services/patient/utils/profile.utils.ts +510 -510
- package/src/services/patient/utils/sensitive.utils.ts +260 -260
- package/src/services/patient/utils/token.utils.ts +211 -211
- package/src/services/practitioner/README.md +145 -145
- package/src/services/practitioner/index.ts +1 -1
- package/src/services/practitioner/practitioner.service.ts +1742 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +1682 -1682
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +683 -636
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +489 -489
- package/src/services/user/user.v2.service.ts +466 -466
- package/src/types/appointment/index.ts +453 -453
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +489 -489
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +44 -44
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +265 -265
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/index.ts +273 -273
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +206 -206
- package/src/types/procedure/index.ts +181 -181
- package/src/types/profile/index.ts +39 -39
- package/src/types/reviews/index.ts +132 -130
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +38 -38
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/appointment.schema.ts +574 -574
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +493 -493
- package/src/validations/common.schema.ts +25 -25
- package/src/validations/documentation-templates/index.ts +1 -1
- package/src/validations/documentation-templates/template.schema.ts +220 -220
- package/src/validations/documentation-templates.schema.ts +10 -10
- package/src/validations/index.ts +20 -20
- package/src/validations/media.schema.ts +10 -10
- package/src/validations/notification.schema.ts +90 -90
- package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
- package/src/validations/patient/medical-info.schema.ts +125 -125
- package/src/validations/patient/patient-requirements.schema.ts +84 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +216 -216
- package/src/validations/practitioner.schema.ts +222 -222
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +124 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/reviews.schema.ts +195 -189
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
|
@@ -1,308 +1,308 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types for the Medical Documentation Templating System
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Kolekcija u Firestore bazi gde se čuvaju dokumentacijske šablone
|
|
7
|
-
*/
|
|
8
|
-
export const DOCUMENTATION_TEMPLATES_COLLECTION = "documentation-templates";
|
|
9
|
-
export const FILLED_DOCUMENTS_COLLECTION = "filled-documents";
|
|
10
|
-
export const USER_FORMS_SUBCOLLECTION = "user-forms";
|
|
11
|
-
export const DOCTOR_FORMS_SUBCOLLECTION = "doctor-forms";
|
|
12
|
-
/**
|
|
13
|
-
* Enum for element types in documentation templates
|
|
14
|
-
*/
|
|
15
|
-
export enum DocumentElementType {
|
|
16
|
-
// Static Elements
|
|
17
|
-
HEADING = "heading",
|
|
18
|
-
PARAGRAPH = "paragraph",
|
|
19
|
-
LIST = "list",
|
|
20
|
-
|
|
21
|
-
// Dynamic Elements
|
|
22
|
-
DYNAMIC_TEXT = "dynamic_text",
|
|
23
|
-
|
|
24
|
-
// Interactive Form Elements
|
|
25
|
-
BINARY_CHOICE = "binary_choice",
|
|
26
|
-
MULTIPLE_CHOICE = "multiple_choice",
|
|
27
|
-
SINGLE_CHOICE = "single_choice",
|
|
28
|
-
RATING_SCALE = "rating_scale",
|
|
29
|
-
TEXT_INPUT = "text_input",
|
|
30
|
-
DATE_PICKER = "date_picker",
|
|
31
|
-
SIGNATURE = "signature",
|
|
32
|
-
DITIGAL_SIGNATURE = "digital_signature",
|
|
33
|
-
FILE_UPLOAD = "file_upload",
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Enum for list types
|
|
38
|
-
*/
|
|
39
|
-
export enum ListType {
|
|
40
|
-
ORDERED = "ordered",
|
|
41
|
-
UNORDERED = "unordered",
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Enum for heading levels
|
|
46
|
-
*/
|
|
47
|
-
export enum HeadingLevel {
|
|
48
|
-
H1 = "h1",
|
|
49
|
-
H2 = "h2",
|
|
50
|
-
H3 = "h3",
|
|
51
|
-
H4 = "h4",
|
|
52
|
-
H5 = "h5",
|
|
53
|
-
H6 = "h6",
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Enum for dynamic variable placeholders
|
|
58
|
-
*/
|
|
59
|
-
export enum DynamicVariable {
|
|
60
|
-
PATIENT_NAME = "$[PATIENT_NAME]",
|
|
61
|
-
DOCTOR_NAME = "$[DOCTOR_NAME]",
|
|
62
|
-
CLINIC_NAME = "$[CLINIC_NAME]",
|
|
63
|
-
PATIENT_BIRTHDAY = "$[PATIENT_BIRTHDAY]",
|
|
64
|
-
APPOINTMENT_DATE = "$[APPOINTMENT_DATE]",
|
|
65
|
-
CURRENT_DATE = "$[CURRENT_DATE]",
|
|
66
|
-
PROCEDURE_NAME = "$[PROCEDURE_NAME]",
|
|
67
|
-
PROCEDURE_DESCRIPTION = "$[PROCEDURE_DESCRIPTION]",
|
|
68
|
-
PROCEDURE_COST = "$[PROCEDURE_COST]",
|
|
69
|
-
PROCEDURE_DURATION = "$[PROCEDURE_DURATION]",
|
|
70
|
-
PROCEDURE_RISK = "$[PROCEDURE_RISK]",
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Base interface for all document elements
|
|
75
|
-
*/
|
|
76
|
-
export interface BaseDocumentElement {
|
|
77
|
-
id: string;
|
|
78
|
-
type: DocumentElementType;
|
|
79
|
-
required?: boolean;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Interface for heading element
|
|
84
|
-
*/
|
|
85
|
-
export interface HeadingElement extends BaseDocumentElement {
|
|
86
|
-
type: DocumentElementType.HEADING;
|
|
87
|
-
text: string;
|
|
88
|
-
level: HeadingLevel;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Interface for paragraph element
|
|
93
|
-
*/
|
|
94
|
-
export interface ParagraphElement extends BaseDocumentElement {
|
|
95
|
-
type: DocumentElementType.PARAGRAPH;
|
|
96
|
-
text: string;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Interface for list element
|
|
101
|
-
*/
|
|
102
|
-
export interface ListElement extends BaseDocumentElement {
|
|
103
|
-
type: DocumentElementType.LIST;
|
|
104
|
-
items: string[];
|
|
105
|
-
listType: ListType;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Interface for dynamic text element
|
|
110
|
-
*/
|
|
111
|
-
export interface DynamicTextElement extends BaseDocumentElement {
|
|
112
|
-
type: DocumentElementType.DYNAMIC_TEXT;
|
|
113
|
-
text: string; // Text with placeholders like "I, [PATIENT_NAME], consent to..."
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Interface for binary choice element (Yes/No)
|
|
118
|
-
*/
|
|
119
|
-
export interface BinaryChoiceElement extends BaseDocumentElement {
|
|
120
|
-
type: DocumentElementType.BINARY_CHOICE;
|
|
121
|
-
question: string;
|
|
122
|
-
defaultValue?: boolean;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Interface for multiple choice element
|
|
127
|
-
*/
|
|
128
|
-
export interface MultipleChoiceElement extends BaseDocumentElement {
|
|
129
|
-
type: DocumentElementType.MULTIPLE_CHOICE;
|
|
130
|
-
question: string;
|
|
131
|
-
options: string[];
|
|
132
|
-
defaultValues?: string[];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Interface for single choice element
|
|
137
|
-
*/
|
|
138
|
-
export interface SingleChoiceElement extends BaseDocumentElement {
|
|
139
|
-
type: DocumentElementType.SINGLE_CHOICE;
|
|
140
|
-
question: string;
|
|
141
|
-
options: string[];
|
|
142
|
-
defaultValue?: string;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Interface for rating scale element
|
|
147
|
-
*/
|
|
148
|
-
export interface RatingScaleElement extends BaseDocumentElement {
|
|
149
|
-
type: DocumentElementType.RATING_SCALE;
|
|
150
|
-
question: string;
|
|
151
|
-
min: number;
|
|
152
|
-
max: number;
|
|
153
|
-
labels?: { [key: number]: string }; // Optional labels for scale points
|
|
154
|
-
defaultValue?: number;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Interface for text input element
|
|
159
|
-
*/
|
|
160
|
-
export interface TextInputElement extends BaseDocumentElement {
|
|
161
|
-
type: DocumentElementType.TEXT_INPUT;
|
|
162
|
-
label: string;
|
|
163
|
-
placeholder?: string;
|
|
164
|
-
multiline?: boolean;
|
|
165
|
-
defaultValue?: string;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Interface for date picker element
|
|
170
|
-
*/
|
|
171
|
-
export interface DatePickerElement extends BaseDocumentElement {
|
|
172
|
-
type: DocumentElementType.DATE_PICKER;
|
|
173
|
-
label: string;
|
|
174
|
-
defaultValue?: string; // ISO date string
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Interface for signature element
|
|
179
|
-
*/
|
|
180
|
-
export interface SignatureElement extends BaseDocumentElement {
|
|
181
|
-
type: DocumentElementType.SIGNATURE;
|
|
182
|
-
label: string;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Interface for digital signature element
|
|
187
|
-
*/
|
|
188
|
-
export interface DigitalSignatureElement extends BaseDocumentElement {
|
|
189
|
-
type: DocumentElementType.DITIGAL_SIGNATURE;
|
|
190
|
-
label: string;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Interface for file upload element
|
|
195
|
-
*/
|
|
196
|
-
export interface FileUploadElement extends BaseDocumentElement {
|
|
197
|
-
type: DocumentElementType.FILE_UPLOAD;
|
|
198
|
-
label: string;
|
|
199
|
-
allowedFileTypes?: string[]; // e.g., ['image/jpeg', 'application/pdf']
|
|
200
|
-
maxFileSizeMB?: number;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Union type for all document elements
|
|
205
|
-
*/
|
|
206
|
-
export type DocumentElement =
|
|
207
|
-
| HeadingElement
|
|
208
|
-
| ParagraphElement
|
|
209
|
-
| ListElement
|
|
210
|
-
| DynamicTextElement
|
|
211
|
-
| BinaryChoiceElement
|
|
212
|
-
| MultipleChoiceElement
|
|
213
|
-
| SingleChoiceElement
|
|
214
|
-
| RatingScaleElement
|
|
215
|
-
| TextInputElement
|
|
216
|
-
| DatePickerElement
|
|
217
|
-
| SignatureElement
|
|
218
|
-
| FileUploadElement;
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Interface for document template
|
|
222
|
-
*/
|
|
223
|
-
export interface DocumentTemplate {
|
|
224
|
-
id: string;
|
|
225
|
-
title: string;
|
|
226
|
-
description?: string;
|
|
227
|
-
createdAt: number; // Timestamp
|
|
228
|
-
updatedAt: number; // Timestamp
|
|
229
|
-
createdBy: string; // User ID
|
|
230
|
-
elements: DocumentElement[];
|
|
231
|
-
tags?: string[]; // For categorization
|
|
232
|
-
isUserForm?: boolean; // Default is false, and that means it's a doctor form
|
|
233
|
-
isRequired?: boolean; // Default is false, and that means it's an optional form, this is mostly used for user forms
|
|
234
|
-
sortingOrder?: number; // For sorting the forms in the UI, default is 0
|
|
235
|
-
version: number; // For versioning
|
|
236
|
-
isActive: boolean; // Whether the template is active
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Interface for creating a new document template
|
|
241
|
-
*/
|
|
242
|
-
export interface CreateDocumentTemplateData {
|
|
243
|
-
title: string;
|
|
244
|
-
description?: string;
|
|
245
|
-
elements: Omit<DocumentElement, "id">[];
|
|
246
|
-
tags?: string[];
|
|
247
|
-
isUserForm?: boolean; // Default is false, and that means it's a doctor form
|
|
248
|
-
isRequired?: boolean; // Default is false, and that means it's an optional form, this is mostly used for user forms
|
|
249
|
-
sortingOrder?: number; // For sorting the forms in the UI, default is 0
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Interface for updating an existing document template
|
|
254
|
-
*/
|
|
255
|
-
export interface UpdateDocumentTemplateData {
|
|
256
|
-
title?: string;
|
|
257
|
-
description?: string;
|
|
258
|
-
elements?: Omit<DocumentElement, "id">[];
|
|
259
|
-
tags?: string[];
|
|
260
|
-
isActive?: boolean;
|
|
261
|
-
isUserForm?: boolean; // Default is false, and that means it's a doctor form
|
|
262
|
-
isRequired?: boolean; // Default is false, and that means it's an optional form, this is mostly used for user forms
|
|
263
|
-
sortingOrder?: number; // For sorting the forms in the UI, default is 0
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Interface for a filled document (completed form)
|
|
268
|
-
*/
|
|
269
|
-
export interface FilledDocument {
|
|
270
|
-
id: string;
|
|
271
|
-
templateId: string;
|
|
272
|
-
templateVersion: number;
|
|
273
|
-
isUserForm: boolean;
|
|
274
|
-
isRequired: boolean;
|
|
275
|
-
procedureId: string;
|
|
276
|
-
appointmentId: string;
|
|
277
|
-
patientId: string;
|
|
278
|
-
practitionerId: string;
|
|
279
|
-
clinicId: string;
|
|
280
|
-
createdAt: number;
|
|
281
|
-
updatedAt: number;
|
|
282
|
-
values: { [elementId: string]: any | FilledDocumentFileValue }; // Values for each element
|
|
283
|
-
status: FilledDocumentStatus;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Enum for filled document status
|
|
288
|
-
*/
|
|
289
|
-
export enum FilledDocumentStatus {
|
|
290
|
-
DRAFT = "draft",
|
|
291
|
-
SKIPPED = "skipped",
|
|
292
|
-
PENDING = "pending",
|
|
293
|
-
COMPLETED = "completed", // When doctor or patient completes the form
|
|
294
|
-
SIGNED = "signed", // Only used for user forms
|
|
295
|
-
REJECTED = "rejected", // Only used for user forms
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Interface for file upload results to be stored in filled document values
|
|
300
|
-
*/
|
|
301
|
-
export interface FilledDocumentFileValue {
|
|
302
|
-
mediaId: string;
|
|
303
|
-
url: string;
|
|
304
|
-
name: string;
|
|
305
|
-
contentType: string;
|
|
306
|
-
size: number;
|
|
307
|
-
uploadedAt: number;
|
|
308
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Types for the Medical Documentation Templating System
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Kolekcija u Firestore bazi gde se čuvaju dokumentacijske šablone
|
|
7
|
+
*/
|
|
8
|
+
export const DOCUMENTATION_TEMPLATES_COLLECTION = "documentation-templates";
|
|
9
|
+
export const FILLED_DOCUMENTS_COLLECTION = "filled-documents";
|
|
10
|
+
export const USER_FORMS_SUBCOLLECTION = "user-forms";
|
|
11
|
+
export const DOCTOR_FORMS_SUBCOLLECTION = "doctor-forms";
|
|
12
|
+
/**
|
|
13
|
+
* Enum for element types in documentation templates
|
|
14
|
+
*/
|
|
15
|
+
export enum DocumentElementType {
|
|
16
|
+
// Static Elements
|
|
17
|
+
HEADING = "heading",
|
|
18
|
+
PARAGRAPH = "paragraph",
|
|
19
|
+
LIST = "list",
|
|
20
|
+
|
|
21
|
+
// Dynamic Elements
|
|
22
|
+
DYNAMIC_TEXT = "dynamic_text",
|
|
23
|
+
|
|
24
|
+
// Interactive Form Elements
|
|
25
|
+
BINARY_CHOICE = "binary_choice",
|
|
26
|
+
MULTIPLE_CHOICE = "multiple_choice",
|
|
27
|
+
SINGLE_CHOICE = "single_choice",
|
|
28
|
+
RATING_SCALE = "rating_scale",
|
|
29
|
+
TEXT_INPUT = "text_input",
|
|
30
|
+
DATE_PICKER = "date_picker",
|
|
31
|
+
SIGNATURE = "signature",
|
|
32
|
+
DITIGAL_SIGNATURE = "digital_signature",
|
|
33
|
+
FILE_UPLOAD = "file_upload",
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Enum for list types
|
|
38
|
+
*/
|
|
39
|
+
export enum ListType {
|
|
40
|
+
ORDERED = "ordered",
|
|
41
|
+
UNORDERED = "unordered",
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Enum for heading levels
|
|
46
|
+
*/
|
|
47
|
+
export enum HeadingLevel {
|
|
48
|
+
H1 = "h1",
|
|
49
|
+
H2 = "h2",
|
|
50
|
+
H3 = "h3",
|
|
51
|
+
H4 = "h4",
|
|
52
|
+
H5 = "h5",
|
|
53
|
+
H6 = "h6",
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Enum for dynamic variable placeholders
|
|
58
|
+
*/
|
|
59
|
+
export enum DynamicVariable {
|
|
60
|
+
PATIENT_NAME = "$[PATIENT_NAME]",
|
|
61
|
+
DOCTOR_NAME = "$[DOCTOR_NAME]",
|
|
62
|
+
CLINIC_NAME = "$[CLINIC_NAME]",
|
|
63
|
+
PATIENT_BIRTHDAY = "$[PATIENT_BIRTHDAY]",
|
|
64
|
+
APPOINTMENT_DATE = "$[APPOINTMENT_DATE]",
|
|
65
|
+
CURRENT_DATE = "$[CURRENT_DATE]",
|
|
66
|
+
PROCEDURE_NAME = "$[PROCEDURE_NAME]",
|
|
67
|
+
PROCEDURE_DESCRIPTION = "$[PROCEDURE_DESCRIPTION]",
|
|
68
|
+
PROCEDURE_COST = "$[PROCEDURE_COST]",
|
|
69
|
+
PROCEDURE_DURATION = "$[PROCEDURE_DURATION]",
|
|
70
|
+
PROCEDURE_RISK = "$[PROCEDURE_RISK]",
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Base interface for all document elements
|
|
75
|
+
*/
|
|
76
|
+
export interface BaseDocumentElement {
|
|
77
|
+
id: string;
|
|
78
|
+
type: DocumentElementType;
|
|
79
|
+
required?: boolean;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Interface for heading element
|
|
84
|
+
*/
|
|
85
|
+
export interface HeadingElement extends BaseDocumentElement {
|
|
86
|
+
type: DocumentElementType.HEADING;
|
|
87
|
+
text: string;
|
|
88
|
+
level: HeadingLevel;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Interface for paragraph element
|
|
93
|
+
*/
|
|
94
|
+
export interface ParagraphElement extends BaseDocumentElement {
|
|
95
|
+
type: DocumentElementType.PARAGRAPH;
|
|
96
|
+
text: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Interface for list element
|
|
101
|
+
*/
|
|
102
|
+
export interface ListElement extends BaseDocumentElement {
|
|
103
|
+
type: DocumentElementType.LIST;
|
|
104
|
+
items: string[];
|
|
105
|
+
listType: ListType;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Interface for dynamic text element
|
|
110
|
+
*/
|
|
111
|
+
export interface DynamicTextElement extends BaseDocumentElement {
|
|
112
|
+
type: DocumentElementType.DYNAMIC_TEXT;
|
|
113
|
+
text: string; // Text with placeholders like "I, [PATIENT_NAME], consent to..."
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Interface for binary choice element (Yes/No)
|
|
118
|
+
*/
|
|
119
|
+
export interface BinaryChoiceElement extends BaseDocumentElement {
|
|
120
|
+
type: DocumentElementType.BINARY_CHOICE;
|
|
121
|
+
question: string;
|
|
122
|
+
defaultValue?: boolean;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Interface for multiple choice element
|
|
127
|
+
*/
|
|
128
|
+
export interface MultipleChoiceElement extends BaseDocumentElement {
|
|
129
|
+
type: DocumentElementType.MULTIPLE_CHOICE;
|
|
130
|
+
question: string;
|
|
131
|
+
options: string[];
|
|
132
|
+
defaultValues?: string[];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Interface for single choice element
|
|
137
|
+
*/
|
|
138
|
+
export interface SingleChoiceElement extends BaseDocumentElement {
|
|
139
|
+
type: DocumentElementType.SINGLE_CHOICE;
|
|
140
|
+
question: string;
|
|
141
|
+
options: string[];
|
|
142
|
+
defaultValue?: string;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Interface for rating scale element
|
|
147
|
+
*/
|
|
148
|
+
export interface RatingScaleElement extends BaseDocumentElement {
|
|
149
|
+
type: DocumentElementType.RATING_SCALE;
|
|
150
|
+
question: string;
|
|
151
|
+
min: number;
|
|
152
|
+
max: number;
|
|
153
|
+
labels?: { [key: number]: string }; // Optional labels for scale points
|
|
154
|
+
defaultValue?: number;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Interface for text input element
|
|
159
|
+
*/
|
|
160
|
+
export interface TextInputElement extends BaseDocumentElement {
|
|
161
|
+
type: DocumentElementType.TEXT_INPUT;
|
|
162
|
+
label: string;
|
|
163
|
+
placeholder?: string;
|
|
164
|
+
multiline?: boolean;
|
|
165
|
+
defaultValue?: string;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Interface for date picker element
|
|
170
|
+
*/
|
|
171
|
+
export interface DatePickerElement extends BaseDocumentElement {
|
|
172
|
+
type: DocumentElementType.DATE_PICKER;
|
|
173
|
+
label: string;
|
|
174
|
+
defaultValue?: string; // ISO date string
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Interface for signature element
|
|
179
|
+
*/
|
|
180
|
+
export interface SignatureElement extends BaseDocumentElement {
|
|
181
|
+
type: DocumentElementType.SIGNATURE;
|
|
182
|
+
label: string;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Interface for digital signature element
|
|
187
|
+
*/
|
|
188
|
+
export interface DigitalSignatureElement extends BaseDocumentElement {
|
|
189
|
+
type: DocumentElementType.DITIGAL_SIGNATURE;
|
|
190
|
+
label: string;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Interface for file upload element
|
|
195
|
+
*/
|
|
196
|
+
export interface FileUploadElement extends BaseDocumentElement {
|
|
197
|
+
type: DocumentElementType.FILE_UPLOAD;
|
|
198
|
+
label: string;
|
|
199
|
+
allowedFileTypes?: string[]; // e.g., ['image/jpeg', 'application/pdf']
|
|
200
|
+
maxFileSizeMB?: number;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Union type for all document elements
|
|
205
|
+
*/
|
|
206
|
+
export type DocumentElement =
|
|
207
|
+
| HeadingElement
|
|
208
|
+
| ParagraphElement
|
|
209
|
+
| ListElement
|
|
210
|
+
| DynamicTextElement
|
|
211
|
+
| BinaryChoiceElement
|
|
212
|
+
| MultipleChoiceElement
|
|
213
|
+
| SingleChoiceElement
|
|
214
|
+
| RatingScaleElement
|
|
215
|
+
| TextInputElement
|
|
216
|
+
| DatePickerElement
|
|
217
|
+
| SignatureElement
|
|
218
|
+
| FileUploadElement;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Interface for document template
|
|
222
|
+
*/
|
|
223
|
+
export interface DocumentTemplate {
|
|
224
|
+
id: string;
|
|
225
|
+
title: string;
|
|
226
|
+
description?: string;
|
|
227
|
+
createdAt: number; // Timestamp
|
|
228
|
+
updatedAt: number; // Timestamp
|
|
229
|
+
createdBy: string; // User ID
|
|
230
|
+
elements: DocumentElement[];
|
|
231
|
+
tags?: string[]; // For categorization
|
|
232
|
+
isUserForm?: boolean; // Default is false, and that means it's a doctor form
|
|
233
|
+
isRequired?: boolean; // Default is false, and that means it's an optional form, this is mostly used for user forms
|
|
234
|
+
sortingOrder?: number; // For sorting the forms in the UI, default is 0
|
|
235
|
+
version: number; // For versioning
|
|
236
|
+
isActive: boolean; // Whether the template is active
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Interface for creating a new document template
|
|
241
|
+
*/
|
|
242
|
+
export interface CreateDocumentTemplateData {
|
|
243
|
+
title: string;
|
|
244
|
+
description?: string;
|
|
245
|
+
elements: Omit<DocumentElement, "id">[];
|
|
246
|
+
tags?: string[];
|
|
247
|
+
isUserForm?: boolean; // Default is false, and that means it's a doctor form
|
|
248
|
+
isRequired?: boolean; // Default is false, and that means it's an optional form, this is mostly used for user forms
|
|
249
|
+
sortingOrder?: number; // For sorting the forms in the UI, default is 0
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Interface for updating an existing document template
|
|
254
|
+
*/
|
|
255
|
+
export interface UpdateDocumentTemplateData {
|
|
256
|
+
title?: string;
|
|
257
|
+
description?: string;
|
|
258
|
+
elements?: Omit<DocumentElement, "id">[];
|
|
259
|
+
tags?: string[];
|
|
260
|
+
isActive?: boolean;
|
|
261
|
+
isUserForm?: boolean; // Default is false, and that means it's a doctor form
|
|
262
|
+
isRequired?: boolean; // Default is false, and that means it's an optional form, this is mostly used for user forms
|
|
263
|
+
sortingOrder?: number; // For sorting the forms in the UI, default is 0
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Interface for a filled document (completed form)
|
|
268
|
+
*/
|
|
269
|
+
export interface FilledDocument {
|
|
270
|
+
id: string;
|
|
271
|
+
templateId: string;
|
|
272
|
+
templateVersion: number;
|
|
273
|
+
isUserForm: boolean;
|
|
274
|
+
isRequired: boolean;
|
|
275
|
+
procedureId: string;
|
|
276
|
+
appointmentId: string;
|
|
277
|
+
patientId: string;
|
|
278
|
+
practitionerId: string;
|
|
279
|
+
clinicId: string;
|
|
280
|
+
createdAt: number;
|
|
281
|
+
updatedAt: number;
|
|
282
|
+
values: { [elementId: string]: any | FilledDocumentFileValue }; // Values for each element
|
|
283
|
+
status: FilledDocumentStatus;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Enum for filled document status
|
|
288
|
+
*/
|
|
289
|
+
export enum FilledDocumentStatus {
|
|
290
|
+
DRAFT = "draft",
|
|
291
|
+
SKIPPED = "skipped",
|
|
292
|
+
PENDING = "pending",
|
|
293
|
+
COMPLETED = "completed", // When doctor or patient completes the form
|
|
294
|
+
SIGNED = "signed", // Only used for user forms
|
|
295
|
+
REJECTED = "rejected", // Only used for user forms
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Interface for file upload results to be stored in filled document values
|
|
300
|
+
*/
|
|
301
|
+
export interface FilledDocumentFileValue {
|
|
302
|
+
mediaId: string;
|
|
303
|
+
url: string;
|
|
304
|
+
name: string;
|
|
305
|
+
contentType: string;
|
|
306
|
+
size: number;
|
|
307
|
+
uploadedAt: number;
|
|
308
|
+
}
|