evo360-types 1.3.550 → 1.3.555
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/apps/evo-chat/ticket/zod-schemas.d.ts +66 -0
- package/dist/apps/evo-chat/ticket/zod-schemas.js +4 -0
- package/dist/apps/evo-chat/ticket/zod-schemas.ts +4 -0
- package/dist/apps/evo-core/zod-schemas.d.ts +30 -0
- package/dist/apps/evo-core/zod-schemas.js +2 -0
- package/dist/apps/evo-core/zod-schemas.ts +2 -0
- package/dist/apps/evo-csq/zod-schemas.d.ts +10414 -0
- package/dist/apps/evo-csq/zod-schemas.js +546 -0
- package/dist/apps/evo-csq/zod-schemas.ts +627 -0
- package/dist/apps/evo-finops/zod-schemas.d.ts +2 -2
- package/dist/apps/evo-hub-ia/v1/zod-schemas.d.ts +161 -0
- package/dist/apps/evo-hub-ia/v1/zod-schemas.js +43 -1
- package/dist/apps/evo-hub-ia/v1/zod-schemas.ts +46 -0
- package/dist/apps/hub-automation/zod-schemas.d.ts +18 -18
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.ts +3 -0
- package/dist/types/evo-chat/ticket/index.d.ts +4 -0
- package/dist/types/evo-chat/ticket/index.ts +5 -0
- package/dist/types/evo-core/index.d.ts +2 -0
- package/dist/types/evo-core/index.ts +2 -0
- package/dist/types/evo-csq/fb_collections.d.ts +5 -0
- package/dist/types/evo-csq/fb_collections.js +13 -0
- package/dist/types/evo-csq/fb_collections.ts +14 -0
- package/dist/types/evo-csq/index.d.ts +624 -0
- package/dist/types/evo-csq/index.js +180 -0
- package/dist/types/evo-csq/index.ts +888 -0
- package/dist/types/evo-hub-ia/v1/index.d.ts +37 -0
- package/dist/types/evo-hub-ia/v1/index.ts +44 -0
- package/dist/types/evo-reports/index.d.ts +100 -0
- package/dist/types/evo-reports/index.js +8 -0
- package/dist/types/evo-reports/index.ts +122 -0
- package/package.json +1 -1
|
@@ -180,3 +180,40 @@ export interface IHubiaRule {
|
|
|
180
180
|
/** Passthrough no schema zod — campos custom são preservados. */
|
|
181
181
|
[key: string]: unknown;
|
|
182
182
|
}
|
|
183
|
+
/** Disposição de fechamento publicada no evento. */
|
|
184
|
+
export interface IHubiaTicketClosedEventClose {
|
|
185
|
+
code?: string | null;
|
|
186
|
+
name?: string | null;
|
|
187
|
+
type_code?: string | null;
|
|
188
|
+
type_name?: string | null;
|
|
189
|
+
/** Observação livre do operador ao fechar (novo em feat-154). */
|
|
190
|
+
notes?: string | null;
|
|
191
|
+
[key: string]: unknown;
|
|
192
|
+
}
|
|
193
|
+
/** Payload do tópico `hubia-ticket-closed`. Publicado pelo bridge do hub-omni
|
|
194
|
+
* (`provider: 'hub-waba'`) e pelo do Chatbee (`provider: 'chatbee'`).
|
|
195
|
+
* Consumidores: o handler de regras `ticket_closed` da HubIA e o pipeline do
|
|
196
|
+
* CSQ 2.0. Os campos novos da feat-154 são opcionais porque o bridge do
|
|
197
|
+
* Chatbee continua publicando o shape antigo. */
|
|
198
|
+
export interface IHubiaTicketClosedEvent {
|
|
199
|
+
tenant: string;
|
|
200
|
+
evoChatChannelId: string;
|
|
201
|
+
contactId: string;
|
|
202
|
+
departmentId?: string | null;
|
|
203
|
+
close: IHubiaTicketClosedEventClose;
|
|
204
|
+
/** ISO 8601 do instante de fechamento. */
|
|
205
|
+
closedAt: string;
|
|
206
|
+
/** Idempotência do consumidor de regras. */
|
|
207
|
+
idempotencyKey?: string | null;
|
|
208
|
+
/** `${ticketId}:${closedAt ISO}` — chave do ledger `runs/{eventId}` do CSQ. */
|
|
209
|
+
event_id?: string;
|
|
210
|
+
/** Versão do payload. 1 = feat-154. */
|
|
211
|
+
schema_version?: number;
|
|
212
|
+
ticketId?: string | null;
|
|
213
|
+
threadId?: string | null;
|
|
214
|
+
leadId?: string | null;
|
|
215
|
+
closedByUserId?: string | null;
|
|
216
|
+
/** Quem fechou. O CSQ só avalia `human`. */
|
|
217
|
+
actorType?: "human" | "system" | "automation";
|
|
218
|
+
[key: string]: unknown;
|
|
219
|
+
}
|
|
@@ -230,3 +230,47 @@ export interface IHubiaRule {
|
|
|
230
230
|
/** Passthrough no schema zod — campos custom são preservados. */
|
|
231
231
|
[key: string]: unknown;
|
|
232
232
|
}
|
|
233
|
+
|
|
234
|
+
// ── Evento `hubia-ticket-closed` (feat-154) ──
|
|
235
|
+
|
|
236
|
+
/** Disposição de fechamento publicada no evento. */
|
|
237
|
+
export interface IHubiaTicketClosedEventClose {
|
|
238
|
+
code?: string | null;
|
|
239
|
+
name?: string | null;
|
|
240
|
+
type_code?: string | null;
|
|
241
|
+
type_name?: string | null;
|
|
242
|
+
/** Observação livre do operador ao fechar (novo em feat-154). */
|
|
243
|
+
notes?: string | null;
|
|
244
|
+
[key: string]: unknown;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** Payload do tópico `hubia-ticket-closed`. Publicado pelo bridge do hub-omni
|
|
248
|
+
* (`provider: 'hub-waba'`) e pelo do Chatbee (`provider: 'chatbee'`).
|
|
249
|
+
* Consumidores: o handler de regras `ticket_closed` da HubIA e o pipeline do
|
|
250
|
+
* CSQ 2.0. Os campos novos da feat-154 são opcionais porque o bridge do
|
|
251
|
+
* Chatbee continua publicando o shape antigo. */
|
|
252
|
+
export interface IHubiaTicketClosedEvent {
|
|
253
|
+
tenant: string;
|
|
254
|
+
evoChatChannelId: string;
|
|
255
|
+
contactId: string;
|
|
256
|
+
departmentId?: string | null;
|
|
257
|
+
close: IHubiaTicketClosedEventClose;
|
|
258
|
+
/** ISO 8601 do instante de fechamento. */
|
|
259
|
+
closedAt: string;
|
|
260
|
+
/** Idempotência do consumidor de regras. */
|
|
261
|
+
idempotencyKey?: string | null;
|
|
262
|
+
|
|
263
|
+
// ── novos em feat-154 (opcionais) ──
|
|
264
|
+
/** `${ticketId}:${closedAt ISO}` — chave do ledger `runs/{eventId}` do CSQ. */
|
|
265
|
+
event_id?: string;
|
|
266
|
+
/** Versão do payload. 1 = feat-154. */
|
|
267
|
+
schema_version?: number;
|
|
268
|
+
ticketId?: string | null;
|
|
269
|
+
threadId?: string | null;
|
|
270
|
+
leadId?: string | null;
|
|
271
|
+
closedByUserId?: string | null;
|
|
272
|
+
/** Quem fechou. O CSQ só avalia `human`. */
|
|
273
|
+
actorType?: "human" | "system" | "automation";
|
|
274
|
+
|
|
275
|
+
[key: string]: unknown;
|
|
276
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export declare const EvoReportsPermissions: {
|
|
2
|
+
readonly Read: "evo_reports_read";
|
|
3
|
+
};
|
|
4
|
+
export type EvoReportsPermissions = (typeof EvoReportsPermissions)[keyof typeof EvoReportsPermissions];
|
|
5
|
+
/**
|
|
6
|
+
* Quais séries o tenant pode exibir na janela consultada.
|
|
7
|
+
*
|
|
8
|
+
* `true` quando existe canal ativo OU houve uso no período — desligar o canal
|
|
9
|
+
* em outubro não pode apagar as barras de agosto.
|
|
10
|
+
*
|
|
11
|
+
* Consequência no resto do contrato: capability ligada e mês sem linha vale
|
|
12
|
+
* `0`; só capability desligada vale `null`.
|
|
13
|
+
*/
|
|
14
|
+
export interface IUsageCapabilities {
|
|
15
|
+
sms: boolean;
|
|
16
|
+
email: boolean;
|
|
17
|
+
llm: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Data (YYYY-MM-DD) a partir da qual existe medição de LLM — o publisher não
|
|
20
|
+
* tem backfill. `null` antes do deploy dele. A série de IA não é desenhada
|
|
21
|
+
* antes dessa data: ausência de medição não é consumo zero.
|
|
22
|
+
*/
|
|
23
|
+
llm_since: string | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Uma linha da abertura por departamento dentro de um mês.
|
|
27
|
+
*
|
|
28
|
+
* `department_id` vive em DOIS espaços de id: `fonte: 'chatbee'` usa o id
|
|
29
|
+
* numérico do Chatbee e `fonte: 'evo_chat'` usa o id do Firestore. Os dois
|
|
30
|
+
* espaços não se cruzam, por isso `fonte` faz parte da chave da linha — agrupar
|
|
31
|
+
* só por `department_id` mistura departamentos diferentes.
|
|
32
|
+
*/
|
|
33
|
+
export interface IUsageDepartmentRow {
|
|
34
|
+
fonte: "chatbee" | "evo_chat";
|
|
35
|
+
department_id: string | null;
|
|
36
|
+
department_name: string | null;
|
|
37
|
+
atendidos: number;
|
|
38
|
+
ativados: number;
|
|
39
|
+
}
|
|
40
|
+
export interface IUsageContacts {
|
|
41
|
+
/** Contatos únicos no tenant no mês (dedup por pessoa, tenant-wide). */
|
|
42
|
+
atendidos: number;
|
|
43
|
+
/** Contatos únicos ativados no tenant no mês. */
|
|
44
|
+
ativados: number;
|
|
45
|
+
/**
|
|
46
|
+
* Abertura por departamento, com contatos únicos DENTRO de cada departamento.
|
|
47
|
+
*
|
|
48
|
+
* A soma destas linhas PODE exceder `atendidos`/`ativados` do tenant: a mesma
|
|
49
|
+
* pessoa pode ser atendida em mais de um departamento no mesmo mês (medido:
|
|
50
|
+
* até 21%). São dois números diferentes de propósito — não é bug e não deve
|
|
51
|
+
* ser "corrigido" batendo um contra o outro.
|
|
52
|
+
*/
|
|
53
|
+
por_departamento: IUsageDepartmentRow[];
|
|
54
|
+
/** Contatos por `contact_type` (ex.: `waba`, `instagram`). */
|
|
55
|
+
por_contact_type: Record<string, number>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Notificações enviadas no mês.
|
|
59
|
+
*
|
|
60
|
+
* `null` = capability desligada, a série não é desenhada. `0` = capability
|
|
61
|
+
* ligada e sem envio no mês. Os dois significam coisas diferentes e não podem
|
|
62
|
+
* ser tratados como equivalentes na tela.
|
|
63
|
+
*
|
|
64
|
+
* `sms_enviados` conta MENSAGENS, não partes/segmentos — SMS longo é cobrado em
|
|
65
|
+
* 2+ partes pela Infobip. O rótulo é "SMS enviados", nunca "SMS cobrados".
|
|
66
|
+
*/
|
|
67
|
+
export interface IUsageNotifications {
|
|
68
|
+
sms_enviados: number | null;
|
|
69
|
+
emails_enviados: number | null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Uso de LLM no mês. O bloco inteiro é `null` quando a capability está
|
|
73
|
+
* desligada; com ela ligada e sem uso no mês, os campos vêm zerados.
|
|
74
|
+
*
|
|
75
|
+
* `turnos` é a quantidade de executions que chamaram o LLM (não a soma de
|
|
76
|
+
* rounds do orchestrator). `tokens_total` = input + output + cache_write +
|
|
77
|
+
* cache_read.
|
|
78
|
+
*/
|
|
79
|
+
export interface IUsageLlm {
|
|
80
|
+
turnos: number;
|
|
81
|
+
tokens_total: number;
|
|
82
|
+
tokens_input: number;
|
|
83
|
+
tokens_output: number;
|
|
84
|
+
tokens_cache_write: number;
|
|
85
|
+
tokens_cache_read: number;
|
|
86
|
+
}
|
|
87
|
+
export interface IMonthlyUsageRow {
|
|
88
|
+
/** Primeiro dia do mês em UTC, `YYYY-MM-DD`. */
|
|
89
|
+
mes: string;
|
|
90
|
+
/** `true` apenas no mês corrente, que ainda não fechou. */
|
|
91
|
+
partial: boolean;
|
|
92
|
+
contatos: IUsageContacts;
|
|
93
|
+
notificacoes: IUsageNotifications;
|
|
94
|
+
ia: IUsageLlm | null;
|
|
95
|
+
}
|
|
96
|
+
export interface IMonthlyUsageResponse {
|
|
97
|
+
ok: true;
|
|
98
|
+
capabilities: IUsageCapabilities;
|
|
99
|
+
months: IMonthlyUsageRow[];
|
|
100
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvoReportsPermissions = void 0;
|
|
4
|
+
// Permissão de leitura dos relatórios tenant-scoped: o relatório de atendimento
|
|
5
|
+
// servido pela CF `evo_reports` e o registro de uso exibido no portal.
|
|
6
|
+
exports.EvoReportsPermissions = {
|
|
7
|
+
Read: "evo_reports_read",
|
|
8
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Permissão de leitura dos relatórios tenant-scoped: o relatório de atendimento
|
|
2
|
+
// servido pela CF `evo_reports` e o registro de uso exibido no portal.
|
|
3
|
+
export const EvoReportsPermissions = {
|
|
4
|
+
Read: "evo_reports_read",
|
|
5
|
+
} as const;
|
|
6
|
+
|
|
7
|
+
export type EvoReportsPermissions =
|
|
8
|
+
(typeof EvoReportsPermissions)[keyof typeof EvoReportsPermissions];
|
|
9
|
+
|
|
10
|
+
// ======================================================
|
|
11
|
+
// evo-reports — contrato do registro de uso mensal
|
|
12
|
+
//
|
|
13
|
+
// Resposta de `GET /me/usage?months=N` (CF `evo_billing`).
|
|
14
|
+
//
|
|
15
|
+
// Este contrato é REGISTRO DE USO, não memória de cálculo de fatura: os números
|
|
16
|
+
// saem das fontes operacionais (views de atendimento em BQ, eventos de
|
|
17
|
+
// notificação e eventos de uso de LLM) e não são conciliados com o valor
|
|
18
|
+
// cobrado. A ligação entre uso e cobrança é escopo da feat-150.
|
|
19
|
+
// ======================================================
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Quais séries o tenant pode exibir na janela consultada.
|
|
23
|
+
*
|
|
24
|
+
* `true` quando existe canal ativo OU houve uso no período — desligar o canal
|
|
25
|
+
* em outubro não pode apagar as barras de agosto.
|
|
26
|
+
*
|
|
27
|
+
* Consequência no resto do contrato: capability ligada e mês sem linha vale
|
|
28
|
+
* `0`; só capability desligada vale `null`.
|
|
29
|
+
*/
|
|
30
|
+
export interface IUsageCapabilities {
|
|
31
|
+
sms: boolean;
|
|
32
|
+
email: boolean;
|
|
33
|
+
llm: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Data (YYYY-MM-DD) a partir da qual existe medição de LLM — o publisher não
|
|
36
|
+
* tem backfill. `null` antes do deploy dele. A série de IA não é desenhada
|
|
37
|
+
* antes dessa data: ausência de medição não é consumo zero.
|
|
38
|
+
*/
|
|
39
|
+
llm_since: string | null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Uma linha da abertura por departamento dentro de um mês.
|
|
44
|
+
*
|
|
45
|
+
* `department_id` vive em DOIS espaços de id: `fonte: 'chatbee'` usa o id
|
|
46
|
+
* numérico do Chatbee e `fonte: 'evo_chat'` usa o id do Firestore. Os dois
|
|
47
|
+
* espaços não se cruzam, por isso `fonte` faz parte da chave da linha — agrupar
|
|
48
|
+
* só por `department_id` mistura departamentos diferentes.
|
|
49
|
+
*/
|
|
50
|
+
export interface IUsageDepartmentRow {
|
|
51
|
+
fonte: "chatbee" | "evo_chat";
|
|
52
|
+
department_id: string | null;
|
|
53
|
+
department_name: string | null;
|
|
54
|
+
atendidos: number;
|
|
55
|
+
ativados: number;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface IUsageContacts {
|
|
59
|
+
/** Contatos únicos no tenant no mês (dedup por pessoa, tenant-wide). */
|
|
60
|
+
atendidos: number;
|
|
61
|
+
/** Contatos únicos ativados no tenant no mês. */
|
|
62
|
+
ativados: number;
|
|
63
|
+
/**
|
|
64
|
+
* Abertura por departamento, com contatos únicos DENTRO de cada departamento.
|
|
65
|
+
*
|
|
66
|
+
* A soma destas linhas PODE exceder `atendidos`/`ativados` do tenant: a mesma
|
|
67
|
+
* pessoa pode ser atendida em mais de um departamento no mesmo mês (medido:
|
|
68
|
+
* até 21%). São dois números diferentes de propósito — não é bug e não deve
|
|
69
|
+
* ser "corrigido" batendo um contra o outro.
|
|
70
|
+
*/
|
|
71
|
+
por_departamento: IUsageDepartmentRow[];
|
|
72
|
+
/** Contatos por `contact_type` (ex.: `waba`, `instagram`). */
|
|
73
|
+
por_contact_type: Record<string, number>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Notificações enviadas no mês.
|
|
78
|
+
*
|
|
79
|
+
* `null` = capability desligada, a série não é desenhada. `0` = capability
|
|
80
|
+
* ligada e sem envio no mês. Os dois significam coisas diferentes e não podem
|
|
81
|
+
* ser tratados como equivalentes na tela.
|
|
82
|
+
*
|
|
83
|
+
* `sms_enviados` conta MENSAGENS, não partes/segmentos — SMS longo é cobrado em
|
|
84
|
+
* 2+ partes pela Infobip. O rótulo é "SMS enviados", nunca "SMS cobrados".
|
|
85
|
+
*/
|
|
86
|
+
export interface IUsageNotifications {
|
|
87
|
+
sms_enviados: number | null;
|
|
88
|
+
emails_enviados: number | null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Uso de LLM no mês. O bloco inteiro é `null` quando a capability está
|
|
93
|
+
* desligada; com ela ligada e sem uso no mês, os campos vêm zerados.
|
|
94
|
+
*
|
|
95
|
+
* `turnos` é a quantidade de executions que chamaram o LLM (não a soma de
|
|
96
|
+
* rounds do orchestrator). `tokens_total` = input + output + cache_write +
|
|
97
|
+
* cache_read.
|
|
98
|
+
*/
|
|
99
|
+
export interface IUsageLlm {
|
|
100
|
+
turnos: number;
|
|
101
|
+
tokens_total: number;
|
|
102
|
+
tokens_input: number;
|
|
103
|
+
tokens_output: number;
|
|
104
|
+
tokens_cache_write: number;
|
|
105
|
+
tokens_cache_read: number;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface IMonthlyUsageRow {
|
|
109
|
+
/** Primeiro dia do mês em UTC, `YYYY-MM-DD`. */
|
|
110
|
+
mes: string;
|
|
111
|
+
/** `true` apenas no mês corrente, que ainda não fechou. */
|
|
112
|
+
partial: boolean;
|
|
113
|
+
contatos: IUsageContacts;
|
|
114
|
+
notificacoes: IUsageNotifications;
|
|
115
|
+
ia: IUsageLlm | null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface IMonthlyUsageResponse {
|
|
119
|
+
ok: true;
|
|
120
|
+
capabilities: IUsageCapabilities;
|
|
121
|
+
months: IMonthlyUsageRow[];
|
|
122
|
+
}
|