evo360-types 1.3.628 → 1.3.634

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.
@@ -116,7 +116,11 @@ export declare const zTeleconsultationSchema: z.ZodObject<{
116
116
  unused_expires_at: z.ZodEffects<z.ZodDate, Date, unknown>;
117
117
  reconnect_until: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
118
118
  started_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
119
+ /** Instante em que o encerramento começou (fase 1 marcou `ending`). */
120
+ ending_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
119
121
  ended_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
122
+ /** `true` quando o `ended_at` foi DERIVADO por reparo, não medido. */
123
+ ended_at_derived: z.ZodOptional<z.ZodBoolean>;
120
124
  ended_by: z.ZodOptional<z.ZodNullable<z.ZodObject<{
121
125
  type: z.ZodEnum<["user", "system"]>;
122
126
  id: z.ZodOptional<z.ZodString>;
@@ -188,7 +192,11 @@ export declare const zTeleconsultationSchema: z.ZodObject<{
188
192
  unused_expires_at: z.ZodEffects<z.ZodDate, Date, unknown>;
189
193
  reconnect_until: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
190
194
  started_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
195
+ /** Instante em que o encerramento começou (fase 1 marcou `ending`). */
196
+ ending_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
191
197
  ended_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
198
+ /** `true` quando o `ended_at` foi DERIVADO por reparo, não medido. */
199
+ ended_at_derived: z.ZodOptional<z.ZodBoolean>;
192
200
  ended_by: z.ZodOptional<z.ZodNullable<z.ZodObject<{
193
201
  type: z.ZodEnum<["user", "system"]>;
194
202
  id: z.ZodOptional<z.ZodString>;
@@ -260,7 +268,11 @@ export declare const zTeleconsultationSchema: z.ZodObject<{
260
268
  unused_expires_at: z.ZodEffects<z.ZodDate, Date, unknown>;
261
269
  reconnect_until: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
262
270
  started_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
271
+ /** Instante em que o encerramento começou (fase 1 marcou `ending`). */
272
+ ending_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
263
273
  ended_at: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodDate, Date, unknown>>>;
274
+ /** `true` quando o `ended_at` foi DERIVADO por reparo, não medido. */
275
+ ended_at_derived: z.ZodOptional<z.ZodBoolean>;
264
276
  ended_by: z.ZodOptional<z.ZodNullable<z.ZodObject<{
265
277
  type: z.ZodEnum<["user", "system"]>;
266
278
  id: z.ZodOptional<z.ZodString>;
@@ -287,7 +287,11 @@ exports.zTeleconsultationSchema = zod_schemas_1.zFireDocSchema
287
287
  unused_expires_at: zDate,
288
288
  reconnect_until: zDateNullable,
289
289
  started_at: zDateNullable,
290
+ /** Instante em que o encerramento começou (fase 1 marcou `ending`). */
291
+ ending_at: zDateNullable,
290
292
  ended_at: zDateNullable,
293
+ /** `true` quando o `ended_at` foi DERIVADO por reparo, não medido. */
294
+ ended_at_derived: zod_1.z.boolean().optional(),
291
295
  ended_by: exports.zTeleconsultationEndedBySchema.nullable().optional(),
292
296
  provider: exports.zTeleconsultationProviderSchema,
293
297
  provider_meeting_id: zod_1.z.string().optional(),
@@ -330,7 +330,11 @@ export const zTeleconsultationSchema = zFireDocSchema
330
330
  unused_expires_at: zDate,
331
331
  reconnect_until: zDateNullable,
332
332
  started_at: zDateNullable,
333
+ /** Instante em que o encerramento começou (fase 1 marcou `ending`). */
334
+ ending_at: zDateNullable,
333
335
  ended_at: zDateNullable,
336
+ /** `true` quando o `ended_at` foi DERIVADO por reparo, não medido. */
337
+ ended_at_derived: z.boolean().optional(),
334
338
  ended_by: zTeleconsultationEndedBySchema.nullable().optional(),
335
339
  provider: zTeleconsultationProviderSchema,
336
340
  provider_meeting_id: z.string().optional(),
@@ -38,6 +38,37 @@ export declare const TELEMEDICINE_WINDOW_DEFAULTS: {
38
38
  readonly launch_code_ttl_minutes: 5;
39
39
  /** Access da sessão pública do browser (`browser_session`), renovável de forma rotativa. */
40
40
  readonly browser_session_ttl_minutes: 15;
41
+ /**
42
+ * TTL da sessão de browser enquanto a consulta está VIVA (2026-09-28).
43
+ *
44
+ * 15 min bastam antes de a consulta começar — é uma janela de preflight. Já
45
+ * uma consulta em andamento tem pausa, navegador que trava, notebook que
46
+ * dorme e aba fechada por engano, e com 15 min qualquer um desses obriga o
47
+ * médico a pedir um launch code NOVO no painel para voltar. 60 min cobre
48
+ * todos eles com folga.
49
+ *
50
+ * O risco de um cookie mais longevo é limitado pela própria consulta: toda
51
+ * rota da sala relê o estado clínico, e consulta terminal responde `410` — o
52
+ * cookie fica inerte no fim do encontro, não no fim do TTL. O teto de duração
53
+ * da plataforma é 1h30, então esta sessão não sobrevive a uma consulta.
54
+ */
55
+ readonly browser_session_live_ttl_minutes: 60;
56
+ /**
57
+ * Graça para o `sid` ANTERIOR depois da rotação (2026-09-28).
58
+ *
59
+ * A sessão rotaciona trocando o cookie na resposta, então qualquer requisição
60
+ * em vôo no instante da troca carrega o cookie anterior — o `/session` é
61
+ * polado a cada 5 s, o que faz dessa corrida um evento recorrente em toda
62
+ * consulta longa, não uma raridade. Dentro desta janela, reusar o `sid`
63
+ * rotacionado NÃO é comprometimento: é aba que voltou, navegador que travou ou
64
+ * resposta de rotação que se perdeu no caminho.
65
+ *
66
+ * 10 min é o mesmo número de `reconnect_grace_minutes`, de propósito: é a
67
+ * janela em que o produto JÁ considera que a pessoa continua na mesma
68
+ * consulta. Um conceito, não dois. Passados os 10 min, reuso de cookie
69
+ * rotacionado deixa de parecer tropeço e volta a ser sinal de cópia.
70
+ */
71
+ readonly browser_session_rotation_grace_minutes: 10;
41
72
  /** Verificação de identidade: N falhas na janela bloqueiam o grant. */
42
73
  readonly identity_max_failures: 5;
43
74
  readonly identity_failure_window_minutes: 15;
@@ -387,7 +418,31 @@ export interface ITeleconsultation extends IFireDoc {
387
418
  unused_expires_at: Date;
388
419
  reconnect_until?: Date | null;
389
420
  started_at?: Date | null;
421
+ /**
422
+ * feat-160 (2026-09-29) — instante em que o encerramento COMEÇOU (fase 1 do
423
+ * `endForAll` marcou `ending`). Na prática é o clique do médico, ou o instante
424
+ * em que o sweep decidiu encerrar.
425
+ *
426
+ * Existe por causa de um furo de FATURAMENTO: as fases 2 e 3 do `endForAll` são
427
+ * separadas por até três chamadas HTTP ao provedor, feitas fora de transação. Se
428
+ * o processo morrer ali, o doc fica em `ending` para sempre — sem `ended_at`, sem
429
+ * `usage_metering_due_at` (logo **nunca cobrado**), sem carimbo de retenção e
430
+ * sem `provider_teardown_pending` (logo invisível para a varredura de meeting
431
+ * órfão). `ending` não está em nenhuma das listas de status do sweep.
432
+ *
433
+ * Com este campo a passada de reparo sabe (a) há quanto tempo o doc está parado
434
+ * e (b) que instante usar como `ended_at` — o fim real é desconhecido, e este é
435
+ * o limite inferior defensável.
436
+ */
437
+ ending_at?: Date | null;
390
438
  ended_at?: Date | null;
439
+ /**
440
+ * feat-160 (2026-09-29) — `true` quando o `ended_at` foi DERIVADO por reparo, e
441
+ * não medido. Quem lê a duração da consulta precisa saber disso: o fim real
442
+ * ficou entre o `ending_at` e o instante do reparo, e o que está gravado é o
443
+ * começo dessa janela.
444
+ */
445
+ ended_at_derived?: boolean;
391
446
  ended_by?: ITeleconsultationEndedBy | null;
392
447
  provider: TeleconsultationProvider;
393
448
  /** Id opaco do meeting no provider — nunca vai em external link nem no SPA. */
@@ -1166,6 +1221,25 @@ export interface ITeleconsultationBadgeDto {
1166
1221
  recording_audio: boolean;
1167
1222
  recording_video: boolean;
1168
1223
  transcript: boolean;
1224
+ /**
1225
+ * Início REAL, ISO 8601 UTC, ou `null`. Desde 2026-09-29 "início" é o
1226
+ * **ENCONTRO** — médico E paciente conectados —, não o clique do médico:
1227
+ * abrir a sala e entrar sozinho pode ser curiosidade, e carimbar ali armava
1228
+ * um prazo de 90 min que encerrava a consulta e revogava o link do paciente.
1229
+ *
1230
+ * `null` é RESPOSTA, não dado faltando: significa que o encontro não houve.
1231
+ */
1232
+ started_at: string | null;
1233
+ /**
1234
+ * Fim REAL, ISO 8601 UTC, ou `null`.
1235
+ *
1236
+ * A assimetria normal é `ended_at` preenchido com `started_at` nulo — o
1237
+ * paciente não apareceu e o médico encerrou, ou a consulta expirou. Nesses
1238
+ * casos a duração é INEXISTENTE, não zero, e a tela não deve escrever
1239
+ * "0 min". O inverso não acontece: consulta que teve encontro não chega a
1240
+ * `expired` nem a `cancelled`.
1241
+ */
1242
+ ended_at: string | null;
1169
1243
  }
1170
1244
  /** `GET /v1/appointments/teleconsultation-badges?ids=a,b,c` (máx. 50 ids). */
1171
1245
  export interface ITeleconsultationBadgesResponseDto {
@@ -71,6 +71,37 @@ exports.TELEMEDICINE_WINDOW_DEFAULTS = {
71
71
  launch_code_ttl_minutes: 5,
72
72
  /** Access da sessão pública do browser (`browser_session`), renovável de forma rotativa. */
73
73
  browser_session_ttl_minutes: 15,
74
+ /**
75
+ * TTL da sessão de browser enquanto a consulta está VIVA (2026-09-28).
76
+ *
77
+ * 15 min bastam antes de a consulta começar — é uma janela de preflight. Já
78
+ * uma consulta em andamento tem pausa, navegador que trava, notebook que
79
+ * dorme e aba fechada por engano, e com 15 min qualquer um desses obriga o
80
+ * médico a pedir um launch code NOVO no painel para voltar. 60 min cobre
81
+ * todos eles com folga.
82
+ *
83
+ * O risco de um cookie mais longevo é limitado pela própria consulta: toda
84
+ * rota da sala relê o estado clínico, e consulta terminal responde `410` — o
85
+ * cookie fica inerte no fim do encontro, não no fim do TTL. O teto de duração
86
+ * da plataforma é 1h30, então esta sessão não sobrevive a uma consulta.
87
+ */
88
+ browser_session_live_ttl_minutes: 60,
89
+ /**
90
+ * Graça para o `sid` ANTERIOR depois da rotação (2026-09-28).
91
+ *
92
+ * A sessão rotaciona trocando o cookie na resposta, então qualquer requisição
93
+ * em vôo no instante da troca carrega o cookie anterior — o `/session` é
94
+ * polado a cada 5 s, o que faz dessa corrida um evento recorrente em toda
95
+ * consulta longa, não uma raridade. Dentro desta janela, reusar o `sid`
96
+ * rotacionado NÃO é comprometimento: é aba que voltou, navegador que travou ou
97
+ * resposta de rotação que se perdeu no caminho.
98
+ *
99
+ * 10 min é o mesmo número de `reconnect_grace_minutes`, de propósito: é a
100
+ * janela em que o produto JÁ considera que a pessoa continua na mesma
101
+ * consulta. Um conceito, não dois. Passados os 10 min, reuso de cookie
102
+ * rotacionado deixa de parecer tropeço e volta a ser sinal de cópia.
103
+ */
104
+ browser_session_rotation_grace_minutes: 10,
74
105
  /** Verificação de identidade: N falhas na janela bloqueiam o grant. */
75
106
  identity_max_failures: 5,
76
107
  identity_failure_window_minutes: 15,
@@ -67,6 +67,37 @@ export const TELEMEDICINE_WINDOW_DEFAULTS = {
67
67
  launch_code_ttl_minutes: 5,
68
68
  /** Access da sessão pública do browser (`browser_session`), renovável de forma rotativa. */
69
69
  browser_session_ttl_minutes: 15,
70
+ /**
71
+ * TTL da sessão de browser enquanto a consulta está VIVA (2026-09-28).
72
+ *
73
+ * 15 min bastam antes de a consulta começar — é uma janela de preflight. Já
74
+ * uma consulta em andamento tem pausa, navegador que trava, notebook que
75
+ * dorme e aba fechada por engano, e com 15 min qualquer um desses obriga o
76
+ * médico a pedir um launch code NOVO no painel para voltar. 60 min cobre
77
+ * todos eles com folga.
78
+ *
79
+ * O risco de um cookie mais longevo é limitado pela própria consulta: toda
80
+ * rota da sala relê o estado clínico, e consulta terminal responde `410` — o
81
+ * cookie fica inerte no fim do encontro, não no fim do TTL. O teto de duração
82
+ * da plataforma é 1h30, então esta sessão não sobrevive a uma consulta.
83
+ */
84
+ browser_session_live_ttl_minutes: 60,
85
+ /**
86
+ * Graça para o `sid` ANTERIOR depois da rotação (2026-09-28).
87
+ *
88
+ * A sessão rotaciona trocando o cookie na resposta, então qualquer requisição
89
+ * em vôo no instante da troca carrega o cookie anterior — o `/session` é
90
+ * polado a cada 5 s, o que faz dessa corrida um evento recorrente em toda
91
+ * consulta longa, não uma raridade. Dentro desta janela, reusar o `sid`
92
+ * rotacionado NÃO é comprometimento: é aba que voltou, navegador que travou ou
93
+ * resposta de rotação que se perdeu no caminho.
94
+ *
95
+ * 10 min é o mesmo número de `reconnect_grace_minutes`, de propósito: é a
96
+ * janela em que o produto JÁ considera que a pessoa continua na mesma
97
+ * consulta. Um conceito, não dois. Passados os 10 min, reuso de cookie
98
+ * rotacionado deixa de parecer tropeço e volta a ser sinal de cópia.
99
+ */
100
+ browser_session_rotation_grace_minutes: 10,
70
101
  /** Verificação de identidade: N falhas na janela bloqueiam o grant. */
71
102
  identity_max_failures: 5,
72
103
  identity_failure_window_minutes: 15,
@@ -472,7 +503,31 @@ export interface ITeleconsultation extends IFireDoc {
472
503
  unused_expires_at: Date;
473
504
  reconnect_until?: Date | null;
474
505
  started_at?: Date | null;
506
+ /**
507
+ * feat-160 (2026-09-29) — instante em que o encerramento COMEÇOU (fase 1 do
508
+ * `endForAll` marcou `ending`). Na prática é o clique do médico, ou o instante
509
+ * em que o sweep decidiu encerrar.
510
+ *
511
+ * Existe por causa de um furo de FATURAMENTO: as fases 2 e 3 do `endForAll` são
512
+ * separadas por até três chamadas HTTP ao provedor, feitas fora de transação. Se
513
+ * o processo morrer ali, o doc fica em `ending` para sempre — sem `ended_at`, sem
514
+ * `usage_metering_due_at` (logo **nunca cobrado**), sem carimbo de retenção e
515
+ * sem `provider_teardown_pending` (logo invisível para a varredura de meeting
516
+ * órfão). `ending` não está em nenhuma das listas de status do sweep.
517
+ *
518
+ * Com este campo a passada de reparo sabe (a) há quanto tempo o doc está parado
519
+ * e (b) que instante usar como `ended_at` — o fim real é desconhecido, e este é
520
+ * o limite inferior defensável.
521
+ */
522
+ ending_at?: Date | null;
475
523
  ended_at?: Date | null;
524
+ /**
525
+ * feat-160 (2026-09-29) — `true` quando o `ended_at` foi DERIVADO por reparo, e
526
+ * não medido. Quem lê a duração da consulta precisa saber disso: o fim real
527
+ * ficou entre o `ending_at` e o instante do reparo, e o que está gravado é o
528
+ * começo dessa janela.
529
+ */
530
+ ended_at_derived?: boolean;
476
531
  ended_by?: ITeleconsultationEndedBy | null;
477
532
  provider: TeleconsultationProvider;
478
533
  /** Id opaco do meeting no provider — nunca vai em external link nem no SPA. */
@@ -1321,6 +1376,25 @@ export interface ITeleconsultationBadgeDto {
1321
1376
  recording_audio: boolean;
1322
1377
  recording_video: boolean;
1323
1378
  transcript: boolean;
1379
+ /**
1380
+ * Início REAL, ISO 8601 UTC, ou `null`. Desde 2026-09-29 "início" é o
1381
+ * **ENCONTRO** — médico E paciente conectados —, não o clique do médico:
1382
+ * abrir a sala e entrar sozinho pode ser curiosidade, e carimbar ali armava
1383
+ * um prazo de 90 min que encerrava a consulta e revogava o link do paciente.
1384
+ *
1385
+ * `null` é RESPOSTA, não dado faltando: significa que o encontro não houve.
1386
+ */
1387
+ started_at: string | null;
1388
+ /**
1389
+ * Fim REAL, ISO 8601 UTC, ou `null`.
1390
+ *
1391
+ * A assimetria normal é `ended_at` preenchido com `started_at` nulo — o
1392
+ * paciente não apareceu e o médico encerrou, ou a consulta expirou. Nesses
1393
+ * casos a duração é INEXISTENTE, não zero, e a tela não deve escrever
1394
+ * "0 min". O inverso não acontece: consulta que teve encontro não chega a
1395
+ * `expired` nem a `cancelled`.
1396
+ */
1397
+ ended_at: string | null;
1324
1398
  }
1325
1399
 
1326
1400
  /** `GET /v1/appointments/teleconsultation-badges?ids=a,b,c` (máx. 50 ids). */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.628",
3
+ "version": "1.3.634",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",