Atualizações do Produto

Notas de Lançamento — 26 de abril de 2026

Bartłomiej Głowacki · CAIO, responsável de AI e I&D
Notas de Lançamento — 26 de abril de 2026

Há 19 dias lançámos uma grande atualização com o módulo de diagnóstico e a análise de prosódia. Desde então, a equipa avançou com mais 295 alterações — e não são pequenas. Neste lançamento pode gravar uma sessão ad-hoc antes mesmo de o paciente chegar, as suas notas fundem-se com o trabalho da IA e a transcrição lado a lado em três colunas, o perfil público do terapeuta está de volta em pleno vigor, e a aplicação móvel tem agora um tema escuro. Nos bastidores, passámos por um reforço de segurança SOC 2 / HIPAA, uma auditoria DDD e uma pseudonimização completa dos dados dos pacientes do lado da IA.

💚 Obrigado à equipa que impulsionou este lançamento — através de relatórios, testes, código e paciência:

  • Bohdan — sessões ad-hoc, limites de pacote e período de tolerância, auditoria DDD, faturas KSeF, dezenas de correções (SCRUM-756, 815, 1267, 1268, 1276, 1280-1290, 1293, 1309-1316, 1353-1357, 1366, 1388, 1391, 1392)
  • Bartek — fusão a três vias, 9 análises de TCC separadas, distorções cognitivas, contador de sessões do pacote (SCRUM-1266, 1320, 1338, 1368-1375, 1385, 1386)
  • Ewa Cylwik / Ewa — PDF de Beck, segunda sessão AITS para o mesmo paciente, tema escuro móvel e estado vazio, envio de e-mails multilingue, cores da interface, unicidade do e-mail do paciente (SCRUM-883, 898, 902, 1089, 1094, 1297, 1304, 1307, 1319)
  • Joanna — calendário recorrente, ocultação do Zoom, cancelamento dentro do prazo, autorreflexão em vez de avaliação da qualidade da sessão (SCRUM-789, 874, 918, 919, 1005)
  • Além do Bartlomiej, pelas distorções cognitivas e pelo contador de sessões, que se tornou a base do novo modelo de subscrição

1. ⚡ Sessões ad-hoc — gravar antes de o paciente chegar

Se alguma vez teve de ligar rapidamente um gravador — porque um paciente apareceu sem aviso, porque é uma consulta única, porque é um encontro com alguém que ainda não está nos seus registos — o novo módulo de sessão ad-hoc resolve por completo essa dor de cabeça.

  • Botão de Gravação Rápida no painel web, na PWA do telemóvel e na aplicação MAUI — um clique inicia a gravação antes mesmo de preencher os dados do paciente
  • Caixa de Entrada AdHoc — uma bandeja dedicada para gravações não atribuídas até decidir para onde vão
  • AssignPatientModal — atribua a gravação a um paciente existente ou crie um novo diretamente a partir da caixa de entrada
  • Retomar / Reentrar na sala — termine de gravar uma sessão que começou anteriormente
  • Retenção de órfãs + conclusão automática — as sessões não atribuídas durante X dias fecham-se automaticamente para manter a caixa de entrada organizada
  • Vídeo “Iniciar sem paciente” — na sala LiveKit pode iniciar uma sessão sem colidir com um paciente existente; a AdHoc cai depois na caixa de entrada

A secção está bloqueada atrás do código PromptyAI em Definições — desativada por predefinição, para utilizadores que queiram ver primeiro o resto. Concebida e implementada pelo Bohdan.

2. 📊 Limites de pacote e período de tolerância — subscrição transparente

As subscrições foram totalmente revistas. Os antigos planos Starter/Standard estão desativados, substituídos por Start / Practice / Pro — dimensionados para o volume real de sessões por mês.

  • Contador de sessões no painel — veja quantas sessões já usou este mês e quantas restam no seu pacote
  • E-mails de limite — notificações automáticas aos 80% e 100% de utilização
  • Sugestão de upgrade — quando atinge o limite, recebe uma sugestão suave de mudança de plano em vez de um bloqueio total
  • Preços do Stripe + descontos — o preço que vê na aplicação vem diretamente do Stripe com os descontos ativos aplicados (o código de beta tester não expira)
  • Cancelamento nativo de subscrição — cancele diretamente na aplicação, sem necessidade de enviar um e-mail ao suporte
  • Período de tolerância de 14 dias — se um pagamento falhar, tem 14 dias de acesso apenas à sua própria conta (sem pré-visualizações de pacientes), com e-mails em T+0 e T+13. A perda real de dados só ocorre após duas semanas
  • Faixa de subscrição — mensagem clara no topo da aplicação, sem barra vazia entre o menu e o alerta
  • Simulador de limite de sessões — no painel PromptyAI existe um modo de teste onde pode ver como a aplicação se comporta com um pacote esgotado

Trabalho conjunto do Bartlomiej (contador e limites, SCRUM-1266) e do Bohdan (subscrição, tolerância, sugestão de upgrade — SCRUM-756, SCRUM-1366, SCRUM-1391, SCRUM-1392).

3. 📝 Fusão a três vias para as notas — terapeuta, IA e transcrição numa só vista

Esta é uma das maiores alterações arquiteturais nos bastidores, mas o efeito no trabalho diário é bem visível: cada campo de notas (Notas, Resumo da Sessão, secções de conceptualização) agora recorda separadamente o que o terapeuta escreveu, o que a IA gerou e o que veio do dictafone / transcrição.

  • Notas a três vias — a vista de notas mostra três fontes lado a lado: o seu texto, as sugestões da IA e a transcrição automática, e escolhe o que quer manter
  • Resumo da Sessão a duas vias + fusão JSON — no resumo da sessão funde o seu trabalho com a análise da IA num único documento coerente
  • Separador temporal — quando edita manualmente um campo da IA, o sistema deixa um rasto visível de quando e de quem é esse fragmento
  • Marcador [IA] desde a primeira geração — os seus campos não se misturam com os gerados
  • SourceBadge — pastilha colorida com ícone que mostra a origem de um fragmento, em vez de texto em MAIÚSCULAS
  • Substituição de secção pela IA em vez de acrescentar — quando pede a regeneração do resumo, a IA substitui a secção em vez de empilhar outra cópia por baixo

Concebida e implementada pelo Bartek (SCRUM-1320, SCRUM-1368-1375). Por baixo: i18n completo em 8 idiomas e novos contextos DDD.

4. 🔍 Análises de TCC — 9 relatórios separados a pedido

O antigo “gerar análise de TCC” monolítico foi dividido em 9 itens separados que o terapeuta executa quando realmente precisa deles. Menos espera, mais controlo.

  • 9 análises independentes — cada uma gerada separadamente, a pedido
  • Ícone de engrenagem para editar o prompt — clique na engrenagem junto de cada análise para ver/modificar o prompt que a IA vai usar
  • Secção ANÁLISES DE TCC atrás do código PromptyAI — secção disponível depois de introduzir o código em Definições, para utilizadores que testam funcionalidades novas

As distorções cognitivas ganharam a sua própria vista (reportado pelo Bartlomiej, SCRUM-1385):

  • Vista de dados em vez de um relatório de IA — vê citações concretas da transcrição marcadas pela IA, não uma narrativa gerada a partir delas
  • Todas as citações após expandir — sem filtro de intervalo de datas, expandir revela tudo
  • Disponível no menu principal — em Conceptualização v2

O antigo prompt COGNITIVE_DISTORTIONS_INVENTORY foi removido (SCRUM-1386).

5. 🌐 Perfil público do terapeuta — reformulação completa com painéis de edição

O perfil público sob a marca aitherapy.support foi totalmente reconstruído.

  • 3 novos painéis de edição — biografia, especializações, dados de contacto editados em elegantes painéis laterais
  • Modo de edição do proprietário — quando vê o seu próprio perfil enquanto autenticado, os botões de edição estão à mão
  • Anos de experiência — novo campo YearsOfExperience visível no perfil público
  • Rebranding de cores — paleta sálvia/lavanda sob a marca aitherapy.support
  • Secção “A sua privacidade” removida — era redundante; o RGPD está no rodapé
  • Ícones Lucide — tipografia de ícones moderna e limpa

Por baixo, foi adicionado um endpoint público GET /api/public/therapists — que devolve terapeutas com perfis públicos ativos. Base para um diretório de terapeutas.

6. 🎥 Sessões de vídeo — PiP, troca de câmaras, desfoque de fundo corrigido

O vídeo recebeu um conjunto de correções que qualquer terapeuta que faça sessões pela aplicação vai notar.

  • PiP / minimizar — minimize a sala de vídeo para um mini-leitor flutuante e verifique notas noutro separador sem quebrar a ligação. O microfone e a câmara continuam a funcionar
  • Trocar câmaras — troque quem está na vista principal e quem está na mini com um clique
  • Retomar do PiP — ao voltar da minimização, salta a sala de espera (PreJoinLobby) e entra diretamente na conversa
  • Áudio por participante para a diarização — a transcrição separa os falantes mesmo em PiP
  • Desfoque de fundo corrigido — o CSP estava a bloquear o WASM do MediaPipe; o desfoque funciona agora com um clique
  • Interface da sessão AITS mais limpa — o assistente de IA desapareceu da barra de ferramentas, menos ruído visual
  • Sobreposição PiP clicável — removendo pointerEvents:none e overflow:hidden, os botões do PiP respondem a cliques
  • Botão “Entrar na sessão” — estava escondido por uma substituição de CSS, agora está visível
  • Fecho obsoleto (stale closure) em handleMaximize — corrigido; maximizar o PiP já não gera um erro

7. 📐 Conceptualização Beck v2 e ABC — PDF, alternância de versão, edição do prompt

  • PDF Beck e ABC v2 — formatação corrigida e inclusão automática nos materiais da sessão (reportado pela Ewa, SCRUM-1297)
  • PDF Beck — secções apenas com contorno, especializações coloridas, iniciais limpas, seta SVG entre secções
  • Alternância ABC v1/v2 em Conceptualização v2 — escolha qual versão do ABC mostrar
  • Ícone de engrenagem para editar o prompt no ABC v2 — modifique o prompt da IA no separador ABC v2
  • Exportação em PDF das análises de IA e do ABC por sessão — análises individuais exportadas separadamente
  • Pluralização das etiquetas ABC em 8 idiomas — a tabela de conceptualização tem as formas plurais corretas
  • Correção das colunas vazias do ABC — o backend devolve os nomes de propriedade no plural correto

8. 🧾 Faturas e KSeF — seleção de pagamentos + máquina de estados

O sistema de faturação foi refatorado para conformidade com o KSeF (sistema nacional polaco de faturação eletrónica).

  • Fatura a partir de pagamentos selecionados — selecione pagamentos e o sistema cria uma única fatura a partir deles (snapshot + Payment FK)
  • Ponto de entrada “Emitir fatura” na vista financeira do terapeuta — acesso rápido a partir do painel
  • Remoção de item no modal de emissão de faturas — corrija erros na hora
  • Separação KSeF dev/prod — o sandbox e a produção trabalham com credenciais separadas
  • Máquina de estados da fatura (SCRUM-1357 Bohdan) — Rascunho → Emitida → Enviada → Cancelada, com uma restrição na base de dados sobre transições ilegais
  • AE KsefToken — token KSeF encriptado com Always Encrypted

Trabalho conjunto do Bohdan (SCRUM-1357, SCRUM-1388).

9. 📅 Calendário, sessões recorrentes e localizações

O calendário semanal e recorrente recebeu dezenas de melhorias pequenas mas visíveis — a maioria reportadas pela Joanna e pela Ewa.

  • Sessões a partir das 22:00 — eram invisíveis na grelha semanal, agora aparecem até ao final do dia
  • Todas as horas na grelha de vagas recorrentes (SCRUM-874, Joanna)
  • Sessão cancelada dentro do prazo — não aparece como “Não paga” (SCRUM-918, Joanna)
  • Etiqueta de recorrência junto à vaga recorrente (SCRUM-919, Joanna) — vê “semanal”, “quinzenal” junto a cada sessão repetida
  • Ocultação da integração com o Zoom da interface (SCRUM-789, Joanna) — o Zoom já não é suportado como canal de vídeo
  • Popover da sessão no calendário — já não fica escondido fora do ecrã
  • TherapistAvailability — guardar automático a cada alteração (debounce de 800 ms), sem necessidade de botão de guardar
  • AddSessionModal — opção “criar sessão fora do horário de disponibilidade” — as exceções podem forçar uma vaga
  • Estado “Faltou” (No-show) (NoShow=5) — novo estado, configurável mesmo a partir de sessões concluídas ou canceladas
  • RecurringSessionsCalendar — blocos de resumo acima da legenda e da grelha

As localizações do terapeuta ganharam canais de reunião online por localização:

  • Modo presencial — campos de morada e cidade para localizações presenciais
  • Comutador presencial/online em vez de uma caixa de verificação — escolha de modo mais clara
  • Canal online por localização — localizações diferentes podem ter canais diferentes (AITS, Google Meet, link externo), propagado automaticamente para as sessões
  • Salas de reunião permanentes por paciente — cada paciente tem um link de sala AITS permanente e um link externo separado visível nas definições do paciente
  • Eliminação de localização — corrigida (estava a desaparecer da base de dados mas a permanecer na lista da interface)

E, por fim, o tipo de reunião nas sessões recorrentes — corrigida a propagação de MeetingType e MeetingLink da configuração da série recorrente para cada sessão gerada e para os e-mails de lembrete (SCRUM-902, Ewa).

10. 📱 Aplicação móvel — tema escuro, Caixa de Entrada AdHoc, polimento

A aplicação móvel passou para a versão 1.5.0 (build 18) com uma série de alterações visíveis para o utilizador e alguns ajustes de assinatura para a App Store / Play Store.

  • Tema escuro — modo escuro completo com cabeçalhos de grupo legíveis (SCRUM-1089, Ewa + SCRUM-815)
  • Lembretes configuráveis — escolha quando quer receber uma notificação de sessão
  • Lembrete móvel de 15 min — lembrete 15 minutos antes da sessão + aviso quando as notificações do sistema estão desativadas (SCRUM-815, Bohdan)
  • Estado vazio para a lista de sessões — em vez de um ecrã em branco, um onboarding mais rico (SCRUM-1094, Ewa)
  • Faixa de atualização automática — quando a aplicação deteta uma atualização, mostra uma faixa convidativa para atualizar
  • Caixa de Entrada AdHoc + AssignPatient + início rápido no MAUI (SCRUM-1289, Bohdan)
  • Início rápido PWA móvel para sessões ad-hoc (SCRUM-1286, Bohdan)
  • Vista web responsiva para telemóvel — o desktop mantém-se inalterado, no telemóvel a disposição adapta-se ao ecrã estreito
  • Manipulador de deep-link no iOS — usa BindingContext, registo de esquema de URL
  • Strings de finalidade de localização iOS (NSLocation) — a corrigir o ITMS-90683 (a App Store rejeitava a compilação sem isto)
  • Android AAB — passo explícito de jarsigner
  • Materiais para o App Store Connect e o Google Play — pacote completo mais auditoria WCAG 2.2

11. 🔐 Segurança: SOC 2 / HIPAA, MFA, pseudonimização total pela IA

Nos bastidores, fizemos um reforço completo de segurança SOC 2 e HIPAA mais uma auditoria DDD com cinco entregas concretas.

  • Reverificação MFA para operações críticas — para ações sensíveis (mudança de palavra-passe, exportação de dados) reconfirma-se com MFA
  • Códigos de recurso para o MFA — códigos de emergência caso perca o telemóvel
  • IAnonymizedLlmGateway (SCRUM-1353, Bohdan) — todas as chamadas a modelos de IA passam agora por um gateway pseudonimizador. Nomes, datas e locais são substituídos por pseudónimos antes de saírem da aplicação; a IA recebe apenas a versão anonimizada
  • Pseudonimização das notificações por e-mail/SMS (SCRUM-1354) — os modelos de mensagem também não expõem dados do paciente ao serem enviados
  • Tokens OAuth Google/Zoom encriptados com Always Encrypted (SCRUM-1355) — os tokens de acesso das integrações são encriptados ao nível da coluna
  • Sinalizador Patient.PendingConsent (SCRUM-1356) — os pacientes sem consentimento ativo recebem um fluxo de exigência + emblema no frontend
  • Máquina de estados da fatura (SCRUM-1357) — os estados das faturas são imutáveis em direções inválidas, aplicado ao nível da base de dados
  • Imutabilidade da auditoria + instantâneo do utilizador em 3 tabelas de auditoria — o registo de ações não pode ser modificado a posteriori
  • DeanonymizationAuditLog — cada uso de dados do paciente após a desanonimização é registado juntamente com o instantâneo de e-mail + nome de apresentação do utilizador que o efetuou
  • Remoção de segredos codificados — todas as chaves e palavras-passe do appsettings.json foram movidas para o Azure Key Vault
  • Always Encrypted para todos os dados de texto do utilizador (ADR-0018) — direção arquitetural aprovada; mais tabelas migram no próximo lançamento
  • Análise de lacunas de conformidade ISO/IEC — 95 lacunas mapeadas em 9 normas, com um plano de remediação

Apoiado por uma auditoria DDD completa (Sessões 1-8, Fases 1-6) — reestruturação de contextos de domínio, documentação arquitetural, ADRs, mermaid + testes, manuais de procedimentos, integração com o Confluence.

12. 👤 Portal do paciente — análises em Objetivos, materiais, melhor pré-visualização

  • Conceptualização de Beck no separador “Objetivos” do paciente — quando publica a conceptualização, o paciente vê-a no seu portal
  • Publicação de análises no portal do paciente + preferências de notificação (SCRUM-1338, Bartlomiej) — controle o quê e quando o paciente recebe
  • Pré-visualização de PDF no portaliframe em vez de embed, o CSP permite blob: (os PDFs carregam)
  • Pré-visualização do portal do paciente a partir da vista do terapeuta — veja o que o paciente vê (moldura no invólucro, painel 1:1)
  • Materiais da sessão no Azure Blob Storage — SessionMaterial como blob, sem mais sistema de ficheiros local
  • Secção de consentimento / documentos + origem do registo nas definições do paciente
  • Unicidade global do e-mail do paciente (SCRUM-898) — um segundo paciente com o mesmo e-mail recebe um 409 e o modal fecha-se (SCRUM-898, Ewa)
  • Semeador de modelos de notificação para SK, CA, RU, UK, LT (SCRUM-883, Joanna) — envio de e-mails multilingue completo
  • Recurso predefinido da plataforma para o resolver — quando um terapeuta não substituiu o modelo, é enviado o modelo multilingue predefinido (SCRUM-883)

13. 🎙️ Transcrição — gravação fiável, acrescentar, tempo real com diarização

  • Acrescentar a uma transcrição existente — continue a gravar na mesma sessão; os segmentos são acrescentados (a intenção sobrevive a uma atualização da página)
  • Áudio por participante para a diarização — a transcrição de vídeo separa os falantes em faixas independentes
  • A transcrição sobrevive ao PiP — minimizar a sala não interrompe a gravação
  • Idioma da transcrição a partir das definições da sessão — o STT usa o idioma que definiu para o paciente
  • Atualização automática da transcrição ao ganhar foco / visibilitychange / regresso do vídeo
  • Confirmação ao parar a gravação < 2s — proteção contra um WAV vazio por um clique acidental
  • Distintivo “A enviar” na lista de sessões — vê quando uma gravação está em envio
  • Tempo real com diarização na sessão de vídeo — não estava a iniciar antes; agora funciona
  • Cópia de segurança OPFS + Opus a 48 kbps — a gravação também guarda localmente em OPFS como reserva, parâmetros de áudio unificados
  • Envio direto de áudio via SAS (SCRUM-1276, Bohdan) — o áudio vai diretamente para o Azure via URL SAS, contornando o backend
  • m4a nativo para o Azure Speech — m4a tratado nativamente, sem conversão
  • Deteção de formato por bytes mágicos (SCRUM-1311, Bohdan) — quando o Content-Type=application/octet-stream, o formato é detetado a partir do conteúdo do ficheiro
  • Hub sem texto na base de dados — o hub SignalR em tempo real já não persiste texto na base de dados; o finishPending usa um POST multipart como o MAUI
  • Correção do erro 1006 do SignalR — removido o skipNegotiation para que o Azure SignalR funcione + ajuste do keep-alive
  • Marcador [IA] desde a primeira geração + pesquisa fiável do marcador

14. 💬 Notificações, definições do paciente, pequenos ajustes de UX

  • NotificationTemplatesAdmin — alternância HTML/Texto no editor de e-mail
  • NotificationSettings — a pré-visualização do e-mail renderiza HTML com um recurso alternativo
  • PromptEditModal — reconstruído: separadores, seletor de modelo, nomes de versão obrigatórios
  • Reposição do sinalizador Hide_dev_ui ao terminar sessão — os sinalizadores de desenvolvimento não persistem entre sessões
  • Paciente de teste Ann Fauler — equivalente inglês 1:1 da polaca Anna Pełnialska para demonstrações apenas em inglês
  • Alternância do modo de apresentação na interface de desenvolvimento — mudança rápida para o modo de apresentação
  • Relatório de erros — anexos do Jira + etiqueta do autor do relatório + botão “Submeter” centrado
  • Ciclo de reautenticação corrigido — abortar pedidos e voltar ao ecrã de login em caso de 401
  • Faixa “O servidor está a iniciar” — no arranque a frio (escala a zero) mostramos um aviso em vez de uma página em branco
  • Escala de avaliação da sessão — autorreflexão em vez de avaliação de qualidade + aviso legal (SCRUM-1005, Joanna)
  • Cor do botão “Minimizar” alterada para violeta cobalto (SCRUM-1307, Ewa)
  • Cor da etiqueta “Transcrição” alterada de vermelho para verde (SCRUM-1304, Ewa)
  • “Gravar agora” → “Gravar sessão AdHoc” — nome de botão mais preciso
  • Sandbox com faixa verde no canto superior esquerdo + prefixo [SANDBOX] no título — para evitar confusão de ambientes, mais um clone repetível PROD → Sandbox (Azure IaC + scripts)

✅ Lista de verificação de QA — o que confirmar após o deploy

FuncionalidadeVerificar
Sessão ad-hoc — Gravação RápidaClique em Gravação Rápida no painel ou na PWA — a gravação começa imediatamente, a sessão cai na Caixa de Entrada AdHoc
AssignPatient na Caixa de Entrada AdHocAbra uma gravação ad-hoc — pode atribuí-la a um paciente existente ou criar um novo
Limite de pacoteO painel mostra o contador de sessões do mês atual e quantas restam no pacote
Período de tolerância após falha de pagamentoSimulador de subscrição no PromptyAI — force uma falha de pagamento, obtém acesso apenas à conta durante 14 dias
Fusão a três vias das notasNos detalhes da sessão, o campo Notas mostra três fontes lado a lado (terapeuta / IA / transcrição); pode escolher o que manter
9 análises de TCCO separador de análises de TCC mostra 9 itens separados; cada um gerado a pedido; cada um com um ícone de edição do prompt
Perfil público — painéisAbra o seu próprio perfil público autenticado — os painéis de edição de biografia, especialização e contacto estão visíveis
PiP no vídeoDurante uma sessão de vídeo clique em minimizar — a janela reduz-se a mini-leitor, o microfone continua a funcionar, regressa sem sala de espera
Desfoque de fundoNa sala de espera de vídeo ative o desfoque de fundo — funciona imediatamente, sem erros de CSP
PDF da conceptualização BeckGere o PDF da conceptualização — também aparece nos materiais da sessão
Alternância ABC v1/v2Em conceptualização v2 pode alternar a origem do ABC entre a versão 1 e a 2
Fatura a partir de pagamentos selecionadosSelecione alguns pagamentos e clique em “Emitir fatura” — é produzida uma única fatura a partir do instantâneo
Sessão recorrente com Google MeetA segunda e a terceira sessão da série têm o Google Meet corretamente configurado e o e-mail contém o link correto
Sessões a partir das 22:00O calendário semanal mostra sessões marcadas às 22:00 e mais tarde
Estado “Faltou”Numa sessão concluída / cancelada pode mudar o estado para “Faltou”
Tema escuro no móvelNa aplicação móvel mude para o tema escuro — os cabeçalhos de grupo são legíveis
Caixa de Entrada AdHoc no móvelO móvel mostra a caixa de entrada ad-hoc e permite atribuir um paciente
Reverificação MFAAo mudar a palavra-passe, a aplicação pede novamente o MFA
Pseudonimização pela IANos registos vê os dados do paciente a chegar à IA como pseudónimos
Materiais da sessão como blobCarregue um ficheiro nos materiais da sessão — cai no Azure Blob Storage, não no disco local
Unicidade global do e-mail do pacienteAdicione um segundo paciente com o mesmo e-mail — obtém um 409 e o modal fecha-se
Faixa “O servidor está a iniciar”Após um período mais longo de inatividade, a entrada na aplicação mostra a faixa em vez de uma página em branco

🛠️ O que corrigimos — letra miúda

Além das grandes funcionalidades, foram resolvidos cerca de 80 relatórios de testers e utilizadores. Destaques:

  • A sobreposição PiP não era clicável — corrigido
  • Fecho obsoleto (stale closure) em handleMaximize — maximizar o PiP já não gera erro
  • O PiP mantém a ligação — anteriormente room.disconnect() disparava na transição fullscreen↔PiP
  • O botão “Entrar na sessão” estava escondido por uma substituição de CSS — revelado
  • Segunda sessão AITS para o mesmo paciente (SCRUM-1319, Ewa) — remover o UNIQUE INDEX em Session.VideoInviteToken
  • A numeração de sessões na conceptualização ignora as canceladas (SCRUM-1267, Bohdan)
  • Acesso seguro (null-safe) ao Payment em GetSessionDetailsAsync (SCRUM-1268, Bohdan)
  • Colisão de sessão de teste da Anna Pełnialska com o Jan às 14:00 — corrigido no seeder
  • Lentidão no painel — mapeamento null-safe em GetTodaySessionsAsync e GetSessionDetailsAsync
  • Atualização automática após o fim da gravação a partir do microfone — funciona
  • O recurso alternativo em lote (batch fallback) não sobrescreve o texto de gravações anteriores nem bloqueia a interface com o estado “A processar”
  • Idioma da transcrição a partir das definições da sessão — o STT respeita a preferência do paciente
  • CSP — a permitir *.clarity.ms, blob: em connect-src, análises em script-src
  • Ciclo de reautenticação — a abortar pedidos após 401 e a voltar ao login
  • CSP MediaPipe WASM — o desfoque de fundo funciona
  • Faixa DEV/SANDBOX também no FQDN do Azure, não apenas no domínio personalizado
  • Toast falso “Falha na transcrição” ao entrar na sessão — removido
  • Toast em vez de faixa vermelha em caso de falha na transcrição + botão “Reamostrar” removido
  • Tempo real com diarização na sessão de vídeo — inicia corretamente
  • Streaming de IA — AbortController por manipulador em vez de partilhado (BodyStreamBuffer was aborted)
  • Nginx não-root + Azure Container Apps — várias iterações até funcionar
  • Bloqueio distribuído (sp_getapplock) — as migrações de arranque já não entram em conflito em deploys paralelos
  • DbUpdateConcurrencyException no poller de transcrição em lote (SCRUM-1313, Bohdan)
  • BlobNotFound como estado esperado (SCRUM-1314, Bohdan)
  • Payloads não-JSON no webhook do Stripe (scanners / bots) — tratados silenciosamente (SCRUM-1315, Bohdan)
  • Deteção de formato de áudio por bytes mágicos (SCRUM-1311, Bohdan)
  • Envio de áudio resiliente + Content-Type defensivo (SCRUM-1293, Bohdan)
  • Migração de FK ActiveEmbeddingModelId → ON DELETE NO ACTION
  • Deploy do cliente de dev — CACHE_BUST=github.sha força a reconstrução do frontend

Este é o lançamento maior e mais denso desta primavera. Se uma funcionalidade lhe parecer familiar — é porque foi o seu pedido ou o seu ticket. Obrigado por cada relatório e por cada captura de ecrã.

Artigo preparado pela equipa da Therapy Support

Therapy Support · Comece hoje mesmo

Recupere tempo para si
e para os seus pacientes

É terapeuta TCC?
Veja como a plataforma apoia o seu trabalho diário.
Resumos de sessão que organizam o material clínico. Administração que não atrapalha.