@blackcode_sa/metaestetics-api 1.12.68 → 1.12.69
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 +34 -1
- package/dist/admin/index.d.ts +34 -1
- package/dist/admin/index.js +104 -0
- package/dist/admin/index.mjs +104 -0
- package/dist/index.d.mts +21 -2
- package/dist/index.d.ts +21 -2
- package/dist/index.js +128 -16
- package/dist/index.mjs +128 -16
- package/package.json +1 -1
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +140 -0
- package/src/backoffice/services/README.md +17 -0
- package/src/backoffice/services/analytics.service.proposal.md +859 -0
- package/src/backoffice/services/analytics.service.summary.md +143 -0
- package/src/services/appointment/appointment.service.ts +59 -6
- package/src/services/procedure/procedure.service.ts +117 -4
- package/src/types/notifications/index.ts +21 -0
package/dist/admin/index.d.mts
CHANGED
|
@@ -2053,6 +2053,7 @@ declare enum NotificationType {
|
|
|
2053
2053
|
FORM_REMINDER = "formReminder",// Reminds user to fill a specific form
|
|
2054
2054
|
FORM_SUBMISSION_CONFIRMATION = "formSubmissionConfirmation",// Confirms form was submitted
|
|
2055
2055
|
REVIEW_REQUEST = "reviewRequest",// Request for patient review post-appointment
|
|
2056
|
+
PROCEDURE_RECOMMENDATION = "procedureRecommendation",// Doctor recommended a procedure for follow-up
|
|
2056
2057
|
PAYMENT_DUE = "paymentDue",
|
|
2057
2058
|
PAYMENT_CONFIRMATION = "paymentConfirmation",
|
|
2058
2059
|
PAYMENT_FAILED = "paymentFailed",
|
|
@@ -2222,6 +2223,24 @@ interface ReviewRequestNotification extends BaseNotification {
|
|
|
2222
2223
|
practitionerName?: string;
|
|
2223
2224
|
procedureName?: string;
|
|
2224
2225
|
}
|
|
2226
|
+
/**
|
|
2227
|
+
* Notification for when a doctor recommends a procedure for follow-up.
|
|
2228
|
+
* Example: "Dr. Smith recommended [Procedure Name] for you. Suggested timeframe: in 2 weeks"
|
|
2229
|
+
*/
|
|
2230
|
+
interface ProcedureRecommendationNotification extends BaseNotification {
|
|
2231
|
+
notificationType: NotificationType.PROCEDURE_RECOMMENDATION;
|
|
2232
|
+
appointmentId: string;
|
|
2233
|
+
recommendationId: string;
|
|
2234
|
+
procedureId: string;
|
|
2235
|
+
procedureName: string;
|
|
2236
|
+
practitionerName: string;
|
|
2237
|
+
clinicName: string;
|
|
2238
|
+
note?: string;
|
|
2239
|
+
timeframe: {
|
|
2240
|
+
value: number;
|
|
2241
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
2242
|
+
};
|
|
2243
|
+
}
|
|
2225
2244
|
/**
|
|
2226
2245
|
* Generic notification for direct messages or announcements.
|
|
2227
2246
|
*/
|
|
@@ -2237,7 +2256,7 @@ interface PaymentConfirmationNotification extends BaseNotification {
|
|
|
2237
2256
|
/**
|
|
2238
2257
|
* Unija svih tipova notifikacija
|
|
2239
2258
|
*/
|
|
2240
|
-
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
2259
|
+
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | ProcedureRecommendationNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
2241
2260
|
|
|
2242
2261
|
/**
|
|
2243
2262
|
* Minimal interface for the new mailgun.js client's messages API
|
|
@@ -2676,6 +2695,20 @@ declare class AppointmentAggregationService {
|
|
|
2676
2695
|
* @param after - The appointment state after update
|
|
2677
2696
|
*/
|
|
2678
2697
|
private handleZonePhotosUpdate;
|
|
2698
|
+
/**
|
|
2699
|
+
* Checks if recommended procedures have changed between two appointment states
|
|
2700
|
+
* @param before - The appointment state before update
|
|
2701
|
+
* @param after - The appointment state after update
|
|
2702
|
+
* @returns True if recommendations have changed, false otherwise
|
|
2703
|
+
*/
|
|
2704
|
+
private hasRecommendationsChanged;
|
|
2705
|
+
/**
|
|
2706
|
+
* Handles recommended procedures update - creates notifications for newly added recommendations
|
|
2707
|
+
* @param before - The appointment state before update
|
|
2708
|
+
* @param after - The appointment state after update
|
|
2709
|
+
* @param patientProfile - The patient profile (for expo tokens)
|
|
2710
|
+
*/
|
|
2711
|
+
private handleRecommendedProceduresUpdate;
|
|
2679
2712
|
}
|
|
2680
2713
|
|
|
2681
2714
|
/**
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -2053,6 +2053,7 @@ declare enum NotificationType {
|
|
|
2053
2053
|
FORM_REMINDER = "formReminder",// Reminds user to fill a specific form
|
|
2054
2054
|
FORM_SUBMISSION_CONFIRMATION = "formSubmissionConfirmation",// Confirms form was submitted
|
|
2055
2055
|
REVIEW_REQUEST = "reviewRequest",// Request for patient review post-appointment
|
|
2056
|
+
PROCEDURE_RECOMMENDATION = "procedureRecommendation",// Doctor recommended a procedure for follow-up
|
|
2056
2057
|
PAYMENT_DUE = "paymentDue",
|
|
2057
2058
|
PAYMENT_CONFIRMATION = "paymentConfirmation",
|
|
2058
2059
|
PAYMENT_FAILED = "paymentFailed",
|
|
@@ -2222,6 +2223,24 @@ interface ReviewRequestNotification extends BaseNotification {
|
|
|
2222
2223
|
practitionerName?: string;
|
|
2223
2224
|
procedureName?: string;
|
|
2224
2225
|
}
|
|
2226
|
+
/**
|
|
2227
|
+
* Notification for when a doctor recommends a procedure for follow-up.
|
|
2228
|
+
* Example: "Dr. Smith recommended [Procedure Name] for you. Suggested timeframe: in 2 weeks"
|
|
2229
|
+
*/
|
|
2230
|
+
interface ProcedureRecommendationNotification extends BaseNotification {
|
|
2231
|
+
notificationType: NotificationType.PROCEDURE_RECOMMENDATION;
|
|
2232
|
+
appointmentId: string;
|
|
2233
|
+
recommendationId: string;
|
|
2234
|
+
procedureId: string;
|
|
2235
|
+
procedureName: string;
|
|
2236
|
+
practitionerName: string;
|
|
2237
|
+
clinicName: string;
|
|
2238
|
+
note?: string;
|
|
2239
|
+
timeframe: {
|
|
2240
|
+
value: number;
|
|
2241
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
2242
|
+
};
|
|
2243
|
+
}
|
|
2225
2244
|
/**
|
|
2226
2245
|
* Generic notification for direct messages or announcements.
|
|
2227
2246
|
*/
|
|
@@ -2237,7 +2256,7 @@ interface PaymentConfirmationNotification extends BaseNotification {
|
|
|
2237
2256
|
/**
|
|
2238
2257
|
* Unija svih tipova notifikacija
|
|
2239
2258
|
*/
|
|
2240
|
-
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
2259
|
+
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | ProcedureRecommendationNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
2241
2260
|
|
|
2242
2261
|
/**
|
|
2243
2262
|
* Minimal interface for the new mailgun.js client's messages API
|
|
@@ -2676,6 +2695,20 @@ declare class AppointmentAggregationService {
|
|
|
2676
2695
|
* @param after - The appointment state after update
|
|
2677
2696
|
*/
|
|
2678
2697
|
private handleZonePhotosUpdate;
|
|
2698
|
+
/**
|
|
2699
|
+
* Checks if recommended procedures have changed between two appointment states
|
|
2700
|
+
* @param before - The appointment state before update
|
|
2701
|
+
* @param after - The appointment state after update
|
|
2702
|
+
* @returns True if recommendations have changed, false otherwise
|
|
2703
|
+
*/
|
|
2704
|
+
private hasRecommendationsChanged;
|
|
2705
|
+
/**
|
|
2706
|
+
* Handles recommended procedures update - creates notifications for newly added recommendations
|
|
2707
|
+
* @param before - The appointment state before update
|
|
2708
|
+
* @param after - The appointment state after update
|
|
2709
|
+
* @param patientProfile - The patient profile (for expo tokens)
|
|
2710
|
+
*/
|
|
2711
|
+
private handleRecommendedProceduresUpdate;
|
|
2679
2712
|
}
|
|
2680
2713
|
|
|
2681
2714
|
/**
|
package/dist/admin/index.js
CHANGED
|
@@ -489,6 +489,7 @@ var NotificationType = /* @__PURE__ */ ((NotificationType2) => {
|
|
|
489
489
|
NotificationType2["FORM_REMINDER"] = "formReminder";
|
|
490
490
|
NotificationType2["FORM_SUBMISSION_CONFIRMATION"] = "formSubmissionConfirmation";
|
|
491
491
|
NotificationType2["REVIEW_REQUEST"] = "reviewRequest";
|
|
492
|
+
NotificationType2["PROCEDURE_RECOMMENDATION"] = "procedureRecommendation";
|
|
492
493
|
NotificationType2["PAYMENT_DUE"] = "paymentDue";
|
|
493
494
|
NotificationType2["PAYMENT_CONFIRMATION"] = "paymentConfirmation";
|
|
494
495
|
NotificationType2["PAYMENT_FAILED"] = "paymentFailed";
|
|
@@ -2928,6 +2929,11 @@ var AppointmentAggregationService = class {
|
|
|
2928
2929
|
Logger.info(`[AggService] Zone photos changed for appointment ${after.id}`);
|
|
2929
2930
|
await this.handleZonePhotosUpdate(before, after);
|
|
2930
2931
|
}
|
|
2932
|
+
const recommendationsChanged = this.hasRecommendationsChanged(before, after);
|
|
2933
|
+
if (recommendationsChanged) {
|
|
2934
|
+
Logger.info(`[AggService] Recommended procedures changed for appointment ${after.id}`);
|
|
2935
|
+
await this.handleRecommendedProceduresUpdate(before, after, patientProfile);
|
|
2936
|
+
}
|
|
2931
2937
|
Logger.info(`[AggService] Successfully processed UPDATE for appointment: ${after.id}`);
|
|
2932
2938
|
} catch (error) {
|
|
2933
2939
|
Logger.error(
|
|
@@ -3960,6 +3966,104 @@ var AppointmentAggregationService = class {
|
|
|
3960
3966
|
);
|
|
3961
3967
|
}
|
|
3962
3968
|
}
|
|
3969
|
+
/**
|
|
3970
|
+
* Checks if recommended procedures have changed between two appointment states
|
|
3971
|
+
* @param before - The appointment state before update
|
|
3972
|
+
* @param after - The appointment state after update
|
|
3973
|
+
* @returns True if recommendations have changed, false otherwise
|
|
3974
|
+
*/
|
|
3975
|
+
hasRecommendationsChanged(before, after) {
|
|
3976
|
+
var _a, _b;
|
|
3977
|
+
const beforeRecommendations = ((_a = before.metadata) == null ? void 0 : _a.recommendedProcedures) || [];
|
|
3978
|
+
const afterRecommendations = ((_b = after.metadata) == null ? void 0 : _b.recommendedProcedures) || [];
|
|
3979
|
+
if (beforeRecommendations.length !== afterRecommendations.length) {
|
|
3980
|
+
return true;
|
|
3981
|
+
}
|
|
3982
|
+
for (let i = 0; i < afterRecommendations.length; i++) {
|
|
3983
|
+
const beforeRec = beforeRecommendations[i];
|
|
3984
|
+
const afterRec = afterRecommendations[i];
|
|
3985
|
+
if (!beforeRec || !afterRec) {
|
|
3986
|
+
return true;
|
|
3987
|
+
}
|
|
3988
|
+
if (beforeRec.procedure.procedureId !== afterRec.procedure.procedureId || beforeRec.note !== afterRec.note || beforeRec.timeframe.value !== afterRec.timeframe.value || beforeRec.timeframe.unit !== afterRec.timeframe.unit) {
|
|
3989
|
+
return true;
|
|
3990
|
+
}
|
|
3991
|
+
}
|
|
3992
|
+
return false;
|
|
3993
|
+
}
|
|
3994
|
+
/**
|
|
3995
|
+
* Handles recommended procedures update - creates notifications for newly added recommendations
|
|
3996
|
+
* @param before - The appointment state before update
|
|
3997
|
+
* @param after - The appointment state after update
|
|
3998
|
+
* @param patientProfile - The patient profile (for expo tokens)
|
|
3999
|
+
*/
|
|
4000
|
+
async handleRecommendedProceduresUpdate(before, after, patientProfile) {
|
|
4001
|
+
var _a, _b, _c, _d, _e;
|
|
4002
|
+
try {
|
|
4003
|
+
const beforeRecommendations = ((_a = before.metadata) == null ? void 0 : _a.recommendedProcedures) || [];
|
|
4004
|
+
const afterRecommendations = ((_b = after.metadata) == null ? void 0 : _b.recommendedProcedures) || [];
|
|
4005
|
+
const newRecommendations = afterRecommendations.slice(beforeRecommendations.length);
|
|
4006
|
+
if (newRecommendations.length === 0) {
|
|
4007
|
+
Logger.info(
|
|
4008
|
+
`[AggService] No new recommendations detected for appointment ${after.id}`
|
|
4009
|
+
);
|
|
4010
|
+
return;
|
|
4011
|
+
}
|
|
4012
|
+
Logger.info(
|
|
4013
|
+
`[AggService] Found ${newRecommendations.length} new recommendation(s) for appointment ${after.id}`
|
|
4014
|
+
);
|
|
4015
|
+
for (let i = 0; i < newRecommendations.length; i++) {
|
|
4016
|
+
const recommendation = newRecommendations[i];
|
|
4017
|
+
const recommendationIndex = beforeRecommendations.length + i;
|
|
4018
|
+
const recommendationId = `${after.id}:${recommendationIndex}`;
|
|
4019
|
+
const timeframeText = `${recommendation.timeframe.value} ${recommendation.timeframe.unit}${recommendation.timeframe.value > 1 ? "s" : ""}`;
|
|
4020
|
+
const notificationPayload = {
|
|
4021
|
+
userId: after.patientId,
|
|
4022
|
+
userRole: "patient" /* PATIENT */,
|
|
4023
|
+
notificationType: "procedureRecommendation" /* PROCEDURE_RECOMMENDATION */,
|
|
4024
|
+
notificationTime: admin6.firestore.Timestamp.now(),
|
|
4025
|
+
notificationTokens: (patientProfile == null ? void 0 : patientProfile.expoTokens) || [],
|
|
4026
|
+
title: "New Procedure Recommendation",
|
|
4027
|
+
body: `${((_c = after.practitionerInfo) == null ? void 0 : _c.name) || "Your doctor"} recommended "${recommendation.procedure.procedureName}" for you. Suggested timeframe: in ${timeframeText}`,
|
|
4028
|
+
appointmentId: after.id,
|
|
4029
|
+
recommendationId,
|
|
4030
|
+
procedureId: recommendation.procedure.procedureId,
|
|
4031
|
+
procedureName: recommendation.procedure.procedureName,
|
|
4032
|
+
practitionerName: ((_d = after.practitionerInfo) == null ? void 0 : _d.name) || "Unknown Practitioner",
|
|
4033
|
+
clinicName: ((_e = after.clinicInfo) == null ? void 0 : _e.name) || "Unknown Clinic",
|
|
4034
|
+
note: recommendation.note,
|
|
4035
|
+
timeframe: recommendation.timeframe
|
|
4036
|
+
};
|
|
4037
|
+
try {
|
|
4038
|
+
const notificationId = await this.notificationsAdmin.createNotification(
|
|
4039
|
+
notificationPayload
|
|
4040
|
+
);
|
|
4041
|
+
Logger.info(
|
|
4042
|
+
`[AggService] Created notification ${notificationId} for recommendation ${recommendationId}`
|
|
4043
|
+
);
|
|
4044
|
+
if ((patientProfile == null ? void 0 : patientProfile.expoTokens) && patientProfile.expoTokens.length > 0) {
|
|
4045
|
+
const notification = await this.notificationsAdmin.getNotification(notificationId);
|
|
4046
|
+
if (notification) {
|
|
4047
|
+
await this.notificationsAdmin.sendPushNotification(notification);
|
|
4048
|
+
Logger.info(
|
|
4049
|
+
`[AggService] Sent push notification for recommendation ${recommendationId}`
|
|
4050
|
+
);
|
|
4051
|
+
}
|
|
4052
|
+
}
|
|
4053
|
+
} catch (error) {
|
|
4054
|
+
Logger.error(
|
|
4055
|
+
`[AggService] Error creating notification for recommendation ${recommendationId}:`,
|
|
4056
|
+
error
|
|
4057
|
+
);
|
|
4058
|
+
}
|
|
4059
|
+
}
|
|
4060
|
+
} catch (error) {
|
|
4061
|
+
Logger.error(
|
|
4062
|
+
`[AggService] Error handling recommended procedures update for appointment ${after.id}:`,
|
|
4063
|
+
error
|
|
4064
|
+
);
|
|
4065
|
+
}
|
|
4066
|
+
}
|
|
3963
4067
|
};
|
|
3964
4068
|
|
|
3965
4069
|
// src/admin/aggregation/clinic/clinic.aggregation.service.ts
|
package/dist/admin/index.mjs
CHANGED
|
@@ -427,6 +427,7 @@ var NotificationType = /* @__PURE__ */ ((NotificationType2) => {
|
|
|
427
427
|
NotificationType2["FORM_REMINDER"] = "formReminder";
|
|
428
428
|
NotificationType2["FORM_SUBMISSION_CONFIRMATION"] = "formSubmissionConfirmation";
|
|
429
429
|
NotificationType2["REVIEW_REQUEST"] = "reviewRequest";
|
|
430
|
+
NotificationType2["PROCEDURE_RECOMMENDATION"] = "procedureRecommendation";
|
|
430
431
|
NotificationType2["PAYMENT_DUE"] = "paymentDue";
|
|
431
432
|
NotificationType2["PAYMENT_CONFIRMATION"] = "paymentConfirmation";
|
|
432
433
|
NotificationType2["PAYMENT_FAILED"] = "paymentFailed";
|
|
@@ -2866,6 +2867,11 @@ var AppointmentAggregationService = class {
|
|
|
2866
2867
|
Logger.info(`[AggService] Zone photos changed for appointment ${after.id}`);
|
|
2867
2868
|
await this.handleZonePhotosUpdate(before, after);
|
|
2868
2869
|
}
|
|
2870
|
+
const recommendationsChanged = this.hasRecommendationsChanged(before, after);
|
|
2871
|
+
if (recommendationsChanged) {
|
|
2872
|
+
Logger.info(`[AggService] Recommended procedures changed for appointment ${after.id}`);
|
|
2873
|
+
await this.handleRecommendedProceduresUpdate(before, after, patientProfile);
|
|
2874
|
+
}
|
|
2869
2875
|
Logger.info(`[AggService] Successfully processed UPDATE for appointment: ${after.id}`);
|
|
2870
2876
|
} catch (error) {
|
|
2871
2877
|
Logger.error(
|
|
@@ -3898,6 +3904,104 @@ var AppointmentAggregationService = class {
|
|
|
3898
3904
|
);
|
|
3899
3905
|
}
|
|
3900
3906
|
}
|
|
3907
|
+
/**
|
|
3908
|
+
* Checks if recommended procedures have changed between two appointment states
|
|
3909
|
+
* @param before - The appointment state before update
|
|
3910
|
+
* @param after - The appointment state after update
|
|
3911
|
+
* @returns True if recommendations have changed, false otherwise
|
|
3912
|
+
*/
|
|
3913
|
+
hasRecommendationsChanged(before, after) {
|
|
3914
|
+
var _a, _b;
|
|
3915
|
+
const beforeRecommendations = ((_a = before.metadata) == null ? void 0 : _a.recommendedProcedures) || [];
|
|
3916
|
+
const afterRecommendations = ((_b = after.metadata) == null ? void 0 : _b.recommendedProcedures) || [];
|
|
3917
|
+
if (beforeRecommendations.length !== afterRecommendations.length) {
|
|
3918
|
+
return true;
|
|
3919
|
+
}
|
|
3920
|
+
for (let i = 0; i < afterRecommendations.length; i++) {
|
|
3921
|
+
const beforeRec = beforeRecommendations[i];
|
|
3922
|
+
const afterRec = afterRecommendations[i];
|
|
3923
|
+
if (!beforeRec || !afterRec) {
|
|
3924
|
+
return true;
|
|
3925
|
+
}
|
|
3926
|
+
if (beforeRec.procedure.procedureId !== afterRec.procedure.procedureId || beforeRec.note !== afterRec.note || beforeRec.timeframe.value !== afterRec.timeframe.value || beforeRec.timeframe.unit !== afterRec.timeframe.unit) {
|
|
3927
|
+
return true;
|
|
3928
|
+
}
|
|
3929
|
+
}
|
|
3930
|
+
return false;
|
|
3931
|
+
}
|
|
3932
|
+
/**
|
|
3933
|
+
* Handles recommended procedures update - creates notifications for newly added recommendations
|
|
3934
|
+
* @param before - The appointment state before update
|
|
3935
|
+
* @param after - The appointment state after update
|
|
3936
|
+
* @param patientProfile - The patient profile (for expo tokens)
|
|
3937
|
+
*/
|
|
3938
|
+
async handleRecommendedProceduresUpdate(before, after, patientProfile) {
|
|
3939
|
+
var _a, _b, _c, _d, _e;
|
|
3940
|
+
try {
|
|
3941
|
+
const beforeRecommendations = ((_a = before.metadata) == null ? void 0 : _a.recommendedProcedures) || [];
|
|
3942
|
+
const afterRecommendations = ((_b = after.metadata) == null ? void 0 : _b.recommendedProcedures) || [];
|
|
3943
|
+
const newRecommendations = afterRecommendations.slice(beforeRecommendations.length);
|
|
3944
|
+
if (newRecommendations.length === 0) {
|
|
3945
|
+
Logger.info(
|
|
3946
|
+
`[AggService] No new recommendations detected for appointment ${after.id}`
|
|
3947
|
+
);
|
|
3948
|
+
return;
|
|
3949
|
+
}
|
|
3950
|
+
Logger.info(
|
|
3951
|
+
`[AggService] Found ${newRecommendations.length} new recommendation(s) for appointment ${after.id}`
|
|
3952
|
+
);
|
|
3953
|
+
for (let i = 0; i < newRecommendations.length; i++) {
|
|
3954
|
+
const recommendation = newRecommendations[i];
|
|
3955
|
+
const recommendationIndex = beforeRecommendations.length + i;
|
|
3956
|
+
const recommendationId = `${after.id}:${recommendationIndex}`;
|
|
3957
|
+
const timeframeText = `${recommendation.timeframe.value} ${recommendation.timeframe.unit}${recommendation.timeframe.value > 1 ? "s" : ""}`;
|
|
3958
|
+
const notificationPayload = {
|
|
3959
|
+
userId: after.patientId,
|
|
3960
|
+
userRole: "patient" /* PATIENT */,
|
|
3961
|
+
notificationType: "procedureRecommendation" /* PROCEDURE_RECOMMENDATION */,
|
|
3962
|
+
notificationTime: admin6.firestore.Timestamp.now(),
|
|
3963
|
+
notificationTokens: (patientProfile == null ? void 0 : patientProfile.expoTokens) || [],
|
|
3964
|
+
title: "New Procedure Recommendation",
|
|
3965
|
+
body: `${((_c = after.practitionerInfo) == null ? void 0 : _c.name) || "Your doctor"} recommended "${recommendation.procedure.procedureName}" for you. Suggested timeframe: in ${timeframeText}`,
|
|
3966
|
+
appointmentId: after.id,
|
|
3967
|
+
recommendationId,
|
|
3968
|
+
procedureId: recommendation.procedure.procedureId,
|
|
3969
|
+
procedureName: recommendation.procedure.procedureName,
|
|
3970
|
+
practitionerName: ((_d = after.practitionerInfo) == null ? void 0 : _d.name) || "Unknown Practitioner",
|
|
3971
|
+
clinicName: ((_e = after.clinicInfo) == null ? void 0 : _e.name) || "Unknown Clinic",
|
|
3972
|
+
note: recommendation.note,
|
|
3973
|
+
timeframe: recommendation.timeframe
|
|
3974
|
+
};
|
|
3975
|
+
try {
|
|
3976
|
+
const notificationId = await this.notificationsAdmin.createNotification(
|
|
3977
|
+
notificationPayload
|
|
3978
|
+
);
|
|
3979
|
+
Logger.info(
|
|
3980
|
+
`[AggService] Created notification ${notificationId} for recommendation ${recommendationId}`
|
|
3981
|
+
);
|
|
3982
|
+
if ((patientProfile == null ? void 0 : patientProfile.expoTokens) && patientProfile.expoTokens.length > 0) {
|
|
3983
|
+
const notification = await this.notificationsAdmin.getNotification(notificationId);
|
|
3984
|
+
if (notification) {
|
|
3985
|
+
await this.notificationsAdmin.sendPushNotification(notification);
|
|
3986
|
+
Logger.info(
|
|
3987
|
+
`[AggService] Sent push notification for recommendation ${recommendationId}`
|
|
3988
|
+
);
|
|
3989
|
+
}
|
|
3990
|
+
}
|
|
3991
|
+
} catch (error) {
|
|
3992
|
+
Logger.error(
|
|
3993
|
+
`[AggService] Error creating notification for recommendation ${recommendationId}:`,
|
|
3994
|
+
error
|
|
3995
|
+
);
|
|
3996
|
+
}
|
|
3997
|
+
}
|
|
3998
|
+
} catch (error) {
|
|
3999
|
+
Logger.error(
|
|
4000
|
+
`[AggService] Error handling recommended procedures update for appointment ${after.id}:`,
|
|
4001
|
+
error
|
|
4002
|
+
);
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
3901
4005
|
};
|
|
3902
4006
|
|
|
3903
4007
|
// src/admin/aggregation/clinic/clinic.aggregation.service.ts
|
package/dist/index.d.mts
CHANGED
|
@@ -3216,6 +3216,7 @@ declare enum NotificationType {
|
|
|
3216
3216
|
FORM_REMINDER = "formReminder",// Reminds user to fill a specific form
|
|
3217
3217
|
FORM_SUBMISSION_CONFIRMATION = "formSubmissionConfirmation",// Confirms form was submitted
|
|
3218
3218
|
REVIEW_REQUEST = "reviewRequest",// Request for patient review post-appointment
|
|
3219
|
+
PROCEDURE_RECOMMENDATION = "procedureRecommendation",// Doctor recommended a procedure for follow-up
|
|
3219
3220
|
PAYMENT_DUE = "paymentDue",
|
|
3220
3221
|
PAYMENT_CONFIRMATION = "paymentConfirmation",
|
|
3221
3222
|
PAYMENT_FAILED = "paymentFailed",
|
|
@@ -3385,6 +3386,24 @@ interface ReviewRequestNotification extends BaseNotification {
|
|
|
3385
3386
|
practitionerName?: string;
|
|
3386
3387
|
procedureName?: string;
|
|
3387
3388
|
}
|
|
3389
|
+
/**
|
|
3390
|
+
* Notification for when a doctor recommends a procedure for follow-up.
|
|
3391
|
+
* Example: "Dr. Smith recommended [Procedure Name] for you. Suggested timeframe: in 2 weeks"
|
|
3392
|
+
*/
|
|
3393
|
+
interface ProcedureRecommendationNotification extends BaseNotification {
|
|
3394
|
+
notificationType: NotificationType.PROCEDURE_RECOMMENDATION;
|
|
3395
|
+
appointmentId: string;
|
|
3396
|
+
recommendationId: string;
|
|
3397
|
+
procedureId: string;
|
|
3398
|
+
procedureName: string;
|
|
3399
|
+
practitionerName: string;
|
|
3400
|
+
clinicName: string;
|
|
3401
|
+
note?: string;
|
|
3402
|
+
timeframe: {
|
|
3403
|
+
value: number;
|
|
3404
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
3405
|
+
};
|
|
3406
|
+
}
|
|
3388
3407
|
/**
|
|
3389
3408
|
* Generic notification for direct messages or announcements.
|
|
3390
3409
|
*/
|
|
@@ -3400,7 +3419,7 @@ interface PaymentConfirmationNotification extends BaseNotification {
|
|
|
3400
3419
|
/**
|
|
3401
3420
|
* Unija svih tipova notifikacija
|
|
3402
3421
|
*/
|
|
3403
|
-
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
3422
|
+
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | ProcedureRecommendationNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
3404
3423
|
|
|
3405
3424
|
declare enum AllergyType {
|
|
3406
3425
|
MEDICATION = "medication",
|
|
@@ -7695,4 +7714,4 @@ declare const getFirebaseApp: () => Promise<FirebaseApp>;
|
|
|
7695
7714
|
declare const getFirebaseStorage: () => Promise<FirebaseStorage>;
|
|
7696
7715
|
declare const getFirebaseFunctions: () => Promise<Functions>;
|
|
7697
7716
|
|
|
7698
|
-
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 NextStepsRecommendation, 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, type RequirementSourceProcedure, 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 };
|
|
7717
|
+
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 NextStepsRecommendation, 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 ProcedureRecommendationNotification, 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, type RequirementSourceProcedure, 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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -3216,6 +3216,7 @@ declare enum NotificationType {
|
|
|
3216
3216
|
FORM_REMINDER = "formReminder",// Reminds user to fill a specific form
|
|
3217
3217
|
FORM_SUBMISSION_CONFIRMATION = "formSubmissionConfirmation",// Confirms form was submitted
|
|
3218
3218
|
REVIEW_REQUEST = "reviewRequest",// Request for patient review post-appointment
|
|
3219
|
+
PROCEDURE_RECOMMENDATION = "procedureRecommendation",// Doctor recommended a procedure for follow-up
|
|
3219
3220
|
PAYMENT_DUE = "paymentDue",
|
|
3220
3221
|
PAYMENT_CONFIRMATION = "paymentConfirmation",
|
|
3221
3222
|
PAYMENT_FAILED = "paymentFailed",
|
|
@@ -3385,6 +3386,24 @@ interface ReviewRequestNotification extends BaseNotification {
|
|
|
3385
3386
|
practitionerName?: string;
|
|
3386
3387
|
procedureName?: string;
|
|
3387
3388
|
}
|
|
3389
|
+
/**
|
|
3390
|
+
* Notification for when a doctor recommends a procedure for follow-up.
|
|
3391
|
+
* Example: "Dr. Smith recommended [Procedure Name] for you. Suggested timeframe: in 2 weeks"
|
|
3392
|
+
*/
|
|
3393
|
+
interface ProcedureRecommendationNotification extends BaseNotification {
|
|
3394
|
+
notificationType: NotificationType.PROCEDURE_RECOMMENDATION;
|
|
3395
|
+
appointmentId: string;
|
|
3396
|
+
recommendationId: string;
|
|
3397
|
+
procedureId: string;
|
|
3398
|
+
procedureName: string;
|
|
3399
|
+
practitionerName: string;
|
|
3400
|
+
clinicName: string;
|
|
3401
|
+
note?: string;
|
|
3402
|
+
timeframe: {
|
|
3403
|
+
value: number;
|
|
3404
|
+
unit: 'day' | 'week' | 'month' | 'year';
|
|
3405
|
+
};
|
|
3406
|
+
}
|
|
3388
3407
|
/**
|
|
3389
3408
|
* Generic notification for direct messages or announcements.
|
|
3390
3409
|
*/
|
|
@@ -3400,7 +3419,7 @@ interface PaymentConfirmationNotification extends BaseNotification {
|
|
|
3400
3419
|
/**
|
|
3401
3420
|
* Unija svih tipova notifikacija
|
|
3402
3421
|
*/
|
|
3403
|
-
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
3422
|
+
type Notification = PreRequirementNotification | PostRequirementNotification | RequirementInstructionDueNotification | AppointmentReminderNotification | AppointmentStatusChangeNotification | AppointmentRescheduledProposalNotification | AppointmentCancelledNotification | FormReminderNotification | FormSubmissionConfirmationNotification | ReviewRequestNotification | ProcedureRecommendationNotification | GeneralMessageNotification | PaymentConfirmationNotification;
|
|
3404
3423
|
|
|
3405
3424
|
declare enum AllergyType {
|
|
3406
3425
|
MEDICATION = "medication",
|
|
@@ -7695,4 +7714,4 @@ declare const getFirebaseApp: () => Promise<FirebaseApp>;
|
|
|
7695
7714
|
declare const getFirebaseStorage: () => Promise<FirebaseStorage>;
|
|
7696
7715
|
declare const getFirebaseFunctions: () => Promise<Functions>;
|
|
7697
7716
|
|
|
7698
|
-
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 NextStepsRecommendation, 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, type RequirementSourceProcedure, 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 };
|
|
7717
|
+
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 NextStepsRecommendation, 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 ProcedureRecommendationNotification, 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, type RequirementSourceProcedure, 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 };
|