evo360-types 1.3.492 → 1.3.497

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.
@@ -57,6 +57,37 @@ export interface IInboxItem {
57
57
  last_message_type?: string;
58
58
  last_message_channel_id?: string;
59
59
  unread_count?: number;
60
+ /**
61
+ * Nº de pacientes (evo-med) vinculados ao lead deste item, via `patient.lead_id`
62
+ * (+ `deleted_at == null`). Denormalizado pelo evochat-inbox-handler a cada
63
+ * INBOX_CHANGED (o vínculo pode nascer no meio da conversa). `0` = sabidamente
64
+ * sem paciente (inclui item sem lead). AUSENTE = desconhecido (item legado ou
65
+ * contagem falhou) — o FE não mostra nada. feat-106 item 1.
66
+ */
67
+ linked_patient_count?: number;
68
+ /**
69
+ * `true` = contato sem nenhum ticket fechado "de verdade" antes deste —
70
+ * fechamentos com `system_status: 'moved' | 'merged'` (transferência/varredura)
71
+ * não contam. Computado UMA vez por ticket (evento `action === 'created'`) e
72
+ * preservado pelos merges seguintes do upsertItem. AUSENTE = desconhecido — o
73
+ * FE não mostra nada. feat-106 item 2.
74
+ */
75
+ is_new_contact?: boolean;
76
+ /**
77
+ * Nº de tasks HUMANAS (`mode:'human'`) abertas (status não-final) vinculadas ao
78
+ * lead ou aos pacientes do lead (`externalLinkKeys`). Denormalizado pelo
79
+ * evochat-inbox-handler; refrescado também pelo task-replication-handler via
80
+ * INBOX_CHANGED quando uma task humana muda. `0` = sabidamente sem task aberta.
81
+ * AUSENTE = desconhecido — o FE não mostra nada. feat-106 item 4.
82
+ */
83
+ open_task_count?: number;
84
+ /**
85
+ * Menor `schedule.due_at` entre as tasks abertas contadas acima (null = nenhuma
86
+ * com prazo). O FE deriva "vencida" comparando com o relógio local — NUNCA
87
+ * denormalizamos o booleano "vencida", que apodreceria com a passagem do tempo
88
+ * sem evento. feat-106 item 4.
89
+ */
90
+ next_task_due_at?: Date | null;
60
91
  contact_name?: string;
61
92
  contact_address?: string;
62
93
  updated_at?: Date;
@@ -76,6 +76,37 @@ export interface IInboxItem {
76
76
  last_message_type?: string;
77
77
  last_message_channel_id?: string;
78
78
  unread_count?: number;
79
+ /**
80
+ * Nº de pacientes (evo-med) vinculados ao lead deste item, via `patient.lead_id`
81
+ * (+ `deleted_at == null`). Denormalizado pelo evochat-inbox-handler a cada
82
+ * INBOX_CHANGED (o vínculo pode nascer no meio da conversa). `0` = sabidamente
83
+ * sem paciente (inclui item sem lead). AUSENTE = desconhecido (item legado ou
84
+ * contagem falhou) — o FE não mostra nada. feat-106 item 1.
85
+ */
86
+ linked_patient_count?: number;
87
+ /**
88
+ * `true` = contato sem nenhum ticket fechado "de verdade" antes deste —
89
+ * fechamentos com `system_status: 'moved' | 'merged'` (transferência/varredura)
90
+ * não contam. Computado UMA vez por ticket (evento `action === 'created'`) e
91
+ * preservado pelos merges seguintes do upsertItem. AUSENTE = desconhecido — o
92
+ * FE não mostra nada. feat-106 item 2.
93
+ */
94
+ is_new_contact?: boolean;
95
+ /**
96
+ * Nº de tasks HUMANAS (`mode:'human'`) abertas (status não-final) vinculadas ao
97
+ * lead ou aos pacientes do lead (`externalLinkKeys`). Denormalizado pelo
98
+ * evochat-inbox-handler; refrescado também pelo task-replication-handler via
99
+ * INBOX_CHANGED quando uma task humana muda. `0` = sabidamente sem task aberta.
100
+ * AUSENTE = desconhecido — o FE não mostra nada. feat-106 item 4.
101
+ */
102
+ open_task_count?: number;
103
+ /**
104
+ * Menor `schedule.due_at` entre as tasks abertas contadas acima (null = nenhuma
105
+ * com prazo). O FE deriva "vencida" comparando com o relógio local — NUNCA
106
+ * denormalizamos o booleano "vencida", que apodreceria com a passagem do tempo
107
+ * sem evento. feat-106 item 4.
108
+ */
109
+ next_task_due_at?: Date | null;
79
110
  contact_name?: string;
80
111
  contact_address?: string;
81
112
  updated_at?: Date;
@@ -56,6 +56,13 @@ export interface IMedCalendarNotificationEntry {
56
56
  channels?: {
57
57
  [channelKind: string]: IMedCalendarNotificationChannelEntry;
58
58
  } | null;
59
+ /**
60
+ * feat-116 — `statusBase` elegíveis para envio deste tipo de notificação.
61
+ * Ausente/vazia ⇒ sem restrição (comportamento anterior). Validada pelo
62
+ * EXECUTOR no `execute_at` (revalidação), não pelo sweep — mesma semântica de
63
+ * match do `status_base_in` das rotinas do hub-automation.
64
+ */
65
+ eligible_status_base?: string[] | null;
59
66
  }
60
67
  /** Config de um canal dentro de um config de notificação (feat-092). */
61
68
  export interface IMedCalendarNotificationChannelEntry {
@@ -94,6 +101,12 @@ export declare const MedCalendarNotificationConfigKeys: {
94
101
  * "paciente confirmou".
95
102
  */
96
103
  readonly AppointmentConfirmation: "appointment_confirmation";
104
+ /**
105
+ * feat-116 — mensagem PÓS-CONSULTA (avaliação do atendimento, follow-up D+N de
106
+ * procedimento), disparada por rotina. Lida pelo handler
107
+ * `appointment_post_consultation`; sem CTAs de confirmar/remarcar.
108
+ */
109
+ readonly AppointmentPostConsultation: "appointment_post_consultation";
97
110
  readonly AppointmentCreated: "appointment_created";
98
111
  readonly AppointmentRescheduled: "appointment_rescheduled";
99
112
  readonly AppointmentCancelled: "appointment_cancelled";
@@ -37,6 +37,12 @@ exports.MedCalendarNotificationConfigKeys = {
37
37
  * "paciente confirmou".
38
38
  */
39
39
  AppointmentConfirmation: "appointment_confirmation",
40
+ /**
41
+ * feat-116 — mensagem PÓS-CONSULTA (avaliação do atendimento, follow-up D+N de
42
+ * procedimento), disparada por rotina. Lida pelo handler
43
+ * `appointment_post_consultation`; sem CTAs de confirmar/remarcar.
44
+ */
45
+ AppointmentPostConsultation: "appointment_post_consultation",
40
46
  AppointmentCreated: "appointment_created",
41
47
  AppointmentRescheduled: "appointment_rescheduled",
42
48
  AppointmentCancelled: "appointment_cancelled",
@@ -71,6 +71,13 @@ export interface IMedCalendarNotificationEntry {
71
71
  channels?: {
72
72
  [channelKind: string]: IMedCalendarNotificationChannelEntry;
73
73
  } | null;
74
+ /**
75
+ * feat-116 — `statusBase` elegíveis para envio deste tipo de notificação.
76
+ * Ausente/vazia ⇒ sem restrição (comportamento anterior). Validada pelo
77
+ * EXECUTOR no `execute_at` (revalidação), não pelo sweep — mesma semântica de
78
+ * match do `status_base_in` das rotinas do hub-automation.
79
+ */
80
+ eligible_status_base?: string[] | null;
74
81
  }
75
82
 
76
83
  /** Config de um canal dentro de um config de notificação (feat-092). */
@@ -112,6 +119,12 @@ export const MedCalendarNotificationConfigKeys = {
112
119
  * "paciente confirmou".
113
120
  */
114
121
  AppointmentConfirmation: "appointment_confirmation",
122
+ /**
123
+ * feat-116 — mensagem PÓS-CONSULTA (avaliação do atendimento, follow-up D+N de
124
+ * procedimento), disparada por rotina. Lida pelo handler
125
+ * `appointment_post_consultation`; sem CTAs de confirmar/remarcar.
126
+ */
127
+ AppointmentPostConsultation: "appointment_post_consultation",
115
128
  AppointmentCreated: "appointment_created",
116
129
  AppointmentRescheduled: "appointment_rescheduled",
117
130
  AppointmentCancelled: "appointment_cancelled",
@@ -56,6 +56,7 @@ export declare const TaskAutoHandlerEnum: {
56
56
  readonly AppointmentAction: "appointment_action";
57
57
  readonly AppointmentReminder: "appointment_reminder";
58
58
  readonly AppointmentConfirmation: "appointment_confirmation";
59
+ readonly AppointmentPostConsultation: "appointment_post_consultation";
59
60
  readonly IntegrationsSyncRun: "evo-integrations.sync-run";
60
61
  readonly CampaignMaterialize: "campaign.materialize";
61
62
  readonly CampaignDispatchBatch: "campaign.dispatch_batch";
@@ -103,6 +103,13 @@ exports.TaskAutoHandlerEnum = {
103
103
  // HSM com CTAs de confirmar/remarcar. Tópico: `appointment_confirmation.execute_requests`.
104
104
  // Espelhado à mão em `zTaskAutoHandlerSchema` — sem lá, criar a task estoura ZodError.
105
105
  AppointmentConfirmation: "appointment_confirmation",
106
+ // feat-116: mensagem PÓS-CONSULTA (avaliação, follow-up D+N de procedimento) —
107
+ // mesmo executor parametrizado do lembrete/confirmação, lendo
108
+ // `notification_config.configs.appointment_post_consultation` e SEM os CTAs de
109
+ // confirmar/remarcar (a consulta já aconteceu). Tópico:
110
+ // `appointment_post_consultation.execute_requests`.
111
+ // Espelhado à mão em `zTaskAutoHandlerSchema` — sem lá, criar a task estoura ZodError.
112
+ AppointmentPostConsultation: "appointment_post_consultation",
106
113
  // feat-078: handler que roda um sync de agenda do evo-integrations. O valor
107
114
  // é o nome do handler COM ponto de propósito — `resolveHandlerTopic` faz
108
115
  // `${handler}.execute_requests`, e a CF `integrations_sync` já escuta
@@ -114,6 +114,13 @@ export const TaskAutoHandlerEnum = {
114
114
  // HSM com CTAs de confirmar/remarcar. Tópico: `appointment_confirmation.execute_requests`.
115
115
  // Espelhado à mão em `zTaskAutoHandlerSchema` — sem lá, criar a task estoura ZodError.
116
116
  AppointmentConfirmation: "appointment_confirmation",
117
+ // feat-116: mensagem PÓS-CONSULTA (avaliação, follow-up D+N de procedimento) —
118
+ // mesmo executor parametrizado do lembrete/confirmação, lendo
119
+ // `notification_config.configs.appointment_post_consultation` e SEM os CTAs de
120
+ // confirmar/remarcar (a consulta já aconteceu). Tópico:
121
+ // `appointment_post_consultation.execute_requests`.
122
+ // Espelhado à mão em `zTaskAutoHandlerSchema` — sem lá, criar a task estoura ZodError.
123
+ AppointmentPostConsultation: "appointment_post_consultation",
117
124
  // feat-078: handler que roda um sync de agenda do evo-integrations. O valor
118
125
  // é o nome do handler COM ponto de propósito — `resolveHandlerTopic` faz
119
126
  // `${handler}.execute_requests`, e a CF `integrations_sync` já escuta
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.492",
3
+ "version": "1.3.497",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",