@blackcode_sa/metaestetics-api 1.6.0 → 1.6.2

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/index.js CHANGED
@@ -131,7 +131,6 @@ __export(index_exports, {
131
131
  clinicContactInfoSchema: () => clinicContactInfoSchema,
132
132
  clinicGroupSchema: () => clinicGroupSchema,
133
133
  clinicGroupSetupSchema: () => clinicGroupSetupSchema,
134
- clinicInfoSchema: () => clinicInfoSchema,
135
134
  clinicLocationSchema: () => clinicLocationSchema,
136
135
  clinicReviewInfoSchema: () => clinicReviewInfoSchema,
137
136
  clinicReviewSchema: () => clinicReviewSchema,
@@ -159,7 +158,6 @@ __export(index_exports, {
159
158
  createProcedureReviewSchema: () => createProcedureReviewSchema,
160
159
  createReviewSchema: () => createReviewSchema,
161
160
  createUserOptionsSchema: () => createUserOptionsSchema,
162
- doctorInfoSchema: () => doctorInfoSchema,
163
161
  documentElementSchema: () => documentElementSchema,
164
162
  documentElementWithoutIdSchema: () => documentElementWithoutIdSchema,
165
163
  documentTemplateSchema: () => documentTemplateSchema,
@@ -198,7 +196,6 @@ __export(index_exports, {
198
196
  procedureInfoSchema: () => procedureInfoSchema,
199
197
  procedureReviewInfoSchema: () => procedureReviewInfoSchema,
200
198
  procedureReviewSchema: () => procedureReviewSchema,
201
- procedureSummaryInfoSchema: () => procedureSummaryInfoSchema,
202
199
  requesterInfoSchema: () => requesterInfoSchema,
203
200
  reviewSchema: () => reviewSchema,
204
201
  searchAppointmentsSchema: () => searchAppointmentsSchema,
@@ -464,7 +461,7 @@ var UserRole = /* @__PURE__ */ ((UserRole2) => {
464
461
  var USERS_COLLECTION = "users";
465
462
 
466
463
  // src/services/auth.service.ts
467
- var import_zod18 = require("zod");
464
+ var import_zod19 = require("zod");
468
465
 
469
466
  // src/validations/schemas.ts
470
467
  var import_zod3 = require("zod");
@@ -989,7 +986,7 @@ var USER_ERRORS = {
989
986
  };
990
987
 
991
988
  // src/services/user.service.ts
992
- var import_zod14 = require("zod");
989
+ var import_zod15 = require("zod");
993
990
 
994
991
  // src/services/patient/patient.service.ts
995
992
  var import_firestore11 = require("firebase/firestore");
@@ -2643,7 +2640,7 @@ var PatientService = class extends BaseService {
2643
2640
  };
2644
2641
 
2645
2642
  // src/services/clinic/utils/admin.utils.ts
2646
- var import_firestore14 = require("firebase/firestore");
2643
+ var import_firestore13 = require("firebase/firestore");
2647
2644
 
2648
2645
  // src/types/clinic/preferences.types.ts
2649
2646
  var PracticeType = /* @__PURE__ */ ((PracticeType2) => {
@@ -2770,52 +2767,8 @@ var SubscriptionModel = /* @__PURE__ */ ((SubscriptionModel2) => {
2770
2767
 
2771
2768
  // src/validations/clinic.schema.ts
2772
2769
  var import_zod12 = require("zod");
2773
- var import_firestore13 = require("firebase/firestore");
2774
-
2775
- // src/validations/practitioner.schema.ts
2776
- var import_zod11 = require("zod");
2777
2770
  var import_firestore12 = require("firebase/firestore");
2778
2771
 
2779
- // src/backoffice/types/static/certification.types.ts
2780
- var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
2781
- CertificationLevel2["AESTHETICIAN"] = "aesthetician";
2782
- CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
2783
- CertificationLevel2["NURSE"] = "nurse";
2784
- CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
2785
- CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
2786
- CertificationLevel2["DOCTOR"] = "doctor";
2787
- CertificationLevel2["SPECIALIST"] = "specialist";
2788
- CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
2789
- return CertificationLevel2;
2790
- })(CertificationLevel || {});
2791
- var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
2792
- CertificationSpecialty3["LASER"] = "laser";
2793
- CertificationSpecialty3["INJECTABLES"] = "injectables";
2794
- CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
2795
- CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
2796
- CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
2797
- CertificationSpecialty3["SKIN_CARE"] = "skin_care";
2798
- CertificationSpecialty3["WOUND_CARE"] = "wound_care";
2799
- CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
2800
- return CertificationSpecialty3;
2801
- })(CertificationSpecialty || {});
2802
-
2803
- // src/types/practitioner/index.ts
2804
- var PRACTITIONERS_COLLECTION = "practitioners";
2805
- var REGISTER_TOKENS_COLLECTION = "register_tokens";
2806
- var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
2807
- PractitionerStatus2["DRAFT"] = "draft";
2808
- PractitionerStatus2["ACTIVE"] = "active";
2809
- return PractitionerStatus2;
2810
- })(PractitionerStatus || {});
2811
- var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
2812
- PractitionerTokenStatus2["ACTIVE"] = "active";
2813
- PractitionerTokenStatus2["USED"] = "used";
2814
- PractitionerTokenStatus2["EXPIRED"] = "expired";
2815
- PractitionerTokenStatus2["REVOKED"] = "revoked";
2816
- return PractitionerTokenStatus2;
2817
- })(PractitionerTokenStatus || {});
2818
-
2819
2772
  // src/validations/reviews.schema.ts
2820
2773
  var import_zod10 = require("zod");
2821
2774
  var baseReviewSchema = import_zod10.z.object({
@@ -2949,6 +2902,9 @@ var createReviewSchema = import_zod10.z.object({
2949
2902
  }
2950
2903
  );
2951
2904
 
2905
+ // src/validations/shared.schema.ts
2906
+ var import_zod11 = require("zod");
2907
+
2952
2908
  // src/backoffice/types/static/procedure-family.types.ts
2953
2909
  var ProcedureFamily = /* @__PURE__ */ ((ProcedureFamily2) => {
2954
2910
  ProcedureFamily2["AESTHETICS"] = "aesthetics";
@@ -2975,59 +2931,21 @@ var Currency = /* @__PURE__ */ ((Currency2) => {
2975
2931
  return Currency2;
2976
2932
  })(Currency || {});
2977
2933
 
2978
- // src/validations/practitioner.schema.ts
2979
- var practitionerBasicInfoSchema = import_zod11.z.object({
2980
- firstName: import_zod11.z.string().min(2).max(50),
2981
- lastName: import_zod11.z.string().min(2).max(50),
2982
- title: import_zod11.z.string().min(2).max(100),
2934
+ // src/validations/shared.schema.ts
2935
+ var sharedClinicContactInfoSchema = import_zod11.z.object({
2983
2936
  email: import_zod11.z.string().email(),
2984
- phoneNumber: import_zod11.z.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number"),
2985
- dateOfBirth: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
2986
- gender: import_zod11.z.enum(["male", "female", "other"]),
2987
- profileImageUrl: import_zod11.z.string().url().optional(),
2988
- bio: import_zod11.z.string().max(1e3).optional(),
2989
- languages: import_zod11.z.array(import_zod11.z.string()).min(1)
2990
- });
2991
- var practitionerCertificationSchema = import_zod11.z.object({
2992
- level: import_zod11.z.nativeEnum(CertificationLevel),
2993
- specialties: import_zod11.z.array(import_zod11.z.nativeEnum(CertificationSpecialty)),
2994
- licenseNumber: import_zod11.z.string().min(3).max(50),
2995
- issuingAuthority: import_zod11.z.string().min(2).max(100),
2996
- issueDate: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
2997
- expiryDate: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()).optional(),
2998
- verificationStatus: import_zod11.z.enum(["pending", "verified", "rejected"])
2999
- });
3000
- var timeSlotSchema = import_zod11.z.object({
3001
- start: import_zod11.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
3002
- end: import_zod11.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
3003
- }).nullable();
3004
- var practitionerWorkingHoursSchema = import_zod11.z.object({
3005
- practitionerId: import_zod11.z.string().min(1),
3006
- clinicId: import_zod11.z.string().min(1),
3007
- monday: timeSlotSchema,
3008
- tuesday: timeSlotSchema,
3009
- wednesday: timeSlotSchema,
3010
- thursday: timeSlotSchema,
3011
- friday: timeSlotSchema,
3012
- saturday: timeSlotSchema,
3013
- sunday: timeSlotSchema,
3014
- createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
3015
- updatedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date())
2937
+ phoneNumber: import_zod11.z.string(),
2938
+ alternativePhoneNumber: import_zod11.z.string().nullable().optional(),
2939
+ website: import_zod11.z.string().nullable().optional()
3016
2940
  });
3017
- var practitionerClinicWorkingHoursSchema = import_zod11.z.object({
3018
- clinicId: import_zod11.z.string().min(1),
3019
- workingHours: import_zod11.z.object({
3020
- monday: timeSlotSchema,
3021
- tuesday: timeSlotSchema,
3022
- wednesday: timeSlotSchema,
3023
- thursday: timeSlotSchema,
3024
- friday: timeSlotSchema,
3025
- saturday: timeSlotSchema,
3026
- sunday: timeSlotSchema
3027
- }),
3028
- isActive: import_zod11.z.boolean(),
3029
- createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
3030
- updatedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date())
2941
+ var sharedClinicLocationSchema = import_zod11.z.object({
2942
+ address: import_zod11.z.string(),
2943
+ city: import_zod11.z.string(),
2944
+ country: import_zod11.z.string(),
2945
+ postalCode: import_zod11.z.string(),
2946
+ latitude: import_zod11.z.number().min(-90).max(90),
2947
+ longitude: import_zod11.z.number().min(-180).max(180),
2948
+ geohash: import_zod11.z.string().nullable().optional()
3031
2949
  });
3032
2950
  var procedureSummaryInfoSchema = import_zod11.z.object({
3033
2951
  id: import_zod11.z.string().min(1),
@@ -3047,79 +2965,22 @@ var procedureSummaryInfoSchema = import_zod11.z.object({
3047
2965
  practitionerId: import_zod11.z.string().min(1),
3048
2966
  practitionerName: import_zod11.z.string().min(1)
3049
2967
  });
3050
- var practitionerSchema = import_zod11.z.object({
3051
- id: import_zod11.z.string().min(1),
3052
- userRef: import_zod11.z.string().min(1),
3053
- basicInfo: practitionerBasicInfoSchema,
3054
- certification: practitionerCertificationSchema,
3055
- clinics: import_zod11.z.array(import_zod11.z.string()),
3056
- clinicWorkingHours: import_zod11.z.array(practitionerClinicWorkingHoursSchema),
3057
- clinicsInfo: import_zod11.z.array(clinicInfoSchema),
3058
- procedures: import_zod11.z.array(import_zod11.z.string()),
3059
- proceduresInfo: import_zod11.z.array(procedureSummaryInfoSchema),
3060
- reviewInfo: practitionerReviewInfoSchema,
3061
- isActive: import_zod11.z.boolean(),
3062
- isVerified: import_zod11.z.boolean(),
3063
- status: import_zod11.z.nativeEnum(PractitionerStatus),
3064
- createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
3065
- updatedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date())
3066
- });
3067
- var createPractitionerSchema = import_zod11.z.object({
3068
- userRef: import_zod11.z.string().min(1),
3069
- basicInfo: practitionerBasicInfoSchema,
3070
- certification: practitionerCertificationSchema,
3071
- clinics: import_zod11.z.array(import_zod11.z.string()).optional(),
3072
- clinicWorkingHours: import_zod11.z.array(practitionerClinicWorkingHoursSchema).optional(),
3073
- clinicsInfo: import_zod11.z.array(clinicInfoSchema).optional(),
3074
- proceduresInfo: import_zod11.z.array(procedureSummaryInfoSchema).optional(),
3075
- isActive: import_zod11.z.boolean(),
3076
- isVerified: import_zod11.z.boolean(),
3077
- status: import_zod11.z.nativeEnum(PractitionerStatus).optional()
3078
- });
3079
- var createDraftPractitionerSchema = import_zod11.z.object({
3080
- basicInfo: practitionerBasicInfoSchema,
3081
- certification: practitionerCertificationSchema,
3082
- clinics: import_zod11.z.array(import_zod11.z.string()).optional(),
3083
- clinicWorkingHours: import_zod11.z.array(practitionerClinicWorkingHoursSchema).optional(),
3084
- clinicsInfo: import_zod11.z.array(clinicInfoSchema).optional(),
3085
- proceduresInfo: import_zod11.z.array(procedureSummaryInfoSchema).optional(),
3086
- isActive: import_zod11.z.boolean().optional().default(false),
3087
- isVerified: import_zod11.z.boolean().optional().default(false)
3088
- });
3089
- var practitionerTokenSchema = import_zod11.z.object({
3090
- id: import_zod11.z.string().min(1),
3091
- token: import_zod11.z.string().min(6),
3092
- practitionerId: import_zod11.z.string().min(1),
3093
- email: import_zod11.z.string().email(),
3094
- clinicId: import_zod11.z.string().min(1),
3095
- status: import_zod11.z.nativeEnum(PractitionerTokenStatus),
3096
- createdBy: import_zod11.z.string().min(1),
3097
- createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
3098
- expiresAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
3099
- usedBy: import_zod11.z.string().optional(),
3100
- usedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()).optional()
3101
- });
3102
- var createPractitionerTokenSchema = import_zod11.z.object({
3103
- practitionerId: import_zod11.z.string().min(1),
3104
- email: import_zod11.z.string().email(),
3105
- clinicId: import_zod11.z.string().min(1),
3106
- expiresAt: import_zod11.z.date().optional()
2968
+ var clinicInfoSchema = import_zod11.z.object({
2969
+ id: import_zod11.z.string(),
2970
+ featuredPhoto: import_zod11.z.string(),
2971
+ name: import_zod11.z.string(),
2972
+ description: import_zod11.z.string().nullable().optional(),
2973
+ location: sharedClinicLocationSchema,
2974
+ contactInfo: sharedClinicContactInfoSchema
3107
2975
  });
3108
- var practitionerSignupSchema = import_zod11.z.object({
3109
- email: import_zod11.z.string().email(),
3110
- password: import_zod11.z.string().min(8),
3111
- firstName: import_zod11.z.string().min(2).max(50),
3112
- lastName: import_zod11.z.string().min(2).max(50),
3113
- token: import_zod11.z.string().optional(),
3114
- profileData: import_zod11.z.object({
3115
- basicInfo: import_zod11.z.object({
3116
- phoneNumber: import_zod11.z.string().optional(),
3117
- profileImageUrl: import_zod11.z.string().optional(),
3118
- gender: import_zod11.z.enum(["male", "female", "other"]).optional(),
3119
- bio: import_zod11.z.string().optional()
3120
- }).optional(),
3121
- certification: import_zod11.z.any().optional()
3122
- }).optional()
2976
+ var doctorInfoSchema = import_zod11.z.object({
2977
+ id: import_zod11.z.string(),
2978
+ name: import_zod11.z.string(),
2979
+ description: import_zod11.z.string().nullable().optional(),
2980
+ photo: import_zod11.z.string(),
2981
+ rating: import_zod11.z.number().min(0).max(5),
2982
+ services: import_zod11.z.array(import_zod11.z.string())
2983
+ // List of procedure IDs practitioner offers
3123
2984
  });
3124
2985
 
3125
2986
  // src/validations/clinic.schema.ts
@@ -3172,23 +3033,6 @@ var adminInfoSchema = import_zod12.z.object({
3172
3033
  name: import_zod12.z.string(),
3173
3034
  email: import_zod12.z.string().email()
3174
3035
  });
3175
- var clinicInfoSchema = import_zod12.z.object({
3176
- id: import_zod12.z.string(),
3177
- featuredPhoto: import_zod12.z.string(),
3178
- name: import_zod12.z.string(),
3179
- description: import_zod12.z.string().nullable().optional(),
3180
- location: clinicLocationSchema,
3181
- contactInfo: clinicContactInfoSchema
3182
- });
3183
- var doctorInfoSchema = import_zod12.z.object({
3184
- id: import_zod12.z.string(),
3185
- name: import_zod12.z.string(),
3186
- description: import_zod12.z.string().nullable().optional(),
3187
- photo: import_zod12.z.string(),
3188
- rating: import_zod12.z.number().min(0).max(5),
3189
- services: import_zod12.z.array(import_zod12.z.string())
3190
- // List of procedure IDs practitioner offers
3191
- });
3192
3036
  var clinicAdminSchema = import_zod12.z.object({
3193
3037
  id: import_zod12.z.string(),
3194
3038
  userRef: import_zod12.z.string(),
@@ -3198,8 +3042,8 @@ var clinicAdminSchema = import_zod12.z.object({
3198
3042
  clinicsManagedInfo: import_zod12.z.array(clinicInfoSchema),
3199
3043
  contactInfo: contactPersonSchema,
3200
3044
  roleTitle: import_zod12.z.string(),
3201
- createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3202
- updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3045
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3046
+ updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3203
3047
  isActive: import_zod12.z.boolean()
3204
3048
  });
3205
3049
  var adminTokenSchema = import_zod12.z.object({
@@ -3208,9 +3052,9 @@ var adminTokenSchema = import_zod12.z.object({
3208
3052
  email: import_zod12.z.string().email().optional().nullable(),
3209
3053
  status: import_zod12.z.nativeEnum(AdminTokenStatus),
3210
3054
  usedByUserRef: import_zod12.z.string().optional(),
3211
- createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3055
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3212
3056
  // Timestamp
3213
- expiresAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp))
3057
+ expiresAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp))
3214
3058
  // Timestamp
3215
3059
  });
3216
3060
  var createAdminTokenSchema = import_zod12.z.object({
@@ -3230,9 +3074,9 @@ var clinicGroupSchema = import_zod12.z.object({
3230
3074
  adminsInfo: import_zod12.z.array(adminInfoSchema),
3231
3075
  adminTokens: import_zod12.z.array(adminTokenSchema),
3232
3076
  ownerId: import_zod12.z.string().nullable(),
3233
- createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3077
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3234
3078
  // Timestamp
3235
- updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3079
+ updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3236
3080
  // Timestamp
3237
3081
  isActive: import_zod12.z.boolean(),
3238
3082
  logo: import_zod12.z.string().optional().nullable(),
@@ -3272,9 +3116,9 @@ var clinicSchema = import_zod12.z.object({
3272
3116
  // servicesInfo: z.array(serviceInfoSchema), // Deprecated, use proceduresInfo
3273
3117
  reviewInfo: clinicReviewInfoSchema,
3274
3118
  admins: import_zod12.z.array(import_zod12.z.string()),
3275
- createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3119
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3276
3120
  // Timestamp
3277
- updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3121
+ updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3278
3122
  // Timestamp
3279
3123
  isActive: import_zod12.z.boolean(),
3280
3124
  isVerified: import_zod12.z.boolean(),
@@ -3464,7 +3308,7 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3464
3308
  }
3465
3309
  console.log("[CLINIC_ADMIN] Preparing admin data object");
3466
3310
  const adminData = {
3467
- id: (0, import_firestore14.doc)((0, import_firestore14.collection)(db, CLINIC_ADMINS_COLLECTION)).id,
3311
+ id: (0, import_firestore13.doc)((0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION)).id,
3468
3312
  // Generate a new ID for the admin document
3469
3313
  userRef: validatedData.userRef,
3470
3314
  clinicGroupId: clinicGroupId || "",
@@ -3477,15 +3321,15 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3477
3321
  contactInfo: validatedData.contactInfo,
3478
3322
  roleTitle: validatedData.roleTitle,
3479
3323
  isActive: validatedData.isActive,
3480
- createdAt: (0, import_firestore14.serverTimestamp)(),
3481
- updatedAt: (0, import_firestore14.serverTimestamp)()
3324
+ createdAt: (0, import_firestore13.serverTimestamp)(),
3325
+ updatedAt: (0, import_firestore13.serverTimestamp)()
3482
3326
  };
3483
3327
  console.log("[CLINIC_ADMIN] Validating complete admin object");
3484
3328
  try {
3485
3329
  clinicAdminSchema.parse({
3486
3330
  ...adminData,
3487
- createdAt: import_firestore14.Timestamp.now(),
3488
- updatedAt: import_firestore14.Timestamp.now()
3331
+ createdAt: import_firestore13.Timestamp.now(),
3332
+ updatedAt: import_firestore13.Timestamp.now()
3489
3333
  });
3490
3334
  console.log("[CLINIC_ADMIN] Admin object validation passed");
3491
3335
  } catch (schemaError) {
@@ -3499,7 +3343,7 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3499
3343
  adminId: adminData.id
3500
3344
  });
3501
3345
  try {
3502
- await (0, import_firestore14.setDoc)((0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminData.id), adminData);
3346
+ await (0, import_firestore13.setDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminData.id), adminData);
3503
3347
  console.log("[CLINIC_ADMIN] Admin saved successfully");
3504
3348
  } catch (firestoreError) {
3505
3349
  console.error(
@@ -3548,30 +3392,30 @@ async function checkClinicGroupExists(db, groupId, clinicGroupService) {
3548
3392
  return !!group;
3549
3393
  }
3550
3394
  async function getClinicAdmin(db, adminId) {
3551
- const docRef = (0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminId);
3552
- const docSnap = await (0, import_firestore14.getDoc)(docRef);
3395
+ const docRef = (0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId);
3396
+ const docSnap = await (0, import_firestore13.getDoc)(docRef);
3553
3397
  if (docSnap.exists()) {
3554
3398
  return docSnap.data();
3555
3399
  }
3556
3400
  return null;
3557
3401
  }
3558
3402
  async function getClinicAdminByUserRef(db, userRef) {
3559
- const q = (0, import_firestore14.query)(
3560
- (0, import_firestore14.collection)(db, CLINIC_ADMINS_COLLECTION),
3561
- (0, import_firestore14.where)("userRef", "==", userRef)
3403
+ const q = (0, import_firestore13.query)(
3404
+ (0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION),
3405
+ (0, import_firestore13.where)("userRef", "==", userRef)
3562
3406
  );
3563
- const querySnapshot = await (0, import_firestore14.getDocs)(q);
3407
+ const querySnapshot = await (0, import_firestore13.getDocs)(q);
3564
3408
  if (querySnapshot.empty) {
3565
3409
  return null;
3566
3410
  }
3567
3411
  return querySnapshot.docs[0].data();
3568
3412
  }
3569
3413
  async function getClinicAdminsByGroup(db, clinicGroupId) {
3570
- const q = (0, import_firestore14.query)(
3571
- (0, import_firestore14.collection)(db, CLINIC_ADMINS_COLLECTION),
3572
- (0, import_firestore14.where)("clinicGroupId", "==", clinicGroupId)
3414
+ const q = (0, import_firestore13.query)(
3415
+ (0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION),
3416
+ (0, import_firestore13.where)("clinicGroupId", "==", clinicGroupId)
3573
3417
  );
3574
- const querySnapshot = await (0, import_firestore14.getDocs)(q);
3418
+ const querySnapshot = await (0, import_firestore13.getDocs)(q);
3575
3419
  return querySnapshot.docs.map((doc32) => doc32.data());
3576
3420
  }
3577
3421
  async function updateClinicAdmin(db, adminId, data) {
@@ -3581,9 +3425,9 @@ async function updateClinicAdmin(db, adminId, data) {
3581
3425
  }
3582
3426
  const updatedData = {
3583
3427
  ...data,
3584
- updatedAt: (0, import_firestore14.serverTimestamp)()
3428
+ updatedAt: (0, import_firestore13.serverTimestamp)()
3585
3429
  };
3586
- await (0, import_firestore14.updateDoc)((0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminId), updatedData);
3430
+ await (0, import_firestore13.updateDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId), updatedData);
3587
3431
  const updatedAdmin = await getClinicAdmin(db, adminId);
3588
3432
  if (!updatedAdmin) {
3589
3433
  throw new Error("Failed to retrieve updated admin");
@@ -3595,7 +3439,7 @@ async function deleteClinicAdmin(db, adminId) {
3595
3439
  if (!admin) {
3596
3440
  throw new Error("Clinic admin not found");
3597
3441
  }
3598
- await (0, import_firestore14.deleteDoc)((0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminId));
3442
+ await (0, import_firestore13.deleteDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId));
3599
3443
  }
3600
3444
  async function addClinicToManaged(db, adminId, clinicId, requesterId, clinicService) {
3601
3445
  const admin = await getClinicAdmin(db, adminId);
@@ -3837,7 +3681,182 @@ var ClinicAdminService = class extends BaseService {
3837
3681
 
3838
3682
  // src/services/practitioner/practitioner.service.ts
3839
3683
  var import_firestore15 = require("firebase/firestore");
3684
+
3685
+ // src/types/practitioner/index.ts
3686
+ var PRACTITIONERS_COLLECTION = "practitioners";
3687
+ var REGISTER_TOKENS_COLLECTION = "register_tokens";
3688
+ var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
3689
+ PractitionerStatus2["DRAFT"] = "draft";
3690
+ PractitionerStatus2["ACTIVE"] = "active";
3691
+ return PractitionerStatus2;
3692
+ })(PractitionerStatus || {});
3693
+ var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
3694
+ PractitionerTokenStatus2["ACTIVE"] = "active";
3695
+ PractitionerTokenStatus2["USED"] = "used";
3696
+ PractitionerTokenStatus2["EXPIRED"] = "expired";
3697
+ PractitionerTokenStatus2["REVOKED"] = "revoked";
3698
+ return PractitionerTokenStatus2;
3699
+ })(PractitionerTokenStatus || {});
3700
+
3701
+ // src/validations/practitioner.schema.ts
3840
3702
  var import_zod13 = require("zod");
3703
+ var import_firestore14 = require("firebase/firestore");
3704
+
3705
+ // src/backoffice/types/static/certification.types.ts
3706
+ var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
3707
+ CertificationLevel2["AESTHETICIAN"] = "aesthetician";
3708
+ CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
3709
+ CertificationLevel2["NURSE"] = "nurse";
3710
+ CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
3711
+ CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
3712
+ CertificationLevel2["DOCTOR"] = "doctor";
3713
+ CertificationLevel2["SPECIALIST"] = "specialist";
3714
+ CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
3715
+ return CertificationLevel2;
3716
+ })(CertificationLevel || {});
3717
+ var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
3718
+ CertificationSpecialty3["LASER"] = "laser";
3719
+ CertificationSpecialty3["INJECTABLES"] = "injectables";
3720
+ CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
3721
+ CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
3722
+ CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
3723
+ CertificationSpecialty3["SKIN_CARE"] = "skin_care";
3724
+ CertificationSpecialty3["WOUND_CARE"] = "wound_care";
3725
+ CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
3726
+ return CertificationSpecialty3;
3727
+ })(CertificationSpecialty || {});
3728
+
3729
+ // src/validations/practitioner.schema.ts
3730
+ var practitionerBasicInfoSchema = import_zod13.z.object({
3731
+ firstName: import_zod13.z.string().min(2).max(50),
3732
+ lastName: import_zod13.z.string().min(2).max(50),
3733
+ title: import_zod13.z.string().min(2).max(100),
3734
+ email: import_zod13.z.string().email(),
3735
+ phoneNumber: import_zod13.z.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number"),
3736
+ dateOfBirth: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3737
+ gender: import_zod13.z.enum(["male", "female", "other"]),
3738
+ profileImageUrl: import_zod13.z.string().url().optional(),
3739
+ bio: import_zod13.z.string().max(1e3).optional(),
3740
+ languages: import_zod13.z.array(import_zod13.z.string()).min(1)
3741
+ });
3742
+ var practitionerCertificationSchema = import_zod13.z.object({
3743
+ level: import_zod13.z.nativeEnum(CertificationLevel),
3744
+ specialties: import_zod13.z.array(import_zod13.z.nativeEnum(CertificationSpecialty)),
3745
+ licenseNumber: import_zod13.z.string().min(3).max(50),
3746
+ issuingAuthority: import_zod13.z.string().min(2).max(100),
3747
+ issueDate: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3748
+ expiryDate: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()).optional(),
3749
+ verificationStatus: import_zod13.z.enum(["pending", "verified", "rejected"])
3750
+ });
3751
+ var timeSlotSchema = import_zod13.z.object({
3752
+ start: import_zod13.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
3753
+ end: import_zod13.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
3754
+ }).nullable();
3755
+ var practitionerWorkingHoursSchema = import_zod13.z.object({
3756
+ practitionerId: import_zod13.z.string().min(1),
3757
+ clinicId: import_zod13.z.string().min(1),
3758
+ monday: timeSlotSchema,
3759
+ tuesday: timeSlotSchema,
3760
+ wednesday: timeSlotSchema,
3761
+ thursday: timeSlotSchema,
3762
+ friday: timeSlotSchema,
3763
+ saturday: timeSlotSchema,
3764
+ sunday: timeSlotSchema,
3765
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3766
+ updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
3767
+ });
3768
+ var practitionerClinicWorkingHoursSchema = import_zod13.z.object({
3769
+ clinicId: import_zod13.z.string().min(1),
3770
+ workingHours: import_zod13.z.object({
3771
+ monday: timeSlotSchema,
3772
+ tuesday: timeSlotSchema,
3773
+ wednesday: timeSlotSchema,
3774
+ thursday: timeSlotSchema,
3775
+ friday: timeSlotSchema,
3776
+ saturday: timeSlotSchema,
3777
+ sunday: timeSlotSchema
3778
+ }),
3779
+ isActive: import_zod13.z.boolean(),
3780
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3781
+ updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
3782
+ });
3783
+ var practitionerSchema = import_zod13.z.object({
3784
+ id: import_zod13.z.string().min(1),
3785
+ userRef: import_zod13.z.string().min(1),
3786
+ basicInfo: practitionerBasicInfoSchema,
3787
+ certification: practitionerCertificationSchema,
3788
+ clinics: import_zod13.z.array(import_zod13.z.string()),
3789
+ clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema),
3790
+ clinicsInfo: import_zod13.z.array(clinicInfoSchema),
3791
+ procedures: import_zod13.z.array(import_zod13.z.string()),
3792
+ proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema),
3793
+ reviewInfo: practitionerReviewInfoSchema,
3794
+ isActive: import_zod13.z.boolean(),
3795
+ isVerified: import_zod13.z.boolean(),
3796
+ status: import_zod13.z.nativeEnum(PractitionerStatus),
3797
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3798
+ updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
3799
+ });
3800
+ var createPractitionerSchema = import_zod13.z.object({
3801
+ userRef: import_zod13.z.string().min(1),
3802
+ basicInfo: practitionerBasicInfoSchema,
3803
+ certification: practitionerCertificationSchema,
3804
+ clinics: import_zod13.z.array(import_zod13.z.string()).optional(),
3805
+ clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema).optional(),
3806
+ clinicsInfo: import_zod13.z.array(clinicInfoSchema).optional(),
3807
+ proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema).optional(),
3808
+ isActive: import_zod13.z.boolean(),
3809
+ isVerified: import_zod13.z.boolean(),
3810
+ status: import_zod13.z.nativeEnum(PractitionerStatus).optional()
3811
+ });
3812
+ var createDraftPractitionerSchema = import_zod13.z.object({
3813
+ basicInfo: practitionerBasicInfoSchema,
3814
+ certification: practitionerCertificationSchema,
3815
+ clinics: import_zod13.z.array(import_zod13.z.string()).optional(),
3816
+ clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema).optional(),
3817
+ clinicsInfo: import_zod13.z.array(clinicInfoSchema).optional(),
3818
+ proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema).optional(),
3819
+ isActive: import_zod13.z.boolean().optional().default(false),
3820
+ isVerified: import_zod13.z.boolean().optional().default(false)
3821
+ });
3822
+ var practitionerTokenSchema = import_zod13.z.object({
3823
+ id: import_zod13.z.string().min(1),
3824
+ token: import_zod13.z.string().min(6),
3825
+ practitionerId: import_zod13.z.string().min(1),
3826
+ email: import_zod13.z.string().email(),
3827
+ clinicId: import_zod13.z.string().min(1),
3828
+ status: import_zod13.z.nativeEnum(PractitionerTokenStatus),
3829
+ createdBy: import_zod13.z.string().min(1),
3830
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3831
+ expiresAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3832
+ usedBy: import_zod13.z.string().optional(),
3833
+ usedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()).optional()
3834
+ });
3835
+ var createPractitionerTokenSchema = import_zod13.z.object({
3836
+ practitionerId: import_zod13.z.string().min(1),
3837
+ email: import_zod13.z.string().email(),
3838
+ clinicId: import_zod13.z.string().min(1),
3839
+ expiresAt: import_zod13.z.date().optional()
3840
+ });
3841
+ var practitionerSignupSchema = import_zod13.z.object({
3842
+ email: import_zod13.z.string().email(),
3843
+ password: import_zod13.z.string().min(8),
3844
+ firstName: import_zod13.z.string().min(2).max(50),
3845
+ lastName: import_zod13.z.string().min(2).max(50),
3846
+ token: import_zod13.z.string().optional(),
3847
+ profileData: import_zod13.z.object({
3848
+ basicInfo: import_zod13.z.object({
3849
+ phoneNumber: import_zod13.z.string().optional(),
3850
+ profileImageUrl: import_zod13.z.string().optional(),
3851
+ gender: import_zod13.z.enum(["male", "female", "other"]).optional(),
3852
+ bio: import_zod13.z.string().optional()
3853
+ }).optional(),
3854
+ certification: import_zod13.z.any().optional()
3855
+ }).optional()
3856
+ });
3857
+
3858
+ // src/services/practitioner/practitioner.service.ts
3859
+ var import_zod14 = require("zod");
3841
3860
  var import_geofire_common2 = require("geofire-common");
3842
3861
  var PractitionerService = class extends BaseService {
3843
3862
  constructor(db, auth, app, clinicService) {
@@ -3906,7 +3925,7 @@ var PractitionerService = class extends BaseService {
3906
3925
  }
3907
3926
  return createdPractitioner;
3908
3927
  } catch (error) {
3909
- if (error instanceof import_zod13.z.ZodError) {
3928
+ if (error instanceof import_zod14.z.ZodError) {
3910
3929
  throw new Error(`Invalid practitioner data: ${error.message}`);
3911
3930
  }
3912
3931
  console.error("Error creating practitioner:", error);
@@ -3928,8 +3947,8 @@ var PractitionerService = class extends BaseService {
3928
3947
  if (!clinic) {
3929
3948
  throw new Error(`Clinic ${clinicId} not found`);
3930
3949
  }
3931
- const clinics = data.clinics || [clinicId];
3932
- if (data.clinics) {
3950
+ const clinicsToAdd = /* @__PURE__ */ new Set([clinicId]);
3951
+ if (data.clinics && data.clinics.length > 0) {
3933
3952
  for (const cId of data.clinics) {
3934
3953
  if (cId !== clinicId) {
3935
3954
  const otherClinic = await this.getClinicService().getClinic(cId);
@@ -3937,8 +3956,10 @@ var PractitionerService = class extends BaseService {
3937
3956
  throw new Error(`Clinic ${cId} not found`);
3938
3957
  }
3939
3958
  }
3959
+ clinicsToAdd.add(cId);
3940
3960
  }
3941
3961
  }
3962
+ const clinics = Array.from(clinicsToAdd);
3942
3963
  const defaultReviewInfo = {
3943
3964
  totalReviews: 0,
3944
3965
  averageRating: 0,
@@ -3950,7 +3971,22 @@ var PractitionerService = class extends BaseService {
3950
3971
  recommendationPercentage: 0
3951
3972
  };
3952
3973
  const practitionerId = this.generateId();
3953
- const clinicsInfo = validatedData.clinicsInfo || [];
3974
+ const clinicsInfo = [];
3975
+ for (const cId of clinics) {
3976
+ const clinicData = await this.getClinicService().getClinic(cId);
3977
+ if (clinicData) {
3978
+ clinicsInfo.push({
3979
+ id: clinicData.id,
3980
+ name: clinicData.name,
3981
+ location: clinicData.location,
3982
+ contactInfo: clinicData.contactInfo,
3983
+ // Make sure we're using the right property for featuredPhoto
3984
+ featuredPhoto: clinicData.featuredPhotos && clinicData.featuredPhotos.length > 0 ? clinicData.featuredPhotos[0] : clinicData.coverPhoto || "",
3985
+ description: clinicData.description || null
3986
+ });
3987
+ }
3988
+ }
3989
+ const finalClinicsInfo = validatedData.clinicsInfo && validatedData.clinicsInfo.length > 0 ? validatedData.clinicsInfo : clinicsInfo;
3954
3990
  const proceduresInfo = [];
3955
3991
  const practitionerData = {
3956
3992
  id: practitionerId,
@@ -3960,7 +3996,7 @@ var PractitionerService = class extends BaseService {
3960
3996
  certification: validatedData.certification,
3961
3997
  clinics,
3962
3998
  clinicWorkingHours: validatedData.clinicWorkingHours || [],
3963
- clinicsInfo,
3999
+ clinicsInfo: finalClinicsInfo,
3964
4000
  procedures: [],
3965
4001
  proceduresInfo,
3966
4002
  reviewInfo: defaultReviewInfo,
@@ -4002,7 +4038,7 @@ var PractitionerService = class extends BaseService {
4002
4038
  await (0, import_firestore15.setDoc)((0, import_firestore15.doc)(this.db, tokenPath), token);
4003
4039
  return { practitioner: savedPractitioner, token };
4004
4040
  } catch (error) {
4005
- if (error instanceof import_zod13.z.ZodError) {
4041
+ if (error instanceof import_zod14.z.ZodError) {
4006
4042
  throw new Error("Invalid practitioner data: " + error.message);
4007
4043
  }
4008
4044
  throw error;
@@ -4055,7 +4091,7 @@ var PractitionerService = class extends BaseService {
4055
4091
  await (0, import_firestore15.setDoc)((0, import_firestore15.doc)(this.db, tokenPath), token);
4056
4092
  return token;
4057
4093
  } catch (error) {
4058
- if (error instanceof import_zod13.z.ZodError) {
4094
+ if (error instanceof import_zod14.z.ZodError) {
4059
4095
  throw new Error("Invalid token data: " + error.message);
4060
4096
  }
4061
4097
  throw error;
@@ -4215,7 +4251,7 @@ var PractitionerService = class extends BaseService {
4215
4251
  }
4216
4252
  return updatedPractitioner;
4217
4253
  } catch (error) {
4218
- if (error instanceof import_zod13.z.ZodError) {
4254
+ if (error instanceof import_zod14.z.ZodError) {
4219
4255
  throw new Error(`Invalid practitioner update data: ${error.message}`);
4220
4256
  }
4221
4257
  console.error(`Error updating practitioner ${practitionerId}:`, error);
@@ -4743,7 +4779,7 @@ var UserService = class extends BaseService {
4743
4779
  });
4744
4780
  return this.getUserById(uid);
4745
4781
  } catch (error) {
4746
- if (error instanceof import_zod14.z.ZodError) {
4782
+ if (error instanceof import_zod15.z.ZodError) {
4747
4783
  throw USER_ERRORS.VALIDATION_ERROR;
4748
4784
  }
4749
4785
  throw error;
@@ -4830,7 +4866,7 @@ var UserService = class extends BaseService {
4830
4866
  // src/services/clinic/utils/clinic-group.utils.ts
4831
4867
  var import_firestore17 = require("firebase/firestore");
4832
4868
  var import_geofire_common3 = require("geofire-common");
4833
- var import_zod15 = require("zod");
4869
+ var import_zod16 = require("zod");
4834
4870
 
4835
4871
  // src/services/clinic/utils/photos.utils.ts
4836
4872
  var import_storage3 = require("firebase/storage");
@@ -5028,7 +5064,7 @@ async function createClinicGroup(db, data, ownerId, isDefault = false, clinicAdm
5028
5064
  });
5029
5065
  return groupData;
5030
5066
  } catch (error) {
5031
- if (error instanceof import_zod15.z.ZodError) {
5067
+ if (error instanceof import_zod16.z.ZodError) {
5032
5068
  console.error(
5033
5069
  "[CLINIC_GROUP] Zod validation error:",
5034
5070
  JSON.stringify(error.errors, null, 2)
@@ -5433,12 +5469,12 @@ var ClinicGroupService = class extends BaseService {
5433
5469
  // src/services/clinic/clinic.service.ts
5434
5470
  var import_firestore21 = require("firebase/firestore");
5435
5471
  var import_geofire_common7 = require("geofire-common");
5436
- var import_zod17 = require("zod");
5472
+ var import_zod18 = require("zod");
5437
5473
 
5438
5474
  // src/services/clinic/utils/clinic.utils.ts
5439
5475
  var import_firestore18 = require("firebase/firestore");
5440
5476
  var import_geofire_common4 = require("geofire-common");
5441
- var import_zod16 = require("zod");
5477
+ var import_zod17 = require("zod");
5442
5478
  async function getClinic(db, clinicId) {
5443
5479
  const docRef = (0, import_firestore18.doc)(db, CLINICS_COLLECTION, clinicId);
5444
5480
  const docSnap = await (0, import_firestore18.getDoc)(docRef);
@@ -6110,7 +6146,7 @@ var ClinicService = class extends BaseService {
6110
6146
  if (!savedClinic) throw new Error("Failed to retrieve created clinic");
6111
6147
  return savedClinic;
6112
6148
  } catch (error) {
6113
- if (error instanceof import_zod17.z.ZodError) {
6149
+ if (error instanceof import_zod18.z.ZodError) {
6114
6150
  throw new Error("Invalid clinic data: " + error.message);
6115
6151
  }
6116
6152
  console.error("Error creating clinic:", error);
@@ -6158,7 +6194,7 @@ var ClinicService = class extends BaseService {
6158
6194
  if (!updatedClinic) throw new Error("Failed to retrieve updated clinic");
6159
6195
  return updatedClinic;
6160
6196
  } catch (error) {
6161
- if (error instanceof import_zod17.z.ZodError) {
6197
+ if (error instanceof import_zod18.z.ZodError) {
6162
6198
  throw new Error(
6163
6199
  "Invalid clinic update data: " + error.errors.map((e) => `${e.path.join(".")} - ${e.message}`).join(", ")
6164
6200
  );
@@ -6617,7 +6653,7 @@ var AuthService = class extends BaseService {
6617
6653
  clinicAdmin: adminProfile
6618
6654
  };
6619
6655
  } catch (error) {
6620
- if (error instanceof import_zod18.z.ZodError) {
6656
+ if (error instanceof import_zod19.z.ZodError) {
6621
6657
  console.error(
6622
6658
  "[AUTH] Zod validation error in signUpClinicAdmin:",
6623
6659
  JSON.stringify(error.errors, null, 2)
@@ -6790,7 +6826,7 @@ var AuthService = class extends BaseService {
6790
6826
  email
6791
6827
  );
6792
6828
  } catch (error) {
6793
- if (error instanceof import_zod18.z.ZodError) {
6829
+ if (error instanceof import_zod19.z.ZodError) {
6794
6830
  throw AUTH_ERRORS.VALIDATION_ERROR;
6795
6831
  }
6796
6832
  const firebaseError = error;
@@ -6913,7 +6949,7 @@ var AuthService = class extends BaseService {
6913
6949
  await emailSchema.parseAsync(email);
6914
6950
  await (0, import_auth5.sendPasswordResetEmail)(this.auth, email);
6915
6951
  } catch (error) {
6916
- if (error instanceof import_zod18.z.ZodError) {
6952
+ if (error instanceof import_zod19.z.ZodError) {
6917
6953
  throw AUTH_ERRORS.VALIDATION_ERROR;
6918
6954
  }
6919
6955
  const firebaseError = error;
@@ -6952,7 +6988,7 @@ var AuthService = class extends BaseService {
6952
6988
  await passwordSchema.parseAsync(newPassword);
6953
6989
  await (0, import_auth5.confirmPasswordReset)(this.auth, oobCode, newPassword);
6954
6990
  } catch (error) {
6955
- if (error instanceof import_zod18.z.ZodError) {
6991
+ if (error instanceof import_zod19.z.ZodError) {
6956
6992
  throw AUTH_ERRORS.VALIDATION_ERROR;
6957
6993
  }
6958
6994
  const firebaseError = error;
@@ -7121,7 +7157,7 @@ var AuthService = class extends BaseService {
7121
7157
  practitioner
7122
7158
  };
7123
7159
  } catch (error) {
7124
- if (error instanceof import_zod18.z.ZodError) {
7160
+ if (error instanceof import_zod19.z.ZodError) {
7125
7161
  console.error(
7126
7162
  "[AUTH] Zod validation error in signUpPractitioner:",
7127
7163
  JSON.stringify(error.errors, null, 2)
@@ -7386,59 +7422,59 @@ var import_firestore24 = require("firebase/firestore");
7386
7422
  var PROCEDURES_COLLECTION = "procedures";
7387
7423
 
7388
7424
  // src/validations/procedure.schema.ts
7389
- var import_zod19 = require("zod");
7390
- var createProcedureSchema = import_zod19.z.object({
7391
- name: import_zod19.z.string().min(1).max(200),
7392
- description: import_zod19.z.string().min(1).max(2e3),
7393
- family: import_zod19.z.nativeEnum(ProcedureFamily),
7394
- categoryId: import_zod19.z.string().min(1),
7395
- subcategoryId: import_zod19.z.string().min(1),
7396
- technologyId: import_zod19.z.string().min(1),
7397
- productId: import_zod19.z.string().min(1),
7398
- price: import_zod19.z.number().min(0),
7399
- currency: import_zod19.z.nativeEnum(Currency),
7400
- pricingMeasure: import_zod19.z.nativeEnum(PricingMeasure),
7401
- duration: import_zod19.z.number().min(1).max(480),
7425
+ var import_zod20 = require("zod");
7426
+ var createProcedureSchema = import_zod20.z.object({
7427
+ name: import_zod20.z.string().min(1).max(200),
7428
+ description: import_zod20.z.string().min(1).max(2e3),
7429
+ family: import_zod20.z.nativeEnum(ProcedureFamily),
7430
+ categoryId: import_zod20.z.string().min(1),
7431
+ subcategoryId: import_zod20.z.string().min(1),
7432
+ technologyId: import_zod20.z.string().min(1),
7433
+ productId: import_zod20.z.string().min(1),
7434
+ price: import_zod20.z.number().min(0),
7435
+ currency: import_zod20.z.nativeEnum(Currency),
7436
+ pricingMeasure: import_zod20.z.nativeEnum(PricingMeasure),
7437
+ duration: import_zod20.z.number().min(1).max(480),
7402
7438
  // Max 8 hours
7403
- practitionerId: import_zod19.z.string().min(1),
7404
- clinicBranchId: import_zod19.z.string().min(1)
7439
+ practitionerId: import_zod20.z.string().min(1),
7440
+ clinicBranchId: import_zod20.z.string().min(1)
7405
7441
  });
7406
- var updateProcedureSchema = import_zod19.z.object({
7407
- name: import_zod19.z.string().min(3).max(100).optional(),
7408
- description: import_zod19.z.string().min(3).max(1e3).optional(),
7409
- price: import_zod19.z.number().min(0).optional(),
7410
- currency: import_zod19.z.nativeEnum(Currency).optional(),
7411
- pricingMeasure: import_zod19.z.nativeEnum(PricingMeasure).optional(),
7412
- duration: import_zod19.z.number().min(0).optional(),
7413
- isActive: import_zod19.z.boolean().optional(),
7414
- practitionerId: import_zod19.z.string().optional(),
7415
- categoryId: import_zod19.z.string().optional(),
7416
- subcategoryId: import_zod19.z.string().optional(),
7417
- technologyId: import_zod19.z.string().optional(),
7418
- productId: import_zod19.z.string().optional(),
7419
- clinicBranchId: import_zod19.z.string().optional()
7442
+ var updateProcedureSchema = import_zod20.z.object({
7443
+ name: import_zod20.z.string().min(3).max(100).optional(),
7444
+ description: import_zod20.z.string().min(3).max(1e3).optional(),
7445
+ price: import_zod20.z.number().min(0).optional(),
7446
+ currency: import_zod20.z.nativeEnum(Currency).optional(),
7447
+ pricingMeasure: import_zod20.z.nativeEnum(PricingMeasure).optional(),
7448
+ duration: import_zod20.z.number().min(0).optional(),
7449
+ isActive: import_zod20.z.boolean().optional(),
7450
+ practitionerId: import_zod20.z.string().optional(),
7451
+ categoryId: import_zod20.z.string().optional(),
7452
+ subcategoryId: import_zod20.z.string().optional(),
7453
+ technologyId: import_zod20.z.string().optional(),
7454
+ productId: import_zod20.z.string().optional(),
7455
+ clinicBranchId: import_zod20.z.string().optional()
7420
7456
  });
7421
7457
  var procedureSchema = createProcedureSchema.extend({
7422
- id: import_zod19.z.string().min(1),
7423
- category: import_zod19.z.any(),
7458
+ id: import_zod20.z.string().min(1),
7459
+ category: import_zod20.z.any(),
7424
7460
  // We'll validate the full category object separately
7425
- subcategory: import_zod19.z.any(),
7461
+ subcategory: import_zod20.z.any(),
7426
7462
  // We'll validate the full subcategory object separately
7427
- technology: import_zod19.z.any(),
7463
+ technology: import_zod20.z.any(),
7428
7464
  // We'll validate the full technology object separately
7429
- product: import_zod19.z.any(),
7465
+ product: import_zod20.z.any(),
7430
7466
  // We'll validate the full product object separately
7431
- blockingConditions: import_zod19.z.array(import_zod19.z.any()),
7467
+ blockingConditions: import_zod20.z.array(import_zod20.z.any()),
7432
7468
  // We'll validate blocking conditions separately
7433
- treatmentBenefits: import_zod19.z.array(import_zod19.z.any()),
7469
+ treatmentBenefits: import_zod20.z.array(import_zod20.z.any()),
7434
7470
  // We'll validate treatment benefits separately
7435
- preRequirements: import_zod19.z.array(import_zod19.z.any()),
7471
+ preRequirements: import_zod20.z.array(import_zod20.z.any()),
7436
7472
  // We'll validate requirements separately
7437
- postRequirements: import_zod19.z.array(import_zod19.z.any()),
7473
+ postRequirements: import_zod20.z.array(import_zod20.z.any()),
7438
7474
  // We'll validate requirements separately
7439
- certificationRequirement: import_zod19.z.any(),
7475
+ certificationRequirement: import_zod20.z.any(),
7440
7476
  // We'll validate certification requirement separately
7441
- documentationTemplates: import_zod19.z.array(import_zod19.z.any()),
7477
+ documentationTemplates: import_zod20.z.array(import_zod20.z.any()),
7442
7478
  // We'll validate documentation templates separately
7443
7479
  clinicInfo: clinicInfoSchema,
7444
7480
  // Clinic info validation
@@ -7446,9 +7482,9 @@ var procedureSchema = createProcedureSchema.extend({
7446
7482
  // Doctor info validation
7447
7483
  reviewInfo: procedureReviewInfoSchema,
7448
7484
  // Procedure review info validation
7449
- isActive: import_zod19.z.boolean(),
7450
- createdAt: import_zod19.z.date(),
7451
- updatedAt: import_zod19.z.date()
7485
+ isActive: import_zod20.z.boolean(),
7486
+ createdAt: import_zod20.z.date(),
7487
+ updatedAt: import_zod20.z.date()
7452
7488
  });
7453
7489
 
7454
7490
  // src/services/procedure/procedure.service.ts
@@ -8483,42 +8519,42 @@ var SYNCED_CALENDARS_COLLECTION = "syncedCalendars";
8483
8519
  var import_firestore37 = require("firebase/firestore");
8484
8520
 
8485
8521
  // src/validations/calendar.schema.ts
8486
- var import_zod21 = require("zod");
8522
+ var import_zod22 = require("zod");
8487
8523
  var import_firestore28 = require("firebase/firestore");
8488
8524
 
8489
8525
  // src/validations/profile-info.schema.ts
8490
- var import_zod20 = require("zod");
8526
+ var import_zod21 = require("zod");
8491
8527
  var import_firestore27 = require("firebase/firestore");
8492
- var clinicInfoSchema2 = import_zod20.z.object({
8493
- id: import_zod20.z.string(),
8494
- featuredPhoto: import_zod20.z.string(),
8495
- name: import_zod20.z.string(),
8496
- description: import_zod20.z.string(),
8528
+ var clinicInfoSchema2 = import_zod21.z.object({
8529
+ id: import_zod21.z.string(),
8530
+ featuredPhoto: import_zod21.z.string(),
8531
+ name: import_zod21.z.string(),
8532
+ description: import_zod21.z.string(),
8497
8533
  location: clinicLocationSchema,
8498
8534
  contactInfo: clinicContactInfoSchema
8499
8535
  });
8500
- var practitionerProfileInfoSchema = import_zod20.z.object({
8501
- id: import_zod20.z.string(),
8502
- practitionerPhoto: import_zod20.z.string().nullable(),
8503
- name: import_zod20.z.string(),
8504
- email: import_zod20.z.string().email(),
8505
- phone: import_zod20.z.string().nullable(),
8536
+ var practitionerProfileInfoSchema = import_zod21.z.object({
8537
+ id: import_zod21.z.string(),
8538
+ practitionerPhoto: import_zod21.z.string().nullable(),
8539
+ name: import_zod21.z.string(),
8540
+ email: import_zod21.z.string().email(),
8541
+ phone: import_zod21.z.string().nullable(),
8506
8542
  certification: practitionerCertificationSchema
8507
8543
  });
8508
- var patientProfileInfoSchema = import_zod20.z.object({
8509
- id: import_zod20.z.string(),
8510
- fullName: import_zod20.z.string(),
8511
- email: import_zod20.z.string().email(),
8512
- phone: import_zod20.z.string().nullable(),
8513
- dateOfBirth: import_zod20.z.instanceof(import_firestore27.Timestamp),
8514
- gender: import_zod20.z.nativeEnum(Gender)
8544
+ var patientProfileInfoSchema = import_zod21.z.object({
8545
+ id: import_zod21.z.string(),
8546
+ fullName: import_zod21.z.string(),
8547
+ email: import_zod21.z.string().email(),
8548
+ phone: import_zod21.z.string().nullable(),
8549
+ dateOfBirth: import_zod21.z.instanceof(import_firestore27.Timestamp),
8550
+ gender: import_zod21.z.nativeEnum(Gender)
8515
8551
  });
8516
8552
 
8517
8553
  // src/validations/calendar.schema.ts
8518
8554
  var MIN_APPOINTMENT_DURATION = 15;
8519
- var calendarEventTimeSchema = import_zod21.z.object({
8520
- start: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp)),
8521
- end: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp))
8555
+ var calendarEventTimeSchema = import_zod22.z.object({
8556
+ start: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp)),
8557
+ end: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
8522
8558
  }).refine(
8523
8559
  (data) => {
8524
8560
  const startDate = data.start instanceof import_firestore28.Timestamp ? data.start.toDate() : data.start;
@@ -8539,46 +8575,46 @@ var calendarEventTimeSchema = import_zod21.z.object({
8539
8575
  path: ["start"]
8540
8576
  }
8541
8577
  );
8542
- var timeSlotSchema2 = import_zod21.z.object({
8543
- start: import_zod21.z.date(),
8544
- end: import_zod21.z.date(),
8545
- isAvailable: import_zod21.z.boolean()
8578
+ var timeSlotSchema2 = import_zod22.z.object({
8579
+ start: import_zod22.z.date(),
8580
+ end: import_zod22.z.date(),
8581
+ isAvailable: import_zod22.z.boolean()
8546
8582
  }).refine((data) => data.start < data.end, {
8547
8583
  message: "End time must be after start time",
8548
8584
  path: ["end"]
8549
8585
  });
8550
- var syncedCalendarEventSchema = import_zod21.z.object({
8551
- eventId: import_zod21.z.string(),
8552
- syncedCalendarProvider: import_zod21.z.nativeEnum(SyncedCalendarProvider),
8553
- syncedAt: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp))
8586
+ var syncedCalendarEventSchema = import_zod22.z.object({
8587
+ eventId: import_zod22.z.string(),
8588
+ syncedCalendarProvider: import_zod22.z.nativeEnum(SyncedCalendarProvider),
8589
+ syncedAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
8554
8590
  });
8555
- var procedureInfoSchema = import_zod21.z.object({
8556
- name: import_zod21.z.string(),
8557
- description: import_zod21.z.string(),
8558
- duration: import_zod21.z.number().min(MIN_APPOINTMENT_DURATION),
8559
- price: import_zod21.z.number().min(0),
8560
- currency: import_zod21.z.nativeEnum(Currency)
8591
+ var procedureInfoSchema = import_zod22.z.object({
8592
+ name: import_zod22.z.string(),
8593
+ description: import_zod22.z.string(),
8594
+ duration: import_zod22.z.number().min(MIN_APPOINTMENT_DURATION),
8595
+ price: import_zod22.z.number().min(0),
8596
+ currency: import_zod22.z.nativeEnum(Currency)
8561
8597
  });
8562
- var procedureCategorizationSchema = import_zod21.z.object({
8563
- procedureFamily: import_zod21.z.string(),
8598
+ var procedureCategorizationSchema = import_zod22.z.object({
8599
+ procedureFamily: import_zod22.z.string(),
8564
8600
  // Replace with proper enum when available
8565
- procedureCategory: import_zod21.z.string(),
8601
+ procedureCategory: import_zod22.z.string(),
8566
8602
  // Replace with proper enum when available
8567
- procedureSubcategory: import_zod21.z.string(),
8603
+ procedureSubcategory: import_zod22.z.string(),
8568
8604
  // Replace with proper enum when available
8569
- procedureTechnology: import_zod21.z.string(),
8605
+ procedureTechnology: import_zod22.z.string(),
8570
8606
  // Replace with proper enum when available
8571
- procedureProduct: import_zod21.z.string()
8607
+ procedureProduct: import_zod22.z.string()
8572
8608
  // Replace with proper enum when available
8573
8609
  });
8574
- var createAppointmentSchema2 = import_zod21.z.object({
8575
- clinicId: import_zod21.z.string().min(1, "Clinic ID is required"),
8576
- doctorId: import_zod21.z.string().min(1, "Doctor ID is required"),
8577
- patientId: import_zod21.z.string().min(1, "Patient ID is required"),
8578
- procedureId: import_zod21.z.string().min(1, "Procedure ID is required"),
8610
+ var createAppointmentSchema2 = import_zod22.z.object({
8611
+ clinicId: import_zod22.z.string().min(1, "Clinic ID is required"),
8612
+ doctorId: import_zod22.z.string().min(1, "Doctor ID is required"),
8613
+ patientId: import_zod22.z.string().min(1, "Patient ID is required"),
8614
+ procedureId: import_zod22.z.string().min(1, "Procedure ID is required"),
8579
8615
  eventLocation: clinicLocationSchema,
8580
8616
  eventTime: calendarEventTimeSchema,
8581
- description: import_zod21.z.string().optional()
8617
+ description: import_zod22.z.string().optional()
8582
8618
  }).refine(
8583
8619
  (data) => {
8584
8620
  return true;
@@ -8587,73 +8623,73 @@ var createAppointmentSchema2 = import_zod21.z.object({
8587
8623
  message: "Invalid appointment parameters"
8588
8624
  }
8589
8625
  );
8590
- var updateAppointmentSchema2 = import_zod21.z.object({
8591
- appointmentId: import_zod21.z.string().min(1, "Appointment ID is required"),
8592
- clinicId: import_zod21.z.string().min(1, "Clinic ID is required"),
8593
- doctorId: import_zod21.z.string().min(1, "Doctor ID is required"),
8594
- patientId: import_zod21.z.string().min(1, "Patient ID is required"),
8626
+ var updateAppointmentSchema2 = import_zod22.z.object({
8627
+ appointmentId: import_zod22.z.string().min(1, "Appointment ID is required"),
8628
+ clinicId: import_zod22.z.string().min(1, "Clinic ID is required"),
8629
+ doctorId: import_zod22.z.string().min(1, "Doctor ID is required"),
8630
+ patientId: import_zod22.z.string().min(1, "Patient ID is required"),
8595
8631
  eventTime: calendarEventTimeSchema.optional(),
8596
- description: import_zod21.z.string().optional(),
8597
- status: import_zod21.z.nativeEnum(CalendarEventStatus).optional()
8632
+ description: import_zod22.z.string().optional(),
8633
+ status: import_zod22.z.nativeEnum(CalendarEventStatus).optional()
8598
8634
  });
8599
- var createCalendarEventSchema = import_zod21.z.object({
8600
- id: import_zod21.z.string(),
8601
- clinicBranchId: import_zod21.z.string().nullable().optional(),
8602
- clinicBranchInfo: import_zod21.z.any().nullable().optional(),
8603
- practitionerProfileId: import_zod21.z.string().nullable().optional(),
8635
+ var createCalendarEventSchema = import_zod22.z.object({
8636
+ id: import_zod22.z.string(),
8637
+ clinicBranchId: import_zod22.z.string().nullable().optional(),
8638
+ clinicBranchInfo: import_zod22.z.any().nullable().optional(),
8639
+ practitionerProfileId: import_zod22.z.string().nullable().optional(),
8604
8640
  practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
8605
- patientProfileId: import_zod21.z.string().nullable().optional(),
8641
+ patientProfileId: import_zod22.z.string().nullable().optional(),
8606
8642
  patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
8607
- procedureId: import_zod21.z.string().nullable().optional(),
8608
- appointmentId: import_zod21.z.string().nullable().optional(),
8609
- syncedCalendarEventId: import_zod21.z.array(syncedCalendarEventSchema).nullable().optional(),
8610
- eventName: import_zod21.z.string().min(1, "Event name is required"),
8643
+ procedureId: import_zod22.z.string().nullable().optional(),
8644
+ appointmentId: import_zod22.z.string().nullable().optional(),
8645
+ syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
8646
+ eventName: import_zod22.z.string().min(1, "Event name is required"),
8611
8647
  eventLocation: clinicLocationSchema.optional(),
8612
8648
  eventTime: calendarEventTimeSchema,
8613
- description: import_zod21.z.string().optional(),
8614
- status: import_zod21.z.nativeEnum(CalendarEventStatus),
8615
- syncStatus: import_zod21.z.nativeEnum(CalendarSyncStatus),
8616
- eventType: import_zod21.z.nativeEnum(CalendarEventType),
8617
- createdAt: import_zod21.z.any(),
8649
+ description: import_zod22.z.string().optional(),
8650
+ status: import_zod22.z.nativeEnum(CalendarEventStatus),
8651
+ syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus),
8652
+ eventType: import_zod22.z.nativeEnum(CalendarEventType),
8653
+ createdAt: import_zod22.z.any(),
8618
8654
  // FieldValue for server timestamp
8619
- updatedAt: import_zod21.z.any()
8655
+ updatedAt: import_zod22.z.any()
8620
8656
  // FieldValue for server timestamp
8621
8657
  });
8622
- var updateCalendarEventSchema = import_zod21.z.object({
8623
- syncedCalendarEventId: import_zod21.z.array(syncedCalendarEventSchema).nullable().optional(),
8624
- appointmentId: import_zod21.z.string().nullable().optional(),
8625
- eventName: import_zod21.z.string().optional(),
8658
+ var updateCalendarEventSchema = import_zod22.z.object({
8659
+ syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
8660
+ appointmentId: import_zod22.z.string().nullable().optional(),
8661
+ eventName: import_zod22.z.string().optional(),
8626
8662
  eventTime: calendarEventTimeSchema.optional(),
8627
- description: import_zod21.z.string().optional(),
8628
- status: import_zod21.z.nativeEnum(CalendarEventStatus).optional(),
8629
- syncStatus: import_zod21.z.nativeEnum(CalendarSyncStatus).optional(),
8630
- eventType: import_zod21.z.nativeEnum(CalendarEventType).optional(),
8631
- updatedAt: import_zod21.z.any()
8663
+ description: import_zod22.z.string().optional(),
8664
+ status: import_zod22.z.nativeEnum(CalendarEventStatus).optional(),
8665
+ syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus).optional(),
8666
+ eventType: import_zod22.z.nativeEnum(CalendarEventType).optional(),
8667
+ updatedAt: import_zod22.z.any()
8632
8668
  // FieldValue for server timestamp
8633
8669
  });
8634
- var calendarEventSchema = import_zod21.z.object({
8635
- id: import_zod21.z.string(),
8636
- clinicBranchId: import_zod21.z.string().nullable().optional(),
8637
- clinicBranchInfo: import_zod21.z.any().nullable().optional(),
8670
+ var calendarEventSchema = import_zod22.z.object({
8671
+ id: import_zod22.z.string(),
8672
+ clinicBranchId: import_zod22.z.string().nullable().optional(),
8673
+ clinicBranchInfo: import_zod22.z.any().nullable().optional(),
8638
8674
  // Will be replaced with proper clinic info schema
8639
- practitionerProfileId: import_zod21.z.string().nullable().optional(),
8675
+ practitionerProfileId: import_zod22.z.string().nullable().optional(),
8640
8676
  practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
8641
- patientProfileId: import_zod21.z.string().nullable().optional(),
8677
+ patientProfileId: import_zod22.z.string().nullable().optional(),
8642
8678
  patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
8643
- procedureId: import_zod21.z.string().nullable().optional(),
8679
+ procedureId: import_zod22.z.string().nullable().optional(),
8644
8680
  procedureInfo: procedureInfoSchema.nullable().optional(),
8645
8681
  procedureCategorization: procedureCategorizationSchema.nullable().optional(),
8646
- appointmentId: import_zod21.z.string().nullable().optional(),
8647
- syncedCalendarEventId: import_zod21.z.array(syncedCalendarEventSchema).nullable().optional(),
8648
- eventName: import_zod21.z.string(),
8682
+ appointmentId: import_zod22.z.string().nullable().optional(),
8683
+ syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
8684
+ eventName: import_zod22.z.string(),
8649
8685
  eventLocation: clinicLocationSchema.optional(),
8650
8686
  eventTime: calendarEventTimeSchema,
8651
- description: import_zod21.z.string().optional(),
8652
- status: import_zod21.z.nativeEnum(CalendarEventStatus),
8653
- syncStatus: import_zod21.z.nativeEnum(CalendarSyncStatus),
8654
- eventType: import_zod21.z.nativeEnum(CalendarEventType),
8655
- createdAt: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp)),
8656
- updatedAt: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp))
8687
+ description: import_zod22.z.string().optional(),
8688
+ status: import_zod22.z.nativeEnum(CalendarEventStatus),
8689
+ syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus),
8690
+ eventType: import_zod22.z.nativeEnum(CalendarEventType),
8691
+ createdAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp)),
8692
+ updatedAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
8657
8693
  });
8658
8694
 
8659
8695
  // src/services/calendar/utils/clinic.utils.ts
@@ -11191,7 +11227,7 @@ var import_firestore38 = require("firebase/firestore");
11191
11227
  var REVIEWS_COLLECTION = "reviews";
11192
11228
 
11193
11229
  // src/services/reviews/reviews.service.ts
11194
- var import_zod22 = require("zod");
11230
+ var import_zod23 = require("zod");
11195
11231
  var ReviewService = class extends BaseService {
11196
11232
  constructor(db, auth, app) {
11197
11233
  super(db, auth, app);
@@ -11297,7 +11333,7 @@ var ReviewService = class extends BaseService {
11297
11333
  await Promise.all(updatePromises);
11298
11334
  return review;
11299
11335
  } catch (error) {
11300
- if (error instanceof import_zod22.z.ZodError) {
11336
+ if (error instanceof import_zod23.z.ZodError) {
11301
11337
  throw new Error(`Invalid review data: ${error.message}`);
11302
11338
  }
11303
11339
  throw error;
@@ -13560,54 +13596,54 @@ var ProductService = class extends BaseService {
13560
13596
  };
13561
13597
 
13562
13598
  // src/validations/notification.schema.ts
13563
- var import_zod23 = require("zod");
13564
- var baseNotificationSchema = import_zod23.z.object({
13565
- id: import_zod23.z.string().optional(),
13566
- userId: import_zod23.z.string(),
13567
- notificationTime: import_zod23.z.any(),
13599
+ var import_zod24 = require("zod");
13600
+ var baseNotificationSchema = import_zod24.z.object({
13601
+ id: import_zod24.z.string().optional(),
13602
+ userId: import_zod24.z.string(),
13603
+ notificationTime: import_zod24.z.any(),
13568
13604
  // Timestamp
13569
- notificationType: import_zod23.z.nativeEnum(NotificationType),
13570
- notificationTokens: import_zod23.z.array(import_zod23.z.string()),
13571
- status: import_zod23.z.nativeEnum(NotificationStatus),
13572
- createdAt: import_zod23.z.any().optional(),
13605
+ notificationType: import_zod24.z.nativeEnum(NotificationType),
13606
+ notificationTokens: import_zod24.z.array(import_zod24.z.string()),
13607
+ status: import_zod24.z.nativeEnum(NotificationStatus),
13608
+ createdAt: import_zod24.z.any().optional(),
13573
13609
  // Timestamp
13574
- updatedAt: import_zod23.z.any().optional(),
13610
+ updatedAt: import_zod24.z.any().optional(),
13575
13611
  // Timestamp
13576
- title: import_zod23.z.string(),
13577
- body: import_zod23.z.string(),
13578
- isRead: import_zod23.z.boolean(),
13579
- userRole: import_zod23.z.nativeEnum(UserRole)
13612
+ title: import_zod24.z.string(),
13613
+ body: import_zod24.z.string(),
13614
+ isRead: import_zod24.z.boolean(),
13615
+ userRole: import_zod24.z.nativeEnum(UserRole)
13580
13616
  });
13581
13617
  var preRequirementNotificationSchema = baseNotificationSchema.extend({
13582
- notificationType: import_zod23.z.literal("preRequirement" /* PRE_REQUIREMENT */),
13583
- treatmentId: import_zod23.z.string(),
13584
- requirements: import_zod23.z.array(import_zod23.z.string()),
13585
- deadline: import_zod23.z.any()
13618
+ notificationType: import_zod24.z.literal("preRequirement" /* PRE_REQUIREMENT */),
13619
+ treatmentId: import_zod24.z.string(),
13620
+ requirements: import_zod24.z.array(import_zod24.z.string()),
13621
+ deadline: import_zod24.z.any()
13586
13622
  // Timestamp
13587
13623
  });
13588
13624
  var postRequirementNotificationSchema = baseNotificationSchema.extend({
13589
- notificationType: import_zod23.z.literal("postRequirement" /* POST_REQUIREMENT */),
13590
- treatmentId: import_zod23.z.string(),
13591
- requirements: import_zod23.z.array(import_zod23.z.string()),
13592
- deadline: import_zod23.z.any()
13625
+ notificationType: import_zod24.z.literal("postRequirement" /* POST_REQUIREMENT */),
13626
+ treatmentId: import_zod24.z.string(),
13627
+ requirements: import_zod24.z.array(import_zod24.z.string()),
13628
+ deadline: import_zod24.z.any()
13593
13629
  // Timestamp
13594
13630
  });
13595
13631
  var appointmentReminderNotificationSchema = baseNotificationSchema.extend({
13596
- notificationType: import_zod23.z.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
13597
- appointmentId: import_zod23.z.string(),
13598
- appointmentTime: import_zod23.z.any(),
13632
+ notificationType: import_zod24.z.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
13633
+ appointmentId: import_zod24.z.string(),
13634
+ appointmentTime: import_zod24.z.any(),
13599
13635
  // Timestamp
13600
- treatmentType: import_zod23.z.string(),
13601
- doctorName: import_zod23.z.string()
13636
+ treatmentType: import_zod24.z.string(),
13637
+ doctorName: import_zod24.z.string()
13602
13638
  });
13603
13639
  var appointmentNotificationSchema = baseNotificationSchema.extend({
13604
- notificationType: import_zod23.z.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
13605
- appointmentId: import_zod23.z.string(),
13606
- appointmentStatus: import_zod23.z.string(),
13607
- previousStatus: import_zod23.z.string(),
13608
- reason: import_zod23.z.string().optional()
13640
+ notificationType: import_zod24.z.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
13641
+ appointmentId: import_zod24.z.string(),
13642
+ appointmentStatus: import_zod24.z.string(),
13643
+ previousStatus: import_zod24.z.string(),
13644
+ reason: import_zod24.z.string().optional()
13609
13645
  });
13610
- var notificationSchema = import_zod23.z.discriminatedUnion("notificationType", [
13646
+ var notificationSchema = import_zod24.z.discriminatedUnion("notificationType", [
13611
13647
  preRequirementNotificationSchema,
13612
13648
  postRequirementNotificationSchema,
13613
13649
  appointmentReminderNotificationSchema,
@@ -13748,7 +13784,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
13748
13784
  clinicContactInfoSchema,
13749
13785
  clinicGroupSchema,
13750
13786
  clinicGroupSetupSchema,
13751
- clinicInfoSchema,
13752
13787
  clinicLocationSchema,
13753
13788
  clinicReviewInfoSchema,
13754
13789
  clinicReviewSchema,
@@ -13776,7 +13811,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
13776
13811
  createProcedureReviewSchema,
13777
13812
  createReviewSchema,
13778
13813
  createUserOptionsSchema,
13779
- doctorInfoSchema,
13780
13814
  documentElementSchema,
13781
13815
  documentElementWithoutIdSchema,
13782
13816
  documentTemplateSchema,
@@ -13815,7 +13849,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
13815
13849
  procedureInfoSchema,
13816
13850
  procedureReviewInfoSchema,
13817
13851
  procedureReviewSchema,
13818
- procedureSummaryInfoSchema,
13819
13852
  requesterInfoSchema,
13820
13853
  reviewSchema,
13821
13854
  searchAppointmentsSchema,