@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,25 +1,25 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { Timestamp } from "firebase/firestore";
|
|
3
|
-
|
|
4
|
-
// Create a custom schema for Timestamp that properly handles Timestamp instances, raw objects, and Date objects
|
|
5
|
-
export const timestampSchema = z
|
|
6
|
-
.union([
|
|
7
|
-
z.object({
|
|
8
|
-
seconds: z.number(),
|
|
9
|
-
nanoseconds: z.number(),
|
|
10
|
-
}),
|
|
11
|
-
z.instanceof(Timestamp),
|
|
12
|
-
z.instanceof(Date), // Add support for Date objects that Firestore returns on client
|
|
13
|
-
])
|
|
14
|
-
.transform((data) => {
|
|
15
|
-
if (data instanceof Timestamp) {
|
|
16
|
-
return data;
|
|
17
|
-
}
|
|
18
|
-
if (data instanceof Date) {
|
|
19
|
-
// Convert Date back to Timestamp for consistency
|
|
20
|
-
return Timestamp.fromDate(data);
|
|
21
|
-
}
|
|
22
|
-
return new Timestamp(data.seconds, data.nanoseconds);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// export const timestampSchema = z.instanceof(Timestamp);
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Timestamp } from "firebase/firestore";
|
|
3
|
+
|
|
4
|
+
// Create a custom schema for Timestamp that properly handles Timestamp instances, raw objects, and Date objects
|
|
5
|
+
export const timestampSchema = z
|
|
6
|
+
.union([
|
|
7
|
+
z.object({
|
|
8
|
+
seconds: z.number(),
|
|
9
|
+
nanoseconds: z.number(),
|
|
10
|
+
}),
|
|
11
|
+
z.instanceof(Timestamp),
|
|
12
|
+
z.instanceof(Date), // Add support for Date objects that Firestore returns on client
|
|
13
|
+
])
|
|
14
|
+
.transform((data) => {
|
|
15
|
+
if (data instanceof Timestamp) {
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
if (data instanceof Date) {
|
|
19
|
+
// Convert Date back to Timestamp for consistency
|
|
20
|
+
return Timestamp.fromDate(data);
|
|
21
|
+
}
|
|
22
|
+
return new Timestamp(data.seconds, data.nanoseconds);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// export const timestampSchema = z.instanceof(Timestamp);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./template.schema";
|
|
1
|
+
export * from "./template.schema";
|
|
@@ -1,220 +1,220 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
DocumentElementType,
|
|
4
|
-
HeadingLevel,
|
|
5
|
-
ListType,
|
|
6
|
-
FilledDocumentStatus,
|
|
7
|
-
} from "../../types/documentation-templates";
|
|
8
|
-
|
|
9
|
-
// Base element schema
|
|
10
|
-
const baseElementSchema = z.object({
|
|
11
|
-
id: z.string().optional(), // Make id optional so we can omit it later
|
|
12
|
-
type: z.nativeEnum(DocumentElementType),
|
|
13
|
-
required: z.boolean().optional(),
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Heading element schema
|
|
17
|
-
const headingElementSchema = baseElementSchema.extend({
|
|
18
|
-
type: z.literal(DocumentElementType.HEADING),
|
|
19
|
-
text: z.string().min(1).max(200),
|
|
20
|
-
level: z.nativeEnum(HeadingLevel),
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
// Paragraph element schema
|
|
24
|
-
const paragraphElementSchema = baseElementSchema.extend({
|
|
25
|
-
type: z.literal(DocumentElementType.PARAGRAPH),
|
|
26
|
-
text: z.string().min(1).max(5000),
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
// List element schema
|
|
30
|
-
const listElementSchema = baseElementSchema.extend({
|
|
31
|
-
type: z.literal(DocumentElementType.LIST),
|
|
32
|
-
items: z.array(z.string().min(1).max(500)).min(1).max(100),
|
|
33
|
-
listType: z.nativeEnum(ListType),
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
// Dynamic text element schema
|
|
37
|
-
const dynamicTextElementSchema = baseElementSchema.extend({
|
|
38
|
-
type: z.literal(DocumentElementType.DYNAMIC_TEXT),
|
|
39
|
-
text: z.string().min(1).max(5000),
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
// Binary choice element schema
|
|
43
|
-
const binaryChoiceElementSchema = baseElementSchema.extend({
|
|
44
|
-
type: z.literal(DocumentElementType.BINARY_CHOICE),
|
|
45
|
-
question: z.string().min(1).max(500),
|
|
46
|
-
defaultValue: z.boolean().optional(),
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// Multiple choice element schema
|
|
50
|
-
const multipleChoiceElementSchema = baseElementSchema.extend({
|
|
51
|
-
type: z.literal(DocumentElementType.MULTIPLE_CHOICE),
|
|
52
|
-
question: z.string().min(1).max(500),
|
|
53
|
-
options: z.array(z.string().min(1).max(200)).min(2).max(50),
|
|
54
|
-
defaultValues: z.array(z.string()).optional(),
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
// Single choice element schema
|
|
58
|
-
const singleChoiceElementSchema = baseElementSchema.extend({
|
|
59
|
-
type: z.literal(DocumentElementType.SINGLE_CHOICE),
|
|
60
|
-
question: z.string().min(1).max(500),
|
|
61
|
-
options: z.array(z.string().min(1).max(200)).min(2).max(50),
|
|
62
|
-
defaultValue: z.string().optional(),
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Rating scale element schema
|
|
66
|
-
const ratingScaleElementSchema = baseElementSchema.extend({
|
|
67
|
-
type: z.literal(DocumentElementType.RATING_SCALE),
|
|
68
|
-
question: z.string().min(1).max(500),
|
|
69
|
-
min: z.number().int().min(0).max(10),
|
|
70
|
-
max: z.number().int().min(1).max(10),
|
|
71
|
-
labels: z.record(z.string()).optional(),
|
|
72
|
-
defaultValue: z.number().int().optional(),
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// Text input element schema
|
|
76
|
-
const textInputElementSchema = baseElementSchema.extend({
|
|
77
|
-
type: z.literal(DocumentElementType.TEXT_INPUT),
|
|
78
|
-
label: z.string().min(1).max(200),
|
|
79
|
-
placeholder: z.string().max(200).optional(),
|
|
80
|
-
multiline: z.boolean().optional(),
|
|
81
|
-
defaultValue: z.string().optional(),
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
// Date picker element schema
|
|
85
|
-
const datePickerElementSchema = baseElementSchema.extend({
|
|
86
|
-
type: z.literal(DocumentElementType.DATE_PICKER),
|
|
87
|
-
label: z.string().min(1).max(200),
|
|
88
|
-
defaultValue: z.string().optional(), // ISO date string
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// Signature element schema
|
|
92
|
-
const signatureElementSchema = baseElementSchema.extend({
|
|
93
|
-
type: z.literal(DocumentElementType.SIGNATURE),
|
|
94
|
-
label: z.string().min(1).max(200),
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// NEW: Digital signature element schema
|
|
98
|
-
const digitalSignatureElementSchema = baseElementSchema.extend({
|
|
99
|
-
type: z.literal(DocumentElementType.DITIGAL_SIGNATURE), // Matching your type enum
|
|
100
|
-
label: z.string().min(1).max(200),
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// File upload element schema
|
|
104
|
-
const fileUploadElementSchema = baseElementSchema.extend({
|
|
105
|
-
type: z.literal(DocumentElementType.FILE_UPLOAD),
|
|
106
|
-
label: z.string().min(1).max(200),
|
|
107
|
-
allowedFileTypes: z.array(z.string()).optional(),
|
|
108
|
-
maxFileSizeMB: z.number().positive().optional(),
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
// Union of all element schemas
|
|
112
|
-
export const documentElementSchema = z.discriminatedUnion("type", [
|
|
113
|
-
headingElementSchema,
|
|
114
|
-
paragraphElementSchema,
|
|
115
|
-
listElementSchema,
|
|
116
|
-
dynamicTextElementSchema,
|
|
117
|
-
binaryChoiceElementSchema,
|
|
118
|
-
multipleChoiceElementSchema,
|
|
119
|
-
singleChoiceElementSchema,
|
|
120
|
-
ratingScaleElementSchema,
|
|
121
|
-
textInputElementSchema,
|
|
122
|
-
datePickerElementSchema,
|
|
123
|
-
signatureElementSchema,
|
|
124
|
-
digitalSignatureElementSchema,
|
|
125
|
-
fileUploadElementSchema,
|
|
126
|
-
]);
|
|
127
|
-
|
|
128
|
-
// Schema for element without ID (for creation)
|
|
129
|
-
export const documentElementWithoutIdSchema = z.discriminatedUnion("type", [
|
|
130
|
-
headingElementSchema.omit({ id: true }),
|
|
131
|
-
paragraphElementSchema.omit({ id: true }),
|
|
132
|
-
listElementSchema.omit({ id: true }),
|
|
133
|
-
dynamicTextElementSchema.omit({ id: true }),
|
|
134
|
-
binaryChoiceElementSchema.omit({ id: true }),
|
|
135
|
-
multipleChoiceElementSchema.omit({ id: true }),
|
|
136
|
-
singleChoiceElementSchema.omit({ id: true }),
|
|
137
|
-
ratingScaleElementSchema.omit({ id: true }),
|
|
138
|
-
textInputElementSchema.omit({ id: true }),
|
|
139
|
-
datePickerElementSchema.omit({ id: true }),
|
|
140
|
-
signatureElementSchema.omit({ id: true }),
|
|
141
|
-
digitalSignatureElementSchema.omit({ id: true }),
|
|
142
|
-
fileUploadElementSchema.omit({ id: true }),
|
|
143
|
-
]);
|
|
144
|
-
|
|
145
|
-
// Schema for creating a document template
|
|
146
|
-
export const createDocumentTemplateSchema = z.object({
|
|
147
|
-
title: z.string().min(1).max(200),
|
|
148
|
-
description: z.string().max(1000).optional(),
|
|
149
|
-
elements: z.array(documentElementWithoutIdSchema).min(1).max(100),
|
|
150
|
-
tags: z.array(z.string().min(1).max(50)).max(20).optional(),
|
|
151
|
-
isUserForm: z.boolean().optional().default(false),
|
|
152
|
-
isRequired: z.boolean().optional().default(false),
|
|
153
|
-
sortingOrder: z.number().int().optional().default(0),
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
// Schema for updating a document template
|
|
157
|
-
export const updateDocumentTemplateSchema = z.object({
|
|
158
|
-
title: z.string().min(1).max(200).optional(),
|
|
159
|
-
description: z.string().max(1000).optional(),
|
|
160
|
-
elements: z.array(documentElementWithoutIdSchema).min(1).max(100).optional(),
|
|
161
|
-
tags: z.array(z.string().min(1).max(50)).max(20).optional(),
|
|
162
|
-
isActive: z.boolean().optional(),
|
|
163
|
-
isUserForm: z.boolean().optional(),
|
|
164
|
-
isRequired: z.boolean().optional(),
|
|
165
|
-
sortingOrder: z.number().int().optional(),
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
// Schema for a document template
|
|
169
|
-
export const documentTemplateSchema = z.object({
|
|
170
|
-
id: z.string(),
|
|
171
|
-
title: z.string().min(1).max(200),
|
|
172
|
-
description: z.string().max(1000).optional(),
|
|
173
|
-
createdAt: z.number(),
|
|
174
|
-
updatedAt: z.number(),
|
|
175
|
-
createdBy: z.string(),
|
|
176
|
-
elements: z.array(documentElementSchema),
|
|
177
|
-
tags: z.array(z.string().min(1).max(50)).max(20).optional(),
|
|
178
|
-
version: z.number().int().positive(),
|
|
179
|
-
isActive: z.boolean(),
|
|
180
|
-
isUserForm: z.boolean().optional().default(false),
|
|
181
|
-
isRequired: z.boolean().optional().default(false),
|
|
182
|
-
sortingOrder: z.number().int().optional().default(0),
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
// Filled Document Schemas
|
|
186
|
-
export const filledDocumentStatusSchema = z.nativeEnum(FilledDocumentStatus);
|
|
187
|
-
|
|
188
|
-
export const filledDocumentSchema = z.object({
|
|
189
|
-
id: z.string(),
|
|
190
|
-
templateId: z.string(),
|
|
191
|
-
templateVersion: z.number(),
|
|
192
|
-
isUserForm: z.boolean(),
|
|
193
|
-
procedureId: z.string(),
|
|
194
|
-
appointmentId: z.string(),
|
|
195
|
-
patientId: z.string(),
|
|
196
|
-
practitionerId: z.string(),
|
|
197
|
-
clinicId: z.string(),
|
|
198
|
-
createdAt: z.number(),
|
|
199
|
-
updatedAt: z.number(),
|
|
200
|
-
values: z.record(z.string(), z.any()),
|
|
201
|
-
status: filledDocumentStatusSchema,
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
export const createFilledDocumentDataSchema = z.object({
|
|
205
|
-
templateId: z.string(),
|
|
206
|
-
procedureId: z.string(),
|
|
207
|
-
appointmentId: z.string(),
|
|
208
|
-
patientId: z.string(),
|
|
209
|
-
practitionerId: z.string(),
|
|
210
|
-
clinicId: z.string(),
|
|
211
|
-
values: z.record(z.string(), z.any()).optional().default({}),
|
|
212
|
-
status: filledDocumentStatusSchema
|
|
213
|
-
.optional()
|
|
214
|
-
.default(FilledDocumentStatus.DRAFT),
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
export const updateFilledDocumentDataSchema = z.object({
|
|
218
|
-
values: z.record(z.string(), z.any()).optional(),
|
|
219
|
-
status: filledDocumentStatusSchema.optional(),
|
|
220
|
-
});
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import {
|
|
3
|
+
DocumentElementType,
|
|
4
|
+
HeadingLevel,
|
|
5
|
+
ListType,
|
|
6
|
+
FilledDocumentStatus,
|
|
7
|
+
} from "../../types/documentation-templates";
|
|
8
|
+
|
|
9
|
+
// Base element schema
|
|
10
|
+
const baseElementSchema = z.object({
|
|
11
|
+
id: z.string().optional(), // Make id optional so we can omit it later
|
|
12
|
+
type: z.nativeEnum(DocumentElementType),
|
|
13
|
+
required: z.boolean().optional(),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// Heading element schema
|
|
17
|
+
const headingElementSchema = baseElementSchema.extend({
|
|
18
|
+
type: z.literal(DocumentElementType.HEADING),
|
|
19
|
+
text: z.string().min(1).max(200),
|
|
20
|
+
level: z.nativeEnum(HeadingLevel),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Paragraph element schema
|
|
24
|
+
const paragraphElementSchema = baseElementSchema.extend({
|
|
25
|
+
type: z.literal(DocumentElementType.PARAGRAPH),
|
|
26
|
+
text: z.string().min(1).max(5000),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// List element schema
|
|
30
|
+
const listElementSchema = baseElementSchema.extend({
|
|
31
|
+
type: z.literal(DocumentElementType.LIST),
|
|
32
|
+
items: z.array(z.string().min(1).max(500)).min(1).max(100),
|
|
33
|
+
listType: z.nativeEnum(ListType),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Dynamic text element schema
|
|
37
|
+
const dynamicTextElementSchema = baseElementSchema.extend({
|
|
38
|
+
type: z.literal(DocumentElementType.DYNAMIC_TEXT),
|
|
39
|
+
text: z.string().min(1).max(5000),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Binary choice element schema
|
|
43
|
+
const binaryChoiceElementSchema = baseElementSchema.extend({
|
|
44
|
+
type: z.literal(DocumentElementType.BINARY_CHOICE),
|
|
45
|
+
question: z.string().min(1).max(500),
|
|
46
|
+
defaultValue: z.boolean().optional(),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Multiple choice element schema
|
|
50
|
+
const multipleChoiceElementSchema = baseElementSchema.extend({
|
|
51
|
+
type: z.literal(DocumentElementType.MULTIPLE_CHOICE),
|
|
52
|
+
question: z.string().min(1).max(500),
|
|
53
|
+
options: z.array(z.string().min(1).max(200)).min(2).max(50),
|
|
54
|
+
defaultValues: z.array(z.string()).optional(),
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Single choice element schema
|
|
58
|
+
const singleChoiceElementSchema = baseElementSchema.extend({
|
|
59
|
+
type: z.literal(DocumentElementType.SINGLE_CHOICE),
|
|
60
|
+
question: z.string().min(1).max(500),
|
|
61
|
+
options: z.array(z.string().min(1).max(200)).min(2).max(50),
|
|
62
|
+
defaultValue: z.string().optional(),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Rating scale element schema
|
|
66
|
+
const ratingScaleElementSchema = baseElementSchema.extend({
|
|
67
|
+
type: z.literal(DocumentElementType.RATING_SCALE),
|
|
68
|
+
question: z.string().min(1).max(500),
|
|
69
|
+
min: z.number().int().min(0).max(10),
|
|
70
|
+
max: z.number().int().min(1).max(10),
|
|
71
|
+
labels: z.record(z.string()).optional(),
|
|
72
|
+
defaultValue: z.number().int().optional(),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Text input element schema
|
|
76
|
+
const textInputElementSchema = baseElementSchema.extend({
|
|
77
|
+
type: z.literal(DocumentElementType.TEXT_INPUT),
|
|
78
|
+
label: z.string().min(1).max(200),
|
|
79
|
+
placeholder: z.string().max(200).optional(),
|
|
80
|
+
multiline: z.boolean().optional(),
|
|
81
|
+
defaultValue: z.string().optional(),
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Date picker element schema
|
|
85
|
+
const datePickerElementSchema = baseElementSchema.extend({
|
|
86
|
+
type: z.literal(DocumentElementType.DATE_PICKER),
|
|
87
|
+
label: z.string().min(1).max(200),
|
|
88
|
+
defaultValue: z.string().optional(), // ISO date string
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Signature element schema
|
|
92
|
+
const signatureElementSchema = baseElementSchema.extend({
|
|
93
|
+
type: z.literal(DocumentElementType.SIGNATURE),
|
|
94
|
+
label: z.string().min(1).max(200),
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// NEW: Digital signature element schema
|
|
98
|
+
const digitalSignatureElementSchema = baseElementSchema.extend({
|
|
99
|
+
type: z.literal(DocumentElementType.DITIGAL_SIGNATURE), // Matching your type enum
|
|
100
|
+
label: z.string().min(1).max(200),
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// File upload element schema
|
|
104
|
+
const fileUploadElementSchema = baseElementSchema.extend({
|
|
105
|
+
type: z.literal(DocumentElementType.FILE_UPLOAD),
|
|
106
|
+
label: z.string().min(1).max(200),
|
|
107
|
+
allowedFileTypes: z.array(z.string()).optional(),
|
|
108
|
+
maxFileSizeMB: z.number().positive().optional(),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Union of all element schemas
|
|
112
|
+
export const documentElementSchema = z.discriminatedUnion("type", [
|
|
113
|
+
headingElementSchema,
|
|
114
|
+
paragraphElementSchema,
|
|
115
|
+
listElementSchema,
|
|
116
|
+
dynamicTextElementSchema,
|
|
117
|
+
binaryChoiceElementSchema,
|
|
118
|
+
multipleChoiceElementSchema,
|
|
119
|
+
singleChoiceElementSchema,
|
|
120
|
+
ratingScaleElementSchema,
|
|
121
|
+
textInputElementSchema,
|
|
122
|
+
datePickerElementSchema,
|
|
123
|
+
signatureElementSchema,
|
|
124
|
+
digitalSignatureElementSchema,
|
|
125
|
+
fileUploadElementSchema,
|
|
126
|
+
]);
|
|
127
|
+
|
|
128
|
+
// Schema for element without ID (for creation)
|
|
129
|
+
export const documentElementWithoutIdSchema = z.discriminatedUnion("type", [
|
|
130
|
+
headingElementSchema.omit({ id: true }),
|
|
131
|
+
paragraphElementSchema.omit({ id: true }),
|
|
132
|
+
listElementSchema.omit({ id: true }),
|
|
133
|
+
dynamicTextElementSchema.omit({ id: true }),
|
|
134
|
+
binaryChoiceElementSchema.omit({ id: true }),
|
|
135
|
+
multipleChoiceElementSchema.omit({ id: true }),
|
|
136
|
+
singleChoiceElementSchema.omit({ id: true }),
|
|
137
|
+
ratingScaleElementSchema.omit({ id: true }),
|
|
138
|
+
textInputElementSchema.omit({ id: true }),
|
|
139
|
+
datePickerElementSchema.omit({ id: true }),
|
|
140
|
+
signatureElementSchema.omit({ id: true }),
|
|
141
|
+
digitalSignatureElementSchema.omit({ id: true }),
|
|
142
|
+
fileUploadElementSchema.omit({ id: true }),
|
|
143
|
+
]);
|
|
144
|
+
|
|
145
|
+
// Schema for creating a document template
|
|
146
|
+
export const createDocumentTemplateSchema = z.object({
|
|
147
|
+
title: z.string().min(1).max(200),
|
|
148
|
+
description: z.string().max(1000).optional(),
|
|
149
|
+
elements: z.array(documentElementWithoutIdSchema).min(1).max(100),
|
|
150
|
+
tags: z.array(z.string().min(1).max(50)).max(20).optional(),
|
|
151
|
+
isUserForm: z.boolean().optional().default(false),
|
|
152
|
+
isRequired: z.boolean().optional().default(false),
|
|
153
|
+
sortingOrder: z.number().int().optional().default(0),
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Schema for updating a document template
|
|
157
|
+
export const updateDocumentTemplateSchema = z.object({
|
|
158
|
+
title: z.string().min(1).max(200).optional(),
|
|
159
|
+
description: z.string().max(1000).optional(),
|
|
160
|
+
elements: z.array(documentElementWithoutIdSchema).min(1).max(100).optional(),
|
|
161
|
+
tags: z.array(z.string().min(1).max(50)).max(20).optional(),
|
|
162
|
+
isActive: z.boolean().optional(),
|
|
163
|
+
isUserForm: z.boolean().optional(),
|
|
164
|
+
isRequired: z.boolean().optional(),
|
|
165
|
+
sortingOrder: z.number().int().optional(),
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Schema for a document template
|
|
169
|
+
export const documentTemplateSchema = z.object({
|
|
170
|
+
id: z.string(),
|
|
171
|
+
title: z.string().min(1).max(200),
|
|
172
|
+
description: z.string().max(1000).optional(),
|
|
173
|
+
createdAt: z.number(),
|
|
174
|
+
updatedAt: z.number(),
|
|
175
|
+
createdBy: z.string(),
|
|
176
|
+
elements: z.array(documentElementSchema),
|
|
177
|
+
tags: z.array(z.string().min(1).max(50)).max(20).optional(),
|
|
178
|
+
version: z.number().int().positive(),
|
|
179
|
+
isActive: z.boolean(),
|
|
180
|
+
isUserForm: z.boolean().optional().default(false),
|
|
181
|
+
isRequired: z.boolean().optional().default(false),
|
|
182
|
+
sortingOrder: z.number().int().optional().default(0),
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// Filled Document Schemas
|
|
186
|
+
export const filledDocumentStatusSchema = z.nativeEnum(FilledDocumentStatus);
|
|
187
|
+
|
|
188
|
+
export const filledDocumentSchema = z.object({
|
|
189
|
+
id: z.string(),
|
|
190
|
+
templateId: z.string(),
|
|
191
|
+
templateVersion: z.number(),
|
|
192
|
+
isUserForm: z.boolean(),
|
|
193
|
+
procedureId: z.string(),
|
|
194
|
+
appointmentId: z.string(),
|
|
195
|
+
patientId: z.string(),
|
|
196
|
+
practitionerId: z.string(),
|
|
197
|
+
clinicId: z.string(),
|
|
198
|
+
createdAt: z.number(),
|
|
199
|
+
updatedAt: z.number(),
|
|
200
|
+
values: z.record(z.string(), z.any()),
|
|
201
|
+
status: filledDocumentStatusSchema,
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
export const createFilledDocumentDataSchema = z.object({
|
|
205
|
+
templateId: z.string(),
|
|
206
|
+
procedureId: z.string(),
|
|
207
|
+
appointmentId: z.string(),
|
|
208
|
+
patientId: z.string(),
|
|
209
|
+
practitionerId: z.string(),
|
|
210
|
+
clinicId: z.string(),
|
|
211
|
+
values: z.record(z.string(), z.any()).optional().default({}),
|
|
212
|
+
status: filledDocumentStatusSchema
|
|
213
|
+
.optional()
|
|
214
|
+
.default(FilledDocumentStatus.DRAFT),
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
export const updateFilledDocumentDataSchema = z.object({
|
|
218
|
+
values: z.record(z.string(), z.any()).optional(),
|
|
219
|
+
status: filledDocumentStatusSchema.optional(),
|
|
220
|
+
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file re-exports all schemas related to documentation templates and filled documents
|
|
3
|
-
* from their specific definition files.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// Assuming all relevant schemas, including filledDocumentStatusSchema,
|
|
7
|
-
// documentTemplateSchema, createDocumentTemplateSchema, updateDocumentTemplateSchema,
|
|
8
|
-
// filledDocumentSchema, createFilledDocumentDataSchema, updateFilledDocumentDataSchema etc.,
|
|
9
|
-
// are defined and exported from './documentation-templates/template.schema.ts'
|
|
10
|
-
export * from "./documentation-templates/";
|
|
1
|
+
/**
|
|
2
|
+
* This file re-exports all schemas related to documentation templates and filled documents
|
|
3
|
+
* from their specific definition files.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Assuming all relevant schemas, including filledDocumentStatusSchema,
|
|
7
|
+
// documentTemplateSchema, createDocumentTemplateSchema, updateDocumentTemplateSchema,
|
|
8
|
+
// filledDocumentSchema, createFilledDocumentDataSchema, updateFilledDocumentDataSchema etc.,
|
|
9
|
+
// are defined and exported from './documentation-templates/template.schema.ts'
|
|
10
|
+
export * from "./documentation-templates/";
|
package/src/validations/index.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
// This barrel file consolidates all Zod validation schemas for easy importing.
|
|
2
|
-
|
|
3
|
-
export * from "./appointment.schema";
|
|
4
|
-
export * from "./calendar.schema";
|
|
5
|
-
export * from "./clinic.schema";
|
|
6
|
-
export * from "./common.schema";
|
|
7
|
-
export * from "./documentation-templates.schema";
|
|
8
|
-
export * from "./media.schema";
|
|
9
|
-
export * from "./notification.schema";
|
|
10
|
-
export * from "./patient.schema";
|
|
11
|
-
export * from "./patient/medical-info.schema";
|
|
12
|
-
export * from "./patient/patient-requirements.schema";
|
|
13
|
-
export * from "./patient/medical-info.schema";
|
|
14
|
-
export * from "./patient/token.schema";
|
|
15
|
-
export * from "./practitioner.schema";
|
|
16
|
-
export * from "./procedure.schema";
|
|
17
|
-
export * from "./profile-info.schema";
|
|
18
|
-
export * from "./reviews.schema";
|
|
19
|
-
export * from "./schemas";
|
|
20
|
-
export * from "./shared.schema";
|
|
1
|
+
// This barrel file consolidates all Zod validation schemas for easy importing.
|
|
2
|
+
|
|
3
|
+
export * from "./appointment.schema";
|
|
4
|
+
export * from "./calendar.schema";
|
|
5
|
+
export * from "./clinic.schema";
|
|
6
|
+
export * from "./common.schema";
|
|
7
|
+
export * from "./documentation-templates.schema";
|
|
8
|
+
export * from "./media.schema";
|
|
9
|
+
export * from "./notification.schema";
|
|
10
|
+
export * from "./patient.schema";
|
|
11
|
+
export * from "./patient/medical-info.schema";
|
|
12
|
+
export * from "./patient/patient-requirements.schema";
|
|
13
|
+
export * from "./patient/medical-info.schema";
|
|
14
|
+
export * from "./patient/token.schema";
|
|
15
|
+
export * from "./practitioner.schema";
|
|
16
|
+
export * from "./procedure.schema";
|
|
17
|
+
export * from "./profile-info.schema";
|
|
18
|
+
export * from "./reviews.schema";
|
|
19
|
+
export * from "./schemas";
|
|
20
|
+
export * from "./shared.schema";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Schema for validating both URL strings and File objects
|
|
5
|
-
*/
|
|
6
|
-
export const mediaResourceSchema = z.union([
|
|
7
|
-
z.string().url(),
|
|
8
|
-
z.instanceof(File),
|
|
9
|
-
z.instanceof(Blob),
|
|
10
|
-
]);
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Schema for validating both URL strings and File objects
|
|
5
|
+
*/
|
|
6
|
+
export const mediaResourceSchema = z.union([
|
|
7
|
+
z.string().url(),
|
|
8
|
+
z.instanceof(File),
|
|
9
|
+
z.instanceof(Blob),
|
|
10
|
+
]);
|