@blackcode_sa/metaestetics-api 1.12.36 → 1.12.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.d.mts +13 -1
- package/dist/admin/index.d.ts +13 -1
- package/dist/admin/index.js +45 -18
- package/dist/admin/index.mjs +45 -18
- package/dist/index.d.mts +106 -6
- package/dist/index.d.ts +106 -6
- package/dist/index.js +1989 -1615
- package/dist/index.mjs +1185 -811
- package/package.json +1 -1
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +56 -25
- package/src/admin/booking/booking.admin.ts +1 -0
- package/src/services/appointment/appointment.service.ts +279 -45
- package/src/services/appointment/utils/recommended-procedure.utils.ts +193 -0
- package/src/services/appointment/utils/zone-management.utils.ts +27 -23
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -0
- package/src/services/procedure/procedure.service.ts +42 -2
- package/src/types/appointment/index.ts +16 -2
- package/src/validations/appointment.schema.ts +24 -4
package/dist/admin/index.d.mts
CHANGED
|
@@ -1681,6 +1681,7 @@ interface ZoneItemData {
|
|
|
1681
1681
|
productBrandName?: string;
|
|
1682
1682
|
belongingProcedureId: string;
|
|
1683
1683
|
type: 'item' | 'note';
|
|
1684
|
+
stage?: 'before' | 'after';
|
|
1684
1685
|
price?: number;
|
|
1685
1686
|
currency?: Currency;
|
|
1686
1687
|
unitOfMeasurement?: PricingMeasure;
|
|
@@ -1691,6 +1692,8 @@ interface ZoneItemData {
|
|
|
1691
1692
|
notes?: string;
|
|
1692
1693
|
subtotal?: number;
|
|
1693
1694
|
ionNumber?: string;
|
|
1695
|
+
createdAt?: string;
|
|
1696
|
+
updatedAt?: string;
|
|
1694
1697
|
}
|
|
1695
1698
|
/**
|
|
1696
1699
|
* @deprecated Use ZoneItemData instead
|
|
@@ -1754,15 +1757,24 @@ interface ExtendedProcedureInfo {
|
|
|
1754
1757
|
brandName: string;
|
|
1755
1758
|
}>;
|
|
1756
1759
|
}
|
|
1760
|
+
interface RecommendedProcedure {
|
|
1761
|
+
procedure: ExtendedProcedureInfo;
|
|
1762
|
+
note: string;
|
|
1763
|
+
timeframe: {
|
|
1764
|
+
value: number;
|
|
1765
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
1766
|
+
};
|
|
1767
|
+
}
|
|
1757
1768
|
/**
|
|
1758
1769
|
* Interface for appointment metadata containing zone-specific information
|
|
1759
1770
|
*/
|
|
1760
1771
|
interface AppointmentMetadata {
|
|
1761
1772
|
selectedZones: string[] | null;
|
|
1762
|
-
zonePhotos: Record<string, BeforeAfterPerZone> | null;
|
|
1773
|
+
zonePhotos: Record<string, BeforeAfterPerZone[]> | null;
|
|
1763
1774
|
zonesData?: Record<string, ZoneItemData[]> | null;
|
|
1764
1775
|
appointmentProducts?: AppointmentProductMetadata[];
|
|
1765
1776
|
extendedProcedures?: ExtendedProcedureInfo[];
|
|
1777
|
+
recommendedProcedures: RecommendedProcedure[];
|
|
1766
1778
|
finalbilling: FinalBilling | null;
|
|
1767
1779
|
finalizationNotes: string | null;
|
|
1768
1780
|
/**
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -1681,6 +1681,7 @@ interface ZoneItemData {
|
|
|
1681
1681
|
productBrandName?: string;
|
|
1682
1682
|
belongingProcedureId: string;
|
|
1683
1683
|
type: 'item' | 'note';
|
|
1684
|
+
stage?: 'before' | 'after';
|
|
1684
1685
|
price?: number;
|
|
1685
1686
|
currency?: Currency;
|
|
1686
1687
|
unitOfMeasurement?: PricingMeasure;
|
|
@@ -1691,6 +1692,8 @@ interface ZoneItemData {
|
|
|
1691
1692
|
notes?: string;
|
|
1692
1693
|
subtotal?: number;
|
|
1693
1694
|
ionNumber?: string;
|
|
1695
|
+
createdAt?: string;
|
|
1696
|
+
updatedAt?: string;
|
|
1694
1697
|
}
|
|
1695
1698
|
/**
|
|
1696
1699
|
* @deprecated Use ZoneItemData instead
|
|
@@ -1754,15 +1757,24 @@ interface ExtendedProcedureInfo {
|
|
|
1754
1757
|
brandName: string;
|
|
1755
1758
|
}>;
|
|
1756
1759
|
}
|
|
1760
|
+
interface RecommendedProcedure {
|
|
1761
|
+
procedure: ExtendedProcedureInfo;
|
|
1762
|
+
note: string;
|
|
1763
|
+
timeframe: {
|
|
1764
|
+
value: number;
|
|
1765
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
1766
|
+
};
|
|
1767
|
+
}
|
|
1757
1768
|
/**
|
|
1758
1769
|
* Interface for appointment metadata containing zone-specific information
|
|
1759
1770
|
*/
|
|
1760
1771
|
interface AppointmentMetadata {
|
|
1761
1772
|
selectedZones: string[] | null;
|
|
1762
|
-
zonePhotos: Record<string, BeforeAfterPerZone> | null;
|
|
1773
|
+
zonePhotos: Record<string, BeforeAfterPerZone[]> | null;
|
|
1763
1774
|
zonesData?: Record<string, ZoneItemData[]> | null;
|
|
1764
1775
|
appointmentProducts?: AppointmentProductMetadata[];
|
|
1765
1776
|
extendedProcedures?: ExtendedProcedureInfo[];
|
|
1777
|
+
recommendedProcedures: RecommendedProcedure[];
|
|
1766
1778
|
finalbilling: FinalBilling | null;
|
|
1767
1779
|
finalizationNotes: string | null;
|
|
1768
1780
|
/**
|
package/dist/admin/index.js
CHANGED
|
@@ -3650,9 +3650,16 @@ var AppointmentAggregationService = class {
|
|
|
3650
3650
|
if (!beforeZonePhotos || !afterZonePhotos) {
|
|
3651
3651
|
return true;
|
|
3652
3652
|
}
|
|
3653
|
-
if (beforeZonePhotos.
|
|
3653
|
+
if (beforeZonePhotos.length !== afterZonePhotos.length) {
|
|
3654
3654
|
return true;
|
|
3655
3655
|
}
|
|
3656
|
+
for (let i = 0; i < beforeZonePhotos.length; i++) {
|
|
3657
|
+
const beforeEntry = beforeZonePhotos[i];
|
|
3658
|
+
const afterEntry = afterZonePhotos[i];
|
|
3659
|
+
if (beforeEntry.before !== afterEntry.before || beforeEntry.after !== afterEntry.after || beforeEntry.beforeNote !== afterEntry.beforeNote || beforeEntry.afterNote !== afterEntry.afterNote) {
|
|
3660
|
+
return true;
|
|
3661
|
+
}
|
|
3662
|
+
}
|
|
3656
3663
|
}
|
|
3657
3664
|
return false;
|
|
3658
3665
|
}
|
|
@@ -3670,24 +3677,43 @@ var AppointmentAggregationService = class {
|
|
|
3670
3677
|
const updatedZones = [];
|
|
3671
3678
|
const newPhotoTypes = [];
|
|
3672
3679
|
for (const zoneId of Object.keys(afterPhotos)) {
|
|
3673
|
-
const beforeZonePhotos = beforePhotos[zoneId];
|
|
3674
|
-
const afterZonePhotos = afterPhotos[zoneId];
|
|
3675
|
-
if (
|
|
3680
|
+
const beforeZonePhotos = beforePhotos[zoneId] || [];
|
|
3681
|
+
const afterZonePhotos = afterPhotos[zoneId] || [];
|
|
3682
|
+
if (beforeZonePhotos.length === 0 && afterZonePhotos.length > 0) {
|
|
3676
3683
|
updatedZones.push(zoneId);
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3684
|
+
afterZonePhotos.forEach((entry) => {
|
|
3685
|
+
if (entry.before) {
|
|
3686
|
+
newPhotoTypes.push({ zoneId, photoType: "before" });
|
|
3687
|
+
}
|
|
3688
|
+
if (entry.after) {
|
|
3689
|
+
newPhotoTypes.push({ zoneId, photoType: "after" });
|
|
3690
|
+
}
|
|
3691
|
+
});
|
|
3692
|
+
} else if (afterZonePhotos.length > beforeZonePhotos.length) {
|
|
3693
|
+
updatedZones.push(zoneId);
|
|
3694
|
+
const newEntries = afterZonePhotos.slice(beforeZonePhotos.length);
|
|
3695
|
+
newEntries.forEach((entry) => {
|
|
3696
|
+
if (entry.before) {
|
|
3697
|
+
newPhotoTypes.push({ zoneId, photoType: "before" });
|
|
3698
|
+
}
|
|
3699
|
+
if (entry.after) {
|
|
3700
|
+
newPhotoTypes.push({ zoneId, photoType: "after" });
|
|
3701
|
+
}
|
|
3702
|
+
});
|
|
3683
3703
|
} else {
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3704
|
+
for (let i = 0; i < afterZonePhotos.length; i++) {
|
|
3705
|
+
const beforeEntry = beforeZonePhotos[i];
|
|
3706
|
+
const afterEntry = afterZonePhotos[i];
|
|
3707
|
+
if (beforeEntry && afterEntry) {
|
|
3708
|
+
if (beforeEntry.before !== afterEntry.before && afterEntry.before) {
|
|
3709
|
+
updatedZones.push(zoneId);
|
|
3710
|
+
newPhotoTypes.push({ zoneId, photoType: "before" });
|
|
3711
|
+
}
|
|
3712
|
+
if (beforeEntry.after !== afterEntry.after && afterEntry.after) {
|
|
3713
|
+
updatedZones.push(zoneId);
|
|
3714
|
+
newPhotoTypes.push({ zoneId, photoType: "after" });
|
|
3715
|
+
}
|
|
3716
|
+
}
|
|
3691
3717
|
}
|
|
3692
3718
|
}
|
|
3693
3719
|
}
|
|
@@ -3707,7 +3733,7 @@ var AppointmentAggregationService = class {
|
|
|
3707
3733
|
if (selectedZones.length > 0) {
|
|
3708
3734
|
const completedZones = selectedZones.filter((zoneId) => {
|
|
3709
3735
|
const zonePhotos = afterPhotos[zoneId];
|
|
3710
|
-
return zonePhotos &&
|
|
3736
|
+
return zonePhotos && zonePhotos.length > 0 && zonePhotos.some((entry) => entry.before || entry.after);
|
|
3711
3737
|
});
|
|
3712
3738
|
const completionPercentage = completedZones.length / selectedZones.length * 100;
|
|
3713
3739
|
Logger.info(
|
|
@@ -7706,6 +7732,7 @@ var BookingAdmin = class {
|
|
|
7706
7732
|
zonesData: null,
|
|
7707
7733
|
appointmentProducts,
|
|
7708
7734
|
extendedProcedures: [],
|
|
7735
|
+
recommendedProcedures: [],
|
|
7709
7736
|
finalbilling: null,
|
|
7710
7737
|
finalizationNotes: null
|
|
7711
7738
|
},
|
package/dist/admin/index.mjs
CHANGED
|
@@ -3588,9 +3588,16 @@ var AppointmentAggregationService = class {
|
|
|
3588
3588
|
if (!beforeZonePhotos || !afterZonePhotos) {
|
|
3589
3589
|
return true;
|
|
3590
3590
|
}
|
|
3591
|
-
if (beforeZonePhotos.
|
|
3591
|
+
if (beforeZonePhotos.length !== afterZonePhotos.length) {
|
|
3592
3592
|
return true;
|
|
3593
3593
|
}
|
|
3594
|
+
for (let i = 0; i < beforeZonePhotos.length; i++) {
|
|
3595
|
+
const beforeEntry = beforeZonePhotos[i];
|
|
3596
|
+
const afterEntry = afterZonePhotos[i];
|
|
3597
|
+
if (beforeEntry.before !== afterEntry.before || beforeEntry.after !== afterEntry.after || beforeEntry.beforeNote !== afterEntry.beforeNote || beforeEntry.afterNote !== afterEntry.afterNote) {
|
|
3598
|
+
return true;
|
|
3599
|
+
}
|
|
3600
|
+
}
|
|
3594
3601
|
}
|
|
3595
3602
|
return false;
|
|
3596
3603
|
}
|
|
@@ -3608,24 +3615,43 @@ var AppointmentAggregationService = class {
|
|
|
3608
3615
|
const updatedZones = [];
|
|
3609
3616
|
const newPhotoTypes = [];
|
|
3610
3617
|
for (const zoneId of Object.keys(afterPhotos)) {
|
|
3611
|
-
const beforeZonePhotos = beforePhotos[zoneId];
|
|
3612
|
-
const afterZonePhotos = afterPhotos[zoneId];
|
|
3613
|
-
if (
|
|
3618
|
+
const beforeZonePhotos = beforePhotos[zoneId] || [];
|
|
3619
|
+
const afterZonePhotos = afterPhotos[zoneId] || [];
|
|
3620
|
+
if (beforeZonePhotos.length === 0 && afterZonePhotos.length > 0) {
|
|
3614
3621
|
updatedZones.push(zoneId);
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3622
|
+
afterZonePhotos.forEach((entry) => {
|
|
3623
|
+
if (entry.before) {
|
|
3624
|
+
newPhotoTypes.push({ zoneId, photoType: "before" });
|
|
3625
|
+
}
|
|
3626
|
+
if (entry.after) {
|
|
3627
|
+
newPhotoTypes.push({ zoneId, photoType: "after" });
|
|
3628
|
+
}
|
|
3629
|
+
});
|
|
3630
|
+
} else if (afterZonePhotos.length > beforeZonePhotos.length) {
|
|
3631
|
+
updatedZones.push(zoneId);
|
|
3632
|
+
const newEntries = afterZonePhotos.slice(beforeZonePhotos.length);
|
|
3633
|
+
newEntries.forEach((entry) => {
|
|
3634
|
+
if (entry.before) {
|
|
3635
|
+
newPhotoTypes.push({ zoneId, photoType: "before" });
|
|
3636
|
+
}
|
|
3637
|
+
if (entry.after) {
|
|
3638
|
+
newPhotoTypes.push({ zoneId, photoType: "after" });
|
|
3639
|
+
}
|
|
3640
|
+
});
|
|
3621
3641
|
} else {
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3642
|
+
for (let i = 0; i < afterZonePhotos.length; i++) {
|
|
3643
|
+
const beforeEntry = beforeZonePhotos[i];
|
|
3644
|
+
const afterEntry = afterZonePhotos[i];
|
|
3645
|
+
if (beforeEntry && afterEntry) {
|
|
3646
|
+
if (beforeEntry.before !== afterEntry.before && afterEntry.before) {
|
|
3647
|
+
updatedZones.push(zoneId);
|
|
3648
|
+
newPhotoTypes.push({ zoneId, photoType: "before" });
|
|
3649
|
+
}
|
|
3650
|
+
if (beforeEntry.after !== afterEntry.after && afterEntry.after) {
|
|
3651
|
+
updatedZones.push(zoneId);
|
|
3652
|
+
newPhotoTypes.push({ zoneId, photoType: "after" });
|
|
3653
|
+
}
|
|
3654
|
+
}
|
|
3629
3655
|
}
|
|
3630
3656
|
}
|
|
3631
3657
|
}
|
|
@@ -3645,7 +3671,7 @@ var AppointmentAggregationService = class {
|
|
|
3645
3671
|
if (selectedZones.length > 0) {
|
|
3646
3672
|
const completedZones = selectedZones.filter((zoneId) => {
|
|
3647
3673
|
const zonePhotos = afterPhotos[zoneId];
|
|
3648
|
-
return zonePhotos &&
|
|
3674
|
+
return zonePhotos && zonePhotos.length > 0 && zonePhotos.some((entry) => entry.before || entry.after);
|
|
3649
3675
|
});
|
|
3650
3676
|
const completionPercentage = completedZones.length / selectedZones.length * 100;
|
|
3651
3677
|
Logger.info(
|
|
@@ -7644,6 +7670,7 @@ var BookingAdmin = class {
|
|
|
7644
7670
|
zonesData: null,
|
|
7645
7671
|
appointmentProducts,
|
|
7646
7672
|
extendedProcedures: [],
|
|
7673
|
+
recommendedProcedures: [],
|
|
7647
7674
|
finalbilling: null,
|
|
7648
7675
|
finalizationNotes: null
|
|
7649
7676
|
},
|
package/dist/index.d.mts
CHANGED
|
@@ -4435,6 +4435,7 @@ interface ZoneItemData {
|
|
|
4435
4435
|
productBrandName?: string;
|
|
4436
4436
|
belongingProcedureId: string;
|
|
4437
4437
|
type: 'item' | 'note';
|
|
4438
|
+
stage?: 'before' | 'after';
|
|
4438
4439
|
price?: number;
|
|
4439
4440
|
currency?: Currency;
|
|
4440
4441
|
unitOfMeasurement?: PricingMeasure;
|
|
@@ -4445,6 +4446,8 @@ interface ZoneItemData {
|
|
|
4445
4446
|
notes?: string;
|
|
4446
4447
|
subtotal?: number;
|
|
4447
4448
|
ionNumber?: string;
|
|
4449
|
+
createdAt?: string;
|
|
4450
|
+
updatedAt?: string;
|
|
4448
4451
|
}
|
|
4449
4452
|
/**
|
|
4450
4453
|
* @deprecated Use ZoneItemData instead
|
|
@@ -4508,15 +4511,24 @@ interface ExtendedProcedureInfo {
|
|
|
4508
4511
|
brandName: string;
|
|
4509
4512
|
}>;
|
|
4510
4513
|
}
|
|
4514
|
+
interface RecommendedProcedure {
|
|
4515
|
+
procedure: ExtendedProcedureInfo;
|
|
4516
|
+
note: string;
|
|
4517
|
+
timeframe: {
|
|
4518
|
+
value: number;
|
|
4519
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
4520
|
+
};
|
|
4521
|
+
}
|
|
4511
4522
|
/**
|
|
4512
4523
|
* Interface for appointment metadata containing zone-specific information
|
|
4513
4524
|
*/
|
|
4514
4525
|
interface AppointmentMetadata {
|
|
4515
4526
|
selectedZones: string[] | null;
|
|
4516
|
-
zonePhotos: Record<string, BeforeAfterPerZone> | null;
|
|
4527
|
+
zonePhotos: Record<string, BeforeAfterPerZone[]> | null;
|
|
4517
4528
|
zonesData?: Record<string, ZoneItemData[]> | null;
|
|
4518
4529
|
appointmentProducts?: AppointmentProductMetadata[];
|
|
4519
4530
|
extendedProcedures?: ExtendedProcedureInfo[];
|
|
4531
|
+
recommendedProcedures: RecommendedProcedure[];
|
|
4520
4532
|
finalbilling: FinalBilling | null;
|
|
4521
4533
|
finalizationNotes: string | null;
|
|
4522
4534
|
/**
|
|
@@ -5629,6 +5641,8 @@ declare class ProcedureService extends BaseService {
|
|
|
5629
5641
|
pagination?: number;
|
|
5630
5642
|
lastDoc?: any;
|
|
5631
5643
|
isActive?: boolean;
|
|
5644
|
+
practitionerId?: string;
|
|
5645
|
+
clinicId?: string;
|
|
5632
5646
|
}): Promise<{
|
|
5633
5647
|
procedures: (Procedure & {
|
|
5634
5648
|
distance?: number;
|
|
@@ -6164,16 +6178,16 @@ declare class AppointmentService extends BaseService {
|
|
|
6164
6178
|
* @param zoneId ID of the zone (optional - if not provided, returns all zones)
|
|
6165
6179
|
* @returns Zone photos data
|
|
6166
6180
|
*/
|
|
6167
|
-
getZonePhotos(appointmentId: string, zoneId?: string): Promise<Record<string, BeforeAfterPerZone> | BeforeAfterPerZone | null>;
|
|
6181
|
+
getZonePhotos(appointmentId: string, zoneId?: string): Promise<Record<string, BeforeAfterPerZone[]> | BeforeAfterPerZone[] | null>;
|
|
6168
6182
|
/**
|
|
6169
|
-
* Deletes a zone photo and updates appointment metadata
|
|
6183
|
+
* Deletes a zone photo entry (by index) and updates appointment metadata
|
|
6170
6184
|
*
|
|
6171
6185
|
* @param appointmentId ID of the appointment
|
|
6172
6186
|
* @param zoneId ID of the zone
|
|
6173
|
-
* @param
|
|
6187
|
+
* @param photoIndex Index of the photo entry to delete in the zone array
|
|
6174
6188
|
* @returns The updated appointment
|
|
6175
6189
|
*/
|
|
6176
|
-
deleteZonePhoto(appointmentId: string, zoneId: string,
|
|
6190
|
+
deleteZonePhoto(appointmentId: string, zoneId: string, photoIndex: number): Promise<Appointment>;
|
|
6177
6191
|
/**
|
|
6178
6192
|
* Adds an item (product or note) to a specific zone
|
|
6179
6193
|
*
|
|
@@ -6263,6 +6277,92 @@ declare class AppointmentService extends BaseService {
|
|
|
6263
6277
|
* @returns The updated appointment with recalculated billing
|
|
6264
6278
|
*/
|
|
6265
6279
|
recalculateFinalBilling(appointmentId: string, taxRate?: number): Promise<Appointment>;
|
|
6280
|
+
/**
|
|
6281
|
+
* Adds a recommended procedure to an appointment
|
|
6282
|
+
* Multiple recommendations of the same procedure are allowed (e.g., touch-up in 2 weeks, full treatment in 3 months)
|
|
6283
|
+
*
|
|
6284
|
+
* @param appointmentId ID of the appointment
|
|
6285
|
+
* @param procedureId ID of the procedure to recommend
|
|
6286
|
+
* @param note Note explaining the recommendation
|
|
6287
|
+
* @param timeframe Suggested timeframe for the procedure
|
|
6288
|
+
* @returns The updated appointment
|
|
6289
|
+
*/
|
|
6290
|
+
addRecommendedProcedure(appointmentId: string, procedureId: string, note: string, timeframe: {
|
|
6291
|
+
value: number;
|
|
6292
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
6293
|
+
}): Promise<Appointment>;
|
|
6294
|
+
/**
|
|
6295
|
+
* Removes a recommended procedure from an appointment by index
|
|
6296
|
+
*
|
|
6297
|
+
* @param appointmentId ID of the appointment
|
|
6298
|
+
* @param recommendationIndex Index of the recommendation to remove
|
|
6299
|
+
* @returns The updated appointment
|
|
6300
|
+
*/
|
|
6301
|
+
removeRecommendedProcedure(appointmentId: string, recommendationIndex: number): Promise<Appointment>;
|
|
6302
|
+
/**
|
|
6303
|
+
* Updates a recommended procedure in an appointment by index
|
|
6304
|
+
*
|
|
6305
|
+
* @param appointmentId ID of the appointment
|
|
6306
|
+
* @param recommendationIndex Index of the recommendation to update
|
|
6307
|
+
* @param updates Partial updates (note and/or timeframe)
|
|
6308
|
+
* @returns The updated appointment
|
|
6309
|
+
*/
|
|
6310
|
+
updateRecommendedProcedure(appointmentId: string, recommendationIndex: number, updates: {
|
|
6311
|
+
note?: string;
|
|
6312
|
+
timeframe?: {
|
|
6313
|
+
value: number;
|
|
6314
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
6315
|
+
};
|
|
6316
|
+
}): Promise<Appointment>;
|
|
6317
|
+
/**
|
|
6318
|
+
* Gets all recommended procedures for an appointment
|
|
6319
|
+
*
|
|
6320
|
+
* @param appointmentId ID of the appointment
|
|
6321
|
+
* @returns Array of recommended procedures
|
|
6322
|
+
*/
|
|
6323
|
+
getRecommendedProcedures(appointmentId: string): Promise<RecommendedProcedure[]>;
|
|
6324
|
+
/**
|
|
6325
|
+
* Updates a specific photo entry in a zone by index
|
|
6326
|
+
* Can update before/after photos and their notes
|
|
6327
|
+
*
|
|
6328
|
+
* @param appointmentId ID of the appointment
|
|
6329
|
+
* @param zoneId Zone ID
|
|
6330
|
+
* @param photoIndex Index of the photo entry to update
|
|
6331
|
+
* @param updates Partial updates to apply (before, after, beforeNote, afterNote)
|
|
6332
|
+
* @returns The updated appointment
|
|
6333
|
+
*/
|
|
6334
|
+
updateZonePhotoEntry(appointmentId: string, zoneId: string, photoIndex: number, updates: Partial<BeforeAfterPerZone>): Promise<Appointment>;
|
|
6335
|
+
/**
|
|
6336
|
+
* Adds an after photo to an existing before photo entry
|
|
6337
|
+
*
|
|
6338
|
+
* @param appointmentId ID of the appointment
|
|
6339
|
+
* @param zoneId Zone ID
|
|
6340
|
+
* @param photoIndex Index of the entry to add after photo to
|
|
6341
|
+
* @param afterPhotoUrl URL of the after photo
|
|
6342
|
+
* @param afterNote Optional note for the after photo
|
|
6343
|
+
* @returns The updated appointment
|
|
6344
|
+
*/
|
|
6345
|
+
addAfterPhotoToEntry(appointmentId: string, zoneId: string, photoIndex: number, afterPhotoUrl: MediaResource, afterNote?: string): Promise<Appointment>;
|
|
6346
|
+
/**
|
|
6347
|
+
* Updates notes for a photo entry
|
|
6348
|
+
*
|
|
6349
|
+
* @param appointmentId ID of the appointment
|
|
6350
|
+
* @param zoneId Zone ID
|
|
6351
|
+
* @param photoIndex Index of the entry
|
|
6352
|
+
* @param beforeNote Optional note for before photo
|
|
6353
|
+
* @param afterNote Optional note for after photo
|
|
6354
|
+
* @returns The updated appointment
|
|
6355
|
+
*/
|
|
6356
|
+
updateZonePhotoNotes(appointmentId: string, zoneId: string, photoIndex: number, beforeNote?: string, afterNote?: string): Promise<Appointment>;
|
|
6357
|
+
/**
|
|
6358
|
+
* Gets a specific photo entry from a zone
|
|
6359
|
+
*
|
|
6360
|
+
* @param appointmentId ID of the appointment
|
|
6361
|
+
* @param zoneId Zone ID
|
|
6362
|
+
* @param photoIndex Index of the entry
|
|
6363
|
+
* @returns Photo entry
|
|
6364
|
+
*/
|
|
6365
|
+
getZonePhotoEntry(appointmentId: string, zoneId: string, photoIndex: number): Promise<BeforeAfterPerZone>;
|
|
6266
6366
|
}
|
|
6267
6367
|
|
|
6268
6368
|
declare class UserService extends BaseService {
|
|
@@ -7169,4 +7269,4 @@ declare const getFirebaseApp: () => Promise<FirebaseApp>;
|
|
|
7169
7269
|
declare const getFirebaseStorage: () => Promise<FirebaseStorage>;
|
|
7170
7270
|
declare const getFirebaseFunctions: () => Promise<Functions>;
|
|
7171
7271
|
|
|
7172
|
-
export { AESTHETIC_ANALYSIS_COLLECTION, APPOINTMENTS_COLLECTION, type AddAllergyData, type AddBlockingConditionData, type AddContraindicationData, type AddMedicationData, type AddressData, type AdminInfo, type AdminToken, AdminTokenStatus, type AestheticAnalysis, type AestheticAnalysisStatus, type Allergy, type AllergySubtype, AllergyType, type AllergyTypeWithSubtype, type Appointment, type AppointmentCancelledNotification, type AppointmentMediaItem, type AppointmentMetadata, type AppointmentProductMetadata, type AppointmentReminderNotification, type AppointmentRescheduledProposalNotification, AppointmentService, AppointmentStatus, type AppointmentStatusChangeNotification, type AssessmentScales, AuthService, type BaseDocumentElement, type BaseNotification, BaseService, type BeforeAfterPerZone, type BillingInfo, type BillingPerZone, type BillingTransaction, BillingTransactionType, BillingTransactionsService, type BinaryChoiceElement, BlockingCondition, type Brand, BrandService, CALENDAR_COLLECTION, CLINICS_COLLECTION, CLINIC_ADMINS_COLLECTION, CLINIC_GROUPS_COLLECTION, type CalendarEvent, CalendarEventStatus, type CalendarEventTime, CalendarEventType, CalendarServiceV2, CalendarServiceV3, CalendarSyncStatus, type Category, CategoryService, CertificationLevel, CertificationSpecialty, type Clinic, type ClinicAdmin, ClinicAdminService, type ClinicAdminSignupData, type ClinicBranchSetupData, type ClinicContactInfo, type ClinicGroup, ClinicGroupService, type ClinicGroupSetupData, type ClinicInfo, type ClinicLocation, ClinicPhotoTag, type ClinicReview, type ClinicReviewInfo, ClinicService, ClinicTag, type ClinicTags, type ClinicalFindingDetail, type ClinicalFindings, ConstantsService, type ContactPerson, Contraindication, type ContraindicationDynamic, CosmeticAllergySubtype, type CreateAdminTokenData, type CreateAestheticAnalysisData, type CreateAppointmentData, type CreateAppointmentHttpData, type CreateAppointmentParams, type CreateBillingTransactionData, type CreateBlockingEventParams, type CreateCalendarEventData, type CreateClinicAdminData, type CreateClinicData, type CreateClinicGroupData, type CreateDefaultClinicGroupData, type CreateDocumentTemplateData, type CreateDraftPractitionerData, type CreateManualPatientData, type CreatePatientLocationInfoData, type CreatePatientMedicalInfoData, type CreatePatientProfileData, type CreatePatientSensitiveInfoData, type CreatePatientTokenData, type CreatePractitionerData, type CreatePractitionerInviteData, type CreatePractitionerTokenData, type CreateProcedureData, type CreateSyncedCalendarData, type CreateUserData, Currency, DEFAULT_MEDICAL_INFO, DOCTOR_FORMS_SUBCOLLECTION, DOCUMENTATION_TEMPLATES_COLLECTION, type DatePickerElement, type DateRange, type DigitalSignatureElement, type DoctorInfo, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateService, type DynamicTextElement, DynamicVariable, type EmergencyContact, EnvironmentalAllergySubtype, type ExtendedProcedureInfo, ExternalCalendarService, FILLED_DOCUMENTS_COLLECTION, type FileUploadElement, type FilledDocument, type FilledDocumentFileValue, FilledDocumentService, FilledDocumentStatus, type FinalBilling, type FirebaseUser, FoodAllergySubtype, type FormReminderNotification, type FormSubmissionConfirmationNotification, type GamificationInfo, Gender, type GeneralMessageNotification, type HeadingElement, HeadingLevel, INVITE_TOKENS_COLLECTION, Language, type LinkedFormInfo, type ListElement, ListType, type LocationData, MEDIA_METADATA_COLLECTION, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, MediaType, MedicationAllergySubtype, type MultipleChoiceElement, NOTIFICATIONS_COLLECTION, type Notification, NotificationService, NotificationStatus, NotificationType, PATIENTS_COLLECTION, PATIENT_APPOINTMENTS_COLLECTION, PATIENT_LOCATION_INFO_COLLECTION, PATIENT_MEDICAL_HISTORY_COLLECTION, PATIENT_MEDICAL_INFO_COLLECTION, PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME, PATIENT_SENSITIVE_INFO_COLLECTION, PRACTITIONERS_COLLECTION, PRACTITIONER_INVITES_COLLECTION, PROCEDURES_COLLECTION, type ParagraphElement, type PatientClinic, type PatientDoctor, type PatientGoals, PatientInstructionStatus, type PatientLocationInfo, type PatientMedicalInfo, type PatientProfile, type PatientProfileComplete, type PatientProfileForDoctor, type PatientProfileInfo, type PatientRequirementInstance, type PatientRequirementInstruction, PatientRequirementOverallStatus, type PatientRequirementsFilters, PatientRequirementsService, type PatientReviewInfo, type PatientSensitiveInfo, PatientService, type PatientToken, PatientTokenStatus, type PaymentConfirmationNotification, PaymentStatus, type PlanDetails, type PostRequirementNotification, PracticeType, type Practitioner, type PractitionerBasicInfo, type PractitionerCertification, type PractitionerClinicProcedures, type PractitionerClinicWorkingHours, type PractitionerInvite, type PractitionerInviteFilters, PractitionerInviteService, PractitionerInviteStatus, type PractitionerProfileInfo, type PractitionerReview, type PractitionerReviewInfo, PractitionerService, PractitionerStatus, type PractitionerToken, PractitionerTokenStatus, type PractitionerWorkingHours, type PreRequirementNotification, PricingMeasure, type Procedure, type ProcedureCategorization, type ProcedureExtendedInfo, ProcedureFamily, type ProcedureInfo, type ProcedureProduct, type ProcedureReview, type ProcedureReviewInfo, ProcedureService, type ProcedureSummaryInfo, type Product, ProductService, type ProposedWorkingHours, REGISTER_TOKENS_COLLECTION, REVIEWS_COLLECTION, type RatingScaleElement, type RequesterInfo, type Requirement, type RequirementInstructionDueNotification, RequirementType, type Review, type ReviewRequestNotification, ReviewService, SYNCED_CALENDARS_COLLECTION, type SearchAppointmentsParams, type SearchCalendarEventsParams, SearchLocationEnum, type SearchPatientsParams, type SignatureElement, type SingleChoiceElement, type StripeTransactionData, type Subcategory, SubcategoryService, SubscriptionModel, SubscriptionStatus, type SyncedCalendar, type SyncedCalendarEvent, SyncedCalendarProvider, SyncedCalendarsService, type Technology, type TechnologyDocumentationTemplate, TechnologyService, type TextInputElement, type TimeSlot, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, USERS_COLLECTION, USER_FORMS_SUBCOLLECTION, type UpdateAestheticAnalysisData, type UpdateAllergyData, type UpdateAppointmentData, type UpdateAppointmentParams, type UpdateBlockingConditionData, type UpdateBlockingEventParams, type UpdateCalendarEventData, type UpdateClinicAdminData, type UpdateClinicData, type UpdateClinicGroupData, type UpdateContraindicationData, type UpdateDocumentTemplateData, type UpdateMedicationData, type UpdatePatientLocationInfoData, type UpdatePatientMedicalInfoData, type UpdatePatientProfileData, type UpdatePatientSensitiveInfoData, type UpdatePractitionerData, type UpdatePractitionerInviteData, type UpdateProcedureData, type UpdateSyncedCalendarData, type UpdateVitalStatsData, type User, UserRole, UserService, type VitalStats, type WorkingHours, type ZoneItemData, type ZonePhotoUploadData, getFirebaseApp, getFirebaseAuth, getFirebaseDB, getFirebaseFunctions, getFirebaseInstance, getFirebaseStorage, initializeFirebase };
|
|
7272
|
+
export { AESTHETIC_ANALYSIS_COLLECTION, APPOINTMENTS_COLLECTION, type AddAllergyData, type AddBlockingConditionData, type AddContraindicationData, type AddMedicationData, type AddressData, type AdminInfo, type AdminToken, AdminTokenStatus, type AestheticAnalysis, type AestheticAnalysisStatus, type Allergy, type AllergySubtype, AllergyType, type AllergyTypeWithSubtype, type Appointment, type AppointmentCancelledNotification, type AppointmentMediaItem, type AppointmentMetadata, type AppointmentProductMetadata, type AppointmentReminderNotification, type AppointmentRescheduledProposalNotification, AppointmentService, AppointmentStatus, type AppointmentStatusChangeNotification, type AssessmentScales, AuthService, type BaseDocumentElement, type BaseNotification, BaseService, type BeforeAfterPerZone, type BillingInfo, type BillingPerZone, type BillingTransaction, BillingTransactionType, BillingTransactionsService, type BinaryChoiceElement, BlockingCondition, type Brand, BrandService, CALENDAR_COLLECTION, CLINICS_COLLECTION, CLINIC_ADMINS_COLLECTION, CLINIC_GROUPS_COLLECTION, type CalendarEvent, CalendarEventStatus, type CalendarEventTime, CalendarEventType, CalendarServiceV2, CalendarServiceV3, CalendarSyncStatus, type Category, CategoryService, CertificationLevel, CertificationSpecialty, type Clinic, type ClinicAdmin, ClinicAdminService, type ClinicAdminSignupData, type ClinicBranchSetupData, type ClinicContactInfo, type ClinicGroup, ClinicGroupService, type ClinicGroupSetupData, type ClinicInfo, type ClinicLocation, ClinicPhotoTag, type ClinicReview, type ClinicReviewInfo, ClinicService, ClinicTag, type ClinicTags, type ClinicalFindingDetail, type ClinicalFindings, ConstantsService, type ContactPerson, Contraindication, type ContraindicationDynamic, CosmeticAllergySubtype, type CreateAdminTokenData, type CreateAestheticAnalysisData, type CreateAppointmentData, type CreateAppointmentHttpData, type CreateAppointmentParams, type CreateBillingTransactionData, type CreateBlockingEventParams, type CreateCalendarEventData, type CreateClinicAdminData, type CreateClinicData, type CreateClinicGroupData, type CreateDefaultClinicGroupData, type CreateDocumentTemplateData, type CreateDraftPractitionerData, type CreateManualPatientData, type CreatePatientLocationInfoData, type CreatePatientMedicalInfoData, type CreatePatientProfileData, type CreatePatientSensitiveInfoData, type CreatePatientTokenData, type CreatePractitionerData, type CreatePractitionerInviteData, type CreatePractitionerTokenData, type CreateProcedureData, type CreateSyncedCalendarData, type CreateUserData, Currency, DEFAULT_MEDICAL_INFO, DOCTOR_FORMS_SUBCOLLECTION, DOCUMENTATION_TEMPLATES_COLLECTION, type DatePickerElement, type DateRange, type DigitalSignatureElement, type DoctorInfo, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateService, type DynamicTextElement, DynamicVariable, type EmergencyContact, EnvironmentalAllergySubtype, type ExtendedProcedureInfo, ExternalCalendarService, FILLED_DOCUMENTS_COLLECTION, type FileUploadElement, type FilledDocument, type FilledDocumentFileValue, FilledDocumentService, FilledDocumentStatus, type FinalBilling, type FirebaseUser, FoodAllergySubtype, type FormReminderNotification, type FormSubmissionConfirmationNotification, type GamificationInfo, Gender, type GeneralMessageNotification, type HeadingElement, HeadingLevel, INVITE_TOKENS_COLLECTION, Language, type LinkedFormInfo, type ListElement, ListType, type LocationData, MEDIA_METADATA_COLLECTION, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, MediaType, MedicationAllergySubtype, type MultipleChoiceElement, NOTIFICATIONS_COLLECTION, type Notification, NotificationService, NotificationStatus, NotificationType, PATIENTS_COLLECTION, PATIENT_APPOINTMENTS_COLLECTION, PATIENT_LOCATION_INFO_COLLECTION, PATIENT_MEDICAL_HISTORY_COLLECTION, PATIENT_MEDICAL_INFO_COLLECTION, PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME, PATIENT_SENSITIVE_INFO_COLLECTION, PRACTITIONERS_COLLECTION, PRACTITIONER_INVITES_COLLECTION, PROCEDURES_COLLECTION, type ParagraphElement, type PatientClinic, type PatientDoctor, type PatientGoals, PatientInstructionStatus, type PatientLocationInfo, type PatientMedicalInfo, type PatientProfile, type PatientProfileComplete, type PatientProfileForDoctor, type PatientProfileInfo, type PatientRequirementInstance, type PatientRequirementInstruction, PatientRequirementOverallStatus, type PatientRequirementsFilters, PatientRequirementsService, type PatientReviewInfo, type PatientSensitiveInfo, PatientService, type PatientToken, PatientTokenStatus, type PaymentConfirmationNotification, PaymentStatus, type PlanDetails, type PostRequirementNotification, PracticeType, type Practitioner, type PractitionerBasicInfo, type PractitionerCertification, type PractitionerClinicProcedures, type PractitionerClinicWorkingHours, type PractitionerInvite, type PractitionerInviteFilters, PractitionerInviteService, PractitionerInviteStatus, type PractitionerProfileInfo, type PractitionerReview, type PractitionerReviewInfo, PractitionerService, PractitionerStatus, type PractitionerToken, PractitionerTokenStatus, type PractitionerWorkingHours, type PreRequirementNotification, PricingMeasure, type Procedure, type ProcedureCategorization, type ProcedureExtendedInfo, ProcedureFamily, type ProcedureInfo, type ProcedureProduct, type ProcedureReview, type ProcedureReviewInfo, ProcedureService, type ProcedureSummaryInfo, type Product, ProductService, type ProposedWorkingHours, REGISTER_TOKENS_COLLECTION, REVIEWS_COLLECTION, type RatingScaleElement, type RecommendedProcedure, type RequesterInfo, type Requirement, type RequirementInstructionDueNotification, RequirementType, type Review, type ReviewRequestNotification, ReviewService, SYNCED_CALENDARS_COLLECTION, type SearchAppointmentsParams, type SearchCalendarEventsParams, SearchLocationEnum, type SearchPatientsParams, type SignatureElement, type SingleChoiceElement, type StripeTransactionData, type Subcategory, SubcategoryService, SubscriptionModel, SubscriptionStatus, type SyncedCalendar, type SyncedCalendarEvent, SyncedCalendarProvider, SyncedCalendarsService, type Technology, type TechnologyDocumentationTemplate, TechnologyService, type TextInputElement, type TimeSlot, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, USERS_COLLECTION, USER_FORMS_SUBCOLLECTION, type UpdateAestheticAnalysisData, type UpdateAllergyData, type UpdateAppointmentData, type UpdateAppointmentParams, type UpdateBlockingConditionData, type UpdateBlockingEventParams, type UpdateCalendarEventData, type UpdateClinicAdminData, type UpdateClinicData, type UpdateClinicGroupData, type UpdateContraindicationData, type UpdateDocumentTemplateData, type UpdateMedicationData, type UpdatePatientLocationInfoData, type UpdatePatientMedicalInfoData, type UpdatePatientProfileData, type UpdatePatientSensitiveInfoData, type UpdatePractitionerData, type UpdatePractitionerInviteData, type UpdateProcedureData, type UpdateSyncedCalendarData, type UpdateVitalStatsData, type User, UserRole, UserService, type VitalStats, type WorkingHours, type ZoneItemData, type ZonePhotoUploadData, getFirebaseApp, getFirebaseAuth, getFirebaseDB, getFirebaseFunctions, getFirebaseInstance, getFirebaseStorage, initializeFirebase };
|