@talkpilot/core-db 1.3.5 → 1.3.6

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 (85) hide show
  1. package/DEVELOPMENT.md +28 -13
  2. package/dist/talkpilot/calls/calls.types.d.ts +5 -0
  3. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  4. package/dist/talkpilot/contextNotes/contextNotes.getters.d.ts +19 -0
  5. package/dist/talkpilot/contextNotes/contextNotes.getters.d.ts.map +1 -0
  6. package/dist/talkpilot/contextNotes/contextNotes.getters.js +57 -0
  7. package/dist/talkpilot/contextNotes/contextNotes.getters.js.map +1 -0
  8. package/dist/talkpilot/contextNotes/contextNotes.types.d.ts +19 -0
  9. package/dist/talkpilot/contextNotes/contextNotes.types.d.ts.map +1 -0
  10. package/dist/talkpilot/contextNotes/contextNotes.types.js +3 -0
  11. package/dist/talkpilot/contextNotes/contextNotes.types.js.map +1 -0
  12. package/dist/talkpilot/contextNotes/index.d.ts +3 -0
  13. package/dist/talkpilot/contextNotes/index.d.ts.map +1 -0
  14. package/dist/talkpilot/contextNotes/index.js +19 -0
  15. package/dist/talkpilot/contextNotes/index.js.map +1 -0
  16. package/dist/talkpilot/flows/flows.types.d.ts +1 -0
  17. package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
  18. package/dist/talkpilot/index.d.ts +2 -0
  19. package/dist/talkpilot/index.d.ts.map +1 -1
  20. package/dist/talkpilot/index.js +2 -0
  21. package/dist/talkpilot/index.js.map +1 -1
  22. package/dist/talkpilot/products/index.d.ts +3 -0
  23. package/dist/talkpilot/products/index.d.ts.map +1 -0
  24. package/dist/talkpilot/products/index.js +19 -0
  25. package/dist/talkpilot/products/index.js.map +1 -0
  26. package/dist/talkpilot/products/products.getters.d.ts +6 -0
  27. package/dist/talkpilot/products/products.getters.d.ts.map +1 -0
  28. package/dist/talkpilot/products/products.getters.js +14 -0
  29. package/dist/talkpilot/products/products.getters.js.map +1 -0
  30. package/dist/talkpilot/products/products.types.d.ts +9 -0
  31. package/dist/talkpilot/products/products.types.d.ts.map +1 -0
  32. package/dist/talkpilot/products/products.types.js +3 -0
  33. package/dist/talkpilot/products/products.types.js.map +1 -0
  34. package/dist/test-utils/factories/index.d.ts +1 -0
  35. package/dist/test-utils/factories/index.d.ts.map +1 -1
  36. package/dist/test-utils/factories/index.js +1 -0
  37. package/dist/test-utils/factories/index.js.map +1 -1
  38. package/dist/test-utils/factories/talkpilot/contextNotes.d.ts +16 -0
  39. package/dist/test-utils/factories/talkpilot/contextNotes.d.ts.map +1 -0
  40. package/dist/test-utils/factories/talkpilot/contextNotes.js +30 -0
  41. package/dist/test-utils/factories/talkpilot/contextNotes.js.map +1 -0
  42. package/jest.config.js +1 -0
  43. package/package.json +1 -1
  44. package/src/talkpilot/calls/calls.types.ts +3 -0
  45. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +176 -0
  46. package/src/talkpilot/contextNotes/contextNotes.getters.ts +86 -0
  47. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -0
  48. package/src/talkpilot/contextNotes/index.ts +2 -0
  49. package/src/talkpilot/flows/flows.types.ts +2 -0
  50. package/src/talkpilot/index.ts +2 -0
  51. package/src/talkpilot/products/__tests__/products.getters.spec.ts +45 -0
  52. package/src/talkpilot/products/index.ts +2 -0
  53. package/src/talkpilot/products/products.getters.ts +12 -0
  54. package/src/talkpilot/products/products.types.ts +9 -0
  55. package/src/test-utils/factories/index.ts +1 -0
  56. package/src/test-utils/factories/talkpilot/contextNotes.ts +33 -0
  57. package/.claude/settings.local.json +0 -11
  58. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts +0 -12
  59. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts.map +0 -1
  60. package/dist/municipal/tickets/tickets.deprecated.getters.js +0 -131
  61. package/dist/municipal/tickets/tickets.deprecated.getters.js.map +0 -1
  62. package/dist/municipal/tickets/tickets.statistics.dates.d.ts +0 -7
  63. package/dist/municipal/tickets/tickets.statistics.dates.d.ts.map +0 -1
  64. package/dist/municipal/tickets/tickets.statistics.dates.js +0 -40
  65. package/dist/municipal/tickets/tickets.statistics.dates.js.map +0 -1
  66. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts +0 -53
  67. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts.map +0 -1
  68. package/dist/municipal/tickets/tickets.statistics.pipeline.js +0 -112
  69. package/dist/municipal/tickets/tickets.statistics.pipeline.js.map +0 -1
  70. package/dist/municipal/tickets/tickets.statistics.utils.d.ts +0 -7
  71. package/dist/municipal/tickets/tickets.statistics.utils.d.ts.map +0 -1
  72. package/dist/municipal/tickets/tickets.statistics.utils.js +0 -40
  73. package/dist/municipal/tickets/tickets.statistics.utils.js.map +0 -1
  74. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts +0 -12
  75. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts.map +0 -1
  76. package/dist/talkpilot/calls/calls.statistics.ticketScope.js +0 -37
  77. package/dist/talkpilot/calls/calls.statistics.ticketScope.js.map +0 -1
  78. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts +0 -17
  79. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts.map +0 -1
  80. package/dist/talkpilot/calls/calls.statistics.tickets.js +0 -33
  81. package/dist/talkpilot/calls/calls.statistics.tickets.js.map +0 -1
  82. package/dist/utils/statistics.aggregation.d.ts +0 -20
  83. package/dist/utils/statistics.aggregation.d.ts.map +0 -1
  84. package/dist/utils/statistics.aggregation.js +0 -43
  85. package/dist/utils/statistics.aggregation.js.map +0 -1
@@ -1,53 +0,0 @@
1
- import { CityName } from "../utils/types";
2
- import type { SubjectItem, TicketStatsDateScope } from "./tickets.types";
3
- export declare const isDraftSubjectIdExpr: {
4
- $or: ({
5
- $eq: (string | {
6
- $type: string;
7
- })[];
8
- $regexMatch?: undefined;
9
- } | {
10
- $eq: (string | null)[];
11
- $regexMatch?: undefined;
12
- } | {
13
- $regexMatch: {
14
- input: {
15
- $ifNull: string[];
16
- };
17
- regex: RegExp;
18
- };
19
- $eq?: undefined;
20
- })[];
21
- };
22
- export declare const ticketsWithCallSidMatch: (cityName: CityName, dateScope?: TicketStatsDateScope) => {
23
- createdAt: {
24
- $gte: Date;
25
- $lte: Date;
26
- };
27
- cityName: string;
28
- callSid: {
29
- $exists: boolean;
30
- $nin: (string | null)[];
31
- };
32
- };
33
- export declare const ticketsByCallSidsMatch: (cityName: CityName, callSids: string[], dateScope?: TicketStatsDateScope) => {
34
- createdAt?: {
35
- $gte: Date;
36
- $lte: Date;
37
- } | undefined;
38
- cityName: string;
39
- callSid: {
40
- $in: string[];
41
- };
42
- };
43
- export declare const callSidGroupStages: () => Record<string, unknown>[];
44
- export declare const subjectGroupStages: (cityName: CityName, limit?: number) => Record<string, unknown>[];
45
- export declare const runTicketStatsAggregate: <T>(pipeline: Record<string, unknown>[]) => Promise<T[]>;
46
- export declare const mapCallSidRows: (rows: {
47
- _id: unknown;
48
- }[]) => string[];
49
- export declare const mapSubjectRows: (rows: {
50
- _id: unknown;
51
- count: number;
52
- }[]) => SubjectItem[];
53
- //# sourceMappingURL=tickets.statistics.pipeline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tickets.statistics.pipeline.d.ts","sourceRoot":"","sources":["../../../src/municipal/tickets/tickets.statistics.pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAiBzE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;CAWhC,CAAC;AA4CF,eAAO,MAAM,uBAAuB,GAClC,UAAU,QAAQ,EAClB,YAAY,oBAAoB;;;;;;;;;;CAKhC,CAAC;AAEH,eAAO,MAAM,sBAAsB,GACjC,UAAU,QAAQ,EAClB,UAAU,MAAM,EAAE,EAClB,YAAY,oBAAoB;;;;;;;;;CAKhC,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,QAAQ,EAClB,QAAQ,MAAM,KACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAUzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,CAAC,EAC7C,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAClC,OAAO,CAAC,CAAC,EAAE,CAKb,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,EAAE,KAAG,MAAM,EAChB,CAAC;AAEjD,eAAO,MAAM,cAAc,GAAI,MAAM;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,KAAG,WAAW,EAMjF,CAAC"}
@@ -1,112 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapSubjectRows = exports.mapCallSidRows = exports.runTicketStatsAggregate = exports.subjectGroupStages = exports.callSidGroupStages = exports.ticketsByCallSidsMatch = exports.ticketsWithCallSidMatch = exports.isDraftSubjectIdExpr = void 0;
4
- const tickets_getters_1 = require("./tickets.getters");
5
- const tickets_statistics_utils_1 = require("./tickets.statistics.utils");
6
- const UNCLASSIFIED = "ללא מחלקה";
7
- const STATS_MAX_TIME_MS = 30_000;
8
- const effectiveSubjectIdExpr = {
9
- $ifNull: [
10
- "$externalCallFields.event_subject_id",
11
- {
12
- $ifNull: [
13
- "$externalCallFields.event_sub_subject_id",
14
- "$externalCallFields.event_sub_subject_id2",
15
- ],
16
- },
17
- ],
18
- };
19
- exports.isDraftSubjectIdExpr = {
20
- $or: [
21
- { $eq: [{ $type: "$externalCallFields.event_subject_id" }, "missing"] },
22
- { $eq: ["$externalCallFields.event_subject_id", null] },
23
- {
24
- $regexMatch: {
25
- input: { $ifNull: ["$externalCallFields.event_subject_id", ""] },
26
- regex: /^\s*$/,
27
- },
28
- },
29
- ],
30
- };
31
- const departmentsSubjectsLookup = (cityName) => ({
32
- $lookup: {
33
- from: "departmentsSubjects",
34
- let: { sid: "$effectiveSubjectId", c: cityName },
35
- pipeline: [
36
- {
37
- $match: {
38
- $expr: {
39
- $and: [
40
- { $eq: ["$cityName", "$$c"] },
41
- {
42
- $or: [
43
- { $eq: ["$subject_id", { $ifNull: ["$$sid", ""] }] },
44
- { $eq: ["$sub_subject_id", { $ifNull: ["$$sid", ""] }] },
45
- { $eq: ["$sub_subject_id2", { $ifNull: ["$$sid", ""] }] },
46
- ],
47
- },
48
- ],
49
- },
50
- },
51
- },
52
- { $limit: 1 },
53
- ],
54
- as: "subj",
55
- },
56
- });
57
- const subjectLabelExpr = {
58
- $cond: {
59
- if: { $gt: [{ $size: "$subj" }, 0] },
60
- then: {
61
- $ifNull: [{ $arrayElemAt: ["$subj.subjectName", 0] }, UNCLASSIFIED],
62
- },
63
- else: UNCLASSIFIED,
64
- },
65
- };
66
- const ticketDateMatchStage = (dateScope) => {
67
- const { from, to } = (0, tickets_statistics_utils_1.resolveTicketStatsDateRange)(dateScope);
68
- return { createdAt: { $gte: from, $lte: to } };
69
- };
70
- const ticketsWithCallSidMatch = (cityName, dateScope) => ({
71
- cityName,
72
- callSid: { $exists: true, $nin: [null, ""] },
73
- ...ticketDateMatchStage(dateScope),
74
- });
75
- exports.ticketsWithCallSidMatch = ticketsWithCallSidMatch;
76
- const ticketsByCallSidsMatch = (cityName, callSids, dateScope) => ({
77
- cityName,
78
- callSid: { $in: callSids },
79
- ...(dateScope ? ticketDateMatchStage(dateScope) : {}),
80
- });
81
- exports.ticketsByCallSidsMatch = ticketsByCallSidsMatch;
82
- const callSidGroupStages = () => [
83
- { $group: { _id: "$callSid" } },
84
- ];
85
- exports.callSidGroupStages = callSidGroupStages;
86
- const subjectGroupStages = (cityName, limit) => {
87
- const shouldLimit = typeof limit === "number" && limit > 0;
88
- return [
89
- { $addFields: { effectiveSubjectId: effectiveSubjectIdExpr } },
90
- departmentsSubjectsLookup(cityName),
91
- { $addFields: { subject: subjectLabelExpr } },
92
- { $group: { _id: "$subject", count: { $sum: 1 } } },
93
- { $sort: { count: -1 } },
94
- ...(shouldLimit ? [{ $limit: limit }] : []),
95
- ];
96
- };
97
- exports.subjectGroupStages = subjectGroupStages;
98
- const runTicketStatsAggregate = async (pipeline) => {
99
- const rows = await (0, tickets_getters_1.getTicketsCollection)()
100
- .aggregate(pipeline, { maxTimeMS: STATS_MAX_TIME_MS })
101
- .toArray();
102
- return rows;
103
- };
104
- exports.runTicketStatsAggregate = runTicketStatsAggregate;
105
- const mapCallSidRows = (rows) => rows.map((r) => String(r._id)).filter(Boolean);
106
- exports.mapCallSidRows = mapCallSidRows;
107
- const mapSubjectRows = (rows) => rows.map((r) => ({
108
- subject: String(r._id),
109
- count: r.count,
110
- }));
111
- exports.mapSubjectRows = mapSubjectRows;
112
- //# sourceMappingURL=tickets.statistics.pipeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tickets.statistics.pipeline.js","sourceRoot":"","sources":["../../../src/municipal/tickets/tickets.statistics.pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { TicketStatsDateScope } from "./tickets.types";
2
- export declare const resolveTicketStatsDateRange: (dateScope?: TicketStatsDateScope) => {
3
- from: Date;
4
- to: Date;
5
- };
6
- export declare const ticketStatsDateScopeFromYmd: (startStr: string, endStr: string, timezone: string) => TicketStatsDateScope;
7
- //# sourceMappingURL=tickets.statistics.utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tickets.statistics.utils.d.ts","sourceRoot":"","sources":["../../../src/municipal/tickets/tickets.statistics.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAiC5D,eAAO,MAAM,2BAA2B,GACtC,YAAY,oBAAoB,KAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAKxB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,UAAU,MAAM,KACf,oBAGD,CAAC"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ticketStatsDateScopeFromYmd = exports.resolveTicketStatsDateRange = void 0;
4
- const DEFAULT_LOOKBACK_DAYS = 30;
5
- const DAY_MS = 24 * 60 * 60 * 1000;
6
- const formatYmdInTz = (date, timezone) => new Intl.DateTimeFormat("en-CA", { timeZone: timezone }).format(date);
7
- const dateAtNoonUtc = (dateStr) => {
8
- const [y, m, d] = dateStr.split("-").map(Number);
9
- return new Date(Date.UTC(y, m - 1, d, 12, 0, 0));
10
- };
11
- const startOfCalendarDayInTz = (dateStr, timezone) => {
12
- const anchor = dateAtNoonUtc(dateStr).getTime();
13
- let low = anchor - 2 * DAY_MS;
14
- let high = anchor + DAY_MS;
15
- while (high - low > 1) {
16
- const mid = Math.floor((low + high) / 2);
17
- if (formatYmdInTz(new Date(mid), timezone) >= dateStr)
18
- high = mid;
19
- else
20
- low = mid;
21
- }
22
- return new Date(high);
23
- };
24
- const endOfCalendarDayInTz = (dateStr, timezone) => {
25
- const [y, m, d] = dateStr.split("-").map(Number);
26
- const nextDay = new Date(Date.UTC(y, m - 1, d + 1)).toISOString().slice(0, 10);
27
- return new Date(startOfCalendarDayInTz(nextDay, timezone).getTime() - 1);
28
- };
29
- const resolveTicketStatsDateRange = (dateScope) => {
30
- const to = dateScope?.to ?? new Date();
31
- const from = dateScope?.from ?? new Date(to.getTime() - DEFAULT_LOOKBACK_DAYS * DAY_MS);
32
- return { from, to };
33
- };
34
- exports.resolveTicketStatsDateRange = resolveTicketStatsDateRange;
35
- const ticketStatsDateScopeFromYmd = (startStr, endStr, timezone) => ({
36
- from: startOfCalendarDayInTz(startStr, timezone),
37
- to: endOfCalendarDayInTz(endStr, timezone),
38
- });
39
- exports.ticketStatsDateScopeFromYmd = ticketStatsDateScopeFromYmd;
40
- //# sourceMappingURL=tickets.statistics.utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tickets.statistics.utils.js","sourceRoot":"","sources":["../../../src/municipal/tickets/tickets.statistics.utils.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { TicketStatsDateScope } from "../../municipal/tickets/tickets.types";
2
- import type { CallsStatsFilter, CallsStatsTicketScope } from "./calls.statistics.types";
3
- declare const needsTicketStatusFilter: (filters?: CallsStatsFilter["ticketStatusFilters"]) => boolean;
4
- export declare const ticketStatsDateScopeForFilter: (filter: CallsStatsFilter) => TicketStatsDateScope;
5
- export declare const resolveCallsStatsTicketScope: (filter: CallsStatsFilter) => Promise<CallsStatsTicketScope | undefined>;
6
- /** Call SIDs with a ticket among filtered calls (for opened / not_opened $match). */
7
- export declare const resolveTicketStatusCallSids: (filter: CallsStatsFilter, scope: CallsStatsTicketScope, filteredCallSids: string[]) => Promise<string[]>;
8
- export declare const countOpenAndDraftAmongCallSids: (scope: CallsStatsTicketScope, callSids: string[]) => Promise<import("../../municipal/tickets/tickets.types").TicketCallsCountAmongCallSids>;
9
- export declare const ticketSidsSetAmongCallSids: (scope: CallsStatsTicketScope, callSids: string[]) => Promise<Set<string>>;
10
- export declare const wantsTicketMetrics: (filter: CallsStatsFilter) => boolean;
11
- export { needsTicketStatusFilter };
12
- //# sourceMappingURL=calls.statistics.ticketScope.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calls.statistics.ticketScope.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.statistics.ticketScope.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAExF,QAAA,MAAM,uBAAuB,GAC3B,UAAU,gBAAgB,CAAC,qBAAqB,CAAC,YAMlD,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,QAAQ,gBAAgB,KACvB,oBAC2E,CAAC;AAE/E,eAAO,MAAM,4BAA4B,GACvC,QAAQ,gBAAgB,KACvB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAS3C,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,GACtC,QAAQ,gBAAgB,EACxB,OAAO,qBAAqB,EAC5B,kBAAkB,MAAM,EAAE,KACzB,OAAO,CAAC,MAAM,EAAE,CAC0D,CAAC;AAE9E,eAAO,MAAM,8BAA8B,GACzC,OAAO,qBAAqB,EAC5B,UAAU,MAAM,EAAE,2FACqD,CAAC;AAE1E,eAAO,MAAM,0BAA0B,GACrC,OAAO,qBAAqB,EAC5B,UAAU,MAAM,EAAE,KACjB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAGnB,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,QAAQ,gBAAgB,KAAG,OAEpC,CAAC;AAE3B,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.needsTicketStatusFilter = exports.wantsTicketMetrics = exports.ticketSidsSetAmongCallSids = exports.countOpenAndDraftAmongCallSids = exports.resolveTicketStatusCallSids = exports.resolveCallsStatsTicketScope = exports.ticketStatsDateScopeForFilter = void 0;
4
- const clientsConfig_getters_1 = require("../clientsConfig/clientsConfig.getters");
5
- const tickets_statistics_getters_1 = require("../../municipal/tickets/tickets.statistics.getters");
6
- const needsTicketStatusFilter = (filters) => {
7
- if (!filters?.length)
8
- return false;
9
- const hasOpened = filters.includes("opened");
10
- const hasNotOpened = filters.includes("not_opened");
11
- return hasOpened !== hasNotOpened;
12
- };
13
- exports.needsTicketStatusFilter = needsTicketStatusFilter;
14
- const ticketStatsDateScopeForFilter = (filter) => (0, tickets_statistics_getters_1.ticketStatsDateScopeFromYmd)(filter.startStr, filter.endStr, filter.timezone);
15
- exports.ticketStatsDateScopeForFilter = ticketStatsDateScopeForFilter;
16
- const resolveCallsStatsTicketScope = async (filter) => {
17
- const city = filter.cityName ??
18
- (await (0, clientsConfig_getters_1.getClientConfig)(filter.clientId))?.products?.municipal?.cityName;
19
- if (!city)
20
- return undefined;
21
- return {
22
- city: city,
23
- dateScope: (0, exports.ticketStatsDateScopeForFilter)(filter),
24
- };
25
- };
26
- exports.resolveCallsStatsTicketScope = resolveCallsStatsTicketScope;
27
- /** Call SIDs with a ticket among filtered calls (for opened / not_opened $match). */
28
- const resolveTicketStatusCallSids = async (filter, scope, filteredCallSids) => (0, tickets_statistics_getters_1.findCallSidsWithTicketsAmong)(scope.city, filteredCallSids, scope.dateScope);
29
- exports.resolveTicketStatusCallSids = resolveTicketStatusCallSids;
30
- const countOpenAndDraftAmongCallSids = (scope, callSids) => (0, tickets_statistics_getters_1.countTicketCallsAmongCallSids)(scope.city, callSids, scope.dateScope);
31
- exports.countOpenAndDraftAmongCallSids = countOpenAndDraftAmongCallSids;
32
- const ticketSidsSetAmongCallSids = async (scope, callSids) => new Set(await (0, tickets_statistics_getters_1.findCallSidsWithTicketsAmong)(scope.city, callSids, scope.dateScope));
33
- exports.ticketSidsSetAmongCallSids = ticketSidsSetAmongCallSids;
34
- const wantsTicketMetrics = (filter) => needsTicketStatusFilter(filter.ticketStatusFilters) ||
35
- Boolean(filter.cityName);
36
- exports.wantsTicketMetrics = wantsTicketMetrics;
37
- //# sourceMappingURL=calls.statistics.ticketScope.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calls.statistics.ticketScope.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.statistics.ticketScope.ts"],"names":[],"mappings":";;;AAAA,kFAAyE;AAEzE,mGAI4D;AAI5D,MAAM,uBAAuB,GAAG,CAC9B,OAAiD,EACjD,EAAE;IACF,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,SAAS,KAAK,YAAY,CAAC;AACpC,CAAC,CAAC;AA6CO,0DAAuB;AA3CzB,MAAM,6BAA6B,GAAG,CAC3C,MAAwB,EACF,EAAE,CACxB,IAAA,wDAA2B,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAHlE,QAAA,6BAA6B,iCAGqC;AAExE,MAAM,4BAA4B,GAAG,KAAK,EAC/C,MAAwB,EACoB,EAAE;IAC9C,MAAM,IAAI,GACR,MAAM,CAAC,QAAQ;QACf,CAAC,MAAM,IAAA,uCAAe,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC1E,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO;QACL,IAAI,EAAE,IAAgB;QACtB,SAAS,EAAE,IAAA,qCAA6B,EAAC,MAAM,CAAC;KACjD,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,4BAA4B,gCAWvC;AAEF,qFAAqF;AAC9E,MAAM,2BAA2B,GAAG,KAAK,EAC9C,MAAwB,EACxB,KAA4B,EAC5B,gBAA0B,EACP,EAAE,CACrB,IAAA,yDAA4B,EAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AALjE,QAAA,2BAA2B,+BAKsC;AAEvE,MAAM,8BAA8B,GAAG,CAC5C,KAA4B,EAC5B,QAAkB,EAClB,EAAE,CAAC,IAAA,0DAA6B,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAH7D,QAAA,8BAA8B,kCAG+B;AAEnE,MAAM,0BAA0B,GAAG,KAAK,EAC7C,KAA4B,EAC5B,QAAkB,EACI,EAAE,CACxB,IAAI,GAAG,CACL,MAAM,IAAA,yDAA4B,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAC1E,CAAC;AANS,QAAA,0BAA0B,8BAMnC;AAEG,MAAM,kBAAkB,GAAG,CAAC,MAAwB,EAAW,EAAE,CACtE,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAFd,QAAA,kBAAkB,sBAEJ"}
@@ -1,17 +0,0 @@
1
- import type { CityName } from "../../municipal/utils/types";
2
- import type { TicketStatsDateScope } from "../../municipal/tickets/tickets.types";
3
- import type { CallsStatsFilter } from "./calls.statistics.types";
4
- export type CallsStatsTicketScope = {
5
- city: CityName;
6
- dateScope: TicketStatsDateScope;
7
- };
8
- declare const needsTicketStatusFilter: (filters?: CallsStatsFilter["ticketStatusFilters"]) => boolean;
9
- export declare const ticketStatsDateScopeForFilter: (filter: CallsStatsFilter) => TicketStatsDateScope;
10
- export declare const resolveCallsStatsTicketScope: (filter: CallsStatsFilter) => Promise<CallsStatsTicketScope | undefined>;
11
- /** Call SIDs with a ticket among filtered calls (for opened / not_opened $match). */
12
- export declare const resolveTicketStatusCallSids: (filter: CallsStatsFilter, scope: CallsStatsTicketScope, filteredCallSids: string[]) => Promise<string[]>;
13
- export declare const countOpenAndDraftAmongCallSids: (scope: CallsStatsTicketScope, callSids: string[]) => Promise<import("../../municipal/tickets/tickets.types").TicketCallsCountAmongCallSids>;
14
- export declare const ticketSidsSetAmongCallSids: (scope: CallsStatsTicketScope, callSids: string[]) => Promise<Set<string>>;
15
- export declare const wantsTicketMetrics: (filter: CallsStatsFilter) => boolean;
16
- export { needsTicketStatusFilter };
17
- //# sourceMappingURL=calls.statistics.tickets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calls.statistics.tickets.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.statistics.tickets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAM5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,oBAAoB,CAAC;CACjC,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,UAAU,gBAAgB,CAAC,qBAAqB,CAAC,YAKjF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,QAAQ,gBAAgB,KACvB,oBAC2E,CAAC;AAE/E,eAAO,MAAM,4BAA4B,GACvC,QAAQ,gBAAgB,KACvB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAM3C,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,GACtC,QAAQ,gBAAgB,EACxB,OAAO,qBAAqB,EAC5B,kBAAkB,MAAM,EAAE,KACzB,OAAO,CAAC,MAAM,EAAE,CAKhB,CAAC;AAEJ,eAAO,MAAM,8BAA8B,GACzC,OAAO,qBAAqB,EAC5B,UAAU,MAAM,EAAE,2FACqD,CAAC;AAE1E,eAAO,MAAM,0BAA0B,GACrC,OAAO,qBAAqB,EAC5B,UAAU,MAAM,EAAE,KACjB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAC8D,CAAC;AAErF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,gBAAgB,KAAG,OACmB,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.needsTicketStatusFilter = exports.wantsTicketMetrics = exports.ticketSidsSetAmongCallSids = exports.countOpenAndDraftAmongCallSids = exports.resolveTicketStatusCallSids = exports.resolveCallsStatsTicketScope = exports.ticketStatsDateScopeForFilter = void 0;
4
- const clientsConfig_getters_1 = require("../clientsConfig/clientsConfig.getters");
5
- const tickets_statistics_getters_1 = require("../../municipal/tickets/tickets.statistics.getters");
6
- const needsTicketStatusFilter = (filters) => {
7
- if (!filters?.length)
8
- return false;
9
- const hasOpened = filters.includes("opened");
10
- const hasNotOpened = filters.includes("not_opened");
11
- return hasOpened !== hasNotOpened;
12
- };
13
- exports.needsTicketStatusFilter = needsTicketStatusFilter;
14
- const ticketStatsDateScopeForFilter = (filter) => (0, tickets_statistics_getters_1.ticketStatsDateScopeFromYmd)(filter.startStr, filter.endStr, filter.timezone);
15
- exports.ticketStatsDateScopeForFilter = ticketStatsDateScopeForFilter;
16
- const resolveCallsStatsTicketScope = async (filter) => {
17
- const city = filter.cityName ??
18
- (await (0, clientsConfig_getters_1.getClientConfig)(filter.clientId))?.products?.municipal?.cityName;
19
- if (!city)
20
- return undefined;
21
- return { city: city, dateScope: (0, exports.ticketStatsDateScopeForFilter)(filter) };
22
- };
23
- exports.resolveCallsStatsTicketScope = resolveCallsStatsTicketScope;
24
- /** Call SIDs with a ticket among filtered calls (for opened / not_opened $match). */
25
- const resolveTicketStatusCallSids = async (filter, scope, filteredCallSids) => (0, tickets_statistics_getters_1.findCallSidsWithTicketsAmong)(scope.city, filteredCallSids, scope.dateScope);
26
- exports.resolveTicketStatusCallSids = resolveTicketStatusCallSids;
27
- const countOpenAndDraftAmongCallSids = (scope, callSids) => (0, tickets_statistics_getters_1.countTicketCallsAmongCallSids)(scope.city, callSids, scope.dateScope);
28
- exports.countOpenAndDraftAmongCallSids = countOpenAndDraftAmongCallSids;
29
- const ticketSidsSetAmongCallSids = async (scope, callSids) => new Set(await (0, tickets_statistics_getters_1.findCallSidsWithTicketsAmong)(scope.city, callSids, scope.dateScope));
30
- exports.ticketSidsSetAmongCallSids = ticketSidsSetAmongCallSids;
31
- const wantsTicketMetrics = (filter) => needsTicketStatusFilter(filter.ticketStatusFilters) || Boolean(filter.cityName);
32
- exports.wantsTicketMetrics = wantsTicketMetrics;
33
- //# sourceMappingURL=calls.statistics.tickets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calls.statistics.tickets.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.statistics.tickets.ts"],"names":[],"mappings":";;;AAAA,kFAAyE;AAEzE,mGAI4D;AAS5D,MAAM,uBAAuB,GAAG,CAAC,OAAiD,EAAE,EAAE;IACpF,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,SAAS,KAAK,YAAY,CAAC;AACpC,CAAC,CAAC;AA2CO,0DAAuB;AAzCzB,MAAM,6BAA6B,GAAG,CAC3C,MAAwB,EACF,EAAE,CACxB,IAAA,wDAA2B,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAHlE,QAAA,6BAA6B,iCAGqC;AAExE,MAAM,4BAA4B,GAAG,KAAK,EAC/C,MAAwB,EACoB,EAAE;IAC9C,MAAM,IAAI,GACR,MAAM,CAAC,QAAQ;QACf,CAAC,MAAM,IAAA,uCAAe,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC1E,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,IAAgB,EAAE,SAAS,EAAE,IAAA,qCAA6B,EAAC,MAAM,CAAC,EAAE,CAAC;AACtF,CAAC,CAAC;AARW,QAAA,4BAA4B,gCAQvC;AAEF,qFAAqF;AAC9E,MAAM,2BAA2B,GAAG,KAAK,EAC9C,MAAwB,EACxB,KAA4B,EAC5B,gBAA0B,EACP,EAAE,CACrB,IAAA,yDAA4B,EAC1B,KAAK,CAAC,IAAI,EACV,gBAAgB,EAChB,KAAK,CAAC,SAAS,CAChB,CAAC;AATS,QAAA,2BAA2B,+BASpC;AAEG,MAAM,8BAA8B,GAAG,CAC5C,KAA4B,EAC5B,QAAkB,EAClB,EAAE,CAAC,IAAA,0DAA6B,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAH7D,QAAA,8BAA8B,kCAG+B;AAEnE,MAAM,0BAA0B,GAAG,KAAK,EAC7C,KAA4B,EAC5B,QAAkB,EACI,EAAE,CACxB,IAAI,GAAG,CAAC,MAAM,IAAA,yDAA4B,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAJxE,QAAA,0BAA0B,8BAI8C;AAE9E,MAAM,kBAAkB,GAAG,CAAC,MAAwB,EAAW,EAAE,CACtE,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AADrE,QAAA,kBAAkB,sBACmD"}
@@ -1,20 +0,0 @@
1
- /** Default server-side cap for statistics aggregations (30s). */
2
- export declare const DEFAULT_STATS_MAX_TIME_MS = 30000;
3
- /** Log a warning when SID arrays exceed this size (BSON / pipeline pressure). */
4
- export declare const MAX_RECOMMENDED_SID_ARRAY_SIZE = 10000;
5
- export type StatisticsAggregationOptions = {
6
- maxTimeMS?: number;
7
- };
8
- export declare class StatisticsTimeoutError extends Error {
9
- constructor(maxTimeMS: number);
10
- }
11
- export declare const resolveMaxTimeMS: (options?: StatisticsAggregationOptions) => number;
12
- /** Builds a constant lookup object for O(1) membership checks via $getField. */
13
- export declare const buildCallSidLookup: (callSids: string[]) => Record<string, true>;
14
- /**
15
- * $expr that is true when `$callSid` is in `callSids`.
16
- * Prefer over `$in` for large arrays embedded in aggregation pipelines.
17
- */
18
- export declare const callSidInSetExpr: (callSids: string[]) => Record<string, unknown>;
19
- export declare const warnIfLargeSidArray: (label: string, callSids: string[]) => void;
20
- //# sourceMappingURL=statistics.aggregation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statistics.aggregation.d.ts","sourceRoot":"","sources":["../../src/utils/statistics.aggregation.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,iFAAiF;AACjF,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,SAAS,EAAE,MAAM;CAI9B;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,4BAA4B,KAAG,MACzB,CAAC;AAElD,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CACK,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAW1E,CAAC;AAEH,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,EAAE,KAAG,IAMvE,CAAC"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.warnIfLargeSidArray = exports.callSidInSetExpr = exports.buildCallSidLookup = exports.resolveMaxTimeMS = exports.StatisticsTimeoutError = exports.MAX_RECOMMENDED_SID_ARRAY_SIZE = exports.DEFAULT_STATS_MAX_TIME_MS = void 0;
4
- /** Default server-side cap for statistics aggregations (30s). */
5
- exports.DEFAULT_STATS_MAX_TIME_MS = 30_000;
6
- /** Log a warning when SID arrays exceed this size (BSON / pipeline pressure). */
7
- exports.MAX_RECOMMENDED_SID_ARRAY_SIZE = 10_000;
8
- class StatisticsTimeoutError extends Error {
9
- constructor(maxTimeMS) {
10
- super(`Statistics aggregation exceeded maxTimeMS (${maxTimeMS})`);
11
- this.name = "StatisticsTimeoutError";
12
- }
13
- }
14
- exports.StatisticsTimeoutError = StatisticsTimeoutError;
15
- const resolveMaxTimeMS = (options) => options?.maxTimeMS ?? exports.DEFAULT_STATS_MAX_TIME_MS;
16
- exports.resolveMaxTimeMS = resolveMaxTimeMS;
17
- /** Builds a constant lookup object for O(1) membership checks via $getField. */
18
- const buildCallSidLookup = (callSids) => Object.fromEntries(callSids.map((sid) => [sid, true]));
19
- exports.buildCallSidLookup = buildCallSidLookup;
20
- /**
21
- * $expr that is true when `$callSid` is in `callSids`.
22
- * Prefer over `$in` for large arrays embedded in aggregation pipelines.
23
- */
24
- const callSidInSetExpr = (callSids) => ({
25
- $eq: [
26
- {
27
- $getField: {
28
- field: "$callSid",
29
- input: (0, exports.buildCallSidLookup)(callSids),
30
- default: false,
31
- },
32
- },
33
- true,
34
- ],
35
- });
36
- exports.callSidInSetExpr = callSidInSetExpr;
37
- const warnIfLargeSidArray = (label, callSids) => {
38
- if (callSids.length > exports.MAX_RECOMMENDED_SID_ARRAY_SIZE) {
39
- console.warn(`[core-db statistics] ${label}: ${callSids.length} call SIDs exceeds recommended max (${exports.MAX_RECOMMENDED_SID_ARRAY_SIZE}). Narrow the date range or cache SIDs once per request.`);
40
- }
41
- };
42
- exports.warnIfLargeSidArray = warnIfLargeSidArray;
43
- //# sourceMappingURL=statistics.aggregation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statistics.aggregation.js","sourceRoot":"","sources":["../../src/utils/statistics.aggregation.ts"],"names":[],"mappings":";;;AAAA,iEAAiE;AACpD,QAAA,yBAAyB,GAAG,MAAM,CAAC;AAEhD,iFAAiF;AACpE,QAAA,8BAA8B,GAAG,MAAM,CAAC;AAMrD,MAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,SAAiB;QAC3B,KAAK,CAAC,8CAA8C,SAAS,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AALD,wDAKC;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAAsC,EAAU,EAAE,CACjF,OAAO,EAAE,SAAS,IAAI,iCAAyB,CAAC;AADrC,QAAA,gBAAgB,oBACqB;AAElD,gFAAgF;AACzE,MAAM,kBAAkB,GAAG,CAAC,QAAkB,EAAwB,EAAE,CAC7E,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAyB,CAAC;AADpE,QAAA,kBAAkB,sBACkD;AAEjF;;;GAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAA2B,EAAE,CAAC,CAAC;IAChF,GAAG,EAAE;QACH;YACE,SAAS,EAAE;gBACT,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,IAAA,0BAAkB,EAAC,QAAQ,CAAC;gBACnC,OAAO,EAAE,KAAK;aACf;SACF;QACD,IAAI;KACL;CACF,CAAC,CAAC;AAXU,QAAA,gBAAgB,oBAW1B;AAEI,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,QAAkB,EAAQ,EAAE;IAC7E,IAAI,QAAQ,CAAC,MAAM,GAAG,sCAA8B,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CACV,wBAAwB,KAAK,KAAK,QAAQ,CAAC,MAAM,uCAAuC,sCAA8B,0DAA0D,CACjL,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B"}