tychat-contracts 1.0.100 → 1.0.101
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,18 @@ export declare class AnalyticsDashboardTopProcedureDto {
|
|
|
32
32
|
name: string;
|
|
33
33
|
count: number;
|
|
34
34
|
}
|
|
35
|
+
/** Média de `message.sent` por hora do relógio durante o expediente configurado. */
|
|
36
|
+
export declare class AnalyticsDashboardMessageHourDto {
|
|
37
|
+
hour: number;
|
|
38
|
+
averageSent: number;
|
|
39
|
+
totalSent: number;
|
|
40
|
+
openOccurrencesInPeriod: number;
|
|
41
|
+
}
|
|
42
|
+
export declare class AnalyticsDashboardMessagePeakDto {
|
|
43
|
+
hour: number;
|
|
44
|
+
totalSent: number;
|
|
45
|
+
averageSent: number;
|
|
46
|
+
}
|
|
35
47
|
/**
|
|
36
48
|
* Resposta enriquecida de `GET /analytics/dashboard` (mantém campos legados `total`, `byEventType`, `byDomain`).
|
|
37
49
|
*/
|
|
@@ -44,6 +56,9 @@ export declare class AnalyticsDashboardResponseDto {
|
|
|
44
56
|
noShowRatePercent: number;
|
|
45
57
|
financialSummary: AnalyticsDashboardFinancialDto;
|
|
46
58
|
topProcedures: AnalyticsDashboardTopProcedureDto[];
|
|
59
|
+
messagesByClinicHour: AnalyticsDashboardMessageHourDto[];
|
|
60
|
+
messagesPeakHour: AnalyticsDashboardMessagePeakDto | null;
|
|
61
|
+
clinicTimezone: string;
|
|
47
62
|
total: number;
|
|
48
63
|
byEventType: Array<{
|
|
49
64
|
eventType: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-query.dto.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics-query.dto.ts"],"names":[],"mappings":"AAYA,OAAO,EAAwB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,kBAAkB,2CAA4C,CAAC;AAC5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAuB;IAMlC,SAAS,EAAE,MAAM,CAAC;IAOlB,OAAO,EAAE,MAAM,CAAC;IAShB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAS9B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAO3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAOd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,0BAA0B;IAMrC,SAAS,EAAE,MAAM,CAAC;IAOlB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8FAA8F;AAC9F,qBAAa,8BAA8B;IAKzC,OAAO,EAAE,MAAM,CAAC;IAMhB,aAAa,EAAE,MAAM,CAAC;IAMtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iCAAiC;IAE5C,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,6BAA6B;IAExC,mBAAmB,EAAE,MAAM,CAAC;IAG5B,oBAAoB,EAAE,MAAM,CAAC;IAM7B,mBAAmB,EAAE,MAAM,CAAC;IAK5B,kBAAkB,EAAE,MAAM,CAAC;IAO3B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAMnC,iBAAiB,EAAE,MAAM,CAAC;IAG1B,gBAAgB,EAAE,8BAA8B,CAAC;IAGjD,aAAa,EAAE,iCAAiC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics-query.dto.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics-query.dto.ts"],"names":[],"mappings":"AAYA,OAAO,EAAwB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,kBAAkB,2CAA4C,CAAC;AAC5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAuB;IAMlC,SAAS,EAAE,MAAM,CAAC;IAOlB,OAAO,EAAE,MAAM,CAAC;IAShB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAS9B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAO3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAOd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,0BAA0B;IAMrC,SAAS,EAAE,MAAM,CAAC;IAOlB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8FAA8F;AAC9F,qBAAa,8BAA8B;IAKzC,OAAO,EAAE,MAAM,CAAC;IAMhB,aAAa,EAAE,MAAM,CAAC;IAMtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iCAAiC;IAE5C,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,qBAAa,gCAAgC;IAE3C,IAAI,EAAE,MAAM,CAAC;IAMb,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;IAMlB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,gCAAgC;IAE3C,IAAI,EAAE,MAAM,CAAC;IAEE,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW,EAAE,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,qBAAa,6BAA6B;IAExC,mBAAmB,EAAE,MAAM,CAAC;IAG5B,oBAAoB,EAAE,MAAM,CAAC;IAM7B,mBAAmB,EAAE,MAAM,CAAC;IAK5B,kBAAkB,EAAE,MAAM,CAAC;IAO3B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAMnC,iBAAiB,EAAE,MAAM,CAAC;IAG1B,gBAAgB,EAAE,8BAA8B,CAAC;IAGjD,aAAa,EAAE,iCAAiC,EAAE,CAAC;IAOnD,oBAAoB,EAAE,gCAAgC,EAAE,CAAC;IAOzD,gBAAgB,EAAE,gCAAgC,GAAG,IAAI,CAAC;IAM1D,cAAc,EAAE,MAAM,CAAC;IAGvB,KAAK,EAAE,MAAM,CAAC;IAKd,WAAW,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAKzD,QAAQ,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD"}
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AnalyticsDashboardResponseDto = exports.AnalyticsDashboardTopProcedureDto = exports.AnalyticsDashboardFinancialDto = exports.AnalyticsDashboardQueryDto = exports.AnalyticsReportQueryDto = exports.ANALYTICS_GROUP_BY = void 0;
|
|
12
|
+
exports.AnalyticsDashboardResponseDto = exports.AnalyticsDashboardMessagePeakDto = exports.AnalyticsDashboardMessageHourDto = exports.AnalyticsDashboardTopProcedureDto = exports.AnalyticsDashboardFinancialDto = exports.AnalyticsDashboardQueryDto = exports.AnalyticsReportQueryDto = exports.ANALYTICS_GROUP_BY = void 0;
|
|
13
13
|
const swagger_1 = require("@nestjs/swagger");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
15
|
const class_transformer_1 = require("class-transformer");
|
|
@@ -127,7 +127,7 @@ __decorate([
|
|
|
127
127
|
], AnalyticsDashboardFinancialDto.prototype, "averageTicket", void 0);
|
|
128
128
|
__decorate([
|
|
129
129
|
(0, swagger_1.ApiProperty)({
|
|
130
|
-
description: '
|
|
130
|
+
description: 'Valor ainda em aberto no fim do período (exclusive endDate): soma de `payment.created` no intervalo sem `payment.payed` correspondente (mesmo paymentId) com occurredAt anterior a endDate; mais faturas `billing.invoice_created` PENDING/OVERDUE sem `billing.invoice_paid` (mesmo invoiceId). Baseado em eventos de analytics.',
|
|
131
131
|
}),
|
|
132
132
|
__metadata("design:type", Number)
|
|
133
133
|
], AnalyticsDashboardFinancialDto.prototype, "pending", void 0);
|
|
@@ -144,6 +144,52 @@ __decorate([
|
|
|
144
144
|
(0, swagger_1.ApiProperty)({ description: 'Quantidade de ocorrências no período' }),
|
|
145
145
|
__metadata("design:type", Number)
|
|
146
146
|
], AnalyticsDashboardTopProcedureDto.prototype, "count", void 0);
|
|
147
|
+
/** Média de `message.sent` por hora do relógio durante o expediente configurado. */
|
|
148
|
+
class AnalyticsDashboardMessageHourDto {
|
|
149
|
+
hour;
|
|
150
|
+
averageSent;
|
|
151
|
+
totalSent;
|
|
152
|
+
openOccurrencesInPeriod;
|
|
153
|
+
}
|
|
154
|
+
exports.AnalyticsDashboardMessageHourDto = AnalyticsDashboardMessageHourDto;
|
|
155
|
+
__decorate([
|
|
156
|
+
(0, swagger_1.ApiProperty)({ description: 'Hora local (0–23) no fuso clinicTimezone' }),
|
|
157
|
+
__metadata("design:type", Number)
|
|
158
|
+
], AnalyticsDashboardMessageHourDto.prototype, "hour", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
(0, swagger_1.ApiProperty)({
|
|
161
|
+
description: 'Média de mensagens enviadas nessa hora: totalSent / openOccurrencesInPeriod (0 se não houve expediente nessa hora no período)',
|
|
162
|
+
}),
|
|
163
|
+
__metadata("design:type", Number)
|
|
164
|
+
], AnalyticsDashboardMessageHourDto.prototype, "averageSent", void 0);
|
|
165
|
+
__decorate([
|
|
166
|
+
(0, swagger_1.ApiProperty)({ description: 'Total de eventos message.sent nessa hora local, só dentro do horário da clínica' }),
|
|
167
|
+
__metadata("design:type", Number)
|
|
168
|
+
], AnalyticsDashboardMessageHourDto.prototype, "totalSent", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
(0, swagger_1.ApiProperty)({
|
|
171
|
+
description: 'Quantas vezes essa hora calendário integrou o expediente (dias locais no intervalo × slots de opening_hours)',
|
|
172
|
+
}),
|
|
173
|
+
__metadata("design:type", Number)
|
|
174
|
+
], AnalyticsDashboardMessageHourDto.prototype, "openOccurrencesInPeriod", void 0);
|
|
175
|
+
class AnalyticsDashboardMessagePeakDto {
|
|
176
|
+
hour;
|
|
177
|
+
totalSent;
|
|
178
|
+
averageSent;
|
|
179
|
+
}
|
|
180
|
+
exports.AnalyticsDashboardMessagePeakDto = AnalyticsDashboardMessagePeakDto;
|
|
181
|
+
__decorate([
|
|
182
|
+
(0, swagger_1.ApiProperty)({ description: 'Hora local (0–23) com maior totalSent entre as horas de expediente' }),
|
|
183
|
+
__metadata("design:type", Number)
|
|
184
|
+
], AnalyticsDashboardMessagePeakDto.prototype, "hour", void 0);
|
|
185
|
+
__decorate([
|
|
186
|
+
(0, swagger_1.ApiProperty)(),
|
|
187
|
+
__metadata("design:type", Number)
|
|
188
|
+
], AnalyticsDashboardMessagePeakDto.prototype, "totalSent", void 0);
|
|
189
|
+
__decorate([
|
|
190
|
+
(0, swagger_1.ApiProperty)(),
|
|
191
|
+
__metadata("design:type", Number)
|
|
192
|
+
], AnalyticsDashboardMessagePeakDto.prototype, "averageSent", void 0);
|
|
147
193
|
/**
|
|
148
194
|
* Resposta enriquecida de `GET /analytics/dashboard` (mantém campos legados `total`, `byEventType`, `byDomain`).
|
|
149
195
|
*/
|
|
@@ -156,6 +202,9 @@ class AnalyticsDashboardResponseDto {
|
|
|
156
202
|
noShowRatePercent;
|
|
157
203
|
financialSummary;
|
|
158
204
|
topProcedures;
|
|
205
|
+
messagesByClinicHour;
|
|
206
|
+
messagesPeakHour;
|
|
207
|
+
clinicTimezone;
|
|
159
208
|
total;
|
|
160
209
|
byEventType;
|
|
161
210
|
byDomain;
|
|
@@ -202,6 +251,28 @@ __decorate([
|
|
|
202
251
|
(0, swagger_1.ApiProperty)({ type: [AnalyticsDashboardTopProcedureDto], maxItems: 5 }),
|
|
203
252
|
__metadata("design:type", Array)
|
|
204
253
|
], AnalyticsDashboardResponseDto.prototype, "topProcedures", void 0);
|
|
254
|
+
__decorate([
|
|
255
|
+
(0, swagger_1.ApiProperty)({
|
|
256
|
+
description: 'Pico / distribuição de mensagens no horário da clínica: médias por hora local (só `message.sent` dentro de opening_hours). Ordenado por hora crescente. Vazio se não houver opening_hours.',
|
|
257
|
+
type: [AnalyticsDashboardMessageHourDto],
|
|
258
|
+
}),
|
|
259
|
+
__metadata("design:type", Array)
|
|
260
|
+
], AnalyticsDashboardResponseDto.prototype, "messagesByClinicHour", void 0);
|
|
261
|
+
__decorate([
|
|
262
|
+
(0, swagger_1.ApiProperty)({
|
|
263
|
+
description: 'Hora com maior volume de mensagens no expediente; null se não houver dados ou horário configurado',
|
|
264
|
+
nullable: true,
|
|
265
|
+
type: AnalyticsDashboardMessagePeakDto,
|
|
266
|
+
}),
|
|
267
|
+
__metadata("design:type", Object)
|
|
268
|
+
], AnalyticsDashboardResponseDto.prototype, "messagesPeakHour", void 0);
|
|
269
|
+
__decorate([
|
|
270
|
+
(0, swagger_1.ApiProperty)({
|
|
271
|
+
description: 'Fuso IANA usado para hora local e opening_hours (env ANALYTICS_CLINIC_TIMEZONE ou America/Sao_Paulo)',
|
|
272
|
+
example: 'America/Sao_Paulo',
|
|
273
|
+
}),
|
|
274
|
+
__metadata("design:type", String)
|
|
275
|
+
], AnalyticsDashboardResponseDto.prototype, "clinicTimezone", void 0);
|
|
205
276
|
__decorate([
|
|
206
277
|
(0, swagger_1.ApiProperty)({ description: 'Total de eventos de analytics no período (legado)' }),
|
|
207
278
|
__metadata("design:type", Number)
|
package/package.json
CHANGED
|
@@ -104,7 +104,7 @@ export class AnalyticsDashboardFinancialDto {
|
|
|
104
104
|
|
|
105
105
|
@ApiProperty({
|
|
106
106
|
description:
|
|
107
|
-
'
|
|
107
|
+
'Valor ainda em aberto no fim do período (exclusive endDate): soma de `payment.created` no intervalo sem `payment.payed` correspondente (mesmo paymentId) com occurredAt anterior a endDate; mais faturas `billing.invoice_created` PENDING/OVERDUE sem `billing.invoice_paid` (mesmo invoiceId). Baseado em eventos de analytics.',
|
|
108
108
|
})
|
|
109
109
|
pending: number;
|
|
110
110
|
}
|
|
@@ -117,6 +117,36 @@ export class AnalyticsDashboardTopProcedureDto {
|
|
|
117
117
|
count: number;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
/** Média de `message.sent` por hora do relógio durante o expediente configurado. */
|
|
121
|
+
export class AnalyticsDashboardMessageHourDto {
|
|
122
|
+
@ApiProperty({ description: 'Hora local (0–23) no fuso clinicTimezone' })
|
|
123
|
+
hour: number;
|
|
124
|
+
|
|
125
|
+
@ApiProperty({
|
|
126
|
+
description:
|
|
127
|
+
'Média de mensagens enviadas nessa hora: totalSent / openOccurrencesInPeriod (0 se não houve expediente nessa hora no período)',
|
|
128
|
+
})
|
|
129
|
+
averageSent: number;
|
|
130
|
+
|
|
131
|
+
@ApiProperty({ description: 'Total de eventos message.sent nessa hora local, só dentro do horário da clínica' })
|
|
132
|
+
totalSent: number;
|
|
133
|
+
|
|
134
|
+
@ApiProperty({
|
|
135
|
+
description:
|
|
136
|
+
'Quantas vezes essa hora calendário integrou o expediente (dias locais no intervalo × slots de opening_hours)',
|
|
137
|
+
})
|
|
138
|
+
openOccurrencesInPeriod: number;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export class AnalyticsDashboardMessagePeakDto {
|
|
142
|
+
@ApiProperty({ description: 'Hora local (0–23) com maior totalSent entre as horas de expediente' })
|
|
143
|
+
hour: number;
|
|
144
|
+
|
|
145
|
+
@ApiProperty() totalSent: number;
|
|
146
|
+
|
|
147
|
+
@ApiProperty() averageSent: number;
|
|
148
|
+
}
|
|
149
|
+
|
|
120
150
|
/**
|
|
121
151
|
* Resposta enriquecida de `GET /analytics/dashboard` (mantém campos legados `total`, `byEventType`, `byDomain`).
|
|
122
152
|
*/
|
|
@@ -157,6 +187,26 @@ export class AnalyticsDashboardResponseDto {
|
|
|
157
187
|
@ApiProperty({ type: [AnalyticsDashboardTopProcedureDto], maxItems: 5 })
|
|
158
188
|
topProcedures: AnalyticsDashboardTopProcedureDto[];
|
|
159
189
|
|
|
190
|
+
@ApiProperty({
|
|
191
|
+
description:
|
|
192
|
+
'Pico / distribuição de mensagens no horário da clínica: médias por hora local (só `message.sent` dentro de opening_hours). Ordenado por hora crescente. Vazio se não houver opening_hours.',
|
|
193
|
+
type: [AnalyticsDashboardMessageHourDto],
|
|
194
|
+
})
|
|
195
|
+
messagesByClinicHour: AnalyticsDashboardMessageHourDto[];
|
|
196
|
+
|
|
197
|
+
@ApiProperty({
|
|
198
|
+
description: 'Hora com maior volume de mensagens no expediente; null se não houver dados ou horário configurado',
|
|
199
|
+
nullable: true,
|
|
200
|
+
type: AnalyticsDashboardMessagePeakDto,
|
|
201
|
+
})
|
|
202
|
+
messagesPeakHour: AnalyticsDashboardMessagePeakDto | null;
|
|
203
|
+
|
|
204
|
+
@ApiProperty({
|
|
205
|
+
description: 'Fuso IANA usado para hora local e opening_hours (env ANALYTICS_CLINIC_TIMEZONE ou America/Sao_Paulo)',
|
|
206
|
+
example: 'America/Sao_Paulo',
|
|
207
|
+
})
|
|
208
|
+
clinicTimezone: string;
|
|
209
|
+
|
|
160
210
|
@ApiProperty({ description: 'Total de eventos de analytics no período (legado)' })
|
|
161
211
|
total: number;
|
|
162
212
|
|