evo360-types 1.3.547 → 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";
@@ -249,6 +249,16 @@ export interface ISmsChannelConfig extends IFireDoc {
249
249
  * com o texto renderizado simplificado (corpo + URLs de botões).
250
250
  */
251
251
  whatsapp_fallback?: boolean;
252
+ /**
253
+ * feat-148: estende o fallback aos erros de PAGAMENTO/ELEGIBILIDADE da conta
254
+ * WhatsApp na Meta (131042 e família). Desligado por padrão e de propósito:
255
+ * esse erro não é falha de entrega ao paciente — atinge TODAS as mensagens do
256
+ * tenant, então o fallback vira custo recorrente de SMS enquanto a pendência
257
+ * não é resolvida (visto em prod 2026-09-02: 27 lembretes viraram SMS em 2min).
258
+ * Ligue quando o SMS for contingência deliberada durante o bloqueio.
259
+ * Só tem efeito com `whatsapp_fallback` ligado.
260
+ */
261
+ whatsapp_fallback_on_payment_error?: boolean;
252
262
  enabled: boolean;
253
263
  }
254
264
  export interface INotificationProviderConfig {
@@ -416,6 +416,16 @@ export interface ISmsChannelConfig extends IFireDoc {
416
416
  * com o texto renderizado simplificado (corpo + URLs de botões).
417
417
  */
418
418
  whatsapp_fallback?: boolean;
419
+ /**
420
+ * feat-148: estende o fallback aos erros de PAGAMENTO/ELEGIBILIDADE da conta
421
+ * WhatsApp na Meta (131042 e família). Desligado por padrão e de propósito:
422
+ * esse erro não é falha de entrega ao paciente — atinge TODAS as mensagens do
423
+ * tenant, então o fallback vira custo recorrente de SMS enquanto a pendência
424
+ * não é resolvida (visto em prod 2026-09-02: 27 lembretes viraram SMS em 2min).
425
+ * Ligue quando o SMS for contingência deliberada durante o bloqueio.
426
+ * Só tem efeito com `whatsapp_fallback` ligado.
427
+ */
428
+ whatsapp_fallback_on_payment_error?: boolean;
419
429
  enabled: boolean;
420
430
  }
421
431
 
@@ -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.547",
3
+ "version": "1.3.552",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",