@blackcode_sa/metaestetics-api 1.6.1 → 1.6.3

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");
@@ -2297,6 +2294,51 @@ var getPatientsByPractitionerUtil = async (db, practitionerId, options) => {
2297
2294
  );
2298
2295
  }
2299
2296
  };
2297
+ var getPatientsByPractitionerWithDetailsUtil = async (db, practitionerId, options) => {
2298
+ try {
2299
+ console.log(
2300
+ `[getPatientsByPractitionerWithDetailsUtil] Fetching detailed patient profiles for practitioner ID: ${practitionerId} with options:`,
2301
+ options
2302
+ );
2303
+ const patientProfiles = await getPatientsByPractitionerUtil(
2304
+ db,
2305
+ practitionerId,
2306
+ options
2307
+ );
2308
+ const patientProfilesWithDetails = await Promise.all(
2309
+ patientProfiles.map(async (profile) => {
2310
+ try {
2311
+ const sensitiveInfoDoc = await (0, import_firestore9.getDoc)(
2312
+ getSensitiveInfoDocRef(db, profile.id)
2313
+ );
2314
+ const sensitiveInfo = sensitiveInfoDoc.exists() ? sensitiveInfoDoc.data() : void 0;
2315
+ return {
2316
+ patientProfile: profile,
2317
+ patientSensitiveInfo: sensitiveInfo
2318
+ };
2319
+ } catch (error) {
2320
+ console.error(
2321
+ `[getPatientsByPractitionerWithDetailsUtil] Error fetching sensitive info for patient ${profile.id}:`,
2322
+ error
2323
+ );
2324
+ return { patientProfile: profile };
2325
+ }
2326
+ })
2327
+ );
2328
+ console.log(
2329
+ `[getPatientsByPractitionerWithDetailsUtil] Found ${patientProfilesWithDetails.length} detailed patient profiles for practitioner ID: ${practitionerId}`
2330
+ );
2331
+ return patientProfilesWithDetails;
2332
+ } catch (error) {
2333
+ console.error(
2334
+ `[getPatientsByPractitionerWithDetailsUtil] Error fetching detailed patient profiles:`,
2335
+ error
2336
+ );
2337
+ throw new Error(
2338
+ `Failed to retrieve detailed patient profiles: ${error instanceof Error ? error.message : String(error)}`
2339
+ );
2340
+ }
2341
+ };
2300
2342
 
2301
2343
  // src/services/patient/utils/clinic.utils.ts
2302
2344
  var import_firestore10 = require("firebase/firestore");
@@ -2625,6 +2667,25 @@ var PatientService = class extends BaseService {
2625
2667
  );
2626
2668
  return getPatientsByPractitionerUtil(this.db, practitionerId, options);
2627
2669
  }
2670
+ /**
2671
+ * Gets all patients associated with a specific practitioner with their sensitive information.
2672
+ *
2673
+ * @param {string} practitionerId - ID of the practitioner whose patients to retrieve
2674
+ * @param {Object} options - Optional parameters for pagination
2675
+ * @param {number} options.limit - Maximum number of profiles to return
2676
+ * @param {string} options.startAfter - The ID of the document to start after (for pagination)
2677
+ * @returns {Promise<PatientProfileForDoctor[]>} A promise resolving to an array of patient profiles with sensitive info
2678
+ */
2679
+ async getPatientsByPractitionerWithDetails(practitionerId, options) {
2680
+ console.log(
2681
+ `[PatientService.getPatientsByPractitionerWithDetails] Fetching detailed patient profiles for practitioner: ${practitionerId}`
2682
+ );
2683
+ return getPatientsByPractitionerWithDetailsUtil(
2684
+ this.db,
2685
+ practitionerId,
2686
+ options
2687
+ );
2688
+ }
2628
2689
  /**
2629
2690
  * Gets all patients associated with a specific clinic.
2630
2691
  *
@@ -2643,7 +2704,7 @@ var PatientService = class extends BaseService {
2643
2704
  };
2644
2705
 
2645
2706
  // src/services/clinic/utils/admin.utils.ts
2646
- var import_firestore14 = require("firebase/firestore");
2707
+ var import_firestore13 = require("firebase/firestore");
2647
2708
 
2648
2709
  // src/types/clinic/preferences.types.ts
2649
2710
  var PracticeType = /* @__PURE__ */ ((PracticeType2) => {
@@ -2770,52 +2831,8 @@ var SubscriptionModel = /* @__PURE__ */ ((SubscriptionModel2) => {
2770
2831
 
2771
2832
  // src/validations/clinic.schema.ts
2772
2833
  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
2834
  var import_firestore12 = require("firebase/firestore");
2778
2835
 
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
2836
  // src/validations/reviews.schema.ts
2820
2837
  var import_zod10 = require("zod");
2821
2838
  var baseReviewSchema = import_zod10.z.object({
@@ -2949,6 +2966,9 @@ var createReviewSchema = import_zod10.z.object({
2949
2966
  }
2950
2967
  );
2951
2968
 
2969
+ // src/validations/shared.schema.ts
2970
+ var import_zod11 = require("zod");
2971
+
2952
2972
  // src/backoffice/types/static/procedure-family.types.ts
2953
2973
  var ProcedureFamily = /* @__PURE__ */ ((ProcedureFamily2) => {
2954
2974
  ProcedureFamily2["AESTHETICS"] = "aesthetics";
@@ -2975,59 +2995,21 @@ var Currency = /* @__PURE__ */ ((Currency2) => {
2975
2995
  return Currency2;
2976
2996
  })(Currency || {});
2977
2997
 
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),
2998
+ // src/validations/shared.schema.ts
2999
+ var sharedClinicContactInfoSchema = import_zod11.z.object({
2983
3000
  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)
3001
+ phoneNumber: import_zod11.z.string(),
3002
+ alternativePhoneNumber: import_zod11.z.string().nullable().optional(),
3003
+ website: import_zod11.z.string().nullable().optional()
2990
3004
  });
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())
3016
- });
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())
3005
+ var sharedClinicLocationSchema = import_zod11.z.object({
3006
+ address: import_zod11.z.string(),
3007
+ city: import_zod11.z.string(),
3008
+ country: import_zod11.z.string(),
3009
+ postalCode: import_zod11.z.string(),
3010
+ latitude: import_zod11.z.number().min(-90).max(90),
3011
+ longitude: import_zod11.z.number().min(-180).max(180),
3012
+ geohash: import_zod11.z.string().nullable().optional()
3031
3013
  });
3032
3014
  var procedureSummaryInfoSchema = import_zod11.z.object({
3033
3015
  id: import_zod11.z.string().min(1),
@@ -3047,79 +3029,22 @@ var procedureSummaryInfoSchema = import_zod11.z.object({
3047
3029
  practitionerId: import_zod11.z.string().min(1),
3048
3030
  practitionerName: import_zod11.z.string().min(1)
3049
3031
  });
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())
3032
+ var clinicInfoSchema = import_zod11.z.object({
3033
+ id: import_zod11.z.string(),
3034
+ featuredPhoto: import_zod11.z.string(),
3035
+ name: import_zod11.z.string(),
3036
+ description: import_zod11.z.string().nullable().optional(),
3037
+ location: sharedClinicLocationSchema,
3038
+ contactInfo: sharedClinicContactInfoSchema
3066
3039
  });
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()
3107
- });
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()
3040
+ var doctorInfoSchema = import_zod11.z.object({
3041
+ id: import_zod11.z.string(),
3042
+ name: import_zod11.z.string(),
3043
+ description: import_zod11.z.string().nullable().optional(),
3044
+ photo: import_zod11.z.string(),
3045
+ rating: import_zod11.z.number().min(0).max(5),
3046
+ services: import_zod11.z.array(import_zod11.z.string())
3047
+ // List of procedure IDs practitioner offers
3123
3048
  });
3124
3049
 
3125
3050
  // src/validations/clinic.schema.ts
@@ -3172,23 +3097,6 @@ var adminInfoSchema = import_zod12.z.object({
3172
3097
  name: import_zod12.z.string(),
3173
3098
  email: import_zod12.z.string().email()
3174
3099
  });
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
3100
  var clinicAdminSchema = import_zod12.z.object({
3193
3101
  id: import_zod12.z.string(),
3194
3102
  userRef: import_zod12.z.string(),
@@ -3198,8 +3106,8 @@ var clinicAdminSchema = import_zod12.z.object({
3198
3106
  clinicsManagedInfo: import_zod12.z.array(clinicInfoSchema),
3199
3107
  contactInfo: contactPersonSchema,
3200
3108
  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)),
3109
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3110
+ updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3203
3111
  isActive: import_zod12.z.boolean()
3204
3112
  });
3205
3113
  var adminTokenSchema = import_zod12.z.object({
@@ -3208,9 +3116,9 @@ var adminTokenSchema = import_zod12.z.object({
3208
3116
  email: import_zod12.z.string().email().optional().nullable(),
3209
3117
  status: import_zod12.z.nativeEnum(AdminTokenStatus),
3210
3118
  usedByUserRef: import_zod12.z.string().optional(),
3211
- 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)),
3212
3120
  // Timestamp
3213
- expiresAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp))
3121
+ expiresAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp))
3214
3122
  // Timestamp
3215
3123
  });
3216
3124
  var createAdminTokenSchema = import_zod12.z.object({
@@ -3230,9 +3138,9 @@ var clinicGroupSchema = import_zod12.z.object({
3230
3138
  adminsInfo: import_zod12.z.array(adminInfoSchema),
3231
3139
  adminTokens: import_zod12.z.array(adminTokenSchema),
3232
3140
  ownerId: import_zod12.z.string().nullable(),
3233
- createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3141
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3234
3142
  // Timestamp
3235
- updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3143
+ updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3236
3144
  // Timestamp
3237
3145
  isActive: import_zod12.z.boolean(),
3238
3146
  logo: import_zod12.z.string().optional().nullable(),
@@ -3272,9 +3180,9 @@ var clinicSchema = import_zod12.z.object({
3272
3180
  // servicesInfo: z.array(serviceInfoSchema), // Deprecated, use proceduresInfo
3273
3181
  reviewInfo: clinicReviewInfoSchema,
3274
3182
  admins: import_zod12.z.array(import_zod12.z.string()),
3275
- createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3183
+ createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3276
3184
  // Timestamp
3277
- updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore13.Timestamp)),
3185
+ updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
3278
3186
  // Timestamp
3279
3187
  isActive: import_zod12.z.boolean(),
3280
3188
  isVerified: import_zod12.z.boolean(),
@@ -3464,7 +3372,7 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3464
3372
  }
3465
3373
  console.log("[CLINIC_ADMIN] Preparing admin data object");
3466
3374
  const adminData = {
3467
- id: (0, import_firestore14.doc)((0, import_firestore14.collection)(db, CLINIC_ADMINS_COLLECTION)).id,
3375
+ id: (0, import_firestore13.doc)((0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION)).id,
3468
3376
  // Generate a new ID for the admin document
3469
3377
  userRef: validatedData.userRef,
3470
3378
  clinicGroupId: clinicGroupId || "",
@@ -3477,15 +3385,15 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3477
3385
  contactInfo: validatedData.contactInfo,
3478
3386
  roleTitle: validatedData.roleTitle,
3479
3387
  isActive: validatedData.isActive,
3480
- createdAt: (0, import_firestore14.serverTimestamp)(),
3481
- updatedAt: (0, import_firestore14.serverTimestamp)()
3388
+ createdAt: (0, import_firestore13.serverTimestamp)(),
3389
+ updatedAt: (0, import_firestore13.serverTimestamp)()
3482
3390
  };
3483
3391
  console.log("[CLINIC_ADMIN] Validating complete admin object");
3484
3392
  try {
3485
3393
  clinicAdminSchema.parse({
3486
3394
  ...adminData,
3487
- createdAt: import_firestore14.Timestamp.now(),
3488
- updatedAt: import_firestore14.Timestamp.now()
3395
+ createdAt: import_firestore13.Timestamp.now(),
3396
+ updatedAt: import_firestore13.Timestamp.now()
3489
3397
  });
3490
3398
  console.log("[CLINIC_ADMIN] Admin object validation passed");
3491
3399
  } catch (schemaError) {
@@ -3499,7 +3407,7 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3499
3407
  adminId: adminData.id
3500
3408
  });
3501
3409
  try {
3502
- await (0, import_firestore14.setDoc)((0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminData.id), adminData);
3410
+ await (0, import_firestore13.setDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminData.id), adminData);
3503
3411
  console.log("[CLINIC_ADMIN] Admin saved successfully");
3504
3412
  } catch (firestoreError) {
3505
3413
  console.error(
@@ -3548,30 +3456,30 @@ async function checkClinicGroupExists(db, groupId, clinicGroupService) {
3548
3456
  return !!group;
3549
3457
  }
3550
3458
  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);
3459
+ const docRef = (0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId);
3460
+ const docSnap = await (0, import_firestore13.getDoc)(docRef);
3553
3461
  if (docSnap.exists()) {
3554
3462
  return docSnap.data();
3555
3463
  }
3556
3464
  return null;
3557
3465
  }
3558
3466
  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)
3467
+ const q = (0, import_firestore13.query)(
3468
+ (0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION),
3469
+ (0, import_firestore13.where)("userRef", "==", userRef)
3562
3470
  );
3563
- const querySnapshot = await (0, import_firestore14.getDocs)(q);
3471
+ const querySnapshot = await (0, import_firestore13.getDocs)(q);
3564
3472
  if (querySnapshot.empty) {
3565
3473
  return null;
3566
3474
  }
3567
3475
  return querySnapshot.docs[0].data();
3568
3476
  }
3569
3477
  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)
3478
+ const q = (0, import_firestore13.query)(
3479
+ (0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION),
3480
+ (0, import_firestore13.where)("clinicGroupId", "==", clinicGroupId)
3573
3481
  );
3574
- const querySnapshot = await (0, import_firestore14.getDocs)(q);
3482
+ const querySnapshot = await (0, import_firestore13.getDocs)(q);
3575
3483
  return querySnapshot.docs.map((doc32) => doc32.data());
3576
3484
  }
3577
3485
  async function updateClinicAdmin(db, adminId, data) {
@@ -3581,9 +3489,9 @@ async function updateClinicAdmin(db, adminId, data) {
3581
3489
  }
3582
3490
  const updatedData = {
3583
3491
  ...data,
3584
- updatedAt: (0, import_firestore14.serverTimestamp)()
3492
+ updatedAt: (0, import_firestore13.serverTimestamp)()
3585
3493
  };
3586
- await (0, import_firestore14.updateDoc)((0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminId), updatedData);
3494
+ await (0, import_firestore13.updateDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId), updatedData);
3587
3495
  const updatedAdmin = await getClinicAdmin(db, adminId);
3588
3496
  if (!updatedAdmin) {
3589
3497
  throw new Error("Failed to retrieve updated admin");
@@ -3595,7 +3503,7 @@ async function deleteClinicAdmin(db, adminId) {
3595
3503
  if (!admin) {
3596
3504
  throw new Error("Clinic admin not found");
3597
3505
  }
3598
- await (0, import_firestore14.deleteDoc)((0, import_firestore14.doc)(db, CLINIC_ADMINS_COLLECTION, adminId));
3506
+ await (0, import_firestore13.deleteDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId));
3599
3507
  }
3600
3508
  async function addClinicToManaged(db, adminId, clinicId, requesterId, clinicService) {
3601
3509
  const admin = await getClinicAdmin(db, adminId);
@@ -3837,7 +3745,182 @@ var ClinicAdminService = class extends BaseService {
3837
3745
 
3838
3746
  // src/services/practitioner/practitioner.service.ts
3839
3747
  var import_firestore15 = require("firebase/firestore");
3748
+
3749
+ // src/types/practitioner/index.ts
3750
+ var PRACTITIONERS_COLLECTION = "practitioners";
3751
+ var REGISTER_TOKENS_COLLECTION = "register_tokens";
3752
+ var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
3753
+ PractitionerStatus2["DRAFT"] = "draft";
3754
+ PractitionerStatus2["ACTIVE"] = "active";
3755
+ return PractitionerStatus2;
3756
+ })(PractitionerStatus || {});
3757
+ var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
3758
+ PractitionerTokenStatus2["ACTIVE"] = "active";
3759
+ PractitionerTokenStatus2["USED"] = "used";
3760
+ PractitionerTokenStatus2["EXPIRED"] = "expired";
3761
+ PractitionerTokenStatus2["REVOKED"] = "revoked";
3762
+ return PractitionerTokenStatus2;
3763
+ })(PractitionerTokenStatus || {});
3764
+
3765
+ // src/validations/practitioner.schema.ts
3840
3766
  var import_zod13 = require("zod");
3767
+ var import_firestore14 = require("firebase/firestore");
3768
+
3769
+ // src/backoffice/types/static/certification.types.ts
3770
+ var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
3771
+ CertificationLevel2["AESTHETICIAN"] = "aesthetician";
3772
+ CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
3773
+ CertificationLevel2["NURSE"] = "nurse";
3774
+ CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
3775
+ CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
3776
+ CertificationLevel2["DOCTOR"] = "doctor";
3777
+ CertificationLevel2["SPECIALIST"] = "specialist";
3778
+ CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
3779
+ return CertificationLevel2;
3780
+ })(CertificationLevel || {});
3781
+ var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
3782
+ CertificationSpecialty3["LASER"] = "laser";
3783
+ CertificationSpecialty3["INJECTABLES"] = "injectables";
3784
+ CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
3785
+ CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
3786
+ CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
3787
+ CertificationSpecialty3["SKIN_CARE"] = "skin_care";
3788
+ CertificationSpecialty3["WOUND_CARE"] = "wound_care";
3789
+ CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
3790
+ return CertificationSpecialty3;
3791
+ })(CertificationSpecialty || {});
3792
+
3793
+ // src/validations/practitioner.schema.ts
3794
+ var practitionerBasicInfoSchema = import_zod13.z.object({
3795
+ firstName: import_zod13.z.string().min(2).max(50),
3796
+ lastName: import_zod13.z.string().min(2).max(50),
3797
+ title: import_zod13.z.string().min(2).max(100),
3798
+ email: import_zod13.z.string().email(),
3799
+ phoneNumber: import_zod13.z.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number"),
3800
+ dateOfBirth: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3801
+ gender: import_zod13.z.enum(["male", "female", "other"]),
3802
+ profileImageUrl: import_zod13.z.string().url().optional(),
3803
+ bio: import_zod13.z.string().max(1e3).optional(),
3804
+ languages: import_zod13.z.array(import_zod13.z.string()).min(1)
3805
+ });
3806
+ var practitionerCertificationSchema = import_zod13.z.object({
3807
+ level: import_zod13.z.nativeEnum(CertificationLevel),
3808
+ specialties: import_zod13.z.array(import_zod13.z.nativeEnum(CertificationSpecialty)),
3809
+ licenseNumber: import_zod13.z.string().min(3).max(50),
3810
+ issuingAuthority: import_zod13.z.string().min(2).max(100),
3811
+ issueDate: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3812
+ expiryDate: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()).optional(),
3813
+ verificationStatus: import_zod13.z.enum(["pending", "verified", "rejected"])
3814
+ });
3815
+ var timeSlotSchema = import_zod13.z.object({
3816
+ start: import_zod13.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
3817
+ end: import_zod13.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
3818
+ }).nullable();
3819
+ var practitionerWorkingHoursSchema = import_zod13.z.object({
3820
+ practitionerId: import_zod13.z.string().min(1),
3821
+ clinicId: import_zod13.z.string().min(1),
3822
+ monday: timeSlotSchema,
3823
+ tuesday: timeSlotSchema,
3824
+ wednesday: timeSlotSchema,
3825
+ thursday: timeSlotSchema,
3826
+ friday: timeSlotSchema,
3827
+ saturday: timeSlotSchema,
3828
+ sunday: timeSlotSchema,
3829
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3830
+ updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
3831
+ });
3832
+ var practitionerClinicWorkingHoursSchema = import_zod13.z.object({
3833
+ clinicId: import_zod13.z.string().min(1),
3834
+ workingHours: import_zod13.z.object({
3835
+ monday: timeSlotSchema,
3836
+ tuesday: timeSlotSchema,
3837
+ wednesday: timeSlotSchema,
3838
+ thursday: timeSlotSchema,
3839
+ friday: timeSlotSchema,
3840
+ saturday: timeSlotSchema,
3841
+ sunday: timeSlotSchema
3842
+ }),
3843
+ isActive: import_zod13.z.boolean(),
3844
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3845
+ updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
3846
+ });
3847
+ var practitionerSchema = import_zod13.z.object({
3848
+ id: import_zod13.z.string().min(1),
3849
+ userRef: import_zod13.z.string().min(1),
3850
+ basicInfo: practitionerBasicInfoSchema,
3851
+ certification: practitionerCertificationSchema,
3852
+ clinics: import_zod13.z.array(import_zod13.z.string()),
3853
+ clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema),
3854
+ clinicsInfo: import_zod13.z.array(clinicInfoSchema),
3855
+ procedures: import_zod13.z.array(import_zod13.z.string()),
3856
+ proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema),
3857
+ reviewInfo: practitionerReviewInfoSchema,
3858
+ isActive: import_zod13.z.boolean(),
3859
+ isVerified: import_zod13.z.boolean(),
3860
+ status: import_zod13.z.nativeEnum(PractitionerStatus),
3861
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3862
+ updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
3863
+ });
3864
+ var createPractitionerSchema = import_zod13.z.object({
3865
+ userRef: import_zod13.z.string().min(1),
3866
+ basicInfo: practitionerBasicInfoSchema,
3867
+ certification: practitionerCertificationSchema,
3868
+ clinics: import_zod13.z.array(import_zod13.z.string()).optional(),
3869
+ clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema).optional(),
3870
+ clinicsInfo: import_zod13.z.array(clinicInfoSchema).optional(),
3871
+ proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema).optional(),
3872
+ isActive: import_zod13.z.boolean(),
3873
+ isVerified: import_zod13.z.boolean(),
3874
+ status: import_zod13.z.nativeEnum(PractitionerStatus).optional()
3875
+ });
3876
+ var createDraftPractitionerSchema = import_zod13.z.object({
3877
+ basicInfo: practitionerBasicInfoSchema,
3878
+ certification: practitionerCertificationSchema,
3879
+ clinics: import_zod13.z.array(import_zod13.z.string()).optional(),
3880
+ clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema).optional(),
3881
+ clinicsInfo: import_zod13.z.array(clinicInfoSchema).optional(),
3882
+ proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema).optional(),
3883
+ isActive: import_zod13.z.boolean().optional().default(false),
3884
+ isVerified: import_zod13.z.boolean().optional().default(false)
3885
+ });
3886
+ var practitionerTokenSchema = import_zod13.z.object({
3887
+ id: import_zod13.z.string().min(1),
3888
+ token: import_zod13.z.string().min(6),
3889
+ practitionerId: import_zod13.z.string().min(1),
3890
+ email: import_zod13.z.string().email(),
3891
+ clinicId: import_zod13.z.string().min(1),
3892
+ status: import_zod13.z.nativeEnum(PractitionerTokenStatus),
3893
+ createdBy: import_zod13.z.string().min(1),
3894
+ createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3895
+ expiresAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
3896
+ usedBy: import_zod13.z.string().optional(),
3897
+ usedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()).optional()
3898
+ });
3899
+ var createPractitionerTokenSchema = import_zod13.z.object({
3900
+ practitionerId: import_zod13.z.string().min(1),
3901
+ email: import_zod13.z.string().email(),
3902
+ clinicId: import_zod13.z.string().min(1),
3903
+ expiresAt: import_zod13.z.date().optional()
3904
+ });
3905
+ var practitionerSignupSchema = import_zod13.z.object({
3906
+ email: import_zod13.z.string().email(),
3907
+ password: import_zod13.z.string().min(8),
3908
+ firstName: import_zod13.z.string().min(2).max(50),
3909
+ lastName: import_zod13.z.string().min(2).max(50),
3910
+ token: import_zod13.z.string().optional(),
3911
+ profileData: import_zod13.z.object({
3912
+ basicInfo: import_zod13.z.object({
3913
+ phoneNumber: import_zod13.z.string().optional(),
3914
+ profileImageUrl: import_zod13.z.string().optional(),
3915
+ gender: import_zod13.z.enum(["male", "female", "other"]).optional(),
3916
+ bio: import_zod13.z.string().optional()
3917
+ }).optional(),
3918
+ certification: import_zod13.z.any().optional()
3919
+ }).optional()
3920
+ });
3921
+
3922
+ // src/services/practitioner/practitioner.service.ts
3923
+ var import_zod14 = require("zod");
3841
3924
  var import_geofire_common2 = require("geofire-common");
3842
3925
  var PractitionerService = class extends BaseService {
3843
3926
  constructor(db, auth, app, clinicService) {
@@ -3906,7 +3989,7 @@ var PractitionerService = class extends BaseService {
3906
3989
  }
3907
3990
  return createdPractitioner;
3908
3991
  } catch (error) {
3909
- if (error instanceof import_zod13.z.ZodError) {
3992
+ if (error instanceof import_zod14.z.ZodError) {
3910
3993
  throw new Error(`Invalid practitioner data: ${error.message}`);
3911
3994
  }
3912
3995
  console.error("Error creating practitioner:", error);
@@ -3961,7 +4044,8 @@ var PractitionerService = class extends BaseService {
3961
4044
  name: clinicData.name,
3962
4045
  location: clinicData.location,
3963
4046
  contactInfo: clinicData.contactInfo,
3964
- featuredPhoto: clinicData.coverPhoto || "",
4047
+ // Make sure we're using the right property for featuredPhoto
4048
+ featuredPhoto: clinicData.featuredPhotos && clinicData.featuredPhotos.length > 0 ? clinicData.featuredPhotos[0] : clinicData.coverPhoto || "",
3965
4049
  description: clinicData.description || null
3966
4050
  });
3967
4051
  }
@@ -4018,7 +4102,7 @@ var PractitionerService = class extends BaseService {
4018
4102
  await (0, import_firestore15.setDoc)((0, import_firestore15.doc)(this.db, tokenPath), token);
4019
4103
  return { practitioner: savedPractitioner, token };
4020
4104
  } catch (error) {
4021
- if (error instanceof import_zod13.z.ZodError) {
4105
+ if (error instanceof import_zod14.z.ZodError) {
4022
4106
  throw new Error("Invalid practitioner data: " + error.message);
4023
4107
  }
4024
4108
  throw error;
@@ -4071,7 +4155,7 @@ var PractitionerService = class extends BaseService {
4071
4155
  await (0, import_firestore15.setDoc)((0, import_firestore15.doc)(this.db, tokenPath), token);
4072
4156
  return token;
4073
4157
  } catch (error) {
4074
- if (error instanceof import_zod13.z.ZodError) {
4158
+ if (error instanceof import_zod14.z.ZodError) {
4075
4159
  throw new Error("Invalid token data: " + error.message);
4076
4160
  }
4077
4161
  throw error;
@@ -4231,7 +4315,7 @@ var PractitionerService = class extends BaseService {
4231
4315
  }
4232
4316
  return updatedPractitioner;
4233
4317
  } catch (error) {
4234
- if (error instanceof import_zod13.z.ZodError) {
4318
+ if (error instanceof import_zod14.z.ZodError) {
4235
4319
  throw new Error(`Invalid practitioner update data: ${error.message}`);
4236
4320
  }
4237
4321
  console.error(`Error updating practitioner ${practitionerId}:`, error);
@@ -4759,7 +4843,7 @@ var UserService = class extends BaseService {
4759
4843
  });
4760
4844
  return this.getUserById(uid);
4761
4845
  } catch (error) {
4762
- if (error instanceof import_zod14.z.ZodError) {
4846
+ if (error instanceof import_zod15.z.ZodError) {
4763
4847
  throw USER_ERRORS.VALIDATION_ERROR;
4764
4848
  }
4765
4849
  throw error;
@@ -4846,7 +4930,7 @@ var UserService = class extends BaseService {
4846
4930
  // src/services/clinic/utils/clinic-group.utils.ts
4847
4931
  var import_firestore17 = require("firebase/firestore");
4848
4932
  var import_geofire_common3 = require("geofire-common");
4849
- var import_zod15 = require("zod");
4933
+ var import_zod16 = require("zod");
4850
4934
 
4851
4935
  // src/services/clinic/utils/photos.utils.ts
4852
4936
  var import_storage3 = require("firebase/storage");
@@ -5044,7 +5128,7 @@ async function createClinicGroup(db, data, ownerId, isDefault = false, clinicAdm
5044
5128
  });
5045
5129
  return groupData;
5046
5130
  } catch (error) {
5047
- if (error instanceof import_zod15.z.ZodError) {
5131
+ if (error instanceof import_zod16.z.ZodError) {
5048
5132
  console.error(
5049
5133
  "[CLINIC_GROUP] Zod validation error:",
5050
5134
  JSON.stringify(error.errors, null, 2)
@@ -5449,12 +5533,12 @@ var ClinicGroupService = class extends BaseService {
5449
5533
  // src/services/clinic/clinic.service.ts
5450
5534
  var import_firestore21 = require("firebase/firestore");
5451
5535
  var import_geofire_common7 = require("geofire-common");
5452
- var import_zod17 = require("zod");
5536
+ var import_zod18 = require("zod");
5453
5537
 
5454
5538
  // src/services/clinic/utils/clinic.utils.ts
5455
5539
  var import_firestore18 = require("firebase/firestore");
5456
5540
  var import_geofire_common4 = require("geofire-common");
5457
- var import_zod16 = require("zod");
5541
+ var import_zod17 = require("zod");
5458
5542
  async function getClinic(db, clinicId) {
5459
5543
  const docRef = (0, import_firestore18.doc)(db, CLINICS_COLLECTION, clinicId);
5460
5544
  const docSnap = await (0, import_firestore18.getDoc)(docRef);
@@ -6126,7 +6210,7 @@ var ClinicService = class extends BaseService {
6126
6210
  if (!savedClinic) throw new Error("Failed to retrieve created clinic");
6127
6211
  return savedClinic;
6128
6212
  } catch (error) {
6129
- if (error instanceof import_zod17.z.ZodError) {
6213
+ if (error instanceof import_zod18.z.ZodError) {
6130
6214
  throw new Error("Invalid clinic data: " + error.message);
6131
6215
  }
6132
6216
  console.error("Error creating clinic:", error);
@@ -6174,7 +6258,7 @@ var ClinicService = class extends BaseService {
6174
6258
  if (!updatedClinic) throw new Error("Failed to retrieve updated clinic");
6175
6259
  return updatedClinic;
6176
6260
  } catch (error) {
6177
- if (error instanceof import_zod17.z.ZodError) {
6261
+ if (error instanceof import_zod18.z.ZodError) {
6178
6262
  throw new Error(
6179
6263
  "Invalid clinic update data: " + error.errors.map((e) => `${e.path.join(".")} - ${e.message}`).join(", ")
6180
6264
  );
@@ -6633,7 +6717,7 @@ var AuthService = class extends BaseService {
6633
6717
  clinicAdmin: adminProfile
6634
6718
  };
6635
6719
  } catch (error) {
6636
- if (error instanceof import_zod18.z.ZodError) {
6720
+ if (error instanceof import_zod19.z.ZodError) {
6637
6721
  console.error(
6638
6722
  "[AUTH] Zod validation error in signUpClinicAdmin:",
6639
6723
  JSON.stringify(error.errors, null, 2)
@@ -6806,7 +6890,7 @@ var AuthService = class extends BaseService {
6806
6890
  email
6807
6891
  );
6808
6892
  } catch (error) {
6809
- if (error instanceof import_zod18.z.ZodError) {
6893
+ if (error instanceof import_zod19.z.ZodError) {
6810
6894
  throw AUTH_ERRORS.VALIDATION_ERROR;
6811
6895
  }
6812
6896
  const firebaseError = error;
@@ -6929,7 +7013,7 @@ var AuthService = class extends BaseService {
6929
7013
  await emailSchema.parseAsync(email);
6930
7014
  await (0, import_auth5.sendPasswordResetEmail)(this.auth, email);
6931
7015
  } catch (error) {
6932
- if (error instanceof import_zod18.z.ZodError) {
7016
+ if (error instanceof import_zod19.z.ZodError) {
6933
7017
  throw AUTH_ERRORS.VALIDATION_ERROR;
6934
7018
  }
6935
7019
  const firebaseError = error;
@@ -6968,7 +7052,7 @@ var AuthService = class extends BaseService {
6968
7052
  await passwordSchema.parseAsync(newPassword);
6969
7053
  await (0, import_auth5.confirmPasswordReset)(this.auth, oobCode, newPassword);
6970
7054
  } catch (error) {
6971
- if (error instanceof import_zod18.z.ZodError) {
7055
+ if (error instanceof import_zod19.z.ZodError) {
6972
7056
  throw AUTH_ERRORS.VALIDATION_ERROR;
6973
7057
  }
6974
7058
  const firebaseError = error;
@@ -7137,7 +7221,7 @@ var AuthService = class extends BaseService {
7137
7221
  practitioner
7138
7222
  };
7139
7223
  } catch (error) {
7140
- if (error instanceof import_zod18.z.ZodError) {
7224
+ if (error instanceof import_zod19.z.ZodError) {
7141
7225
  console.error(
7142
7226
  "[AUTH] Zod validation error in signUpPractitioner:",
7143
7227
  JSON.stringify(error.errors, null, 2)
@@ -7402,59 +7486,59 @@ var import_firestore24 = require("firebase/firestore");
7402
7486
  var PROCEDURES_COLLECTION = "procedures";
7403
7487
 
7404
7488
  // src/validations/procedure.schema.ts
7405
- var import_zod19 = require("zod");
7406
- var createProcedureSchema = import_zod19.z.object({
7407
- name: import_zod19.z.string().min(1).max(200),
7408
- description: import_zod19.z.string().min(1).max(2e3),
7409
- family: import_zod19.z.nativeEnum(ProcedureFamily),
7410
- categoryId: import_zod19.z.string().min(1),
7411
- subcategoryId: import_zod19.z.string().min(1),
7412
- technologyId: import_zod19.z.string().min(1),
7413
- productId: import_zod19.z.string().min(1),
7414
- price: import_zod19.z.number().min(0),
7415
- currency: import_zod19.z.nativeEnum(Currency),
7416
- pricingMeasure: import_zod19.z.nativeEnum(PricingMeasure),
7417
- duration: import_zod19.z.number().min(1).max(480),
7489
+ var import_zod20 = require("zod");
7490
+ var createProcedureSchema = import_zod20.z.object({
7491
+ name: import_zod20.z.string().min(1).max(200),
7492
+ description: import_zod20.z.string().min(1).max(2e3),
7493
+ family: import_zod20.z.nativeEnum(ProcedureFamily),
7494
+ categoryId: import_zod20.z.string().min(1),
7495
+ subcategoryId: import_zod20.z.string().min(1),
7496
+ technologyId: import_zod20.z.string().min(1),
7497
+ productId: import_zod20.z.string().min(1),
7498
+ price: import_zod20.z.number().min(0),
7499
+ currency: import_zod20.z.nativeEnum(Currency),
7500
+ pricingMeasure: import_zod20.z.nativeEnum(PricingMeasure),
7501
+ duration: import_zod20.z.number().min(1).max(480),
7418
7502
  // Max 8 hours
7419
- practitionerId: import_zod19.z.string().min(1),
7420
- clinicBranchId: import_zod19.z.string().min(1)
7503
+ practitionerId: import_zod20.z.string().min(1),
7504
+ clinicBranchId: import_zod20.z.string().min(1)
7421
7505
  });
7422
- var updateProcedureSchema = import_zod19.z.object({
7423
- name: import_zod19.z.string().min(3).max(100).optional(),
7424
- description: import_zod19.z.string().min(3).max(1e3).optional(),
7425
- price: import_zod19.z.number().min(0).optional(),
7426
- currency: import_zod19.z.nativeEnum(Currency).optional(),
7427
- pricingMeasure: import_zod19.z.nativeEnum(PricingMeasure).optional(),
7428
- duration: import_zod19.z.number().min(0).optional(),
7429
- isActive: import_zod19.z.boolean().optional(),
7430
- practitionerId: import_zod19.z.string().optional(),
7431
- categoryId: import_zod19.z.string().optional(),
7432
- subcategoryId: import_zod19.z.string().optional(),
7433
- technologyId: import_zod19.z.string().optional(),
7434
- productId: import_zod19.z.string().optional(),
7435
- clinicBranchId: import_zod19.z.string().optional()
7506
+ var updateProcedureSchema = import_zod20.z.object({
7507
+ name: import_zod20.z.string().min(3).max(100).optional(),
7508
+ description: import_zod20.z.string().min(3).max(1e3).optional(),
7509
+ price: import_zod20.z.number().min(0).optional(),
7510
+ currency: import_zod20.z.nativeEnum(Currency).optional(),
7511
+ pricingMeasure: import_zod20.z.nativeEnum(PricingMeasure).optional(),
7512
+ duration: import_zod20.z.number().min(0).optional(),
7513
+ isActive: import_zod20.z.boolean().optional(),
7514
+ practitionerId: import_zod20.z.string().optional(),
7515
+ categoryId: import_zod20.z.string().optional(),
7516
+ subcategoryId: import_zod20.z.string().optional(),
7517
+ technologyId: import_zod20.z.string().optional(),
7518
+ productId: import_zod20.z.string().optional(),
7519
+ clinicBranchId: import_zod20.z.string().optional()
7436
7520
  });
7437
7521
  var procedureSchema = createProcedureSchema.extend({
7438
- id: import_zod19.z.string().min(1),
7439
- category: import_zod19.z.any(),
7522
+ id: import_zod20.z.string().min(1),
7523
+ category: import_zod20.z.any(),
7440
7524
  // We'll validate the full category object separately
7441
- subcategory: import_zod19.z.any(),
7525
+ subcategory: import_zod20.z.any(),
7442
7526
  // We'll validate the full subcategory object separately
7443
- technology: import_zod19.z.any(),
7527
+ technology: import_zod20.z.any(),
7444
7528
  // We'll validate the full technology object separately
7445
- product: import_zod19.z.any(),
7529
+ product: import_zod20.z.any(),
7446
7530
  // We'll validate the full product object separately
7447
- blockingConditions: import_zod19.z.array(import_zod19.z.any()),
7531
+ blockingConditions: import_zod20.z.array(import_zod20.z.any()),
7448
7532
  // We'll validate blocking conditions separately
7449
- treatmentBenefits: import_zod19.z.array(import_zod19.z.any()),
7533
+ treatmentBenefits: import_zod20.z.array(import_zod20.z.any()),
7450
7534
  // We'll validate treatment benefits separately
7451
- preRequirements: import_zod19.z.array(import_zod19.z.any()),
7535
+ preRequirements: import_zod20.z.array(import_zod20.z.any()),
7452
7536
  // We'll validate requirements separately
7453
- postRequirements: import_zod19.z.array(import_zod19.z.any()),
7537
+ postRequirements: import_zod20.z.array(import_zod20.z.any()),
7454
7538
  // We'll validate requirements separately
7455
- certificationRequirement: import_zod19.z.any(),
7539
+ certificationRequirement: import_zod20.z.any(),
7456
7540
  // We'll validate certification requirement separately
7457
- documentationTemplates: import_zod19.z.array(import_zod19.z.any()),
7541
+ documentationTemplates: import_zod20.z.array(import_zod20.z.any()),
7458
7542
  // We'll validate documentation templates separately
7459
7543
  clinicInfo: clinicInfoSchema,
7460
7544
  // Clinic info validation
@@ -7462,9 +7546,9 @@ var procedureSchema = createProcedureSchema.extend({
7462
7546
  // Doctor info validation
7463
7547
  reviewInfo: procedureReviewInfoSchema,
7464
7548
  // Procedure review info validation
7465
- isActive: import_zod19.z.boolean(),
7466
- createdAt: import_zod19.z.date(),
7467
- updatedAt: import_zod19.z.date()
7549
+ isActive: import_zod20.z.boolean(),
7550
+ createdAt: import_zod20.z.date(),
7551
+ updatedAt: import_zod20.z.date()
7468
7552
  });
7469
7553
 
7470
7554
  // src/services/procedure/procedure.service.ts
@@ -8499,42 +8583,42 @@ var SYNCED_CALENDARS_COLLECTION = "syncedCalendars";
8499
8583
  var import_firestore37 = require("firebase/firestore");
8500
8584
 
8501
8585
  // src/validations/calendar.schema.ts
8502
- var import_zod21 = require("zod");
8586
+ var import_zod22 = require("zod");
8503
8587
  var import_firestore28 = require("firebase/firestore");
8504
8588
 
8505
8589
  // src/validations/profile-info.schema.ts
8506
- var import_zod20 = require("zod");
8590
+ var import_zod21 = require("zod");
8507
8591
  var import_firestore27 = require("firebase/firestore");
8508
- var clinicInfoSchema2 = import_zod20.z.object({
8509
- id: import_zod20.z.string(),
8510
- featuredPhoto: import_zod20.z.string(),
8511
- name: import_zod20.z.string(),
8512
- description: import_zod20.z.string(),
8592
+ var clinicInfoSchema2 = import_zod21.z.object({
8593
+ id: import_zod21.z.string(),
8594
+ featuredPhoto: import_zod21.z.string(),
8595
+ name: import_zod21.z.string(),
8596
+ description: import_zod21.z.string(),
8513
8597
  location: clinicLocationSchema,
8514
8598
  contactInfo: clinicContactInfoSchema
8515
8599
  });
8516
- var practitionerProfileInfoSchema = import_zod20.z.object({
8517
- id: import_zod20.z.string(),
8518
- practitionerPhoto: import_zod20.z.string().nullable(),
8519
- name: import_zod20.z.string(),
8520
- email: import_zod20.z.string().email(),
8521
- phone: import_zod20.z.string().nullable(),
8600
+ var practitionerProfileInfoSchema = import_zod21.z.object({
8601
+ id: import_zod21.z.string(),
8602
+ practitionerPhoto: import_zod21.z.string().nullable(),
8603
+ name: import_zod21.z.string(),
8604
+ email: import_zod21.z.string().email(),
8605
+ phone: import_zod21.z.string().nullable(),
8522
8606
  certification: practitionerCertificationSchema
8523
8607
  });
8524
- var patientProfileInfoSchema = import_zod20.z.object({
8525
- id: import_zod20.z.string(),
8526
- fullName: import_zod20.z.string(),
8527
- email: import_zod20.z.string().email(),
8528
- phone: import_zod20.z.string().nullable(),
8529
- dateOfBirth: import_zod20.z.instanceof(import_firestore27.Timestamp),
8530
- gender: import_zod20.z.nativeEnum(Gender)
8608
+ var patientProfileInfoSchema = import_zod21.z.object({
8609
+ id: import_zod21.z.string(),
8610
+ fullName: import_zod21.z.string(),
8611
+ email: import_zod21.z.string().email(),
8612
+ phone: import_zod21.z.string().nullable(),
8613
+ dateOfBirth: import_zod21.z.instanceof(import_firestore27.Timestamp),
8614
+ gender: import_zod21.z.nativeEnum(Gender)
8531
8615
  });
8532
8616
 
8533
8617
  // src/validations/calendar.schema.ts
8534
8618
  var MIN_APPOINTMENT_DURATION = 15;
8535
- var calendarEventTimeSchema = import_zod21.z.object({
8536
- start: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp)),
8537
- end: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp))
8619
+ var calendarEventTimeSchema = import_zod22.z.object({
8620
+ start: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp)),
8621
+ end: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
8538
8622
  }).refine(
8539
8623
  (data) => {
8540
8624
  const startDate = data.start instanceof import_firestore28.Timestamp ? data.start.toDate() : data.start;
@@ -8555,46 +8639,46 @@ var calendarEventTimeSchema = import_zod21.z.object({
8555
8639
  path: ["start"]
8556
8640
  }
8557
8641
  );
8558
- var timeSlotSchema2 = import_zod21.z.object({
8559
- start: import_zod21.z.date(),
8560
- end: import_zod21.z.date(),
8561
- isAvailable: import_zod21.z.boolean()
8642
+ var timeSlotSchema2 = import_zod22.z.object({
8643
+ start: import_zod22.z.date(),
8644
+ end: import_zod22.z.date(),
8645
+ isAvailable: import_zod22.z.boolean()
8562
8646
  }).refine((data) => data.start < data.end, {
8563
8647
  message: "End time must be after start time",
8564
8648
  path: ["end"]
8565
8649
  });
8566
- var syncedCalendarEventSchema = import_zod21.z.object({
8567
- eventId: import_zod21.z.string(),
8568
- syncedCalendarProvider: import_zod21.z.nativeEnum(SyncedCalendarProvider),
8569
- syncedAt: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp))
8650
+ var syncedCalendarEventSchema = import_zod22.z.object({
8651
+ eventId: import_zod22.z.string(),
8652
+ syncedCalendarProvider: import_zod22.z.nativeEnum(SyncedCalendarProvider),
8653
+ syncedAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
8570
8654
  });
8571
- var procedureInfoSchema = import_zod21.z.object({
8572
- name: import_zod21.z.string(),
8573
- description: import_zod21.z.string(),
8574
- duration: import_zod21.z.number().min(MIN_APPOINTMENT_DURATION),
8575
- price: import_zod21.z.number().min(0),
8576
- currency: import_zod21.z.nativeEnum(Currency)
8655
+ var procedureInfoSchema = import_zod22.z.object({
8656
+ name: import_zod22.z.string(),
8657
+ description: import_zod22.z.string(),
8658
+ duration: import_zod22.z.number().min(MIN_APPOINTMENT_DURATION),
8659
+ price: import_zod22.z.number().min(0),
8660
+ currency: import_zod22.z.nativeEnum(Currency)
8577
8661
  });
8578
- var procedureCategorizationSchema = import_zod21.z.object({
8579
- procedureFamily: import_zod21.z.string(),
8662
+ var procedureCategorizationSchema = import_zod22.z.object({
8663
+ procedureFamily: import_zod22.z.string(),
8580
8664
  // Replace with proper enum when available
8581
- procedureCategory: import_zod21.z.string(),
8665
+ procedureCategory: import_zod22.z.string(),
8582
8666
  // Replace with proper enum when available
8583
- procedureSubcategory: import_zod21.z.string(),
8667
+ procedureSubcategory: import_zod22.z.string(),
8584
8668
  // Replace with proper enum when available
8585
- procedureTechnology: import_zod21.z.string(),
8669
+ procedureTechnology: import_zod22.z.string(),
8586
8670
  // Replace with proper enum when available
8587
- procedureProduct: import_zod21.z.string()
8671
+ procedureProduct: import_zod22.z.string()
8588
8672
  // Replace with proper enum when available
8589
8673
  });
8590
- var createAppointmentSchema2 = import_zod21.z.object({
8591
- clinicId: import_zod21.z.string().min(1, "Clinic ID is required"),
8592
- doctorId: import_zod21.z.string().min(1, "Doctor ID is required"),
8593
- patientId: import_zod21.z.string().min(1, "Patient ID is required"),
8594
- procedureId: import_zod21.z.string().min(1, "Procedure ID is required"),
8674
+ var createAppointmentSchema2 = import_zod22.z.object({
8675
+ clinicId: import_zod22.z.string().min(1, "Clinic ID is required"),
8676
+ doctorId: import_zod22.z.string().min(1, "Doctor ID is required"),
8677
+ patientId: import_zod22.z.string().min(1, "Patient ID is required"),
8678
+ procedureId: import_zod22.z.string().min(1, "Procedure ID is required"),
8595
8679
  eventLocation: clinicLocationSchema,
8596
8680
  eventTime: calendarEventTimeSchema,
8597
- description: import_zod21.z.string().optional()
8681
+ description: import_zod22.z.string().optional()
8598
8682
  }).refine(
8599
8683
  (data) => {
8600
8684
  return true;
@@ -8603,73 +8687,73 @@ var createAppointmentSchema2 = import_zod21.z.object({
8603
8687
  message: "Invalid appointment parameters"
8604
8688
  }
8605
8689
  );
8606
- var updateAppointmentSchema2 = import_zod21.z.object({
8607
- appointmentId: import_zod21.z.string().min(1, "Appointment ID is required"),
8608
- clinicId: import_zod21.z.string().min(1, "Clinic ID is required"),
8609
- doctorId: import_zod21.z.string().min(1, "Doctor ID is required"),
8610
- patientId: import_zod21.z.string().min(1, "Patient ID is required"),
8690
+ var updateAppointmentSchema2 = import_zod22.z.object({
8691
+ appointmentId: import_zod22.z.string().min(1, "Appointment ID is required"),
8692
+ clinicId: import_zod22.z.string().min(1, "Clinic ID is required"),
8693
+ doctorId: import_zod22.z.string().min(1, "Doctor ID is required"),
8694
+ patientId: import_zod22.z.string().min(1, "Patient ID is required"),
8611
8695
  eventTime: calendarEventTimeSchema.optional(),
8612
- description: import_zod21.z.string().optional(),
8613
- status: import_zod21.z.nativeEnum(CalendarEventStatus).optional()
8696
+ description: import_zod22.z.string().optional(),
8697
+ status: import_zod22.z.nativeEnum(CalendarEventStatus).optional()
8614
8698
  });
8615
- var createCalendarEventSchema = import_zod21.z.object({
8616
- id: import_zod21.z.string(),
8617
- clinicBranchId: import_zod21.z.string().nullable().optional(),
8618
- clinicBranchInfo: import_zod21.z.any().nullable().optional(),
8619
- practitionerProfileId: import_zod21.z.string().nullable().optional(),
8699
+ var createCalendarEventSchema = import_zod22.z.object({
8700
+ id: import_zod22.z.string(),
8701
+ clinicBranchId: import_zod22.z.string().nullable().optional(),
8702
+ clinicBranchInfo: import_zod22.z.any().nullable().optional(),
8703
+ practitionerProfileId: import_zod22.z.string().nullable().optional(),
8620
8704
  practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
8621
- patientProfileId: import_zod21.z.string().nullable().optional(),
8705
+ patientProfileId: import_zod22.z.string().nullable().optional(),
8622
8706
  patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
8623
- procedureId: import_zod21.z.string().nullable().optional(),
8624
- appointmentId: import_zod21.z.string().nullable().optional(),
8625
- syncedCalendarEventId: import_zod21.z.array(syncedCalendarEventSchema).nullable().optional(),
8626
- eventName: import_zod21.z.string().min(1, "Event name is required"),
8707
+ procedureId: import_zod22.z.string().nullable().optional(),
8708
+ appointmentId: import_zod22.z.string().nullable().optional(),
8709
+ syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
8710
+ eventName: import_zod22.z.string().min(1, "Event name is required"),
8627
8711
  eventLocation: clinicLocationSchema.optional(),
8628
8712
  eventTime: calendarEventTimeSchema,
8629
- description: import_zod21.z.string().optional(),
8630
- status: import_zod21.z.nativeEnum(CalendarEventStatus),
8631
- syncStatus: import_zod21.z.nativeEnum(CalendarSyncStatus),
8632
- eventType: import_zod21.z.nativeEnum(CalendarEventType),
8633
- createdAt: import_zod21.z.any(),
8713
+ description: import_zod22.z.string().optional(),
8714
+ status: import_zod22.z.nativeEnum(CalendarEventStatus),
8715
+ syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus),
8716
+ eventType: import_zod22.z.nativeEnum(CalendarEventType),
8717
+ createdAt: import_zod22.z.any(),
8634
8718
  // FieldValue for server timestamp
8635
- updatedAt: import_zod21.z.any()
8719
+ updatedAt: import_zod22.z.any()
8636
8720
  // FieldValue for server timestamp
8637
8721
  });
8638
- var updateCalendarEventSchema = import_zod21.z.object({
8639
- syncedCalendarEventId: import_zod21.z.array(syncedCalendarEventSchema).nullable().optional(),
8640
- appointmentId: import_zod21.z.string().nullable().optional(),
8641
- eventName: import_zod21.z.string().optional(),
8722
+ var updateCalendarEventSchema = import_zod22.z.object({
8723
+ syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
8724
+ appointmentId: import_zod22.z.string().nullable().optional(),
8725
+ eventName: import_zod22.z.string().optional(),
8642
8726
  eventTime: calendarEventTimeSchema.optional(),
8643
- description: import_zod21.z.string().optional(),
8644
- status: import_zod21.z.nativeEnum(CalendarEventStatus).optional(),
8645
- syncStatus: import_zod21.z.nativeEnum(CalendarSyncStatus).optional(),
8646
- eventType: import_zod21.z.nativeEnum(CalendarEventType).optional(),
8647
- updatedAt: import_zod21.z.any()
8727
+ description: import_zod22.z.string().optional(),
8728
+ status: import_zod22.z.nativeEnum(CalendarEventStatus).optional(),
8729
+ syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus).optional(),
8730
+ eventType: import_zod22.z.nativeEnum(CalendarEventType).optional(),
8731
+ updatedAt: import_zod22.z.any()
8648
8732
  // FieldValue for server timestamp
8649
8733
  });
8650
- var calendarEventSchema = import_zod21.z.object({
8651
- id: import_zod21.z.string(),
8652
- clinicBranchId: import_zod21.z.string().nullable().optional(),
8653
- clinicBranchInfo: import_zod21.z.any().nullable().optional(),
8734
+ var calendarEventSchema = import_zod22.z.object({
8735
+ id: import_zod22.z.string(),
8736
+ clinicBranchId: import_zod22.z.string().nullable().optional(),
8737
+ clinicBranchInfo: import_zod22.z.any().nullable().optional(),
8654
8738
  // Will be replaced with proper clinic info schema
8655
- practitionerProfileId: import_zod21.z.string().nullable().optional(),
8739
+ practitionerProfileId: import_zod22.z.string().nullable().optional(),
8656
8740
  practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
8657
- patientProfileId: import_zod21.z.string().nullable().optional(),
8741
+ patientProfileId: import_zod22.z.string().nullable().optional(),
8658
8742
  patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
8659
- procedureId: import_zod21.z.string().nullable().optional(),
8743
+ procedureId: import_zod22.z.string().nullable().optional(),
8660
8744
  procedureInfo: procedureInfoSchema.nullable().optional(),
8661
8745
  procedureCategorization: procedureCategorizationSchema.nullable().optional(),
8662
- appointmentId: import_zod21.z.string().nullable().optional(),
8663
- syncedCalendarEventId: import_zod21.z.array(syncedCalendarEventSchema).nullable().optional(),
8664
- eventName: import_zod21.z.string(),
8746
+ appointmentId: import_zod22.z.string().nullable().optional(),
8747
+ syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
8748
+ eventName: import_zod22.z.string(),
8665
8749
  eventLocation: clinicLocationSchema.optional(),
8666
8750
  eventTime: calendarEventTimeSchema,
8667
- description: import_zod21.z.string().optional(),
8668
- status: import_zod21.z.nativeEnum(CalendarEventStatus),
8669
- syncStatus: import_zod21.z.nativeEnum(CalendarSyncStatus),
8670
- eventType: import_zod21.z.nativeEnum(CalendarEventType),
8671
- createdAt: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp)),
8672
- updatedAt: import_zod21.z.instanceof(Date).or(import_zod21.z.instanceof(import_firestore28.Timestamp))
8751
+ description: import_zod22.z.string().optional(),
8752
+ status: import_zod22.z.nativeEnum(CalendarEventStatus),
8753
+ syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus),
8754
+ eventType: import_zod22.z.nativeEnum(CalendarEventType),
8755
+ createdAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp)),
8756
+ updatedAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
8673
8757
  });
8674
8758
 
8675
8759
  // src/services/calendar/utils/clinic.utils.ts
@@ -11207,7 +11291,7 @@ var import_firestore38 = require("firebase/firestore");
11207
11291
  var REVIEWS_COLLECTION = "reviews";
11208
11292
 
11209
11293
  // src/services/reviews/reviews.service.ts
11210
- var import_zod22 = require("zod");
11294
+ var import_zod23 = require("zod");
11211
11295
  var ReviewService = class extends BaseService {
11212
11296
  constructor(db, auth, app) {
11213
11297
  super(db, auth, app);
@@ -11313,7 +11397,7 @@ var ReviewService = class extends BaseService {
11313
11397
  await Promise.all(updatePromises);
11314
11398
  return review;
11315
11399
  } catch (error) {
11316
- if (error instanceof import_zod22.z.ZodError) {
11400
+ if (error instanceof import_zod23.z.ZodError) {
11317
11401
  throw new Error(`Invalid review data: ${error.message}`);
11318
11402
  }
11319
11403
  throw error;
@@ -13576,54 +13660,54 @@ var ProductService = class extends BaseService {
13576
13660
  };
13577
13661
 
13578
13662
  // src/validations/notification.schema.ts
13579
- var import_zod23 = require("zod");
13580
- var baseNotificationSchema = import_zod23.z.object({
13581
- id: import_zod23.z.string().optional(),
13582
- userId: import_zod23.z.string(),
13583
- notificationTime: import_zod23.z.any(),
13663
+ var import_zod24 = require("zod");
13664
+ var baseNotificationSchema = import_zod24.z.object({
13665
+ id: import_zod24.z.string().optional(),
13666
+ userId: import_zod24.z.string(),
13667
+ notificationTime: import_zod24.z.any(),
13584
13668
  // Timestamp
13585
- notificationType: import_zod23.z.nativeEnum(NotificationType),
13586
- notificationTokens: import_zod23.z.array(import_zod23.z.string()),
13587
- status: import_zod23.z.nativeEnum(NotificationStatus),
13588
- createdAt: import_zod23.z.any().optional(),
13669
+ notificationType: import_zod24.z.nativeEnum(NotificationType),
13670
+ notificationTokens: import_zod24.z.array(import_zod24.z.string()),
13671
+ status: import_zod24.z.nativeEnum(NotificationStatus),
13672
+ createdAt: import_zod24.z.any().optional(),
13589
13673
  // Timestamp
13590
- updatedAt: import_zod23.z.any().optional(),
13674
+ updatedAt: import_zod24.z.any().optional(),
13591
13675
  // Timestamp
13592
- title: import_zod23.z.string(),
13593
- body: import_zod23.z.string(),
13594
- isRead: import_zod23.z.boolean(),
13595
- userRole: import_zod23.z.nativeEnum(UserRole)
13676
+ title: import_zod24.z.string(),
13677
+ body: import_zod24.z.string(),
13678
+ isRead: import_zod24.z.boolean(),
13679
+ userRole: import_zod24.z.nativeEnum(UserRole)
13596
13680
  });
13597
13681
  var preRequirementNotificationSchema = baseNotificationSchema.extend({
13598
- notificationType: import_zod23.z.literal("preRequirement" /* PRE_REQUIREMENT */),
13599
- treatmentId: import_zod23.z.string(),
13600
- requirements: import_zod23.z.array(import_zod23.z.string()),
13601
- deadline: import_zod23.z.any()
13682
+ notificationType: import_zod24.z.literal("preRequirement" /* PRE_REQUIREMENT */),
13683
+ treatmentId: import_zod24.z.string(),
13684
+ requirements: import_zod24.z.array(import_zod24.z.string()),
13685
+ deadline: import_zod24.z.any()
13602
13686
  // Timestamp
13603
13687
  });
13604
13688
  var postRequirementNotificationSchema = baseNotificationSchema.extend({
13605
- notificationType: import_zod23.z.literal("postRequirement" /* POST_REQUIREMENT */),
13606
- treatmentId: import_zod23.z.string(),
13607
- requirements: import_zod23.z.array(import_zod23.z.string()),
13608
- deadline: import_zod23.z.any()
13689
+ notificationType: import_zod24.z.literal("postRequirement" /* POST_REQUIREMENT */),
13690
+ treatmentId: import_zod24.z.string(),
13691
+ requirements: import_zod24.z.array(import_zod24.z.string()),
13692
+ deadline: import_zod24.z.any()
13609
13693
  // Timestamp
13610
13694
  });
13611
13695
  var appointmentReminderNotificationSchema = baseNotificationSchema.extend({
13612
- notificationType: import_zod23.z.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
13613
- appointmentId: import_zod23.z.string(),
13614
- appointmentTime: import_zod23.z.any(),
13696
+ notificationType: import_zod24.z.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
13697
+ appointmentId: import_zod24.z.string(),
13698
+ appointmentTime: import_zod24.z.any(),
13615
13699
  // Timestamp
13616
- treatmentType: import_zod23.z.string(),
13617
- doctorName: import_zod23.z.string()
13700
+ treatmentType: import_zod24.z.string(),
13701
+ doctorName: import_zod24.z.string()
13618
13702
  });
13619
13703
  var appointmentNotificationSchema = baseNotificationSchema.extend({
13620
- notificationType: import_zod23.z.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
13621
- appointmentId: import_zod23.z.string(),
13622
- appointmentStatus: import_zod23.z.string(),
13623
- previousStatus: import_zod23.z.string(),
13624
- reason: import_zod23.z.string().optional()
13704
+ notificationType: import_zod24.z.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
13705
+ appointmentId: import_zod24.z.string(),
13706
+ appointmentStatus: import_zod24.z.string(),
13707
+ previousStatus: import_zod24.z.string(),
13708
+ reason: import_zod24.z.string().optional()
13625
13709
  });
13626
- var notificationSchema = import_zod23.z.discriminatedUnion("notificationType", [
13710
+ var notificationSchema = import_zod24.z.discriminatedUnion("notificationType", [
13627
13711
  preRequirementNotificationSchema,
13628
13712
  postRequirementNotificationSchema,
13629
13713
  appointmentReminderNotificationSchema,
@@ -13764,7 +13848,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
13764
13848
  clinicContactInfoSchema,
13765
13849
  clinicGroupSchema,
13766
13850
  clinicGroupSetupSchema,
13767
- clinicInfoSchema,
13768
13851
  clinicLocationSchema,
13769
13852
  clinicReviewInfoSchema,
13770
13853
  clinicReviewSchema,
@@ -13792,7 +13875,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
13792
13875
  createProcedureReviewSchema,
13793
13876
  createReviewSchema,
13794
13877
  createUserOptionsSchema,
13795
- doctorInfoSchema,
13796
13878
  documentElementSchema,
13797
13879
  documentElementWithoutIdSchema,
13798
13880
  documentTemplateSchema,
@@ -13831,7 +13913,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
13831
13913
  procedureInfoSchema,
13832
13914
  procedureReviewInfoSchema,
13833
13915
  procedureReviewSchema,
13834
- procedureSummaryInfoSchema,
13835
13916
  requesterInfoSchema,
13836
13917
  reviewSchema,
13837
13918
  searchAppointmentsSchema,