evo360-types 1.3.478 → 1.3.484
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/apps/evo-med/appointment/zod-schemas.d.ts +3 -0
- package/dist/apps/evo-med/appointment/zod-schemas.js +9 -0
- package/dist/apps/evo-med/appointment/zod-schemas.ts +10 -0
- package/dist/types/evo-chat/thread-message/index.d.ts +53 -0
- package/dist/types/evo-chat/thread-message/index.ts +63 -0
- package/dist/types/evo-med/appointment/index.d.ts +11 -0
- package/dist/types/evo-med/appointment/index.ts +11 -0
- package/package.json +1 -1
|
@@ -633,6 +633,7 @@ export declare const zAppointmentSchema: z.ZodObject<{
|
|
|
633
633
|
isDraft: z.ZodDefault<z.ZodBoolean>;
|
|
634
634
|
draftExpirationMinutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
635
635
|
external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
636
|
+
status_external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
636
637
|
tags: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
637
638
|
name: z.ZodString;
|
|
638
639
|
color: z.ZodOptional<z.ZodString>;
|
|
@@ -969,6 +970,7 @@ export declare const zAppointmentSchema: z.ZodObject<{
|
|
|
969
970
|
isDraft: z.ZodDefault<z.ZodBoolean>;
|
|
970
971
|
draftExpirationMinutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
971
972
|
external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
973
|
+
status_external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
972
974
|
tags: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
973
975
|
name: z.ZodString;
|
|
974
976
|
color: z.ZodOptional<z.ZodString>;
|
|
@@ -1305,6 +1307,7 @@ export declare const zAppointmentSchema: z.ZodObject<{
|
|
|
1305
1307
|
isDraft: z.ZodDefault<z.ZodBoolean>;
|
|
1306
1308
|
draftExpirationMinutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1307
1309
|
external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1310
|
+
status_external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1308
1311
|
tags: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
1309
1312
|
name: z.ZodString;
|
|
1310
1313
|
color: z.ZodOptional<z.ZodString>;
|
|
@@ -202,6 +202,15 @@ exports.zAppointmentSchema = zod_schemas_1.zFireDocSchema
|
|
|
202
202
|
draftExpirationMinutes: zod_1.z.number().nullable().optional(), // tempo em minutos para expiração do rascunho
|
|
203
203
|
// ID externo da consulta
|
|
204
204
|
external_id: zod_1.z.string().nullable().optional(),
|
|
205
|
+
// ID do STATUS na agenda externa de origem — algumas agendas identificam o
|
|
206
|
+
// status por id além do rótulo (`status`), e os workflows n8n usam esse id
|
|
207
|
+
// pra reescrever o agendamento sem resolver o rótulo de volta.
|
|
208
|
+
//
|
|
209
|
+
// `coerce` de propósito: agenda externa que devolve id NUMÉRICO é caso
|
|
210
|
+
// conhecido nesta base (quebrou o `patient.create` uma vez). Com `z.string()`
|
|
211
|
+
// puro, um `4` faria o write-through reprovar com `contract_violation`.
|
|
212
|
+
// Nullable/optional resolvem ANTES da coerção — `null` continua `null`.
|
|
213
|
+
status_external_id: zod_1.z.coerce.string().nullable().optional(),
|
|
205
214
|
tags: zod_1.z.array(zod_schemas_1.zTagSchema).nullable().optional(),
|
|
206
215
|
})
|
|
207
216
|
.passthrough();
|
|
@@ -223,6 +223,16 @@ export const zAppointmentSchema = zFireDocSchema
|
|
|
223
223
|
// ID externo da consulta
|
|
224
224
|
external_id: z.string().nullable().optional(),
|
|
225
225
|
|
|
226
|
+
// ID do STATUS na agenda externa de origem — algumas agendas identificam o
|
|
227
|
+
// status por id além do rótulo (`status`), e os workflows n8n usam esse id
|
|
228
|
+
// pra reescrever o agendamento sem resolver o rótulo de volta.
|
|
229
|
+
//
|
|
230
|
+
// `coerce` de propósito: agenda externa que devolve id NUMÉRICO é caso
|
|
231
|
+
// conhecido nesta base (quebrou o `patient.create` uma vez). Com `z.string()`
|
|
232
|
+
// puro, um `4` faria o write-through reprovar com `contract_violation`.
|
|
233
|
+
// Nullable/optional resolvem ANTES da coerção — `null` continua `null`.
|
|
234
|
+
status_external_id: z.coerce.string().nullable().optional(),
|
|
235
|
+
|
|
226
236
|
tags: z.array(zTagSchema).nullable().optional(),
|
|
227
237
|
})
|
|
228
238
|
.passthrough();
|
|
@@ -69,6 +69,56 @@ export interface IMessagePricing {
|
|
|
69
69
|
category?: 'service' | 'utility' | 'authentication' | 'marketing';
|
|
70
70
|
billable?: boolean;
|
|
71
71
|
}
|
|
72
|
+
export interface IRenderedTemplateButton {
|
|
73
|
+
type?: string;
|
|
74
|
+
text?: string;
|
|
75
|
+
/** Já resolvida: o sufixo dinâmico do link vem substituído pelo valor enviado. */
|
|
76
|
+
url?: string;
|
|
77
|
+
phone_number?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface IRenderedTemplateComponent {
|
|
80
|
+
type?: string;
|
|
81
|
+
format?: string;
|
|
82
|
+
/** Já resolvido — sem `{{placeholders}}`, salvo os que ficaram sem valor. */
|
|
83
|
+
text?: string;
|
|
84
|
+
buttons?: IRenderedTemplateButton[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A mensagem de template como foi enviada, já compilada.
|
|
88
|
+
*
|
|
89
|
+
* Sem isto, a thread é reconstruída na LEITURA a partir da definição corrente do
|
|
90
|
+
* canal: excluir o template apaga a mensagem da tela e editá-lo reescreve o
|
|
91
|
+
* histórico. Pior, a reconstrução ficava duplicada em cada cliente (Vue e Flutter),
|
|
92
|
+
* com algoritmos que divergiam entre si.
|
|
93
|
+
*
|
|
94
|
+
* O backend compila uma vez, no envio; o cliente só exibe.
|
|
95
|
+
*/
|
|
96
|
+
export interface IRenderedTemplateSnapshot {
|
|
97
|
+
schema_version: 1;
|
|
98
|
+
/**
|
|
99
|
+
* Transcrição textual canônica — header textual, body, footer e rótulos dos
|
|
100
|
+
* botões, nesta ordem, um por linha. É o campo para quem só precisa LER o
|
|
101
|
+
* histórico: busca, exportação, BigQuery, auditoria, IA.
|
|
102
|
+
*/
|
|
103
|
+
text: string;
|
|
104
|
+
/** Estrutura resolvida, para quem precisa DESENHAR o balão. */
|
|
105
|
+
components: IRenderedTemplateComponent[];
|
|
106
|
+
origin: 'send' | 'backfill';
|
|
107
|
+
/**
|
|
108
|
+
* `send_compiled` — compilado DURANTE o pipeline de envio, a partir dos componentes
|
|
109
|
+
* efetivamente enviados e da definição disponível naquele momento.
|
|
110
|
+
*
|
|
111
|
+
* NÃO afirma identidade com o que a Meta exibiu ao paciente: ela renderiza o template
|
|
112
|
+
* vivo. Em parte dos caminhos (endpoints de operador) o payload chega montado pelo
|
|
113
|
+
* frontend, então a definição usada aqui valida e compila o envio, mas não foi
|
|
114
|
+
* necessariamente a que o produziu.
|
|
115
|
+
*
|
|
116
|
+
* `historical_reconstruction` — remontado depois do envio, a partir do que sobrou.
|
|
117
|
+
*/
|
|
118
|
+
fidelity: 'send_compiled' | 'historical_reconstruction';
|
|
119
|
+
/** Chaves sem valor. O placeholder fica visível no texto. Omitido quando vazio. */
|
|
120
|
+
unresolved?: string[];
|
|
121
|
+
}
|
|
72
122
|
export interface IThreadMessage extends IFireDoc {
|
|
73
123
|
model_ver: number;
|
|
74
124
|
thread_id: string;
|
|
@@ -99,7 +149,10 @@ export interface IThreadMessage extends IFireDoc {
|
|
|
99
149
|
template?: {
|
|
100
150
|
name: string;
|
|
101
151
|
language: string;
|
|
152
|
+
/** O que foi ENVIADO à Meta: os parâmetros (`{type:'body', parameters:[...]}`). */
|
|
102
153
|
components?: unknown[];
|
|
154
|
+
/** feat-114: a mensagem já compilada, como foi enviada. Fonte de verdade do histórico. */
|
|
155
|
+
rendered?: IRenderedTemplateSnapshot;
|
|
103
156
|
};
|
|
104
157
|
context?: IMessageContext;
|
|
105
158
|
call?: IMessageCall;
|
|
@@ -99,6 +99,66 @@ export interface IMessagePricing {
|
|
|
99
99
|
billable?: boolean;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
// ── Mensagem de template compilada (feat-114) ──
|
|
103
|
+
|
|
104
|
+
export interface IRenderedTemplateButton {
|
|
105
|
+
type?: string;
|
|
106
|
+
text?: string;
|
|
107
|
+
/** Já resolvida: o sufixo dinâmico do link vem substituído pelo valor enviado. */
|
|
108
|
+
url?: string;
|
|
109
|
+
phone_number?: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface IRenderedTemplateComponent {
|
|
113
|
+
type?: string;
|
|
114
|
+
format?: string;
|
|
115
|
+
/** Já resolvido — sem `{{placeholders}}`, salvo os que ficaram sem valor. */
|
|
116
|
+
text?: string;
|
|
117
|
+
buttons?: IRenderedTemplateButton[];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* A mensagem de template como foi enviada, já compilada.
|
|
122
|
+
*
|
|
123
|
+
* Sem isto, a thread é reconstruída na LEITURA a partir da definição corrente do
|
|
124
|
+
* canal: excluir o template apaga a mensagem da tela e editá-lo reescreve o
|
|
125
|
+
* histórico. Pior, a reconstrução ficava duplicada em cada cliente (Vue e Flutter),
|
|
126
|
+
* com algoritmos que divergiam entre si.
|
|
127
|
+
*
|
|
128
|
+
* O backend compila uma vez, no envio; o cliente só exibe.
|
|
129
|
+
*/
|
|
130
|
+
export interface IRenderedTemplateSnapshot {
|
|
131
|
+
schema_version: 1;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Transcrição textual canônica — header textual, body, footer e rótulos dos
|
|
135
|
+
* botões, nesta ordem, um por linha. É o campo para quem só precisa LER o
|
|
136
|
+
* histórico: busca, exportação, BigQuery, auditoria, IA.
|
|
137
|
+
*/
|
|
138
|
+
text: string;
|
|
139
|
+
|
|
140
|
+
/** Estrutura resolvida, para quem precisa DESENHAR o balão. */
|
|
141
|
+
components: IRenderedTemplateComponent[];
|
|
142
|
+
|
|
143
|
+
origin: 'send' | 'backfill';
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* `send_compiled` — compilado DURANTE o pipeline de envio, a partir dos componentes
|
|
147
|
+
* efetivamente enviados e da definição disponível naquele momento.
|
|
148
|
+
*
|
|
149
|
+
* NÃO afirma identidade com o que a Meta exibiu ao paciente: ela renderiza o template
|
|
150
|
+
* vivo. Em parte dos caminhos (endpoints de operador) o payload chega montado pelo
|
|
151
|
+
* frontend, então a definição usada aqui valida e compila o envio, mas não foi
|
|
152
|
+
* necessariamente a que o produziu.
|
|
153
|
+
*
|
|
154
|
+
* `historical_reconstruction` — remontado depois do envio, a partir do que sobrou.
|
|
155
|
+
*/
|
|
156
|
+
fidelity: 'send_compiled' | 'historical_reconstruction';
|
|
157
|
+
|
|
158
|
+
/** Chaves sem valor. O placeholder fica visível no texto. Omitido quando vazio. */
|
|
159
|
+
unresolved?: string[];
|
|
160
|
+
}
|
|
161
|
+
|
|
102
162
|
// ── Thread Message (evo-chat v3) ──
|
|
103
163
|
|
|
104
164
|
export interface IThreadMessage extends IFireDoc {
|
|
@@ -126,7 +186,10 @@ export interface IThreadMessage extends IFireDoc {
|
|
|
126
186
|
template?: {
|
|
127
187
|
name: string;
|
|
128
188
|
language: string;
|
|
189
|
+
/** O que foi ENVIADO à Meta: os parâmetros (`{type:'body', parameters:[...]}`). */
|
|
129
190
|
components?: unknown[];
|
|
191
|
+
/** feat-114: a mensagem já compilada, como foi enviada. Fonte de verdade do histórico. */
|
|
192
|
+
rendered?: IRenderedTemplateSnapshot;
|
|
130
193
|
};
|
|
131
194
|
context?: IMessageContext;
|
|
132
195
|
|
|
@@ -159,6 +159,17 @@ export interface IAppointment extends IFireDoc {
|
|
|
159
159
|
payment?: IAppointmentPayment | null;
|
|
160
160
|
reschedules?: IAppointmentReschedule[] | null;
|
|
161
161
|
external_id?: string | null;
|
|
162
|
+
/**
|
|
163
|
+
* ID do STATUS na agenda externa de origem. Algumas agendas identificam o
|
|
164
|
+
* status por id além do rótulo (`status`), e os workflows n8n precisam desse
|
|
165
|
+
* id pra reescrever o agendamento no externo sem ter que resolver o rótulo
|
|
166
|
+
* de volta.
|
|
167
|
+
*
|
|
168
|
+
* Opcional por natureza: só algumas agendas têm. Autoridade do externo — não
|
|
169
|
+
* declarado na base global de política, então resolve como `external`.
|
|
170
|
+
* Não replicado no embed do paciente (ver `IPatientAppointment`).
|
|
171
|
+
*/
|
|
172
|
+
status_external_id?: string | null;
|
|
162
173
|
isDraft: boolean;
|
|
163
174
|
draftExpirationMinutes?: number | null;
|
|
164
175
|
tags?: ITag[] | null;
|
|
@@ -201,6 +201,17 @@ export interface IAppointment extends IFireDoc {
|
|
|
201
201
|
// Controle de remarcações
|
|
202
202
|
reschedules?: IAppointmentReschedule[] | null;
|
|
203
203
|
external_id?: string | null; // ID externo da consulta
|
|
204
|
+
/**
|
|
205
|
+
* ID do STATUS na agenda externa de origem. Algumas agendas identificam o
|
|
206
|
+
* status por id além do rótulo (`status`), e os workflows n8n precisam desse
|
|
207
|
+
* id pra reescrever o agendamento no externo sem ter que resolver o rótulo
|
|
208
|
+
* de volta.
|
|
209
|
+
*
|
|
210
|
+
* Opcional por natureza: só algumas agendas têm. Autoridade do externo — não
|
|
211
|
+
* declarado na base global de política, então resolve como `external`.
|
|
212
|
+
* Não replicado no embed do paciente (ver `IPatientAppointment`).
|
|
213
|
+
*/
|
|
214
|
+
status_external_id?: string | null;
|
|
204
215
|
// Propriedades para controle de rascunho
|
|
205
216
|
isDraft: boolean;
|
|
206
217
|
draftExpirationMinutes?: number | null; // tempo em minutos para expiração do rascunho
|