@talkpilot/core-db 1.3.0 → 1.3.1

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.
Files changed (101) hide show
  1. package/README.md +0 -30
  2. package/dist/municipal/tickets/index.d.ts +1 -2
  3. package/dist/municipal/tickets/index.d.ts.map +1 -1
  4. package/dist/municipal/tickets/index.js +0 -1
  5. package/dist/municipal/tickets/index.js.map +1 -1
  6. package/dist/municipal/tickets/tickets.getters.d.ts +11 -0
  7. package/dist/municipal/tickets/tickets.getters.d.ts.map +1 -1
  8. package/dist/municipal/tickets/tickets.getters.js +128 -0
  9. package/dist/municipal/tickets/tickets.getters.js.map +1 -1
  10. package/dist/municipal/tickets/tickets.types.d.ts +5 -10
  11. package/dist/municipal/tickets/tickets.types.d.ts.map +1 -1
  12. package/dist/talkpilot/calls/calls.types.d.ts +2 -1
  13. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  14. package/dist/talkpilot/calls/calls.types.js +3 -0
  15. package/dist/talkpilot/calls/calls.types.js.map +1 -1
  16. package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts +1 -33
  17. package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts.map +1 -1
  18. package/dist/talkpilot/calls/dashboard/calls.dashboard.js +146 -131
  19. package/dist/talkpilot/calls/dashboard/calls.dashboard.js.map +1 -1
  20. package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts +6 -27
  21. package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts.map +1 -1
  22. package/dist/talkpilot/calls/index.d.ts +0 -3
  23. package/dist/talkpilot/calls/index.d.ts.map +1 -1
  24. package/dist/talkpilot/calls/index.js +0 -3
  25. package/dist/talkpilot/calls/index.js.map +1 -1
  26. package/package.json +1 -1
  27. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +37 -1
  28. package/src/municipal/tickets/index.ts +1 -2
  29. package/src/municipal/tickets/tickets.getters.ts +140 -0
  30. package/src/municipal/tickets/tickets.types.ts +9 -14
  31. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +111 -8
  32. package/src/talkpilot/calls/calls.types.ts +2 -4
  33. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +197 -148
  34. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +12 -25
  35. package/src/talkpilot/calls/index.ts +0 -3
  36. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +0 -7
  37. package/dist/municipal/tickets/tickets.constants.d.ts +0 -7
  38. package/dist/municipal/tickets/tickets.constants.d.ts.map +0 -1
  39. package/dist/municipal/tickets/tickets.constants.js +0 -10
  40. package/dist/municipal/tickets/tickets.constants.js.map +0 -1
  41. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts +0 -12
  42. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts.map +0 -1
  43. package/dist/municipal/tickets/tickets.deprecated.getters.js +0 -131
  44. package/dist/municipal/tickets/tickets.deprecated.getters.js.map +0 -1
  45. package/dist/municipal/tickets/tickets.statistics.aggregation.d.ts +0 -45
  46. package/dist/municipal/tickets/tickets.statistics.aggregation.d.ts.map +0 -1
  47. package/dist/municipal/tickets/tickets.statistics.aggregation.js +0 -98
  48. package/dist/municipal/tickets/tickets.statistics.aggregation.js.map +0 -1
  49. package/dist/municipal/tickets/tickets.statistics.dates.d.ts +0 -7
  50. package/dist/municipal/tickets/tickets.statistics.dates.d.ts.map +0 -1
  51. package/dist/municipal/tickets/tickets.statistics.dates.js +0 -40
  52. package/dist/municipal/tickets/tickets.statistics.dates.js.map +0 -1
  53. package/dist/municipal/tickets/tickets.statistics.getters.d.ts +0 -9
  54. package/dist/municipal/tickets/tickets.statistics.getters.d.ts.map +0 -1
  55. package/dist/municipal/tickets/tickets.statistics.getters.js +0 -55
  56. package/dist/municipal/tickets/tickets.statistics.getters.js.map +0 -1
  57. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts +0 -53
  58. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts.map +0 -1
  59. package/dist/municipal/tickets/tickets.statistics.pipeline.js +0 -112
  60. package/dist/municipal/tickets/tickets.statistics.pipeline.js.map +0 -1
  61. package/dist/municipal/tickets/tickets.statistics.utils.d.ts +0 -7
  62. package/dist/municipal/tickets/tickets.statistics.utils.d.ts.map +0 -1
  63. package/dist/municipal/tickets/tickets.statistics.utils.js +0 -40
  64. package/dist/municipal/tickets/tickets.statistics.utils.js.map +0 -1
  65. package/dist/talkpilot/calls/calls.constants.d.ts +0 -17
  66. package/dist/talkpilot/calls/calls.constants.d.ts.map +0 -1
  67. package/dist/talkpilot/calls/calls.constants.js +0 -20
  68. package/dist/talkpilot/calls/calls.constants.js.map +0 -1
  69. package/dist/talkpilot/calls/calls.statistics.getters.d.ts +0 -19
  70. package/dist/talkpilot/calls/calls.statistics.getters.d.ts.map +0 -1
  71. package/dist/talkpilot/calls/calls.statistics.getters.js +0 -375
  72. package/dist/talkpilot/calls/calls.statistics.getters.js.map +0 -1
  73. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts +0 -12
  74. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts.map +0 -1
  75. package/dist/talkpilot/calls/calls.statistics.ticketScope.js +0 -37
  76. package/dist/talkpilot/calls/calls.statistics.ticketScope.js.map +0 -1
  77. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts +0 -17
  78. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts.map +0 -1
  79. package/dist/talkpilot/calls/calls.statistics.tickets.js +0 -33
  80. package/dist/talkpilot/calls/calls.statistics.tickets.js.map +0 -1
  81. package/dist/talkpilot/calls/calls.statistics.types.d.ts +0 -39
  82. package/dist/talkpilot/calls/calls.statistics.types.d.ts.map +0 -1
  83. package/dist/talkpilot/calls/calls.statistics.types.js +0 -3
  84. package/dist/talkpilot/calls/calls.statistics.types.js.map +0 -1
  85. package/dist/utils/date.utils.d.ts +0 -49
  86. package/dist/utils/date.utils.d.ts.map +0 -1
  87. package/dist/utils/date.utils.js +0 -103
  88. package/dist/utils/date.utils.js.map +0 -1
  89. package/dist/utils/statistics.aggregation.d.ts +0 -20
  90. package/dist/utils/statistics.aggregation.d.ts.map +0 -1
  91. package/dist/utils/statistics.aggregation.js +0 -43
  92. package/dist/utils/statistics.aggregation.js.map +0 -1
  93. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +0 -104
  94. package/src/municipal/tickets/tickets.constants.ts +0 -8
  95. package/src/municipal/tickets/tickets.statistics.aggregation.ts +0 -113
  96. package/src/municipal/tickets/tickets.statistics.getters.ts +0 -93
  97. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +0 -281
  98. package/src/talkpilot/calls/calls.constants.ts +0 -20
  99. package/src/talkpilot/calls/calls.statistics.getters.ts +0 -525
  100. package/src/talkpilot/calls/calls.statistics.types.ts +0 -44
  101. package/src/utils/date.utils.ts +0 -116
@@ -3,58 +3,168 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.buildCallLengthBucketsPipeline = buildCallLengthBucketsPipeline;
7
6
  exports.getDashboardStats = getDashboardStats;
8
7
  const dayjs_1 = __importDefault(require("dayjs"));
9
8
  const calls_getters_1 = require("../calls.getters");
10
9
  const clientsConfig_1 = require("../../clientsConfig");
11
10
  const utc_1 = __importDefault(require("dayjs/plugin/utc"));
12
11
  const timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
12
+ const isoWeek_1 = __importDefault(require("dayjs/plugin/isoWeek"));
13
+ const quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
13
14
  const DEFAULT_KPI_DATA = {
14
- totalCalls: 0,
15
- totalDuration: 0,
16
15
  completedCount: 0,
17
- failedCount: 0,
18
- noAnswerCount: 0,
19
16
  busyCount: 0,
17
+ answeredDuration: 0,
20
18
  };
21
19
  dayjs_1.default.extend(utc_1.default);
22
20
  dayjs_1.default.extend(timezone_1.default);
21
+ dayjs_1.default.extend(isoWeek_1.default);
22
+ dayjs_1.default.extend(quarterOfYear_1.default);
23
+ const BUCKET_UNIT = {
24
+ hour: "hour",
25
+ day: "day",
26
+ week: "isoWeek",
27
+ month: "month",
28
+ quarter: "quarter",
29
+ year: "year",
30
+ };
31
+ function formatBucketKey(bucketStart, granularity) {
32
+ switch (granularity) {
33
+ case "hour":
34
+ return bucketStart.format("YYYY-MM-DDTHH:00");
35
+ case "day":
36
+ case "week":
37
+ return bucketStart.format("YYYY-MM-DD");
38
+ case "month":
39
+ return bucketStart.format("YYYY-MM");
40
+ case "quarter":
41
+ return `${bucketStart.format("YYYY")}-Q${bucketStart.quarter()}`;
42
+ case "year":
43
+ return bucketStart.format("YYYY");
44
+ }
45
+ }
46
+ function generateBucketKeys(startDateObj, endDateObj, granularity, timezone) {
47
+ const unitName = BUCKET_UNIT[granularity];
48
+ const startOfUnit = unitName;
49
+ const stepUnit = (unitName === "isoWeek" ? "week" : unitName);
50
+ const end = (0, dayjs_1.default)(endDateObj).tz(timezone);
51
+ let cursor = (0, dayjs_1.default)(startDateObj).tz(timezone).startOf(startOfUnit);
52
+ const keys = [];
53
+ while (cursor.isBefore(end) || cursor.isSame(end, startOfUnit)) {
54
+ keys.push(formatBucketKey(cursor, granularity));
55
+ cursor = cursor.add(1, stepUnit);
56
+ }
57
+ return keys;
58
+ }
59
+ function fillVolumeGaps(bucketKeys, volumeDataRaw) {
60
+ const completedByKey = new Map(volumeDataRaw.map((d) => [d.date, d.completed]));
61
+ return bucketKeys.map((date) => ({
62
+ date,
63
+ completed: completedByKey.get(date) ?? 0,
64
+ }));
65
+ }
66
+ function resolveVolumeGranularity(startDateObj, endDateObj) {
67
+ const spanDays = (0, dayjs_1.default)(endDateObj).diff((0, dayjs_1.default)(startDateObj), "day");
68
+ if (spanDays <= 2)
69
+ return "hour";
70
+ if (spanDays <= 60)
71
+ return "day";
72
+ if (spanDays <= 365)
73
+ return "week";
74
+ if (spanDays <= 730)
75
+ return "month";
76
+ if (spanDays <= 1460)
77
+ return "quarter";
78
+ return "year";
79
+ }
80
+ const VOLUME_DATE_FORMATS = {
81
+ hour: "%Y-%m-%dT%H:00",
82
+ day: "%Y-%m-%d",
83
+ month: "%Y-%m",
84
+ year: "%Y",
85
+ };
86
+ function buildVolumeBucketIdExpression(timezone, granularity) {
87
+ if (granularity === "week") {
88
+ return {
89
+ $dateToString: {
90
+ format: "%Y-%m-%d",
91
+ date: {
92
+ $dateTrunc: {
93
+ date: "$createdAt",
94
+ unit: "week",
95
+ timezone,
96
+ startOfWeek: "monday",
97
+ },
98
+ },
99
+ timezone,
100
+ },
101
+ };
102
+ }
103
+ if (granularity === "quarter") {
104
+ return {
105
+ $concat: [
106
+ { $toString: { $year: { date: "$createdAt", timezone } } },
107
+ "-Q",
108
+ {
109
+ $toString: {
110
+ $add: [
111
+ {
112
+ $trunc: {
113
+ $divide: [
114
+ {
115
+ $subtract: [
116
+ { $month: { date: "$createdAt", timezone } },
117
+ 1,
118
+ ],
119
+ },
120
+ 3,
121
+ ],
122
+ },
123
+ },
124
+ 1,
125
+ ],
126
+ },
127
+ },
128
+ ],
129
+ };
130
+ }
131
+ return {
132
+ $dateToString: {
133
+ format: VOLUME_DATE_FORMATS[granularity],
134
+ date: "$createdAt",
135
+ timezone,
136
+ },
137
+ };
138
+ }
23
139
  function buildKpisPipeline() {
24
140
  return [
25
141
  {
26
142
  $group: {
27
143
  _id: null,
28
- totalCalls: { $sum: 1 },
29
- totalDuration: { $sum: "$callLength" },
30
144
  completedCount: {
31
145
  $sum: { $cond: [{ $eq: ["$status", "completed"] }, 1, 0] },
32
146
  },
33
- failedCount: {
34
- $sum: { $cond: [{ $eq: ["$status", "failed"] }, 1, 0] },
35
- },
36
- noAnswerCount: {
37
- $sum: { $cond: [{ $eq: ["$status", "no-answer"] }, 1, 0] },
38
- },
39
147
  busyCount: {
40
148
  $sum: { $cond: [{ $eq: ["$status", "busy"] }, 1, 0] },
41
149
  },
150
+ answeredDuration: {
151
+ $sum: {
152
+ $cond: [
153
+ { $in: ["$status", ["completed", "busy"]] },
154
+ "$callLength",
155
+ 0,
156
+ ],
157
+ },
158
+ },
42
159
  },
43
160
  },
44
161
  ];
45
162
  }
46
- function buildDailyDataPipeline(timezone) {
163
+ function buildVolumeDataPipeline(timezone, granularity) {
47
164
  return [
48
165
  {
49
166
  $group: {
50
- _id: {
51
- $dateToString: {
52
- format: "%Y-%m-%d",
53
- date: "$createdAt",
54
- timezone: timezone,
55
- },
56
- },
57
- count: { $sum: 1 },
167
+ _id: buildVolumeBucketIdExpression(timezone, granularity),
58
168
  completed: {
59
169
  $sum: { $cond: [{ $eq: ["$status", "completed"] }, 1, 0] },
60
170
  },
@@ -63,86 +173,13 @@ function buildDailyDataPipeline(timezone) {
63
173
  { $sort: { _id: 1 } },
64
174
  ];
65
175
  }
66
- function buildHourlyDataPipeline(timezone) {
67
- return [
68
- {
69
- $group: {
70
- _id: {
71
- day: {
72
- $dateToString: {
73
- format: "%Y-%m-%d",
74
- date: "$createdAt",
75
- timezone: timezone,
76
- },
77
- },
78
- hour: { $hour: { date: "$createdAt", timezone: timezone } },
79
- },
80
- count: { $sum: 1 },
81
- },
82
- },
83
- ];
84
- }
85
- function buildCallLengthBucketsPipeline(thresholds) {
86
- const { shortThreshold, mediumThreshold } = thresholds;
87
- return [
88
- {
89
- $group: {
90
- _id: null,
91
- short: {
92
- $sum: { $cond: [{ $lt: ["$callLength", shortThreshold] }, 1, 0] },
93
- },
94
- medium: {
95
- $sum: {
96
- $cond: [
97
- {
98
- $and: [
99
- { $gte: ["$callLength", shortThreshold] },
100
- { $lte: ["$callLength", mediumThreshold] },
101
- ],
102
- },
103
- 1,
104
- 0,
105
- ],
106
- },
107
- },
108
- long: {
109
- $sum: { $cond: [{ $gt: ["$callLength", mediumThreshold] }, 1, 0] },
110
- },
111
- },
112
- },
113
- ];
114
- }
115
- function buildHeatmapData(hourlyDataRaw) {
116
- const heatmapMap = new Map();
117
- for (const bucket of hourlyDataRaw) {
118
- const dayKey = bucket._id.day;
119
- const hour = bucket._id.hour;
120
- if (!heatmapMap.has(dayKey))
121
- heatmapMap.set(dayKey, new Map());
122
- heatmapMap.get(dayKey).set(hour, bucket.count);
123
- }
124
- const toSortedBuckets = (map) => Array.from(map.entries())
125
- .sort(([a], [b]) => a - b)
126
- .map(([h, c]) => ({
127
- hour: h,
128
- calls: c,
129
- }));
130
- const heatmap = {};
131
- for (const [day, hourMap] of Array.from(heatmapMap.entries()).sort()) {
132
- heatmap[day] = toSortedBuckets(hourMap);
133
- }
134
- return heatmap;
135
- }
136
176
  async function getDashboardStats(params) {
137
- const { clientId, startDate, endDate } = params;
177
+ const { clientId, startDate, endDate, granularity: requestedGranularity, } = params;
138
178
  const clientConfig = await (0, clientsConfig_1.getClientConfig)(clientId);
139
179
  const timezone = clientConfig?.timezone ?? "UTC";
140
- const startDateObj = dayjs_1.default.tz(startDate, timezone).startOf("day").toDate();
141
- const endDateObj = dayjs_1.default.tz(endDate, timezone).endOf("day").toDate();
142
- const thresholds = {
143
- shortThreshold: clientConfig?.callLengthThresholds?.shortThreshold ?? 60,
144
- mediumThreshold: clientConfig?.callLengthThresholds?.mediumThreshold ?? 180,
145
- };
180
+ const startDateObj = (0, dayjs_1.default)(startDate).tz(timezone).startOf("day").toDate();
181
+ const endDateObj = (0, dayjs_1.default)(endDate).tz(timezone).endOf("day").toDate();
182
+ const granularity = requestedGranularity ?? resolveVolumeGranularity(startDateObj, endDateObj);
146
183
  const pipeline = [
147
184
  {
148
185
  $match: {
@@ -153,9 +190,7 @@ async function getDashboardStats(params) {
153
190
  {
154
191
  $facet: {
155
192
  kpis: buildKpisPipeline(),
156
- dailyData: buildDailyDataPipeline(timezone),
157
- hourlyData: buildHourlyDataPipeline(timezone),
158
- callLengthBuckets: buildCallLengthBucketsPipeline(thresholds),
193
+ volumeData: buildVolumeDataPipeline(timezone, granularity),
159
194
  },
160
195
  },
161
196
  ];
@@ -164,43 +199,23 @@ async function getDashboardStats(params) {
164
199
  .aggregate(pipeline)
165
200
  .toArray();
166
201
  const kpiData = aggregatedResult?.kpis?.[0] ?? DEFAULT_KPI_DATA;
167
- const dailyDataRaw = aggregatedResult?.dailyData ?? [];
168
- const hourlyDataRaw = aggregatedResult?.hourlyData ?? [];
169
- const callLengthRaw = aggregatedResult?.callLengthBuckets?.[0] ?? {
170
- short: 0,
171
- medium: 0,
172
- long: 0,
173
- };
202
+ const volumeDataRaw = aggregatedResult?.volumeData ?? [];
203
+ const answeredCount = kpiData.completedCount + kpiData.busyCount;
204
+ const answeredDuration = kpiData.answeredDuration ?? 0;
174
205
  const kpis = {
175
- totalCalls: kpiData.totalCalls,
176
- avgDurationSeconds: kpiData.totalCalls > 0
177
- ? Math.round((kpiData.totalDuration ?? 0) / kpiData.totalCalls)
178
- : 0,
179
- timeSavedMinutes: Math.round((kpiData.totalDuration ?? 0) / 60),
180
- successRate: kpiData.totalCalls > 0
181
- ? Math.round((kpiData.completedCount / kpiData.totalCalls) * 1000) / 10
182
- : 0,
206
+ totalCalls: answeredCount,
207
+ avgDurationSeconds: answeredCount > 0 ? Math.round(answeredDuration / answeredCount) : 0,
208
+ timeSavedMinutes: Math.round(answeredDuration / 60),
183
209
  completedCount: kpiData.completedCount,
184
- failedCount: kpiData.failedCount,
185
- noAnswerCount: kpiData.noAnswerCount,
186
210
  busyCount: kpiData.busyCount,
187
211
  };
188
- const volumeData = dailyDataRaw.map((d) => ({
189
- date: d._id,
190
- count: d.count,
191
- completed: d.completed,
192
- }));
193
- const heatmap = buildHeatmapData(hourlyDataRaw);
212
+ const bucketKeys = generateBucketKeys(startDateObj, endDateObj, granularity, timezone);
213
+ const volumeData = fillVolumeGaps(bucketKeys, volumeDataRaw.map((d) => ({ date: d._id, completed: d.completed })));
194
214
  const response = {
195
215
  kpis,
196
216
  charts: {
197
217
  volumeData,
198
- heatmap,
199
- callLengthBuckets: {
200
- short: callLengthRaw.short,
201
- medium: callLengthRaw.medium,
202
- long: callLengthRaw.long,
203
- },
218
+ volumeGranularity: granularity,
204
219
  },
205
220
  };
206
221
  return response;
@@ -1 +1 @@
1
- {"version":3,"file":"calls.dashboard.js","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calls.dashboard.js","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"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"}
@@ -4,63 +4,42 @@ export type DashboardHeatmapMetric = {
4
4
  };
5
5
  export type DashboardDailyTrendMetric = {
6
6
  date: string;
7
- count: number;
8
7
  completed: number;
9
8
  };
10
- export type DashboardDurationSegments = {
11
- short: number;
12
- medium: number;
13
- long: number;
14
- };
9
+ export type DashboardVolumeGranularity = "hour" | "day" | "week" | "month" | "quarter" | "year";
15
10
  export type DashboardSummaryMetrics = {
16
11
  totalCalls: number;
17
12
  avgDurationSeconds: number;
18
13
  timeSavedMinutes: number;
19
- successRate: number;
20
14
  completedCount: number;
21
- failedCount: number;
22
- noAnswerCount: number;
23
15
  busyCount: number;
24
16
  };
25
17
  export type DashboardVisualData = {
26
18
  volumeData: DashboardDailyTrendMetric[];
27
- heatmap: Record<string, DashboardHeatmapMetric[]>;
28
- callLengthBuckets: DashboardDurationSegments;
19
+ volumeGranularity: DashboardVolumeGranularity;
29
20
  };
30
21
  export type DashboardReportQuery = {
31
22
  clientId: string;
32
23
  startDate: string;
33
24
  endDate: string;
25
+ granularity?: DashboardVolumeGranularity;
34
26
  };
35
27
  export type DashboardReportResponse = {
36
28
  kpis: DashboardSummaryMetrics;
37
29
  charts: DashboardVisualData;
38
30
  };
39
31
  type RawKpiResult = {
40
- totalCalls: number;
41
- totalDuration: number | null;
42
32
  completedCount: number;
43
- failedCount: number;
44
- noAnswerCount: number;
45
33
  busyCount: number;
34
+ answeredDuration: number | null;
46
35
  };
47
- export type RawDailyAggregationResult = {
36
+ export type RawVolumeAggregationResult = {
48
37
  _id: string;
49
- count: number;
50
38
  completed: number;
51
39
  };
52
- export type RawHourlyAggregationResult = {
53
- _id: {
54
- day: string;
55
- hour: number;
56
- };
57
- count: number;
58
- };
59
40
  export interface DashboardAggregationResult {
60
41
  kpis: RawKpiResult[];
61
- dailyData: RawDailyAggregationResult[];
62
- hourlyData: RawHourlyAggregationResult[];
63
- callLengthBuckets: DashboardDurationSegments[];
42
+ volumeData: RawVolumeAggregationResult[];
64
43
  }
65
44
  export {};
66
45
  //# sourceMappingURL=calls.dashboard.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.dashboard.types.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAClD,iBAAiB,EAAE,yBAAyB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,yBAAyB,EAAE,CAAC;IACvC,UAAU,EAAE,0BAA0B,EAAE,CAAC;IACzC,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;CAChD"}
1
+ {"version":3,"file":"calls.dashboard.types.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,iBAAiB,EAAE,0BAA0B,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,0BAA0B,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,0BAA0B,EAAE,CAAC;CAC1C"}
@@ -1,7 +1,4 @@
1
- export * from "./calls.constants";
2
1
  export * from "./calls.types";
3
2
  export * from "./calls.getters";
4
- export * from "./calls.statistics.types";
5
- export * from "./calls.statistics.getters";
6
3
  export * from "./dashboard/calls.dashboard";
7
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC"}
@@ -14,10 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./calls.constants"), exports);
18
17
  __exportStar(require("./calls.types"), exports);
19
18
  __exportStar(require("./calls.getters"), exports);
20
- __exportStar(require("./calls.statistics.types"), exports);
21
- __exportStar(require("./calls.statistics.getters"), exports);
22
19
  __exportStar(require("./dashboard/calls.dashboard"), exports);
23
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC;AAChC,2DAAyC;AACzC,6DAA2C;AAC3C,8DAA4C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,kDAAgC;AAChC,8DAA4C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talkpilot/core-db",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Core database package for centralized connections and ORM integration.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,4 +1,7 @@
1
- import { findTicketsByCallSid } from "../tickets.getters";
1
+ import {
2
+ findTicketsByCallSid,
3
+ getTicketsCountByCityAndDateRange,
4
+ } from "../tickets.getters";
2
5
  import { setDb } from "../../index";
3
6
  import { Db, Collection } from "mongodb";
4
7
  import { createTicket } from "../../../test-utils/factories";
@@ -27,4 +30,37 @@ describe("tickets getters", () => {
27
30
  expect(mockCollection.find).toHaveBeenCalledWith({ callSid: "123" });
28
31
  expect(result[0].callSid).toBe("123");
29
32
  });
33
+
34
+ it("getTicketsCountByCityAndDateRange should not count tickets without callSid", async () => {
35
+ const aggregateNext = jest.fn().mockResolvedValue({ n: 1 });
36
+ mockCollection = {
37
+ ...mockCollection,
38
+ aggregate: jest.fn().mockReturnValue({
39
+ next: aggregateNext,
40
+ }),
41
+ };
42
+ mockDb = {
43
+ collection: jest.fn().mockReturnValue(mockCollection),
44
+ };
45
+ setDb(mockDb as Db);
46
+
47
+ const result = await getTicketsCountByCityAndDateRange(
48
+ "ashdod",
49
+ "2026-01-01",
50
+ "2026-01-31",
51
+ "Asia/Jerusalem",
52
+ );
53
+
54
+ expect(mockCollection.aggregate).toHaveBeenCalledWith(
55
+ expect.arrayContaining([
56
+ {
57
+ $match: {
58
+ cityName: "ashdod",
59
+ callSid: { $exists: true, $nin: [null, ""] },
60
+ },
61
+ },
62
+ ]),
63
+ );
64
+ expect(result).toBe(1);
65
+ });
30
66
  });
@@ -1,3 +1,2 @@
1
1
  export * from "./tickets.getters";
2
- export * from "./tickets.statistics.getters";
3
- export type { Ticket, TicketDoc, SubjectItem, TicketStatsDateScope } from "./tickets.types";
2
+ export type { Ticket, TicketDoc, SubjectStatsItem } from "./tickets.types";