@bizmap/sdk 0.0.14 → 0.0.15
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/main.d.ts +204 -12
- package/dist/main.js +153 -8
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ declare const CompanyBillingModel: z.ZodObject<{
|
|
|
72
72
|
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
73
73
|
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
74
74
|
allowInvoiceDist: z.ZodBoolean;
|
|
75
|
-
|
|
75
|
+
serviceSelector: z.ZodEnum<{
|
|
76
76
|
scheduler: "scheduler";
|
|
77
77
|
doctor: "doctor";
|
|
78
78
|
}>;
|
|
@@ -176,19 +176,19 @@ type CompanyRegistrationClaims = z.infer<typeof CompanyRegistrationClaims>;
|
|
|
176
176
|
declare const CompanyUser: z.ZodObject<{
|
|
177
177
|
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
178
178
|
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
179
|
-
lastActive: z.ZodNumber;
|
|
180
179
|
status: z.ZodEnum<{
|
|
181
180
|
inviteSent: "inviteSent";
|
|
182
181
|
active: "active";
|
|
183
182
|
inactive: "inactive";
|
|
184
183
|
}>;
|
|
185
|
-
roles: z.ZodArray<z.ZodEnum<{
|
|
184
|
+
roles: z.ZodPipe<z.ZodArray<z.ZodEnum<{
|
|
186
185
|
doc: "doc";
|
|
187
186
|
physAsst: "physAsst";
|
|
188
187
|
rcpst: "rcpst";
|
|
189
188
|
cshr: "cshr";
|
|
190
189
|
admin: "admin";
|
|
191
|
-
}>>;
|
|
190
|
+
}>>, z.ZodTransform<("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[], ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[]>>;
|
|
191
|
+
lastActive: z.ZodNumber;
|
|
192
192
|
name: z.ZodRecord<z.ZodEnum<{
|
|
193
193
|
first: "first";
|
|
194
194
|
last: "last";
|
|
@@ -200,24 +200,24 @@ declare const CompanyUser: z.ZodObject<{
|
|
|
200
200
|
}, z.core.$strip>;
|
|
201
201
|
type CompanyUser = z.infer<typeof CompanyUser>;
|
|
202
202
|
/** The unpacked Staff Details */
|
|
203
|
-
declare const StaffDetails: z.ZodObject<{
|
|
203
|
+
declare const StaffDetails: z.ZodPipe<z.ZodObject<{
|
|
204
204
|
uid: z.ZodReadonly<z.ZodString>;
|
|
205
205
|
members: z.ZodArray<z.ZodObject<{
|
|
206
206
|
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
207
207
|
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
208
|
-
lastActive: z.ZodNumber;
|
|
209
208
|
status: z.ZodEnum<{
|
|
210
209
|
inviteSent: "inviteSent";
|
|
211
210
|
active: "active";
|
|
212
211
|
inactive: "inactive";
|
|
213
212
|
}>;
|
|
214
|
-
roles: z.ZodArray<z.ZodEnum<{
|
|
213
|
+
roles: z.ZodPipe<z.ZodArray<z.ZodEnum<{
|
|
215
214
|
doc: "doc";
|
|
216
215
|
physAsst: "physAsst";
|
|
217
216
|
rcpst: "rcpst";
|
|
218
217
|
cshr: "cshr";
|
|
219
218
|
admin: "admin";
|
|
220
|
-
}>>;
|
|
219
|
+
}>>, z.ZodTransform<("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[], ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[]>>;
|
|
220
|
+
lastActive: z.ZodNumber;
|
|
221
221
|
name: z.ZodRecord<z.ZodEnum<{
|
|
222
222
|
first: "first";
|
|
223
223
|
last: "last";
|
|
@@ -227,10 +227,186 @@ declare const StaffDetails: z.ZodObject<{
|
|
|
227
227
|
phoneNumber: z.ZodOptional<z.ZodString>;
|
|
228
228
|
uid: z.ZodString;
|
|
229
229
|
}, z.core.$strip>>;
|
|
230
|
-
partnerMap: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString
|
|
231
|
-
blackList: z.ZodArray<z.ZodString
|
|
232
|
-
}, z.core.$strip
|
|
230
|
+
partnerMap: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<string[], string[]>>>;
|
|
231
|
+
blackList: z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<string[], string[]>>;
|
|
232
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
233
|
+
uid: string;
|
|
234
|
+
members: {
|
|
235
|
+
createdAt: number;
|
|
236
|
+
lastModified: number | null;
|
|
237
|
+
status: "inviteSent" | "active" | "inactive";
|
|
238
|
+
roles: ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[];
|
|
239
|
+
lastActive: number;
|
|
240
|
+
name: Record<"first" | "last", string>;
|
|
241
|
+
email: string;
|
|
242
|
+
uid: string;
|
|
243
|
+
photoUrl?: string | undefined;
|
|
244
|
+
phoneNumber?: string | undefined;
|
|
245
|
+
}[];
|
|
246
|
+
partnerMap: Record<string, string[]>;
|
|
247
|
+
blackList: string[];
|
|
248
|
+
}, {
|
|
249
|
+
uid: string;
|
|
250
|
+
members: {
|
|
251
|
+
createdAt: number;
|
|
252
|
+
lastModified: number | null;
|
|
253
|
+
status: "inviteSent" | "active" | "inactive";
|
|
254
|
+
roles: ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[];
|
|
255
|
+
lastActive: number;
|
|
256
|
+
name: Record<"first" | "last", string>;
|
|
257
|
+
email: string;
|
|
258
|
+
uid: string;
|
|
259
|
+
photoUrl?: string | undefined;
|
|
260
|
+
phoneNumber?: string | undefined;
|
|
261
|
+
}[];
|
|
262
|
+
partnerMap: Record<string, string[]>;
|
|
263
|
+
blackList: string[];
|
|
264
|
+
}>>;
|
|
233
265
|
type StaffDetails = z.infer<typeof StaffDetails>;
|
|
266
|
+
declare const CompanyDetails: z.ZodObject<{
|
|
267
|
+
uid: z.ZodString;
|
|
268
|
+
identity: z.ZodObject<{
|
|
269
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
270
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
271
|
+
uid: z.ZodReadonly<z.ZodString>;
|
|
272
|
+
displayName: z.ZodString;
|
|
273
|
+
logo: z.ZodOptional<z.ZodString>;
|
|
274
|
+
contact: z.ZodObject<{
|
|
275
|
+
email: z.ZodEmail;
|
|
276
|
+
phoneNumber: z.ZodOptional<z.ZodString>;
|
|
277
|
+
}, z.core.$strip>;
|
|
278
|
+
address: z.ZodRecord<z.ZodEnum<{
|
|
279
|
+
streetAddress: "streetAddress";
|
|
280
|
+
city: "city";
|
|
281
|
+
parish: "parish";
|
|
282
|
+
country: "country";
|
|
283
|
+
}>, z.ZodString>;
|
|
284
|
+
legal: z.ZodObject<{
|
|
285
|
+
regNo: z.ZodReadonly<z.ZodString>;
|
|
286
|
+
trn: z.ZodOptional<z.ZodString>;
|
|
287
|
+
gctRegNo: z.ZodOptional<z.ZodString>;
|
|
288
|
+
}, z.core.$strip>;
|
|
289
|
+
}, z.core.$strip>;
|
|
290
|
+
opState: z.ZodObject<{
|
|
291
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
292
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
293
|
+
uid: z.ZodReadonly<z.ZodString>;
|
|
294
|
+
availableBalance: z.ZodNumber;
|
|
295
|
+
preferences: z.ZodObject<{
|
|
296
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
297
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
298
|
+
userProvisions: z.ZodNumber;
|
|
299
|
+
apptDistAlg: z.ZodEnum<{
|
|
300
|
+
RR: "RR";
|
|
301
|
+
LOR: "LOR";
|
|
302
|
+
}>;
|
|
303
|
+
}, z.core.$strip>;
|
|
304
|
+
}, z.core.$strip>;
|
|
305
|
+
billing: z.ZodObject<{
|
|
306
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
307
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
308
|
+
uid: z.ZodReadonly<z.ZodString>;
|
|
309
|
+
preferences: z.ZodObject<{
|
|
310
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
311
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
312
|
+
allowInvoiceDist: z.ZodBoolean;
|
|
313
|
+
serviceSelector: z.ZodEnum<{
|
|
314
|
+
scheduler: "scheduler";
|
|
315
|
+
doctor: "doctor";
|
|
316
|
+
}>;
|
|
317
|
+
enforcePaidAppts: z.ZodBoolean;
|
|
318
|
+
primaryCurrency: z.ZodEnum<{
|
|
319
|
+
JMD: "JMD";
|
|
320
|
+
}>;
|
|
321
|
+
acceptedCurrencies: z.ZodArray<z.ZodEnum<{
|
|
322
|
+
JMD: "JMD";
|
|
323
|
+
}>>;
|
|
324
|
+
}, z.core.$strip>;
|
|
325
|
+
additionalFees: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
326
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
327
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
328
|
+
description: z.ZodOptional<z.ZodString>;
|
|
329
|
+
fixedAmount: z.ZodNumber;
|
|
330
|
+
percentage: z.ZodNumber;
|
|
331
|
+
}, z.core.$strip>>>;
|
|
332
|
+
discounts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
333
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
334
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
335
|
+
description: z.ZodOptional<z.ZodString>;
|
|
336
|
+
fixedAmount: z.ZodNumber;
|
|
337
|
+
percentage: z.ZodNumber;
|
|
338
|
+
}, z.core.$strip>>>;
|
|
339
|
+
services: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
340
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
341
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
342
|
+
item: z.ZodString;
|
|
343
|
+
cost: z.ZodNumber;
|
|
344
|
+
}, z.core.$strip>>>;
|
|
345
|
+
}, z.core.$strip>;
|
|
346
|
+
staffDetails: z.ZodPipe<z.ZodObject<{
|
|
347
|
+
uid: z.ZodReadonly<z.ZodString>;
|
|
348
|
+
members: z.ZodArray<z.ZodObject<{
|
|
349
|
+
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
350
|
+
lastModified: z.ZodNullable<z.ZodNumber>;
|
|
351
|
+
status: z.ZodEnum<{
|
|
352
|
+
inviteSent: "inviteSent";
|
|
353
|
+
active: "active";
|
|
354
|
+
inactive: "inactive";
|
|
355
|
+
}>;
|
|
356
|
+
roles: z.ZodPipe<z.ZodArray<z.ZodEnum<{
|
|
357
|
+
doc: "doc";
|
|
358
|
+
physAsst: "physAsst";
|
|
359
|
+
rcpst: "rcpst";
|
|
360
|
+
cshr: "cshr";
|
|
361
|
+
admin: "admin";
|
|
362
|
+
}>>, z.ZodTransform<("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[], ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[]>>;
|
|
363
|
+
lastActive: z.ZodNumber;
|
|
364
|
+
name: z.ZodRecord<z.ZodEnum<{
|
|
365
|
+
first: "first";
|
|
366
|
+
last: "last";
|
|
367
|
+
}>, z.ZodString>;
|
|
368
|
+
photoUrl: z.ZodOptional<z.ZodString>;
|
|
369
|
+
email: z.ZodEmail;
|
|
370
|
+
phoneNumber: z.ZodOptional<z.ZodString>;
|
|
371
|
+
uid: z.ZodString;
|
|
372
|
+
}, z.core.$strip>>;
|
|
373
|
+
partnerMap: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<string[], string[]>>>;
|
|
374
|
+
blackList: z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<string[], string[]>>;
|
|
375
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
376
|
+
uid: string;
|
|
377
|
+
members: {
|
|
378
|
+
createdAt: number;
|
|
379
|
+
lastModified: number | null;
|
|
380
|
+
status: "inviteSent" | "active" | "inactive";
|
|
381
|
+
roles: ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[];
|
|
382
|
+
lastActive: number;
|
|
383
|
+
name: Record<"first" | "last", string>;
|
|
384
|
+
email: string;
|
|
385
|
+
uid: string;
|
|
386
|
+
photoUrl?: string | undefined;
|
|
387
|
+
phoneNumber?: string | undefined;
|
|
388
|
+
}[];
|
|
389
|
+
partnerMap: Record<string, string[]>;
|
|
390
|
+
blackList: string[];
|
|
391
|
+
}, {
|
|
392
|
+
uid: string;
|
|
393
|
+
members: {
|
|
394
|
+
createdAt: number;
|
|
395
|
+
lastModified: number | null;
|
|
396
|
+
status: "inviteSent" | "active" | "inactive";
|
|
397
|
+
roles: ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[];
|
|
398
|
+
lastActive: number;
|
|
399
|
+
name: Record<"first" | "last", string>;
|
|
400
|
+
email: string;
|
|
401
|
+
uid: string;
|
|
402
|
+
photoUrl?: string | undefined;
|
|
403
|
+
phoneNumber?: string | undefined;
|
|
404
|
+
}[];
|
|
405
|
+
partnerMap: Record<string, string[]>;
|
|
406
|
+
blackList: string[];
|
|
407
|
+
}>>;
|
|
408
|
+
}, z.core.$strip>;
|
|
409
|
+
type CompanyDetails = z.infer<typeof CompanyDetails>;
|
|
234
410
|
|
|
235
411
|
declare const TimeLog: z.ZodObject<{
|
|
236
412
|
createdAt: z.ZodReadonly<z.ZodNumber>;
|
|
@@ -265,4 +441,20 @@ declare const appointmentDistAlgs: z.ZodEnum<{
|
|
|
265
441
|
}>;
|
|
266
442
|
type AppointmentDistAlg = z.infer<typeof appointmentDistAlgs>;
|
|
267
443
|
|
|
268
|
-
|
|
444
|
+
/**@returns an array of the users that have conflicting roles or are incompatible with the other partners, or null if none was found. */
|
|
445
|
+
declare const findConflictingPartners: (...partners: CompanyUser[]) => {
|
|
446
|
+
createdAt: number;
|
|
447
|
+
lastModified: number | null;
|
|
448
|
+
status: "inviteSent" | "active" | "inactive";
|
|
449
|
+
roles: ("doc" | "physAsst" | "rcpst" | "cshr" | "admin")[];
|
|
450
|
+
lastActive: number;
|
|
451
|
+
name: Record<"first" | "last", string>;
|
|
452
|
+
email: string;
|
|
453
|
+
uid: string;
|
|
454
|
+
photoUrl?: string | undefined;
|
|
455
|
+
phoneNumber?: string | undefined;
|
|
456
|
+
}[] | null;
|
|
457
|
+
/**@returns the roles that are compatible with the selected role. */
|
|
458
|
+
declare const getCompatibleRoles: (role: CompanyUserRole) => CompanyUserRole[];
|
|
459
|
+
|
|
460
|
+
export { type AppointmentDistAlg, CompanyBillingModel, CompanyDetails, CompanyIdentity, CompanyOpState, type CompanyPartnerRole, CompanyRegistrationClaims, CompanyUser, type CompanyUserRole, type EmployeeRole, PriceAdjustment, PriceTag, PricingRate, RegisterCompanyForm, StaffDetails, Time, TimeLog, appointmentDistAlgs, companyPartnerRoles, companyUserRoles, employeeRoles, findConflictingPartners, getCompatibleRoles };
|
package/dist/main.js
CHANGED
|
@@ -100,7 +100,7 @@ var CompanyBillingModel = z4.object({
|
|
|
100
100
|
/** Allows the serviceDecider to distribute invoices. */
|
|
101
101
|
allowInvoiceDist: z4.boolean(),
|
|
102
102
|
/** The user that's allowed to record the client's services. */
|
|
103
|
-
|
|
103
|
+
serviceSelector: z4.enum(["scheduler", "doctor"]),
|
|
104
104
|
/** A record of the payments made must be attached before creating the
|
|
105
105
|
* appointment
|
|
106
106
|
* @note
|
|
@@ -112,7 +112,7 @@ var CompanyBillingModel = z4.object({
|
|
|
112
112
|
acceptedCurrencies: z4.array(currencies),
|
|
113
113
|
...TimeLog.shape
|
|
114
114
|
}).superRefine((data, ctx) => {
|
|
115
|
-
if (data.enforcePaidAppts && data.
|
|
115
|
+
if (data.enforcePaidAppts && data.serviceSelector !== "scheduler") {
|
|
116
116
|
ctx.addIssue(
|
|
117
117
|
"serviceDecider must be scheduler when enforcePaidAppts is true."
|
|
118
118
|
);
|
|
@@ -140,22 +140,165 @@ var CompanyRegistrationClaims = z4.object({
|
|
|
140
140
|
});
|
|
141
141
|
var CompanyUser = z4.object({
|
|
142
142
|
...UserModel.shape,
|
|
143
|
-
lastActive: z4.number(),
|
|
144
143
|
status: z4.enum(["inviteSent", "active", "inactive"]),
|
|
145
|
-
roles: z4.array(companyUserRoles)
|
|
144
|
+
roles: z4.array(companyUserRoles).transform((roles) => {
|
|
145
|
+
const newRoles = [];
|
|
146
|
+
for (const role of roles) {
|
|
147
|
+
if (!role || typeof role !== "string") continue;
|
|
148
|
+
if (!newRoles.includes(role)) newRoles.push(role);
|
|
149
|
+
}
|
|
150
|
+
return newRoles;
|
|
151
|
+
}).refine((roles) => {
|
|
152
|
+
const compatibleRoles = getCompatibleRoles(roles[0]);
|
|
153
|
+
return roles.every(
|
|
154
|
+
(role, i) => i === 0 || compatibleRoles.includes(role)
|
|
155
|
+
);
|
|
156
|
+
}, "A user is not allowed to have conflicting roles."),
|
|
157
|
+
lastActive: z4.number(),
|
|
146
158
|
...TimeLog.shape
|
|
147
159
|
});
|
|
148
160
|
var StaffDetails = z4.object({
|
|
149
161
|
uid: CompanyIdentity.shape.uid,
|
|
150
|
-
members: z4.array(CompanyUser),
|
|
162
|
+
members: z4.array(CompanyUser).superRefine((users, ctx) => {
|
|
163
|
+
const duplicateUids = [];
|
|
164
|
+
const duplicateEmails = [];
|
|
165
|
+
const uids = [];
|
|
166
|
+
const emails = [];
|
|
167
|
+
for (const user of users) {
|
|
168
|
+
if (uids.includes(user.uid)) {
|
|
169
|
+
duplicateUids.push(user.uid);
|
|
170
|
+
} else {
|
|
171
|
+
uids.push(user.uid);
|
|
172
|
+
}
|
|
173
|
+
if (emails.includes(user.email)) {
|
|
174
|
+
duplicateEmails.push(user.email);
|
|
175
|
+
} else {
|
|
176
|
+
emails.push(user.email);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (duplicateUids.length > 0) {
|
|
180
|
+
ctx.addIssue(
|
|
181
|
+
`Having multiple members with the same uid is prohibited (${duplicateUids.join()}).`
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
if (duplicateEmails.length > 0) {
|
|
185
|
+
ctx.addIssue(
|
|
186
|
+
`Having multiple members with the same email is prohibited (${duplicateEmails.join()}).`
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
}),
|
|
151
190
|
/**
|
|
152
191
|
* @relationship one -> many
|
|
153
192
|
*@description A map of doctor `uids` to their assistants `uids` */
|
|
154
|
-
partnerMap: z4.record(
|
|
155
|
-
|
|
193
|
+
partnerMap: z4.record(
|
|
194
|
+
CompanyUser.shape.uid,
|
|
195
|
+
z4.array(CompanyUser.shape.uid).min(
|
|
196
|
+
1,
|
|
197
|
+
"At least (1) partner, excluding the leader, is required to create a partner group."
|
|
198
|
+
).transform((pUids) => {
|
|
199
|
+
const partners = [];
|
|
200
|
+
for (const uid of pUids) {
|
|
201
|
+
if (!uid || typeof uid !== "string") continue;
|
|
202
|
+
if (!partners.some((p) => p.toLowerCase() === uid.toLowerCase())) {
|
|
203
|
+
partners.push(uid);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return partners;
|
|
207
|
+
})
|
|
208
|
+
),
|
|
209
|
+
blackList: z4.array(CompanyUser.shape.uid).transform((list) => {
|
|
210
|
+
const newList = [];
|
|
211
|
+
for (const uid of list) {
|
|
212
|
+
if (!uid || typeof uid !== "string") continue;
|
|
213
|
+
if (!newList.some(
|
|
214
|
+
(newUid) => newUid.toLowerCase() === uid.toLowerCase()
|
|
215
|
+
)) {
|
|
216
|
+
newList.push(uid);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return newList;
|
|
220
|
+
})
|
|
221
|
+
// ...TimeLog.shape,
|
|
222
|
+
}).transform((d) => {
|
|
223
|
+
let blackListWithExisitingUsers = [];
|
|
224
|
+
for (const uid of d.blackList) {
|
|
225
|
+
if (!uid || typeof uid !== "string") continue;
|
|
226
|
+
if (d.members.find((m) => m.uid.toLowerCase() === uid.toLowerCase())) {
|
|
227
|
+
blackListWithExisitingUsers.push(uid);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (blackListWithExisitingUsers.length !== d.blackList.length) {
|
|
231
|
+
d.blackList = blackListWithExisitingUsers;
|
|
232
|
+
}
|
|
233
|
+
return d;
|
|
234
|
+
}).superRefine((details, ctx) => {
|
|
235
|
+
const findMember = (uid) => details.members.find((m) => m.uid === uid);
|
|
236
|
+
for (const [docUid, physAssts] of Object.entries(details.partnerMap)) {
|
|
237
|
+
const queriedDoc = findMember(docUid);
|
|
238
|
+
if (!queriedDoc) {
|
|
239
|
+
ctx.addIssue(
|
|
240
|
+
`Only existing members of a company are allowed to be leaders of a partner group (${docUid}).`
|
|
241
|
+
);
|
|
242
|
+
} else if (!queriedDoc?.roles?.includes?.("doc")) {
|
|
243
|
+
ctx.addIssue(
|
|
244
|
+
`A partner group leader must have the "doc" role (${docUid}).`
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
for (const asstUid of physAssts) {
|
|
248
|
+
const queriedAsst = findMember(asstUid);
|
|
249
|
+
if (!queriedAsst) {
|
|
250
|
+
ctx.addIssue(
|
|
251
|
+
`Only existing members of a company are allowed to be apart of a partner group (${asstUid}).`
|
|
252
|
+
);
|
|
253
|
+
} else if (!queriedAsst?.roles?.includes?.("physAsst")) {
|
|
254
|
+
ctx.addIssue(
|
|
255
|
+
`A partner group member must have the "physAsst" role (${asstUid}).`
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
156
260
|
});
|
|
261
|
+
var CompanyDetails = z4.object({
|
|
262
|
+
uid: z4.string(),
|
|
263
|
+
identity: CompanyIdentity,
|
|
264
|
+
opState: CompanyOpState,
|
|
265
|
+
billing: CompanyBillingModel,
|
|
266
|
+
staffDetails: StaffDetails
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// src/functions/helper-functions.ts
|
|
270
|
+
var findConflictingPartners = (...partners) => {
|
|
271
|
+
let hasSingleDoctor = false;
|
|
272
|
+
const conflicts = [];
|
|
273
|
+
if (!partners) return partners;
|
|
274
|
+
for (const partner of partners) {
|
|
275
|
+
if (!partner.roles || partner.roles.some(
|
|
276
|
+
(r) => !companyPartnerRoles.options.includes(r)
|
|
277
|
+
) || !CompanyUser.shape.roles.safeParse(partner.roles).success) {
|
|
278
|
+
conflicts.push(partner);
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
if (partner.roles.includes("doc") && !hasSingleDoctor) {
|
|
282
|
+
hasSingleDoctor = true;
|
|
283
|
+
} else if (partner.roles.includes("doc")) {
|
|
284
|
+
conflicts.push(partner);
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return conflicts.length === 0 ? null : conflicts;
|
|
289
|
+
};
|
|
290
|
+
var getCompatibleRoles = (role) => {
|
|
291
|
+
if (role === "physAsst") {
|
|
292
|
+
return companyUserRoles.exclude(["admin", "doc", role]).options;
|
|
293
|
+
}
|
|
294
|
+
if (role === "admin" || role === "doc") {
|
|
295
|
+
return companyUserRoles.exclude(["physAsst", role]).options;
|
|
296
|
+
}
|
|
297
|
+
return companyUserRoles.exclude([role]).options;
|
|
298
|
+
};
|
|
157
299
|
export {
|
|
158
300
|
CompanyBillingModel,
|
|
301
|
+
CompanyDetails,
|
|
159
302
|
CompanyIdentity,
|
|
160
303
|
CompanyOpState,
|
|
161
304
|
CompanyRegistrationClaims,
|
|
@@ -170,5 +313,7 @@ export {
|
|
|
170
313
|
appointmentDistAlgs,
|
|
171
314
|
companyPartnerRoles,
|
|
172
315
|
companyUserRoles,
|
|
173
|
-
employeeRoles
|
|
316
|
+
employeeRoles,
|
|
317
|
+
findConflictingPartners,
|
|
318
|
+
getCompatibleRoles
|
|
174
319
|
};
|