evo360-types 1.3.550 → 1.3.552

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/index.d.ts CHANGED
@@ -33,6 +33,7 @@ export * from "./types/nex-vendas";
33
33
  export * from "./types/nexus-webhooks";
34
34
  export * from "./types/evo-hub-ia";
35
35
  export * from "./types/evo-mcp";
36
+ export * from "./types/evo-reports";
36
37
  export * from "./apps/shared/zod-schemas";
37
38
  export * from "./apps/evo-core/zod-schemas";
38
39
  export * from "./apps/evo-tenant/zod-schemas";
package/dist/index.js CHANGED
@@ -50,6 +50,7 @@ __exportStar(require("./types/nex-vendas"), exports);
50
50
  __exportStar(require("./types/nexus-webhooks"), exports);
51
51
  __exportStar(require("./types/evo-hub-ia"), exports);
52
52
  __exportStar(require("./types/evo-mcp"), exports);
53
+ __exportStar(require("./types/evo-reports"), exports);
53
54
  // zod schemas
54
55
  __exportStar(require("./apps/shared/zod-schemas"), exports);
55
56
  __exportStar(require("./apps/evo-core/zod-schemas"), exports);
package/dist/index.ts CHANGED
@@ -34,6 +34,7 @@ export * from "./types/nex-vendas";
34
34
  export * from "./types/nexus-webhooks";
35
35
  export * from "./types/evo-hub-ia";
36
36
  export * from "./types/evo-mcp";
37
+ export * from "./types/evo-reports";
37
38
 
38
39
  // zod schemas
39
40
  export * from "./apps/shared/zod-schemas";
@@ -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.552",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",