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.
Files changed (33) hide show
  1. package/dist/apps/evo-chat/ticket/zod-schemas.d.ts +66 -0
  2. package/dist/apps/evo-chat/ticket/zod-schemas.js +4 -0
  3. package/dist/apps/evo-chat/ticket/zod-schemas.ts +4 -0
  4. package/dist/apps/evo-core/zod-schemas.d.ts +30 -0
  5. package/dist/apps/evo-core/zod-schemas.js +2 -0
  6. package/dist/apps/evo-core/zod-schemas.ts +2 -0
  7. package/dist/apps/evo-csq/zod-schemas.d.ts +10414 -0
  8. package/dist/apps/evo-csq/zod-schemas.js +546 -0
  9. package/dist/apps/evo-csq/zod-schemas.ts +627 -0
  10. package/dist/apps/evo-finops/zod-schemas.d.ts +2 -2
  11. package/dist/apps/evo-hub-ia/v1/zod-schemas.d.ts +161 -0
  12. package/dist/apps/evo-hub-ia/v1/zod-schemas.js +43 -1
  13. package/dist/apps/evo-hub-ia/v1/zod-schemas.ts +46 -0
  14. package/dist/apps/hub-automation/zod-schemas.d.ts +18 -18
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.js +3 -0
  17. package/dist/index.ts +3 -0
  18. package/dist/types/evo-chat/ticket/index.d.ts +4 -0
  19. package/dist/types/evo-chat/ticket/index.ts +5 -0
  20. package/dist/types/evo-core/index.d.ts +2 -0
  21. package/dist/types/evo-core/index.ts +2 -0
  22. package/dist/types/evo-csq/fb_collections.d.ts +5 -0
  23. package/dist/types/evo-csq/fb_collections.js +13 -0
  24. package/dist/types/evo-csq/fb_collections.ts +14 -0
  25. package/dist/types/evo-csq/index.d.ts +624 -0
  26. package/dist/types/evo-csq/index.js +180 -0
  27. package/dist/types/evo-csq/index.ts +888 -0
  28. package/dist/types/evo-hub-ia/v1/index.d.ts +37 -0
  29. package/dist/types/evo-hub-ia/v1/index.ts +44 -0
  30. package/dist/types/evo-reports/index.d.ts +100 -0
  31. package/dist/types/evo-reports/index.js +8 -0
  32. package/dist/types/evo-reports/index.ts +122 -0
  33. 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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.550",
3
+ "version": "1.3.555",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",