@blackcode_sa/metaestetics-api 1.13.0 → 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,6 +32,11 @@ export interface AnalyticsFilters {
32
32
  */
33
33
  export type GroupingPeriod = 'day' | 'week' | 'month';
34
34
 
35
+ /**
36
+ * Trend period type (only predefined periods, no custom)
37
+ */
38
+ export type TrendPeriod = 'week' | 'month' | 'quarter' | 'year';
39
+
35
40
  /**
36
41
  * Entity type for grouping analytics
37
42
  */
@@ -143,6 +148,9 @@ export interface CancellationMetrics {
143
148
  count: number;
144
149
  percentage: number;
145
150
  }>;
151
+ // Practitioner info when grouping by procedure
152
+ practitionerId?: string;
153
+ practitionerName?: string;
146
154
  }
147
155
 
148
156
  /**
@@ -156,6 +164,9 @@ export interface NoShowMetrics {
156
164
  totalAppointments: number;
157
165
  noShowAppointments: number;
158
166
  noShowRate: number; // percentage
167
+ // Practitioner info when grouping by procedure
168
+ practitionerId?: string;
169
+ practitionerName?: string;
159
170
  }
160
171
 
161
172
  /**
@@ -181,12 +192,20 @@ export interface RevenueMetrics {
181
192
  * Revenue data over time
182
193
  */
183
194
  export interface RevenueTrend {
184
- period: string; // e.g., "2024-01-01", "2024-W01", "2024-01"
195
+ period: string; // e.g., "2024-W01", "2024-01", "2024-Q1", "2024"
185
196
  startDate: Date;
186
197
  endDate: Date;
187
198
  revenue: number;
188
199
  appointmentCount: number;
189
200
  averageRevenue: number;
201
+ currency?: string;
202
+ // Trend comparison (compared to previous period)
203
+ previousPeriod?: {
204
+ revenue: number;
205
+ appointmentCount: number;
206
+ percentageChange: number;
207
+ direction: 'up' | 'down' | 'stable';
208
+ };
190
209
  }
191
210
 
192
211
  /**
@@ -201,6 +220,84 @@ export interface DurationTrend {
201
220
  averageActualDuration: number; // minutes
202
221
  averageEfficiency: number; // percentage
203
222
  appointmentCount: number;
223
+ // Trend comparison (compared to previous period)
224
+ previousPeriod?: {
225
+ averageBookedDuration: number;
226
+ averageActualDuration: number;
227
+ averageEfficiency: number;
228
+ efficiencyPercentageChange: number;
229
+ direction: 'up' | 'down' | 'stable';
230
+ };
231
+ }
232
+
233
+ /**
234
+ * Appointment Count Trend
235
+ * Appointment count trends over time
236
+ */
237
+ export interface AppointmentTrend {
238
+ period: string;
239
+ startDate: Date;
240
+ endDate: Date;
241
+ totalAppointments: number;
242
+ completedAppointments: number;
243
+ canceledAppointments: number;
244
+ noShowAppointments: number;
245
+ pendingAppointments: number;
246
+ confirmedAppointments: number;
247
+ // Trend comparison (compared to previous period)
248
+ previousPeriod?: {
249
+ totalAppointments: number;
250
+ completedAppointments: number;
251
+ percentageChange: number;
252
+ direction: 'up' | 'down' | 'stable';
253
+ };
254
+ }
255
+
256
+ /**
257
+ * Cancellation Rate Trend
258
+ * Cancellation and no-show rate trends over time
259
+ */
260
+ export interface CancellationRateTrend {
261
+ period: string;
262
+ startDate: Date;
263
+ endDate: Date;
264
+ cancellationRate: number; // percentage
265
+ noShowRate: number; // percentage
266
+ totalAppointments: number;
267
+ canceledAppointments: number;
268
+ noShowAppointments: number;
269
+ // Trend comparison (compared to previous period)
270
+ previousPeriod?: {
271
+ cancellationRate: number;
272
+ noShowRate: number;
273
+ cancellationRateChange: number;
274
+ noShowRateChange: number;
275
+ direction: 'up' | 'down' | 'stable';
276
+ };
277
+ }
278
+
279
+ /**
280
+ * Review Trend
281
+ * Review rating and recommendation trends over time
282
+ */
283
+ export interface ReviewTrend {
284
+ period: string; // e.g., "2024-W01", "2024-01", "2024-Q1", "2024"
285
+ startDate: Date;
286
+ endDate: Date;
287
+ averageRating: number; // weighted average rating (0-5)
288
+ recommendationRate: number; // percentage
289
+ totalReviews: number;
290
+ practitionerAverage?: number; // if tracking practitioner reviews
291
+ procedureAverage?: number; // if tracking procedure reviews
292
+ // Trend comparison (compared to previous period)
293
+ previousPeriod?: {
294
+ averageRating: number;
295
+ recommendationRate: number;
296
+ percentageChange: number; // for average rating
297
+ direction: 'up' | 'down' | 'stable';
298
+ };
299
+ entityId?: string; // if grouped by entity
300
+ entityName?: string;
204
301
  }
205
302
 
206
303
  /**
@@ -10,6 +10,20 @@ export interface GroupedAnalyticsBase {
10
10
  entityType: EntityType;
11
11
  }
12
12
 
13
+ /**
14
+ * Review metrics for grouped analytics
15
+ * Note: This is a simplified version for grouped analytics.
16
+ * For full review analytics, see ReviewAnalyticsService.ReviewMetrics
17
+ */
18
+ export interface ReviewMetrics {
19
+ totalReviews: number;
20
+ averageRating: number;
21
+ recommendationRate: number; // % that would recommend
22
+ // Comparison to overall average
23
+ ratingDifference?: number; // Positive = above average, negative = below
24
+ recommendationDifference?: number; // % difference
25
+ }
26
+
13
27
  /**
14
28
  * Grouped Revenue Metrics
15
29
  * Revenue analytics grouped by clinic, practitioner, procedure, or patient
@@ -24,6 +38,11 @@ export interface GroupedRevenueMetrics extends GroupedAnalyticsBase {
24
38
  refundedRevenue: number;
25
39
  totalTax: number;
26
40
  totalSubtotal: number;
41
+ // Practitioner info when grouping by procedure
42
+ practitionerId?: string;
43
+ practitionerName?: string;
44
+ // Review metrics (optional)
45
+ reviewMetrics?: ReviewMetrics;
27
46
  }
28
47
 
29
48
  /**
@@ -44,6 +63,9 @@ export interface GroupedProductUsageMetrics extends GroupedAnalyticsBase {
44
63
  totalRevenue: number;
45
64
  usageCount: number;
46
65
  }>;
66
+ // Practitioner info when grouping by procedure
67
+ practitionerId?: string;
68
+ practitionerName?: string;
47
69
  }
48
70
 
49
71
  /**
@@ -77,6 +99,9 @@ export interface GroupedTimeEfficiencyMetrics extends GroupedAnalyticsBase {
77
99
  totalUnderutilization: number; // minutes
78
100
  averageOverrun: number; // minutes
79
101
  averageUnderutilization: number; // minutes
102
+ // Practitioner info when grouping by procedure
103
+ practitionerId?: string;
104
+ practitionerName?: string;
80
105
  }
81
106
 
82
107
  /**