evo360-types 1.3.387 → 1.3.389

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.
@@ -44,6 +44,22 @@ export interface ILeadDistChannel {
44
44
  updated_at?: Date | null;
45
45
  }
46
46
 
47
+ /** Estado da régua de reativação de lead (feat-037).
48
+ * Mantido pelo subscriber `ticket_closed` (streak) e pela task
49
+ * `lead_reactivation` (último disparo). Semântica do streak alinhada ao
50
+ * `seminter_streak` do feat-018: incrementa a cada fechamento "sem interação"
51
+ * consecutivo e zera em fechamento não-seminter / resposta do lead. */
52
+ export interface ILeadReactivation {
53
+ /** Fechamentos "sem interação" (`seminter`) consecutivos sem reengajamento.
54
+ * Usado como teto anti-spam na condição da regra
55
+ * (`lead.reactivation.no_interaction_streak < N`). */
56
+ no_interaction_streak?: number;
57
+ /** Quando ocorreu o último fechamento "sem interação" que incrementou o streak. */
58
+ last_no_interaction_close_at?: Date | null;
59
+ /** Quando a última mensagem de reativação foi efetivamente enviada. */
60
+ last_reactivation_at?: Date | null;
61
+ }
62
+
47
63
  export interface ILead extends IProfile {
48
64
  external_id?: string | null; // ID externo do paciente
49
65
  social_id?: string | null; //CPF
@@ -67,5 +83,7 @@ export interface ILead extends IProfile {
67
83
  media_type?: string;
68
84
  captured_at?: Date | string | null;
69
85
  } | null;
86
+ // Régua de reativação (feat-037) — mantida pelo subscriber ticket_closed + task lead_reactivation.
87
+ reactivation?: ILeadReactivation | null;
70
88
  [key: string]: unknown; // index signature
71
89
  }
@@ -1,18 +1,25 @@
1
+ import type { IExternalLink } from "../../shared";
1
2
  /** Fase de avaliação.
2
- * - `pre_llm` (v1.0) : avalia antes do orchestrator LLM.
3
- * - `post_llm` (v1.1) : avalia depois do orchestrator e antes do envio
4
- * outbound (safety/governance).
3
+ * - `pre_llm` (v1.0) : avalia antes do orchestrator LLM.
4
+ * - `post_llm` (v1.1) : avalia depois do orchestrator e antes do envio
5
+ * outbound (safety/governance).
6
+ * - `ticket_closed` (feat-037) : avalia quando um atendimento é fechado
7
+ * (v1: ATTENDANCE_CLOSED do Chatbee). Side-effects
8
+ * only — não há mensagem em trânsito; a regra
9
+ * apenas executa actions (ex: `create_task`).
5
10
  * Ortogonal ao `when` (trigger): regras outbound (feat-027) usam
6
11
  * `when=outbound_message + phase=pre_llm`. O par
7
- * `outbound_message + post_llm` fica reservado p/ LLM-em-outbound futuro. */
8
- export type IHubiaRulePhase = "pre_llm" | "post_llm";
12
+ * `outbound_message + post_llm` fica reservado p/ LLM-em-outbound futuro.
13
+ * `ticket_closed` é a única phase em que phase e when andam juntos. */
14
+ export type IHubiaRulePhase = "pre_llm" | "post_llm" | "ticket_closed";
9
15
  /** Gatilho que dispara a avaliação. Combinações válidas com `phase`
10
16
  * (validado pelo superRefine de `zHubiaRuleSchema`):
11
- * - `inbound_message` + pre_llm : mensagem do paciente (v1.0).
12
- * - `llm_completed` + post_llm : turno do LLM concluído (feat-026).
13
- * - `outbound_message` + pre_llm : mensagem enviada ao paciente, reativo
14
- * pós-fato (feat-027). */
15
- export type IHubiaRuleTrigger = "inbound_message" | "llm_completed" | "outbound_message";
17
+ * - `inbound_message` + pre_llm : mensagem do paciente (v1.0).
18
+ * - `llm_completed` + post_llm : turno do LLM concluído (feat-026).
19
+ * - `outbound_message` + pre_llm : mensagem enviada ao paciente, reativo
20
+ * pós-fato (feat-027).
21
+ * - `ticket_closed` + ticket_closed : atendimento fechado (feat-037). */
22
+ export type IHubiaRuleTrigger = "inbound_message" | "llm_completed" | "outbound_message" | "ticket_closed";
16
23
  /** Desfecho do turno após a regra disparar:
17
24
  * - `stop` — finaliza turno; em pre_llm pula o LLM,
18
25
  * em post_llm bloqueia o envio outbound, em
@@ -102,10 +109,44 @@ export interface IHubiaRuleScope {
102
109
  * `{{fact.path}}` resolvido em runtime pelo facts provider. */
103
110
  export interface IHubiaRuleAction {
104
111
  /** Nome de uma tool `category: 'action'` do evo-hubia-tools
105
- * (transfer_to_department, close_attendance, handoff_to_human, update_lead_tags, …). */
112
+ * (transfer_to_department, close_attendance, handoff_to_human, update_lead_tags,
113
+ * create_task, …). */
106
114
  tool: string;
107
115
  input?: Record<string, unknown>;
108
116
  }
117
+ /** Input da action `create_task` (feat-037) — genérica: cria qualquer
118
+ * `IAutoTask` (a reativação de lead é o 1º caso de uso). Disponível apenas na
119
+ * phase `ticket_closed`. Todos os campos string/record aceitam templating
120
+ * `{{fact.path}}` resolvido em runtime pelo facts provider.
121
+ *
122
+ * Mapeamento p/ `IAutoTask` (no executor do cloud-functions):
123
+ * - `handler`/`kind`/`payload` → `auto.{handler,kind,payload}`.
124
+ * - `delay_hours` → `schedule.execute_at = now + delay_hours`.
125
+ * - `send_window` (opcional) → adia `execute_at` p/ a próxima abertura da
126
+ * janela (via `isInsideSchedule`/`nowInTz`).
127
+ * - `external_links` (opcional) → `externalLinks[]` (além do `crm_lead`
128
+ * derivado automaticamente do fact `lead.id`).
129
+ * - `idempotency_key` (opcional) → `idempotency_key` (dedup de criação). */
130
+ export interface ICreateTaskActionInput {
131
+ /** Handler lógico que processará a task (`TaskAutoHandler`). Define o tópico
132
+ * PubSub do executor (`{handler}.execute_requests`). Ex: `lead_reactivation`. */
133
+ handler: string;
134
+ /** Sub-tipo do trabalho dentro do handler (`auto.kind`). Ex: `reactivate.send`. */
135
+ kind: string;
136
+ /** Payload específico do handler (`auto.payload`). Forma livre. */
137
+ payload?: Record<string, unknown>;
138
+ /** Atraso, em horas, a partir de agora para o `execute_at` da task. */
139
+ delay_hours: number;
140
+ /** Janela de horário opcional (por-regra). Quando presente, o `execute_at`
141
+ * é adiado para a próxima abertura da janela. Reusa `IHubiaSchedule`
142
+ * (mesma estrutura/editor das condições `in_schedule`). */
143
+ send_window?: IHubiaSchedule;
144
+ /** Links externos adicionais p/ a task (além do `crm_lead` automático). */
145
+ external_links?: IExternalLink[];
146
+ /** Chave de idempotência para a criação da task (evita duplicação em
147
+ * entrega at-least-once do gatilho). */
148
+ idempotency_key?: string;
149
+ }
109
150
  /** Uma regra completa. Mora em `binding.rules[]`. Avaliada pelo motor
110
151
  * `evo-hubia-rules`. Reusa ToolRegistry para executar actions, herdando
111
152
  * as policies já existentes (mode, requiresLinkedLead, etc.). */
@@ -5,24 +5,32 @@
5
5
  //
6
6
  // Ver docs em cloud-functions/docs/evo-hubia-rules/.
7
7
 
8
+ import type { IExternalLink } from "../../shared";
9
+
8
10
  // ── Enums / Literals ──
9
11
 
10
12
  /** Fase de avaliação.
11
- * - `pre_llm` (v1.0) : avalia antes do orchestrator LLM.
12
- * - `post_llm` (v1.1) : avalia depois do orchestrator e antes do envio
13
- * outbound (safety/governance).
13
+ * - `pre_llm` (v1.0) : avalia antes do orchestrator LLM.
14
+ * - `post_llm` (v1.1) : avalia depois do orchestrator e antes do envio
15
+ * outbound (safety/governance).
16
+ * - `ticket_closed` (feat-037) : avalia quando um atendimento é fechado
17
+ * (v1: ATTENDANCE_CLOSED do Chatbee). Side-effects
18
+ * only — não há mensagem em trânsito; a regra
19
+ * apenas executa actions (ex: `create_task`).
14
20
  * Ortogonal ao `when` (trigger): regras outbound (feat-027) usam
15
21
  * `when=outbound_message + phase=pre_llm`. O par
16
- * `outbound_message + post_llm` fica reservado p/ LLM-em-outbound futuro. */
17
- export type IHubiaRulePhase = "pre_llm" | "post_llm";
22
+ * `outbound_message + post_llm` fica reservado p/ LLM-em-outbound futuro.
23
+ * `ticket_closed` é a única phase em que phase e when andam juntos. */
24
+ export type IHubiaRulePhase = "pre_llm" | "post_llm" | "ticket_closed";
18
25
 
19
26
  /** Gatilho que dispara a avaliação. Combinações válidas com `phase`
20
27
  * (validado pelo superRefine de `zHubiaRuleSchema`):
21
- * - `inbound_message` + pre_llm : mensagem do paciente (v1.0).
22
- * - `llm_completed` + post_llm : turno do LLM concluído (feat-026).
23
- * - `outbound_message` + pre_llm : mensagem enviada ao paciente, reativo
24
- * pós-fato (feat-027). */
25
- export type IHubiaRuleTrigger = "inbound_message" | "llm_completed" | "outbound_message";
28
+ * - `inbound_message` + pre_llm : mensagem do paciente (v1.0).
29
+ * - `llm_completed` + post_llm : turno do LLM concluído (feat-026).
30
+ * - `outbound_message` + pre_llm : mensagem enviada ao paciente, reativo
31
+ * pós-fato (feat-027).
32
+ * - `ticket_closed` + ticket_closed : atendimento fechado (feat-037). */
33
+ export type IHubiaRuleTrigger = "inbound_message" | "llm_completed" | "outbound_message" | "ticket_closed";
26
34
 
27
35
  /** Desfecho do turno após a regra disparar:
28
36
  * - `stop` — finaliza turno; em pre_llm pula o LLM,
@@ -142,11 +150,46 @@ export interface IHubiaRuleScope {
142
150
  * `{{fact.path}}` resolvido em runtime pelo facts provider. */
143
151
  export interface IHubiaRuleAction {
144
152
  /** Nome de uma tool `category: 'action'` do evo-hubia-tools
145
- * (transfer_to_department, close_attendance, handoff_to_human, update_lead_tags, …). */
153
+ * (transfer_to_department, close_attendance, handoff_to_human, update_lead_tags,
154
+ * create_task, …). */
146
155
  tool: string;
147
156
  input?: Record<string, unknown>;
148
157
  }
149
158
 
159
+ /** Input da action `create_task` (feat-037) — genérica: cria qualquer
160
+ * `IAutoTask` (a reativação de lead é o 1º caso de uso). Disponível apenas na
161
+ * phase `ticket_closed`. Todos os campos string/record aceitam templating
162
+ * `{{fact.path}}` resolvido em runtime pelo facts provider.
163
+ *
164
+ * Mapeamento p/ `IAutoTask` (no executor do cloud-functions):
165
+ * - `handler`/`kind`/`payload` → `auto.{handler,kind,payload}`.
166
+ * - `delay_hours` → `schedule.execute_at = now + delay_hours`.
167
+ * - `send_window` (opcional) → adia `execute_at` p/ a próxima abertura da
168
+ * janela (via `isInsideSchedule`/`nowInTz`).
169
+ * - `external_links` (opcional) → `externalLinks[]` (além do `crm_lead`
170
+ * derivado automaticamente do fact `lead.id`).
171
+ * - `idempotency_key` (opcional) → `idempotency_key` (dedup de criação). */
172
+ export interface ICreateTaskActionInput {
173
+ /** Handler lógico que processará a task (`TaskAutoHandler`). Define o tópico
174
+ * PubSub do executor (`{handler}.execute_requests`). Ex: `lead_reactivation`. */
175
+ handler: string;
176
+ /** Sub-tipo do trabalho dentro do handler (`auto.kind`). Ex: `reactivate.send`. */
177
+ kind: string;
178
+ /** Payload específico do handler (`auto.payload`). Forma livre. */
179
+ payload?: Record<string, unknown>;
180
+ /** Atraso, em horas, a partir de agora para o `execute_at` da task. */
181
+ delay_hours: number;
182
+ /** Janela de horário opcional (por-regra). Quando presente, o `execute_at`
183
+ * é adiado para a próxima abertura da janela. Reusa `IHubiaSchedule`
184
+ * (mesma estrutura/editor das condições `in_schedule`). */
185
+ send_window?: IHubiaSchedule;
186
+ /** Links externos adicionais p/ a task (além do `crm_lead` automático). */
187
+ external_links?: IExternalLink[];
188
+ /** Chave de idempotência para a criação da task (evita duplicação em
189
+ * entrega at-least-once do gatilho). */
190
+ idempotency_key?: string;
191
+ }
192
+
150
193
  // ── Main ──
151
194
 
152
195
  /** Uma regra completa. Mora em `binding.rules[]`. Avaliada pelo motor
@@ -52,6 +52,7 @@ export declare const TaskAutoHandlerEnum: {
52
52
  readonly Invoices: "invoices";
53
53
  readonly Webhook: "webhook";
54
54
  readonly Custom: "custom";
55
+ readonly LeadReactivation: "lead_reactivation";
55
56
  };
56
57
  export type TaskAutoHandler = (typeof TaskAutoHandlerEnum)[keyof typeof TaskAutoHandlerEnum];
57
58
  export declare const TaskRetryStrategyEnum: {
@@ -83,6 +83,10 @@ exports.TaskAutoHandlerEnum = {
83
83
  Invoices: "invoices",
84
84
  Webhook: "webhook",
85
85
  Custom: "custom",
86
+ // feat-037: handler que processa a régua de reativação de lead
87
+ // (gerado pela action `create_task` da phase `ticket_closed`).
88
+ // Tópico PubSub do executor: `lead_reactivation.execute_requests`.
89
+ LeadReactivation: "lead_reactivation",
86
90
  };
87
91
  // ----- Retry policy
88
92
  exports.TaskRetryStrategyEnum = {
@@ -94,6 +94,10 @@ export const TaskAutoHandlerEnum = {
94
94
  Invoices: "invoices",
95
95
  Webhook: "webhook",
96
96
  Custom: "custom",
97
+ // feat-037: handler que processa a régua de reativação de lead
98
+ // (gerado pela action `create_task` da phase `ticket_closed`).
99
+ // Tópico PubSub do executor: `lead_reactivation.execute_requests`.
100
+ LeadReactivation: "lead_reactivation",
97
101
  } as const;
98
102
 
99
103
  export type TaskAutoHandler =
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.387",
3
+ "version": "1.3.389",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",