evo360-types 1.3.574 → 1.3.578
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-crm/lead/zod-schemas.d.ts +9 -0
- package/dist/apps/evo-med/calendar/zod-schemas.d.ts +535 -0
- package/dist/apps/evo-med/calendar/zod-schemas.js +52 -1
- package/dist/apps/evo-med/calendar/zod-schemas.ts +55 -0
- package/dist/apps/evo-med/insurance/zod-schemas.d.ts +9 -0
- package/dist/apps/evo-med/people/zod-schemas.d.ts +18 -0
- package/dist/apps/evo-telemedicine/zod-schemas.d.ts +135 -13
- package/dist/apps/evo-telemedicine/zod-schemas.js +70 -2
- package/dist/apps/evo-telemedicine/zod-schemas.ts +71 -0
- package/dist/apps/shared/zod-schemas.d.ts +3 -0
- package/dist/apps/shared/zod-schemas.js +2 -0
- package/dist/apps/shared/zod-schemas.ts +2 -0
- package/dist/types/evo-finops/common/contract.d.ts +8 -0
- package/dist/types/evo-finops/common/contract.js +7 -0
- package/dist/types/evo-finops/common/contract.ts +7 -0
- package/dist/types/evo-med/calendar/index.d.ts +98 -0
- package/dist/types/evo-med/calendar/index.js +60 -1
- package/dist/types/evo-med/calendar/index.ts +140 -0
- package/dist/types/evo-reports/index.d.ts +27 -0
- package/dist/types/evo-reports/index.ts +28 -0
- package/dist/types/evo-telemedicine/index.d.ts +253 -6
- package/dist/types/evo-telemedicine/index.js +27 -1
- package/dist/types/evo-telemedicine/index.ts +259 -6
- package/dist/types/shared/index.d.ts +1 -0
- package/dist/types/shared/index.ts +2 -0
- package/package.json +1 -1
|
@@ -171,6 +171,18 @@ export declare const AccessGrantKindEnum: {
|
|
|
171
171
|
readonly LaunchCode: "launch_code";
|
|
172
172
|
/** Sessão do browser (cookie `__session`), 15 min, rotativa. */
|
|
173
173
|
readonly BrowserSession: "browser_session";
|
|
174
|
+
/**
|
|
175
|
+
* feat-160 F7 — `kind` de uma ENTRADA A MAIS no `grant-index`, apontando
|
|
176
|
+
* para o MESMO grant `qr_capability`, para o link do calendário (ICS)
|
|
177
|
+
* resolver o caminho da teleconsulta (T56/P1).
|
|
178
|
+
*
|
|
179
|
+
* ⚠️ NENHUM grant tem este kind: `ITeleconsultationAccessGrant.kind` nunca
|
|
180
|
+
* vale `ics_capability`. O poder de entrar continua amarrado ao
|
|
181
|
+
* `secret_hash` do grant, que é o HMAC do `cap` e não do `ics_cap`. Está no
|
|
182
|
+
* mesmo enum porque é o `kind` do índice e o índice é endereçado pelo mesmo
|
|
183
|
+
* espaço de nomes — não para virar um grant.
|
|
184
|
+
*/
|
|
185
|
+
readonly IcsCapability: "ics_capability";
|
|
174
186
|
};
|
|
175
187
|
export type AccessGrantKind = (typeof AccessGrantKindEnum)[keyof typeof AccessGrantKindEnum];
|
|
176
188
|
export declare const AccessGrantStateEnum: {
|
|
@@ -218,6 +230,12 @@ export declare const TeleconsultationEventTypeEnum: {
|
|
|
218
230
|
/** Alteração tardia na agenda com consulta já iniciada — tratamento operacional, não apaga o encontro. */
|
|
219
231
|
readonly TeleconsultationDiverged: "teleconsultation.diverged";
|
|
220
232
|
readonly AccessCreated: "access.created";
|
|
233
|
+
/**
|
|
234
|
+
* feat-160 F13/D31 — alguém REVELOU/copiou o link do paciente no painel. Um
|
|
235
|
+
* evento por revelação (é o ato do usuário que fica registrado, não a
|
|
236
|
+
* abertura da tela). Distinto de `access.created`, que é a emissão do grant.
|
|
237
|
+
*/
|
|
238
|
+
readonly AccessLinkRevealed: "access.link_revealed";
|
|
221
239
|
readonly AccessRevoked: "access.revoked";
|
|
222
240
|
readonly AccessExchanged: "access.exchanged";
|
|
223
241
|
readonly AccessVerificationFailed: "access.verification_failed";
|
|
@@ -325,7 +343,33 @@ export interface ITeleconsultation extends IFireDoc {
|
|
|
325
343
|
provider_meeting_id?: string;
|
|
326
344
|
active_provider_session_id?: string;
|
|
327
345
|
recording_status: RecordingStatus;
|
|
346
|
+
/**
|
|
347
|
+
* Gravação — campos de OPERAÇÃO escritos por F8 e lidos pelo `GET /session`
|
|
348
|
+
* (feat-160). Nenhum id do provedor entra aqui: o id da gravação no
|
|
349
|
+
* provedor vive em `private/provider.active_provider_recording_id` (T52).
|
|
350
|
+
*/
|
|
351
|
+
recording_request_id?: string;
|
|
352
|
+
/** Versão do texto legal `recording` referenciada na solicitação (D21). */
|
|
353
|
+
recording_terms_version?: string;
|
|
354
|
+
recording_requested_at?: Date | null;
|
|
355
|
+
/** `userId` do médico que solicitou. */
|
|
356
|
+
recording_requested_by?: string;
|
|
357
|
+
recording_started_at?: Date | null;
|
|
358
|
+
recording_stopped_at?: Date | null;
|
|
359
|
+
/** Código estável, sem PII, quando `recording_status === 'failed'`. */
|
|
360
|
+
recording_failure_code?: string | null;
|
|
361
|
+
/** Segmento corrente (1..n) — mais de uma sessão física = vários segmentos. */
|
|
362
|
+
recording_segment?: number;
|
|
328
363
|
transcription_status: TranscriptionStatus;
|
|
364
|
+
/**
|
|
365
|
+
* feat-160 F10 — desmonte do meeting no provedor ainda pendente; o sweep lê e
|
|
366
|
+
* limpa. Escrito FORA do comando transacional de propósito: não é estado
|
|
367
|
+
* clínico e um `version + 1` por housekeeping faria o `expected_version` que
|
|
368
|
+
* o painel acabou de ler virar 409.
|
|
369
|
+
*/
|
|
370
|
+
provider_teardown_pending?: boolean;
|
|
371
|
+
/** feat-160 F10 — até quando o metadado sensível sobrevive à retenção. */
|
|
372
|
+
metadata_retention_until?: Date | null;
|
|
329
373
|
entitlement_snapshot: ITeleconsultationEntitlementSnapshot;
|
|
330
374
|
/**
|
|
331
375
|
* Geração no `appointment-index`: incrementa quando o appointment volta a ser
|
|
@@ -337,11 +381,63 @@ export interface ITeleconsultation extends IFireDoc {
|
|
|
337
381
|
/** Última versão/data do appointment aplicada — descarta evento de reconciliação antigo. */
|
|
338
382
|
last_reconciled_appointment_version?: number | string | null;
|
|
339
383
|
last_reconciled_at?: Date | null;
|
|
384
|
+
/**
|
|
385
|
+
* feat-160 F18 — quando a passada de bilhetagem do sweep pode contar esta
|
|
386
|
+
* consulta. Carimbado por `endForAll` (`ended_at + 15 min`): o `ready` das
|
|
387
|
+
* gravações só chega pelo webhook DEPOIS do fim, então contar no `end`
|
|
388
|
+
* classificaria toda consulta gravada como "sem gravação".
|
|
389
|
+
*/
|
|
390
|
+
usage_metering_due_at?: Date | null;
|
|
391
|
+
/**
|
|
392
|
+
* Quando o evento de uso foi emitido. Presente = já contada; é o que torna a
|
|
393
|
+
* bilhetagem idempotente no doc (a dedup em BigQuery, por `target.entityId`,
|
|
394
|
+
* é a segunda camada) e a trilha para reconciliar contra o BigQuery — o
|
|
395
|
+
* publish é best-effort e pode se perder.
|
|
396
|
+
*/
|
|
397
|
+
usage_metered_at?: Date | null;
|
|
340
398
|
/** Concorrência otimista: todo comando de estado é transação + `version`. */
|
|
341
399
|
version: number;
|
|
342
400
|
created_at: Date;
|
|
343
401
|
updated_at: Date;
|
|
344
402
|
}
|
|
403
|
+
/**
|
|
404
|
+
* `.../teleconsultations/{teleconsultationId}/private/provider` (data-model §7;
|
|
405
|
+
* threat model P1/T52).
|
|
406
|
+
*
|
|
407
|
+
* Tudo o que identifica o encontro NO PROVEDOR mora aqui, e só aqui: o subdoc
|
|
408
|
+
* `private/**` é negado a todo mundo nas rules, inclusive super admin, enquanto
|
|
409
|
+
* `teleconsultations/{id}` e `participants/{id}` são legíveis pelo FE com
|
|
410
|
+
* `evo_telemedicine_read`. Um id de provedor na mão do browser é exatamente o
|
|
411
|
+
* que T52 proíbe — e `runTeleconsultationCommand` LANÇA se um patch do doc
|
|
412
|
+
* principal carregar `provider_meeting_id`/`active_provider_session_id`, para
|
|
413
|
+
* que o invariante não dependa de alguém lembrar em cada PR.
|
|
414
|
+
*/
|
|
415
|
+
export interface ITeleconsultationPrivateProvider {
|
|
416
|
+
readonly id: string;
|
|
417
|
+
tenant: string;
|
|
418
|
+
teleconsultation_id: string;
|
|
419
|
+
provider: TeleconsultationProvider;
|
|
420
|
+
/** Id do meeting no provider — nunca sai deste doc para o FE nem para o SPA. */
|
|
421
|
+
provider_meeting_id?: string;
|
|
422
|
+
active_provider_session_id?: string;
|
|
423
|
+
/** Sessões físicas já vistas (mais de uma = segmentos do mesmo encontro). */
|
|
424
|
+
provider_session_ids?: string[];
|
|
425
|
+
/** Id do participante no provider, por id LÓGICO (`doctor`/`patient`). */
|
|
426
|
+
provider_participant_ids?: Record<string, string>;
|
|
427
|
+
/**
|
|
428
|
+
* Gravação ativa no provedor. O artefato guarda o mesmo valor em
|
|
429
|
+
* `provider_artifact_id` (é por ele que o webhook casa), mas o `stop` precisa
|
|
430
|
+
* do id sem depender de qual segmento é o corrente.
|
|
431
|
+
*/
|
|
432
|
+
active_provider_recording_id?: string | null;
|
|
433
|
+
created_at?: Date | null;
|
|
434
|
+
updated_at?: Date | null;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Campos que o doc PRINCIPAL da teleconsulta jamais carrega — a asserção do
|
|
438
|
+
* `runTeleconsultationCommand` e do teste de sanidade itera esta lista.
|
|
439
|
+
*/
|
|
440
|
+
export declare const TELECONSULTATION_PROVIDER_ONLY_FIELDS: readonly ["provider_meeting_id", "active_provider_session_id"];
|
|
345
441
|
/** `.../participants/{participantId}` (data-model §2). Id lógico estável; reconexão reutiliza o mesmo participante. */
|
|
346
442
|
export interface ITeleconsultationParticipant extends IFireDoc {
|
|
347
443
|
teleconsultation_id: string;
|
|
@@ -404,6 +500,11 @@ export interface ITeleconsultationArtifact extends IFireDoc {
|
|
|
404
500
|
ended_at?: Date | null;
|
|
405
501
|
/** Retenção: o sweep deleta o objeto e só então marca `deleted` (auditoria preservada). */
|
|
406
502
|
expires_at?: Date | null;
|
|
503
|
+
/**
|
|
504
|
+
* feat-160 F10 — quando o CONTEÚDO foi apagado. O doc sobrevive (status
|
|
505
|
+
* `deleted`) porque a auditoria da deleção é preservada (D13).
|
|
506
|
+
*/
|
|
507
|
+
deleted_at?: Date | null;
|
|
407
508
|
error_code?: string;
|
|
408
509
|
created_at: Date;
|
|
409
510
|
updated_at: Date;
|
|
@@ -491,6 +592,21 @@ export interface ITelemedicineAppointmentIndex extends IFireDoc {
|
|
|
491
592
|
active_teleconsultation_id: string | null;
|
|
492
593
|
generation: number;
|
|
493
594
|
last_reconciled_appointment_version?: number | string | null;
|
|
595
|
+
/**
|
|
596
|
+
* feat-160 F3 — instante do write do appointment já aplicado. A marca d'água
|
|
597
|
+
* mora AQUI, e não só na teleconsulta, porque o índice sobrevive ao que ela
|
|
598
|
+
* precisa cobrir: um `denied` não cria doc nenhum e um terminal deixa de ser
|
|
599
|
+
* a teleconsulta ativa. Sem isto, um evento antigo redelivered depois de um
|
|
600
|
+
* `denied` seria reavaliado como novo.
|
|
601
|
+
*/
|
|
602
|
+
last_reconciled_at?: Date | null;
|
|
603
|
+
/**
|
|
604
|
+
* Última teleconsulta deste appointment, ativa ou não. Gravada quando o
|
|
605
|
+
* índice é liberado (terminal) para o painel continuar mostrando a
|
|
606
|
+
* teleconsulta expirada/encerrada em vez de "não tem teleconsulta". NÃO é
|
|
607
|
+
* fonte de verdade de ativo — isso é `active_teleconsultation_id`.
|
|
608
|
+
*/
|
|
609
|
+
last_teleconsultation_id?: string | null;
|
|
494
610
|
updated_at: Date;
|
|
495
611
|
}
|
|
496
612
|
/**
|
|
@@ -539,6 +655,12 @@ export interface ITelemedicineGrantIndex extends IFireGlobalDoc {
|
|
|
539
655
|
tenant: string;
|
|
540
656
|
teleconsultation_id: string;
|
|
541
657
|
grant_id: string;
|
|
658
|
+
/**
|
|
659
|
+
* Qual segredo esta entrada resolve. Ausente = a capability do `/qr`
|
|
660
|
+
* (comportamento original); `ics_capability` = o segredo derivado do link do
|
|
661
|
+
* calendário, que aponta para o MESMO grant `qr_capability` (F7).
|
|
662
|
+
*/
|
|
663
|
+
kind?: AccessGrantKind;
|
|
542
664
|
/** TTL nativo. */
|
|
543
665
|
expires_at: Date;
|
|
544
666
|
}
|
|
@@ -696,6 +818,23 @@ export interface IRoomConsentRefDto {
|
|
|
696
818
|
subject: ConsentSubject;
|
|
697
819
|
terms_version: string;
|
|
698
820
|
}
|
|
821
|
+
/**
|
|
822
|
+
* Projeção SANITIZADA do estado de gravação no `GET /session` (feat-160 F8).
|
|
823
|
+
* Nunca traz id do provider, path do objeto no GCS nem URL assinada — só o que
|
|
824
|
+
* a UI dos dois papéis precisa.
|
|
825
|
+
*/
|
|
826
|
+
export interface IRoomRecordingStateDto {
|
|
827
|
+
/** Mesma origem do `recording_status` do DTO da sessão. */
|
|
828
|
+
status: RecordingStatus;
|
|
829
|
+
/** Início do segmento ativo — única origem do cronômetro; `null` fora de gravação. */
|
|
830
|
+
started_at: string | null;
|
|
831
|
+
/** Idempotência do comando e vínculo do consentimento (T19). */
|
|
832
|
+
recording_request_id?: string;
|
|
833
|
+
/** Versão do texto legal `recording` referenciada na solicitação (D21). */
|
|
834
|
+
terms_version?: string;
|
|
835
|
+
/** Código estável, sem PII, quando `status === 'failed'`. */
|
|
836
|
+
failure_code?: string;
|
|
837
|
+
}
|
|
699
838
|
/**
|
|
700
839
|
* `GET /api/room/v1/session` — estado SANITIZADO: sem tenant id, sem ids do
|
|
701
840
|
* provider; nome do profissional/clínica só depois da verificação.
|
|
@@ -712,13 +851,50 @@ export interface IRoomSessionDto {
|
|
|
712
851
|
identity_level: IdentityLevel;
|
|
713
852
|
/** Paciente precisa passar por `POST /identity/verify` antes do join. */
|
|
714
853
|
identity_required: boolean;
|
|
854
|
+
/**
|
|
855
|
+
* Quais campos o formulário de identidade deve pedir (spec §8.3): a data de
|
|
856
|
+
* nascimento só é pedida quando EXISTE no cadastro. Para o médico vem sempre
|
|
857
|
+
* `{ birth_date: false }`.
|
|
858
|
+
*/
|
|
859
|
+
identity_required_fields: {
|
|
860
|
+
birth_date: boolean;
|
|
861
|
+
};
|
|
862
|
+
/**
|
|
863
|
+
* Contador do lockout, lido do GRANT raiz — e a ÚNICA fonte dele: o erro do
|
|
864
|
+
* `POST /identity/verify` é neutro e não devolve tentativas nem prazo. Por
|
|
865
|
+
* isso a UI relê a sessão depois de cada falha.
|
|
866
|
+
*/
|
|
867
|
+
identity_attempts: {
|
|
868
|
+
remaining: number;
|
|
869
|
+
blocked_until: string | null;
|
|
870
|
+
};
|
|
715
871
|
recording_status: RecordingStatus;
|
|
872
|
+
recording: IRoomRecordingStateDto;
|
|
716
873
|
transcription_status: TranscriptionStatus;
|
|
717
874
|
/** Textos vigentes que ainda precisam de aceite antes do join. */
|
|
718
875
|
required_consents: IRoomConsentRefDto[];
|
|
719
876
|
accepted_consents: IRoomConsentRefDto[];
|
|
720
877
|
/** Capabilities efetivas para esta sessão (entitlement AND rollout AND papel). */
|
|
721
878
|
capabilities: Record<string, boolean>;
|
|
879
|
+
/** Presença do médico; `null` quando não há participante. Atalho de `participants`. */
|
|
880
|
+
doctor_presence: ParticipantState | null;
|
|
881
|
+
/** Presença do paciente. Atalho de `participants`. */
|
|
882
|
+
patient_presence: ParticipantState | null;
|
|
883
|
+
/** Os dois papéis, com `state`/`disconnected_at`/`reconnect_count`. */
|
|
884
|
+
participants: ITeleconsultationParticipantDto[];
|
|
885
|
+
/**
|
|
886
|
+
* Pacientes em `state === 'waiting'`, e a ponte OBRIGATÓRIA do `POST /admit`:
|
|
887
|
+
* o `participant_id` de domínio é o literal `'patient'`, enquanto o
|
|
888
|
+
* `custom_participant_id` devolvido no `POST /join` é hash opaco que nunca
|
|
889
|
+
* casaria com ele.
|
|
890
|
+
*/
|
|
891
|
+
waiting_participants: ITeleconsultationParticipantDto[];
|
|
892
|
+
/**
|
|
893
|
+
* Máscara "Maria A. d. S." do titular do agendamento. SÓ na sessão do
|
|
894
|
+
* MÉDICO — o backend nunca a manda ao paciente (T01), e é por isso que é o
|
|
895
|
+
* único destes campos legitimamente opcional.
|
|
896
|
+
*/
|
|
897
|
+
patient_display_masked?: string;
|
|
722
898
|
professional_display_name?: string;
|
|
723
899
|
clinic_display_name?: string;
|
|
724
900
|
/** Expiração do access da sessão (15 min, rotativo via `/session/refresh`). */
|
|
@@ -792,6 +968,13 @@ export interface ITelemedicineLegalTextDto {
|
|
|
792
968
|
content_html: string;
|
|
793
969
|
content_hash: string;
|
|
794
970
|
effective_at?: string | null;
|
|
971
|
+
/**
|
|
972
|
+
* VALORES dos placeholders já resolvidos e filtrados pela allowlist do
|
|
973
|
+
* próprio doc (`ITelemedicineLegalText.placeholders`, que guarda os NOMES
|
|
974
|
+
* permitidos). ux-flows §3 exige "usada para {finalidade} e ficará
|
|
975
|
+
* disponível por {prazo}", e D21 proíbe hardcode disso no bundle.
|
|
976
|
+
*/
|
|
977
|
+
placeholders?: Record<string, string>;
|
|
795
978
|
}
|
|
796
979
|
/** `GET /api/room/v1/legal-texts`. */
|
|
797
980
|
export interface ILegalTextsResponseDto {
|
|
@@ -803,17 +986,61 @@ export interface IIdentityVerifyResponseDto {
|
|
|
803
986
|
ok: true;
|
|
804
987
|
identity_level: IdentityLevel;
|
|
805
988
|
}
|
|
806
|
-
/**
|
|
989
|
+
/**
|
|
990
|
+
* `POST /api/room/v1/exchange` e `POST /api/room/v1/session/refresh`.
|
|
991
|
+
*
|
|
992
|
+
* O corpo NÃO repete o `sid` (está no cookie `__session`, `HttpOnly`,
|
|
993
|
+
* `Path=/api`) nem o tenant; traz o papel, que é o que permite ao SPA escolher
|
|
994
|
+
* a tela sem um `GET /session` extra.
|
|
995
|
+
*/
|
|
996
|
+
export interface IExchangeResponseDto {
|
|
997
|
+
ok: true;
|
|
998
|
+
role: ParticipantRole;
|
|
999
|
+
session_expires_at: string;
|
|
1000
|
+
}
|
|
1001
|
+
/** `POST /api/room/v1/participant-token/refresh` — token novo, MESMO participante lógico. */
|
|
1002
|
+
export interface IParticipantTokenRefreshDto {
|
|
1003
|
+
ok: true;
|
|
1004
|
+
provider_token: string;
|
|
1005
|
+
/** Nome do preset no provider (`hm_doctor`, `hm_patient_waiting`, ...). */
|
|
1006
|
+
preset: string;
|
|
1007
|
+
token_expires_at?: string;
|
|
1008
|
+
}
|
|
1009
|
+
/**
|
|
1010
|
+
* `POST /v1/teleconsultations/:id/access/send` (feat-160 F7).
|
|
1011
|
+
*
|
|
1012
|
+
* É RECIBO DE TASK, não confirmação de envio: a rota publica a mesma task fina
|
|
1013
|
+
* que a rotina publicaria (`telemedicine_join_reminder`) e responde antes de
|
|
1014
|
+
* existir grant — o executor é quem resolve template, canal e elegibilidade e
|
|
1015
|
+
* emite a capability, uma por perna do fan-out. Por isso NÃO há `grant_id` nem
|
|
1016
|
+
* `expires_at` aqui: forjá-los era mentir para a recepção sobre um acesso que
|
|
1017
|
+
* ainda não existia.
|
|
1018
|
+
*/
|
|
807
1019
|
export interface IAccessSendResponseDto {
|
|
808
1020
|
ok: true;
|
|
809
|
-
|
|
1021
|
+
task_id: string;
|
|
1022
|
+
/** `true` quando a chave de idempotência colapsou num envio já pedido. */
|
|
1023
|
+
reused: boolean;
|
|
810
1024
|
channel_kind: AccessSendChannelKind;
|
|
1025
|
+
/** Eco do pedido: revogar a capability anterior antes de emitir a nova. */
|
|
1026
|
+
resend: boolean;
|
|
1027
|
+
/** Destinatário mascarado do canal pedido; ausente em `manual`. */
|
|
811
1028
|
recipient_masked?: string;
|
|
1029
|
+
}
|
|
1030
|
+
/**
|
|
1031
|
+
* `POST /v1/teleconsultations/:id/access/link` (feat-160 F13; D31).
|
|
1032
|
+
*
|
|
1033
|
+
* **A `url` é CREDENCIAL** (capability de 128 bits do `/qr`), não um
|
|
1034
|
+
* identificador: não tem lugar em store, log, analytics nem storage do
|
|
1035
|
+
* navegador (T01/T04). Nasce nesta resposta, vai para a área de transferência e
|
|
1036
|
+
* morre com o diálogo. Cada revelação é uma chamada nova, de propósito — o que
|
|
1037
|
+
* fica registrado em `access.link_revealed` é o ato do usuário.
|
|
1038
|
+
*/
|
|
1039
|
+
export interface IAccessLinkResultDto {
|
|
1040
|
+
ok: true;
|
|
1041
|
+
url: string;
|
|
1042
|
+
grant_id: string;
|
|
812
1043
|
expires_at: string;
|
|
813
|
-
/** Só para `channel_kind = manual` (smoke): URL mascarada, nunca a capability inteira. */
|
|
814
|
-
url_masked?: string;
|
|
815
|
-
/** Id da task `telemedicine_join.send` criada, quando houver canal. */
|
|
816
|
-
task_id?: string;
|
|
817
1044
|
}
|
|
818
1045
|
export interface IWaitingPolicyCommand {
|
|
819
1046
|
waiting_policy: WaitingPolicy;
|
|
@@ -853,6 +1080,26 @@ export interface IConsentCommand {
|
|
|
853
1080
|
terms_version: string;
|
|
854
1081
|
decision: Extract<ConsentDecision, "accepted" | "declined">;
|
|
855
1082
|
}
|
|
1083
|
+
/**
|
|
1084
|
+
* `POST /api/room/v1/join` — intenção de mídia do preflight ("Entrar somente
|
|
1085
|
+
* com áudio"). Os dois campos são opcionais porque o backend só os REGISTRA
|
|
1086
|
+
* (escolha de preset e `audio_only_allowed`) e ignora o que não vier.
|
|
1087
|
+
*/
|
|
1088
|
+
export interface IJoinCommand {
|
|
1089
|
+
audio?: boolean;
|
|
1090
|
+
video?: boolean;
|
|
1091
|
+
}
|
|
1092
|
+
/**
|
|
1093
|
+
* `POST /api/room/v1/leave` — saída TEMPORÁRIA (D10); nunca encerra a consulta.
|
|
1094
|
+
*
|
|
1095
|
+
* `reason` é string aberta e o backend só distingue UM valor: `'temporary'` é
|
|
1096
|
+
* saída explícita (`left`), qualquer outro é tratado como queda de rede
|
|
1097
|
+
* (`disconnected`). Ausente = `'temporary'`. Chega pelo `pagehide` com
|
|
1098
|
+
* `fetch(keepalive)`, então pode vir sem `Content-Type`.
|
|
1099
|
+
*/
|
|
1100
|
+
export interface ILeaveCommand {
|
|
1101
|
+
reason?: string;
|
|
1102
|
+
}
|
|
856
1103
|
/** `POST /api/room/v1/presence`. */
|
|
857
1104
|
export interface IPresenceCommand {
|
|
858
1105
|
state: PresenceState;
|
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.TelemedicineErrorCode = exports.EntitlementAuditActionEnum = exports.TranscriptionProviderEnum = exports.LegalTextStatusEnum = exports.WebhookEventStatusEnum = exports.TeleconsultationEventTypeEnum = exports.TeleconsultationEventSourceEnum = exports.TeleconsultationEventActorTypeEnum = exports.EndedByTypeEnum = exports.AccessSendChannelKindEnum = exports.AccessGrantStateEnum = exports.AccessGrantKindEnum = exports.ArtifactStatusEnum = exports.ArtifactTypeEnum = exports.ConsentActorTypeEnum = exports.ConsentDecisionEnum = exports.ConsentSubjectEnum = exports.TranscriptionStatusEnum = exports.RecordingStatusEnum = exports.IdentityLevelEnum = exports.PresenceStateEnum = exports.ParticipantStateEnum = exports.ParticipantRoleEnum = exports.TeleconsultationProviderEnum = exports.TeleconsultationModeEnum = exports.WaitingPolicyEnum = exports.TELECONSULTATION_TERMINAL_STATUSES = exports.TeleconsultationStatusEnum = exports.TELEMEDICINE_WINDOW_DEFAULTS = exports.TELEMEDICINE_JOIN_REMINDER_HANDLER = exports.TELEMEDICINE_JOIN_ACTION_TYPE = exports.EvoTelemedicinePermissions = void 0;
|
|
17
|
+
exports.TelemedicineErrorCode = exports.EntitlementAuditActionEnum = exports.TELECONSULTATION_PROVIDER_ONLY_FIELDS = exports.TranscriptionProviderEnum = exports.LegalTextStatusEnum = exports.WebhookEventStatusEnum = exports.TeleconsultationEventTypeEnum = exports.TeleconsultationEventSourceEnum = exports.TeleconsultationEventActorTypeEnum = exports.EndedByTypeEnum = exports.AccessSendChannelKindEnum = exports.AccessGrantStateEnum = exports.AccessGrantKindEnum = exports.ArtifactStatusEnum = exports.ArtifactTypeEnum = exports.ConsentActorTypeEnum = exports.ConsentDecisionEnum = exports.ConsentSubjectEnum = exports.TranscriptionStatusEnum = exports.RecordingStatusEnum = exports.IdentityLevelEnum = exports.PresenceStateEnum = exports.ParticipantStateEnum = exports.ParticipantRoleEnum = exports.TeleconsultationProviderEnum = exports.TeleconsultationModeEnum = exports.WaitingPolicyEnum = exports.TELECONSULTATION_TERMINAL_STATUSES = exports.TeleconsultationStatusEnum = exports.TELEMEDICINE_WINDOW_DEFAULTS = exports.TELEMEDICINE_JOIN_REMINDER_HANDLER = exports.TELEMEDICINE_JOIN_ACTION_TYPE = exports.EvoTelemedicinePermissions = void 0;
|
|
18
18
|
__exportStar(require("./fb_collections"), exports);
|
|
19
19
|
// ======================================================
|
|
20
20
|
// evo-telemedicine (feat-160 — Telemedicina integrada)
|
|
@@ -195,6 +195,18 @@ exports.AccessGrantKindEnum = {
|
|
|
195
195
|
LaunchCode: "launch_code",
|
|
196
196
|
/** Sessão do browser (cookie `__session`), 15 min, rotativa. */
|
|
197
197
|
BrowserSession: "browser_session",
|
|
198
|
+
/**
|
|
199
|
+
* feat-160 F7 — `kind` de uma ENTRADA A MAIS no `grant-index`, apontando
|
|
200
|
+
* para o MESMO grant `qr_capability`, para o link do calendário (ICS)
|
|
201
|
+
* resolver o caminho da teleconsulta (T56/P1).
|
|
202
|
+
*
|
|
203
|
+
* ⚠️ NENHUM grant tem este kind: `ITeleconsultationAccessGrant.kind` nunca
|
|
204
|
+
* vale `ics_capability`. O poder de entrar continua amarrado ao
|
|
205
|
+
* `secret_hash` do grant, que é o HMAC do `cap` e não do `ics_cap`. Está no
|
|
206
|
+
* mesmo enum porque é o `kind` do índice e o índice é endereçado pelo mesmo
|
|
207
|
+
* espaço de nomes — não para virar um grant.
|
|
208
|
+
*/
|
|
209
|
+
IcsCapability: "ics_capability",
|
|
198
210
|
};
|
|
199
211
|
exports.AccessGrantStateEnum = {
|
|
200
212
|
Active: "active",
|
|
@@ -236,6 +248,12 @@ exports.TeleconsultationEventTypeEnum = {
|
|
|
236
248
|
/** Alteração tardia na agenda com consulta já iniciada — tratamento operacional, não apaga o encontro. */
|
|
237
249
|
TeleconsultationDiverged: "teleconsultation.diverged",
|
|
238
250
|
AccessCreated: "access.created",
|
|
251
|
+
/**
|
|
252
|
+
* feat-160 F13/D31 — alguém REVELOU/copiou o link do paciente no painel. Um
|
|
253
|
+
* evento por revelação (é o ato do usuário que fica registrado, não a
|
|
254
|
+
* abertura da tela). Distinto de `access.created`, que é a emissão do grant.
|
|
255
|
+
*/
|
|
256
|
+
AccessLinkRevealed: "access.link_revealed",
|
|
239
257
|
AccessRevoked: "access.revoked",
|
|
240
258
|
AccessExchanged: "access.exchanged",
|
|
241
259
|
AccessVerificationFailed: "access.verification_failed",
|
|
@@ -294,6 +312,14 @@ exports.TranscriptionProviderEnum = {
|
|
|
294
312
|
None: "none",
|
|
295
313
|
RealtimeKit: "realtimekit",
|
|
296
314
|
};
|
|
315
|
+
/**
|
|
316
|
+
* Campos que o doc PRINCIPAL da teleconsulta jamais carrega — a asserção do
|
|
317
|
+
* `runTeleconsultationCommand` e do teste de sanidade itera esta lista.
|
|
318
|
+
*/
|
|
319
|
+
exports.TELECONSULTATION_PROVIDER_ONLY_FIELDS = [
|
|
320
|
+
"provider_meeting_id",
|
|
321
|
+
"active_provider_session_id",
|
|
322
|
+
];
|
|
297
323
|
// ======================================================
|
|
298
324
|
// Auditoria de entitlement (`.../entitlement-audit/{id}`, data-model §8)
|
|
299
325
|
// ======================================================
|