Notas de la versión — 26 de abril de 2026
Hace 19 días lanzamos una gran versión con el módulo de diagnóstico y el análisis de prosodia. Desde entonces el equipo ha impulsado otros 295 cambios — y no son pequeños. En esta versión puedes grabar una sesión ad-hoc antes incluso de que llegue el paciente, tus notas se fusionan con el trabajo de la IA y la transcripción lado a lado en tres columnas, el perfil público del terapeuta vuelve con toda su fuerza, y la aplicación móvil ya tiene tema oscuro. Bajo el capó pasamos por un endurecimiento SOC 2 / HIPAA, una auditoría DDD, y la seudonimización completa de los datos del paciente en el lado de la IA.
💚 Gracias al equipo que impulsó esta versión — con reportes, pruebas, código y paciencia:
- Bohdan — sesiones ad-hoc, límites de paquete y periodo de gracia, auditoría DDD, facturas KSeF, decenas de correcciones (SCRUM-756, 815, 1267, 1268, 1276, 1280-1290, 1293, 1309-1316, 1353-1357, 1366, 1388, 1391, 1392)
- Bartek — fusión a 3 vías, 9 análisis de TCC independientes, distorsiones cognitivas, contador de sesiones del paquete (SCRUM-1266, 1320, 1338, 1368-1375, 1385, 1386)
- Ewa Cylwik / Ewa — PDF de Beck, segunda sesión AITS para el mismo paciente, tema oscuro móvil y estado vacío, mailing multilingüe, colores de la interfaz, unicidad del correo del paciente (SCRUM-883, 898, 902, 1089, 1094, 1297, 1304, 1307, 1319)
- Joanna — calendario recurrente, ocultar Zoom, cancelación a tiempo, autorreflexión en lugar de la valoración de calidad de sesión (SCRUM-789, 874, 918, 919, 1005)
- Además Bartlomiej por las distorsiones cognitivas y el contador de sesiones, que se convirtió en la base del nuevo modelo de suscripción
1. ⚡ Sesiones ad-hoc — graba antes de que llegue el paciente
Si alguna vez has tenido que encender rápido una grabadora — porque un paciente se presentó sin avisar, porque es una consulta puntual, porque es una reunión con alguien que aún no está en tus registros — el nuevo módulo de sesión ad-hoc resuelve por completo ese problema.
- Botón de grabación rápida en el panel web, en la PWA del teléfono y en la aplicación MAUI — un clic inicia la grabación incluso antes de rellenar los datos del paciente
- Bandeja AdHoc — una bandeja dedicada para grabaciones sin asignar hasta que decidas dónde van
- AssignPatientModal — asigna la grabación a un paciente existente o crea uno nuevo directamente desde la bandeja
- Reanudar / Volver a entrar a la sala — termina de grabar una sesión que empezaste antes
- Retención de huérfanos + autocompletado — las sesiones sin asignar durante X días se cierran automáticamente para que la bandeja se mantenga ordenada
- Video “Iniciar sin paciente” — en la sala LiveKit puedes empezar una sesión sin chocar con un paciente existente; el AdHoc acaba después en la bandeja
La sección está protegida detrás del código PromptyAI en Configuración — desactivada por defecto, para los usuarios que quieren ver primero el resto. Diseñada e implementada por Bohdan.
2. 📊 Límites de paquete y periodo de gracia — suscripción transparente
Las suscripciones recibieron una revisión completa. Los antiguos planes Starter/Standard están desactivados, sustituidos por Start / Practice / Pro — dimensionados según el volumen real de sesiones mensuales.
- Contador de sesiones en el panel — ve cuántas sesiones has usado este mes y cuántas quedan en tu paquete
- Correos de límite — notificaciones automáticas al 80% y al 100% de uso
- Aviso de mejora de plan — cuando alcanzas el límite, recibes una sugerencia amable de cambio de plan en lugar de un bloqueo total
- Precios de Stripe + descuentos — el precio que ves en la aplicación proviene directamente de Stripe con los descuentos activos aplicados (el código de beta tester no caduca)
- Cancelación nativa de suscripción — cancela directamente en la aplicación, sin necesidad de escribir a soporte
- Periodo de gracia de 14 días — si un pago falla, obtienes 14 días con acceso solo a tu propia cuenta (sin vista previa de pacientes), con correos en T+0 y T+13. La pérdida real de datos solo ocurre tras dos semanas
- Banner de suscripción — mensaje limpio en la parte superior de la aplicación sin barra vacía entre el menú y la alerta
- Simulador de límite de sesiones — en el panel de PromptyAI hay un modo de prueba donde puedes ver cómo se comporta la aplicación con un paquete completo
Trabajo conjunto de Bartlomiej (contador y límites, SCRUM-1266) y Bohdan (suscripción, periodo de gracia, aviso de mejora — SCRUM-756, SCRUM-1366, SCRUM-1391, SCRUM-1392).
3. 📝 Fusión a 3 vías para las notas — terapeuta, IA y transcripción en una sola vista
Este es uno de los mayores cambios arquitectónicos bajo el capó, pero el efecto en el trabajo diario es muy visible: cada campo de notas (Notas, Resumen de sesión, secciones de conceptualización) ahora recuerda por separado lo que escribió el terapeuta, lo que generó la IA, y lo que vino del dictáfono / la transcripción.
- Notas a 3 vías — la vista de notas muestra tres fuentes lado a lado: tu texto, las sugerencias de la IA y la transcripción automática, y tú eliges qué conservar
- Resumen de sesión a 2 vías + fusión JSON — en el resumen de sesión fusionas tu trabajo con el análisis de la IA en un único documento coherente
- Separador de marca de tiempo — cuando editas manualmente un campo de IA, el sistema deja un rastro visible de cuándo y de quién es ese fragmento
- Marcador [IA] desde la primera generación — tus campos no se mezclan con los generados
- SourceBadge — una píldora colorida con un icono que muestra de dónde viene un fragmento, en lugar de texto en MAYÚSCULAS
- Sustitución de sección de IA en lugar de añadir — cuando pides regenerar el resumen, la IA reemplaza la sección en lugar de apilar otra copia debajo
Diseñado e implementado por Bartek (SCRUM-1320, SCRUM-1368-1375). Por debajo: i18n completo en 8 idiomas y nuevos contextos DDD.
4. 🔍 Análisis de TCC — 9 informes independientes bajo demanda
El antiguo “generar análisis de TCC” monolítico se dividió en 9 elementos independientes que el terapeuta ejecuta cuando realmente los necesita. Menos espera, más control.
- 9 análisis independientes — cada uno generado por separado, bajo demanda
- Engranaje de edición de prompt — haz clic en el engranaje junto a cada análisis para ver/modificar el prompt que usará la IA
- Sección ANÁLISIS DE TCC detrás del código PromptyAI — sección disponible tras introducir el código en Configuración, para usuarios que prueban nuevas funciones
Las distorsiones cognitivas obtuvieron su propia vista (reportado por Bartlomiej, SCRUM-1385):
- Vista de datos en lugar de un informe de IA — ves citas concretas de la transcripción etiquetadas por la IA, no una narrativa generada a partir de ellas
- Todas las citas al expandir — sin filtro de rango de fechas, expandir revela todo
- Disponible en el menú principal — bajo Conceptualización v2
Se eliminó el antiguo prompt COGNITIVE_DISTORTIONS_INVENTORY (SCRUM-1386).
5. 🌐 Perfil público del terapeuta — renovación completa con paneles de edición
El perfil público bajo la marca aitherapy.support se ha reconstruido por completo.
- 3 nuevos paneles de edición — biografía, especializaciones y datos de contacto editados en elegantes paneles laterales
- Modo de edición del propietario — al ver tu propio perfil mientras has iniciado sesión, los botones de edición están a mano
- Años de experiencia — nuevo campo
YearsOfExperiencevisible en el perfil público - Rediseño de color — paleta salvia/lavanda bajo la marca aitherapy.support
- Sección “Tu privacidad” eliminada — era redundante; el RGPD está en el pie de página
- Iconos Lucide — tipografía de iconos moderna y limpia
Por debajo, se añadió un endpoint público GET /api/public/therapists — que devuelve los terapeutas con perfiles públicos activos. Base para un directorio de terapeutas.
6. 🎥 Sesiones de video — PiP, intercambio de cámaras, desenfoque de fondo corregido
El video recibió un conjunto de correcciones que notará cualquier terapeuta que realice sesiones a través de la aplicación.
- PiP / minimizar — minimiza la sala de video a un mini-reproductor flotante y revisa notas en otra pestaña sin cortar la conexión. El micrófono y la cámara siguen funcionando
- Intercambiar cámaras — cambia quién está en la vista principal y quién en la miniatura con un clic
- Reanudación de PiP — al volver de la minimización, te saltas la sala de espera (PreJoinLobby) y entras directo a la conversación
- Audio por participante para diarización — la transcripción separa a los hablantes incluso en PiP
- Desenfoque de fondo corregido — la CSP bloqueaba MediaPipe WASM; el desenfoque ahora funciona con un clic
- Interfaz de sesión AITS más limpia — el asistente de IA desapareció de la barra de herramientas, menos ruido visual
- Overlay de PiP clicable — al eliminar
pointerEvents:noneyoverflow:hidden, los botones de PiP responden a los clics - Botón “Unirse a la sesión” — estaba oculto por una anulación de CSS, ahora es visible
- Closure obsoleto en handleMaximize — corregido; maximizar el PiP ya no genera un error
7. 📐 Conceptualización de Beck v2 y ABC — PDF, alternador de versión, edición de prompt
- PDF de Beck y ABC v2 — formato corregido e inclusión automática en los materiales de sesión (reportado por Ewa, SCRUM-1297)
- PDF de Beck — secciones solo con borde, especializaciones en color, iniciales limpias, flecha SVG entre secciones
- Alternador ABC v1/v2 en Conceptualización v2 — elige qué versión de ABC mostrar
- Engranaje de edición de prompt en ABC v2 — modifica el prompt de IA en la pestaña ABC v2
- Exportación a PDF para análisis de IA y ABC por sesión — análisis individuales exportados por separado
- Pluralización de etiquetas ABC en 8 idiomas — la tabla de conceptualización tiene las formas plurales correctas
- Corrección de columnas ABC vacías — el backend devuelve los nombres de propiedad en plural correctos
8. 🧾 Facturas y KSeF — selección de pagos + máquina de estados
El sistema de facturación se refactorizó para cumplir con KSeF (el sistema polaco de facturación electrónica nacional).
- Factura a partir de pagos seleccionados — elige los pagos y el sistema crea una única factura a partir de ellos (instantánea + FK de pago)
- Punto de entrada “Emitir factura” en la vista financiera del terapeuta — acceso rápido desde el panel
- Eliminación de partidas en el modal de emisión de factura — corrige errores sobre la marcha
- Separación dev/prod de KSeF — sandbox y producción funcionan con credenciales separadas
- Máquina de estados de factura (SCRUM-1357 Bohdan) — Borrador → Emitida → Enviada → Cancelada, con una restricción de base de datos sobre transiciones no permitidas
- AE KsefToken — token KSeF cifrado con Always Encrypted
Trabajo conjunto de Bohdan (SCRUM-1357, SCRUM-1388).
9. 📅 Calendario, sesiones recurrentes y ubicaciones
El calendario semanal y recurrente recibió decenas de mejoras pequeñas pero visibles — la mayoría reportadas por Joanna y Ewa.
- Sesiones a partir de las 22:00 — eran invisibles en la cuadrícula semanal, ahora se muestran hasta el final del día
- Todas las horas en la cuadrícula de franjas recurrentes (SCRUM-874, Joanna)
- Sesión cancelada a tiempo — no se muestra como “No pagada” (SCRUM-918, Joanna)
- Etiqueta de recurrencia junto a la franja recurrente (SCRUM-919, Joanna) — ves “semanal”, “quincenal” junto a cada sesión recurrente
- Ocultar la integración de Zoom en la interfaz (SCRUM-789, Joanna) — Zoom ya no se admite como canal de video
- Ventana emergente de sesión en el calendario — ya no se oculta fuera de pantalla
- TherapistAvailability — guardado automático en cada cambio (debounce de 800 ms), sin necesidad de botón de guardar
- AddSessionModal — opción “crear sesión fuera del horario de disponibilidad” — las excepciones pueden forzar una franja
- Estado “No-show” (NoShow=5) — nuevo estado, configurable incluso desde sesiones completadas o canceladas
- RecurringSessionsCalendar — tarjetas de resumen encima de la leyenda y la cuadrícula
Las ubicaciones del terapeuta obtuvieron canales de reunión en línea por ubicación:
- Modo presencial — campos de dirección y ciudad para ubicaciones presenciales
- Interruptor presencial/en línea en lugar de una casilla — elección de modo más clara
- Canal en línea por ubicación — distintas ubicaciones pueden tener distintos canales (AITS, Google Meet, enlace externo), propagados automáticamente a las sesiones
- Salas de reunión permanentes por paciente — cada paciente tiene un enlace permanente a la sala AITS y un enlace externo aparte visible en la configuración del paciente
- Eliminación de ubicación — corregida (desaparecía de la base de datos pero se quedaba en la lista de la interfaz)
Y por último el tipo de reunión en sesiones recurrentes — corregida la propagación de MeetingType y MeetingLink desde la configuración de la serie recurrente a cada sesión generada y a los correos de recordatorio (SCRUM-902, Ewa).
10. 📱 Aplicación móvil — tema oscuro, bandeja AdHoc, pulido
Móvil pasó a la versión 1.5.0 (build 18) con un montón de cambios visibles para el usuario y algunos retoques de firma para App Store / Play Store.
- Tema oscuro — modo oscuro completo con encabezados de grupo legibles (SCRUM-1089, Ewa + SCRUM-815)
- Recordatorios configurables — elige cuándo quieres la notificación de sesión
- Recordatorio móvil de 15 min — recordatorio previo a la sesión de 15 minutos + aviso cuando las notificaciones del sistema están desactivadas (SCRUM-815, Bohdan)
- Estado vacío para la lista de sesiones — en lugar de una pantalla en blanco, una incorporación más completa (SCRUM-1094, Ewa)
- Banner de actualización automática — cuando la aplicación detecta una actualización, muestra un banner de actualización atractivo
- Bandeja AdHoc + AssignPatient + inicio rápido en MAUI (SCRUM-1289, Bohdan)
- Inicio rápido PWA móvil para sesiones ad-hoc (SCRUM-1286, Bohdan)
- Vista web responsiva para teléfono — escritorio sin cambios, en el teléfono el diseño se adapta a la pantalla estrecha
- Gestor de enlaces profundos en iOS — usa BindingContext, registro de esquema de URL
- Cadenas de propósito NSLocation en iOS — corrección de ITMS-90683 (App Store rechazaba la compilación sin ellas)
- Android AAB — paso explícito de jarsigner
- Materiales de App Store Connect y Google Play — paquete completo más auditoría WCAG 2.2
11. 🔐 Seguridad: SOC 2 / HIPAA, MFA, seudonimización completa de la IA
Bajo la capa de producto realizamos un endurecimiento SOC 2 y HIPAA completo más una auditoría DDD con cinco entregas concretas.
- Reverificación de MFA para operaciones críticas — para acciones sensibles (cambio de contraseña, exportación de datos) confirmas de nuevo con MFA
- Códigos de respaldo para MFA — códigos de emergencia si pierdes el teléfono
- IAnonymizedLlmGateway (SCRUM-1353, Bohdan) — todas las llamadas al modelo de IA ahora pasan por una puerta de enlace de seudonimización. Nombres, fechas, lugares se sustituyen por seudónimos antes de salir de la aplicación; la IA solo recibe la versión anonimizada
- Seudonimización de notificaciones por correo/SMS (SCRUM-1354) — las plantillas de mensajes tampoco filtran datos del paciente al enviarse
- Tokens OAuth de Google/Zoom cifrados con Always Encrypted (SCRUM-1355) — los tokens de acceso de integración están cifrados a nivel de columna
- Indicador Patient.PendingConsent (SCRUM-1356) — los pacientes sin consentimiento activo obtienen un flujo de aplicación forzosa + insignia en el frontend
- Máquina de estados de factura (SCRUM-1357) — los estados de factura son inmutables en direcciones no válidas, aplicado a nivel de base de datos
- Inmutabilidad de auditoría + instantánea de usuario en 3 tablas de auditoría — el registro de acciones no se puede modificar a posteriori
- DeanonymizationAuditLog — cada uso de datos del paciente tras la desanonimización se registra junto con la instantánea de correo y nombre visible del usuario que la realizó
- Secretos codificados eliminados — todas las claves y contraseñas de appsettings.json trasladadas a Azure Key Vault
- Always Encrypted para todos los datos de texto de usuario (ADR-0018) — dirección arquitectónica aprobada; más tablas migrarán en la próxima versión
- Análisis de brechas de cumplimiento ISO/IEC — 95 brechas en 9 estándares mapeadas, con un plan de remediación
Respaldado por una auditoría DDD completa (Sesiones 1-8, Fases 1-6) — reestructuración del contexto de dominio, documentación de arquitectura, ADR, mermaid + pruebas, guías de actuación, integración con Confluence.
12. 👤 Portal del paciente — análisis en Objetivos, materiales, mejor vista previa
- Conceptualización de Beck en la pestaña “Objetivos” del paciente — cuando publicas la conceptualización, el paciente la ve en su portal
- Publicación de análisis en el portal del paciente + preferencias de notificación (SCRUM-1338, Bartlomiej) — controla qué y cuándo recibe el paciente
- Vista previa de PDF del portal —
iframeen lugar deembed, la CSP permiteblob:(los PDF cargan) - Vista previa del portal del paciente desde la vista del terapeuta — ve lo que ve el paciente (chrome en el contenedor, panel 1:1)
- Materiales de sesión en Azure Blob Storage — SessionMaterial como blob, ya no en el sistema de archivos local
- Sección de consentimiento / documentos + origen de registro en la configuración del paciente
- Unicidad global del correo del paciente (SCRUM-898) — un segundo paciente con el mismo correo recibe un 409 y el modal se cierra (SCRUM-898, Ewa)
- Seeder de plantillas de notificación para SK, CA, RU, UK, LT (SCRUM-883, Joanna) — mailing multilingüe completo
- Resolución por defecto a la plantilla de la plataforma — cuando un terapeuta no ha sobrescrito la plantilla, se envía la multilingüe predeterminada (SCRUM-883)
13. 🎙️ Transcripción — grabación fiable, añadido de contenido, tiempo real con diarización
- Añadir a una transcripción existente — sigue grabando en la misma sesión; los segmentos se añaden (la intención sobrevive a una recarga de página)
- Audio por participante para diarización — la transcripción de video separa a los hablantes en pistas independientes
- La transcripción sobrevive al PiP — minimizar la sala no interrumpe la grabación
- Idioma de transcripción desde la configuración de sesión — el STT usa el idioma que has configurado para el paciente
- Actualización automática de la transcripción al enfocar / visibilitychange / volver del video
- Confirmación al detener la grabación < 2s — protección contra un WAV vacío por un clic accidental
- Insignia “Enviando” en la lista de sesiones — ves cuándo una grabación está subiéndose
- Tiempo real con diarización en la sesión de video — no se iniciaba antes; ahora funciona
- Copia de seguridad en OPFS + Opus a 48 kbps — la grabación también se guarda localmente en OPFS como respaldo, parámetros de audio unificados
- Subida directa de audio con SAS (SCRUM-1276, Bohdan) — el audio va directamente a Azure mediante URL SAS, evitando el backend
- m4a nativo para Azure Speech — m4a manejado de forma nativa, sin conversión
- Detección de formato por magic bytes (SCRUM-1311, Bohdan) — cuando Content-Type=
application/octet-stream, el formato se detecta por el contenido del archivo - Hub sin texto en base de datos — el hub SignalR en tiempo real ya no persiste texto en la base de datos; finishPending usa POST multipart como MAUI
- Corrección de SignalR 1006 — se eliminó skipNegotiation para que Azure SignalR funcione + ajuste de keep-alive
- Marcador [IA] desde la primera generación + búsqueda fiable del marcador
14. 💬 Notificaciones, configuración del paciente, pequeñas mejoras de UX
- NotificationTemplatesAdmin — alternador HTML/Texto en el editor de correo
- NotificationSettings — la vista previa del correo renderiza HTML con respaldo
- PromptEditModal — reconstruido: pestañas, selector de modelo, nombres de versión obligatorios
- Reinicio del indicador Hide_dev_ui al cerrar sesión — los indicadores de desarrollador no persisten entre sesiones
- Paciente de prueba Ann Fauler — equivalente en inglés 1:1 de la polaca Anna Pełnialska para demos solo en inglés
- Alternador de modo de presentación de la interfaz de desarrollo — cambio rápido a modo presentación
- Reporte de errores — adjuntos de Jira + etiqueta de quien reporta + botón “Enviar” centrado
- Bucle de auth-refresh corregido — se abortan las solicitudes y se vuelve al inicio de sesión tras un 401
- Banner “El servidor está iniciando” — en un arranque en frío (scale-to-zero) mostramos un aviso en lugar de una página en blanco
- Escala de valoración de sesión — autorreflexión en lugar de valoración de calidad + descargo de responsabilidad (SCRUM-1005, Joanna)
- Color del botón “Minimizar” cambiado a violeta cobalto (SCRUM-1307, Ewa)
- Color de la etiqueta “Transcripción” de rojo a verde (SCRUM-1304, Ewa)
- “Grabar ahora” → “Grabar sesión AdHoc” — nombre de botón más preciso
- Sandbox con cinta verde en la esquina superior izquierda + prefijo
[SANDBOX]en el título — para evitar confusión de entornos, además de una clonación repetible PROD → Sandbox (IaC de Azure y scripts)
✅ Lista de verificación de QA — qué comprobar tras el despliegue
| Función | Verificar |
|---|---|
| Sesión ad-hoc — Grabación rápida | Haz clic en Grabación rápida en el panel o la PWA — la grabación empieza de inmediato, la sesión llega a la bandeja AdHoc |
| AssignPatient en la bandeja AdHoc | Abre una grabación ad-hoc — puedes asignarla a un paciente existente o crear uno nuevo |
| Límite de paquete | El panel muestra el contador de sesiones del mes actual y cuántas quedan en el paquete |
| Periodo de gracia tras un pago fallido | Simulador de suscripción en PromptyAI — fuerza un pago fallido, obtienes acceso solo a la cuenta durante 14 días |
| Fusión a 3 vías de notas | En los detalles de la sesión, el campo Notas muestra tres fuentes lado a lado (terapeuta / IA / transcripción); puedes elegir qué conservar |
| 9 análisis de TCC | La pestaña de análisis de TCC muestra 9 elementos independientes; cada uno generado bajo demanda; cada uno tiene un engranaje de edición de prompt |
| Perfil público — paneles | Abre tu propio perfil público mientras has iniciado sesión — los paneles de edición de biografía, especialización y contacto son visibles |
| PiP de video | Durante una sesión de video haz clic en minimizar — la ventana se reduce a mini-reproductor, el micrófono sigue funcionando, regresas sin la sala de espera |
| Desenfoque de fondo | En la sala de espera de video activa el desenfoque de fondo — funciona de inmediato, sin errores de CSP |
| PDF de conceptualización de Beck | Genera el PDF de la conceptualización — también aparece en los materiales de sesión |
| Alternador ABC v1/v2 | En conceptualización v2 puedes cambiar la fuente ABC entre la versión 1 y la 2 |
| Factura a partir de pagos seleccionados | Selecciona varios pagos y haz clic en “Emitir factura” — se genera una única factura a partir de la instantánea |
| Sesión recurrente con Google Meet | La segunda y tercera sesión de la serie tienen Google Meet configurado correctamente y el correo contiene el enlace correcto |
| Sesiones desde las 22:00 | El calendario semanal muestra las sesiones programadas a partir de las 22:00 |
| Estado “No-show” | En una sesión completada / cancelada puedes cambiar el estado a “No-show” |
| Tema oscuro móvil | En la aplicación móvil cambia al tema oscuro — los encabezados de grupo son legibles |
| Bandeja AdHoc en móvil | El móvil muestra la bandeja ad-hoc y permite asignar un paciente |
| Reverificación de MFA | Al cambiar la contraseña, la aplicación vuelve a pedir MFA |
| Seudonimización de IA | En los registros ves que los datos del paciente llegan a la IA como seudónimos |
| Materiales de sesión como blob | Sube un archivo a los materiales de sesión — acaba en Azure Blob Storage, no en disco local |
| Unicidad global del correo del paciente | Añade un segundo paciente con el mismo correo — obtienes un 409 y el modal se cierra |
| Banner “El servidor está iniciando” | Tras un periodo de inactividad más largo, la entrada a la aplicación muestra el banner en lugar de una página en blanco |
🛠️ Lo que arreglamos — la letra pequeña
Además de las grandes funciones, se resolvieron ~80 reportes de testers y usuarios. Lo más destacado:
- El overlay de PiP no era clicable — corregido
- Closure obsoleto en handleMaximize — maximizar el PiP ya no genera errores
- PiP mantiene la conexión — antes
room.disconnect()se activaba en la transición de pantalla completa↔PiP - El botón “Unirse a la sesión” estaba oculto por una anulación de CSS — descubierto
- Segunda sesión AITS para el mismo paciente (SCRUM-1319, Ewa) — se elimina el UNIQUE INDEX en
Session.VideoInviteToken - La numeración de sesiones en conceptualización omite las canceladas (SCRUM-1267, Bohdan)
- Acceso null-safe a Pagos en GetSessionDetailsAsync (SCRUM-1268, Bohdan)
- Colisión de sesión de prueba de Anna Pełnialska con Jan a las 14:00 — corregido en el seeder
- Ralentización del panel — mapeo null-safe en GetTodaySessionsAsync y GetSessionDetailsAsync
- Actualización automática tras finalizar la grabación desde el micrófono — funciona
- El respaldo por lotes ya no sobrescribe el texto de grabaciones anteriores ni bloquea la interfaz con el estado Processing
- Idioma de transcripción desde la configuración de sesión — el STT respeta la preferencia del paciente
- CSP — se permiten
*.clarity.ms,blob:en connect-src, analítica en script-src - Bucle de auth-refresh — se abortan las solicitudes tras un 401 y se vuelve al inicio de sesión
- CSP MediaPipe WASM — el desenfoque de fondo funciona
- Cinta DEV/SANDBOX también en el FQDN de Azure, no solo en el dominio personalizado
- Toast falso “Transcripción fallida” al entrar a la sesión — eliminado
- Toast en lugar de banner rojo por transcripción fallida + eliminado el botón “Resample”
- Tiempo real con diarización en la sesión de video — se inicia correctamente
- Streaming de IA — AbortController por controlador en lugar de compartido (
BodyStreamBuffer was aborted) - Nginx sin root y Azure Container Apps — varias iteraciones para que funcione
- Bloqueo distribuido (sp_getapplock) — las migraciones al inicio ya no entran en conflicto en despliegues paralelos
- DbUpdateConcurrencyException en el sondeador de transcripción por lotes (SCRUM-1313, Bohdan)
- BlobNotFound como estado esperado (SCRUM-1314, Bohdan)
- Cargas útiles no-JSON del webhook de Stripe (escáneres / bots) — gestionadas silenciosamente (SCRUM-1315, Bohdan)
- Detección de formato de audio por magic bytes (SCRUM-1311, Bohdan)
- Subida de audio resiliente + Content-Type defensivo (SCRUM-1293, Bohdan)
- Migración de FK ActiveEmbeddingModelId → ON DELETE NO ACTION
- Despliegue del cliente dev — CACHE_BUST=
github.shafuerza la reconstrucción del frontend
Esta es la versión más grande y densa de esta primavera. Si una función te resulta familiar, es porque fue tu solicitud o tu ticket. Gracias por cada reporte y cada captura de pantalla.
Artículo preparado por el equipo de Therapy Support