Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-shared-library
Repositorios de recursos FHIR, con la reclamación de versión de 40001 a salvo
reclamedadSiguienteVersion es una actualización ... SET current.version.id = current-version.id 1 y debe ser la primera declaración de una transacción de escritura. Lo obvio alternativa - leer la versión actual, añadir una, escribir read-after-write dentro de una transacción, con la que YugabyteDB aborta SQLSTATE 40001 bajo moneda de concurrencia. Falla de manera intermitente, por lo que se presenta como un punto muerto aleatorio, y un bucle de reintención parece arreglarlo mientras se arregla Nada: el reinicio tiene la misma forma y solo gana la carrera con más frecuencia. La ACTADA también toma la cerradura y se lee en un viaje de ida y vuelta, que es uno menos de lo que reemplaza. findClaimedVersion se lee en la misma transacción y es seguro a pesar de esa advertencia, porque la UPDATE ya tomó el candado de la fila. El problema de read-restart es sobre las filas que otra transacción puede moverse bajo tu interior. La búsqueda de recursos deliberadamente devuelve los recursos DELETED. Una persona que llama tiene que "Nunca existió" (404) de "borrado" (410 Gone), y FHIR requiere un recurso borrado para seguir respondiendo vread y la historia; filtrarlos aquí haría eso imposible una capa hacia arriba. FhirResourceVersionRepository declara NO borrar y NO actualizar, y una prueba impone que nunca gana uno. La entidad se niega a ambos PreRemove/PreUpdate, pero esos son ENTITY CALLBACKS, y un Spring Data Deriva suprimir compilaciones a granel JPQL que los elude completamente. Qué tal método borraría la historia clínica en silencio mientras la propia entidad la protección nunca se despidió. No declarar uno es la protección real, y Esa es una decisión que ningún compilador hace cumplir. La historia y las lecturas de la reproyección se pueden ver las dos páginas, porque una gráfico acumula versiones y una lectura sin límites está ilimitado exactamente donde A ella le duele más. SharedLibBeanSafetyPraágrama sigue pasando: los repositorios son interfaces, y no El estereotipo de frijol se añadió a la biblioteca. 1655 pruebas de verde.
· kamo-shared-library
La columna vertebral de encuentro (SP5)
La entidad todo lo clínico cuelga una nota, una orden, un diagnóstico y un cargo todo apunta al encuentro en el que se levantó. Los tiempos previstos y reales son pares de columnas separadas, que es a Decisión de compatibilidad hacia adelante y verdad. R4 le da un Encuentro a single period; R5 y R6 se separaron de lo real, así que modelando uno ahora significaría reescribir cada fila de encuentro y cada consulta de programación cuando que aterriza. También es como una práctica mide su propia morosidad - la brecha entre lo que se había reservado y lo que pasó es exactamente lo que se derrumba esos descartes. classCode se almacena como un código sencillo más su sistema en lugar de un incrustado Codificación, porque R4 lo escribe como una codificación y R6 lo cambia; las columnas sobreviven Las dos cosas. Tampoco es cosmético: conduce el código de lugar de servicio en el La reclamación, y una visita de telesalud facturada como persona es una afirmación falsa. La razón se mantiene aparte del diagnóstico. Lo que dijo el paciente y qué clínico concluyó que son hechos diferentes, y un gráfico que los confunde pierde por completo la denuncia presentada. EncuentroParticipante es una mesa de niños porque el caso de supervisión no puede ser aplanado: el proveedor de facturación en una reclamación se calcula desde el registro de supervisión en lugar de mecanografiado por un billete, y bajo incidente-a . . . . . . . . . . . . . . . . . . . . . . es su propio campo porque un médico supervisor puede estar disponible sin estar en la habitación, e inferir presencia del papel en silencio afirmar algo sobre una afirmación que nadie revisó. EncountDiagnosis.rank es carga y se ve cosmético. Líneas de servicio en un punto de reclamación profesional en los diagnósticos POR POSITION - el puntero es un índice, no un código de este modo un pedido almacenado que no coincid con el presentado orden deriva erróneamente cada línea, y la reclamación es denegada o pagada contra una condición que el paciente no tiene. se ha dirigidoEncuentro existe porque no se evaluó realmente todos los diagnósticos enumerados, y el nivel E/M es Cumbrado de los que lo eran; contar la mera presencia lo infla. Los Encuentros nunca se eliminan. Uno creado en error se convierte en ingresan y se quedan, porque las órdenes, notas y cargos ya referenciarlo y una referencia colgante es peor que un registro visiblemente equivocado. 1651 pruebas verdes.
· kamo-internal
Dile a la gente que se toma un alias web mientras lo están escribiendo.
El asistente creado tiene once pasos de largo y el alias sólo fue validado para FORMAT localmente, si alguien ya retenido fue descubierto cuando el al final se presentó en una organización que no podía ser creado. Ahora el campo lo dice mientras sigue en pantalla. Debounced a 400ms, así que escribir una palabra es una petición. Cada cheque lleva un boleto y una respuesta ranciosa se deja caer: teclear "acme" entonces "acme-2" nunca debe arreglar el veredicto por "acme". Las reglas locales - todos los dígitos, y el formato [a-z0-9-], de ,63o, se comprueban antes de cualquier petición, y son deliberadamente las mismas reglas SecurityService se hace cumplir en la creación. Si van a la deriva, el campo dice "disponible" para algo entonces se niega, que es el fracaso que esto elimina. Son puras. funciona para que una prueba pueda fijarlos, y el gancho ejecuta los probados. Un cheque inalcanzable se lee como "no pudo comprobar" y deja llevar al miembro en vez de abrirse a "disponible" y volverlos a poner donde Ellos empezaron. "Taken" no nombra organización: el mago no tiene negocio Dándole a un cliente sobre el de otro. Ambas entradas de alias están cubiertas. La ruta web-alias y la llano. 2943 pruebas y los 8 guardias pasan, i18n incluido. Copia aterrizada en kamo-translación-diccionario primero.
· InitializerService
Hacer orgs.alias plataforma única en todo
La columna nunca se vio limitada. Sobrevivible mientras que un alias era sólo resuelto como (seguridad-provider-id, alias) detrás de un huésco, desde dos orgs bajo diferentes proveedores, podría compartir uno sin ambiguedad. Una vez un org puede ser nombrado directamente por su alias con ?org=, una repetición hace la referencia ambiguo - el solucionador lo rechaza en lugar de adivinar, dejando BOTH orgs Inalcanzable por alias. Aplicado a la base de datos en vivo, después de cambiar el nombre de las seis filas que colisionaron (cuatro compartiendo "acme-corp", dos compartiendo "kia-kaha", todo sembrado el mismo día) con un sufijo numérico. Esto es lo que le da a un ambiente fresco lo mismo índice; el servicio no tiene CI, así que empujarla nada por sí solo. En la parte inferior, porque el alias se almacena literalmente y la igualdad de Postgres no es insensible al caso: "Acme-Corp" y "acme-corp" resuelven lo mismo referencia y debe chocar. Parcial, porque NULL o vacía significa "no alias" en lugar de un nombre reclamado, y cualquier número de orgs puede no tener ninguno. Regisates y continúa si no se puede crear en lugar de fallar la carrera. que significa que existen duplicados, y los controles de creación/actualización rechazan nuevos A pesar de todo.
· SecurityService
Contesta si un alias web sigue siendo gratuito
El asistente de la creación de org es de once pasos de largo y el alias sólo fue revisado cuando se presentó el formulario, así que alguien que eligió un nombre otro organización ya celebrada se dijo al final, en un org que podría no ser creado. GET /org/alias-disponible responde a la misma pregunta que las vías de escritura se aplican - tomado global e insensiblemente, o todos los dígitos - para que el mago y el servidor no está en desacuerdo. Si lo hicieran, el campo diría "disponible" para algo creado entonces se niega, que es el fracaso que esto elimina. Se cuidaba la sesión. La respuesta es una booleana sobre un nombre que el llamante mecanografiado, que crear les diría de todos modos, pero no hay razón para entregar un Llama noutentticada una forma de enumerar qué alias están en uso. Asesoramiento, no una reserva: dos personas pueden estar tecleando el mismo alias en una vez y a ambos se les diga que es gratis. El índice único y el controlador de creación Acomoda eso; esto sólo estrecha la ventana a algo que no en la práctica. Pasan 964 pruebas.
· kamo-shared-library
La entidad del paciente y sus satélites básicos de EE.UU. (SP5)
Una nueva entidad más que una reutilización, y cada rechazo es concreto más bien que estilístico. No Miembro: GET /api/security/members/names devuelve cada miembro de una org con puerta derecha NO y el endpoint by-id devuelve nombre partes más fecha de nacimiento en un chequeo del mismo or solo, por lo que cualquier autenticado sesión, incluyendo la de otro paciente, enumeraría la lista. No Líd de los plomo: es "herencia"(JOINED), y un gráfico de la búsqueda en uno de los tomados /leads down en la versión de Hibernate gran parte de la flota todavía funciona. No Contacto: esos pertenecen a la libreta de direcciones personal de un Usuario, que es el frente a un paciente perteneciente a la práctica. El mismo humano es un paciente DIFERENTE en cada práctica. Esa es la inquilino. límite, no un compromiso. Cada entidad cubierta tiene su propio historial, MRN y la postura de consentimiento, y la identidad de la práctica cruzada es un problema de coincidencia para el MPI en lugar de una fila compartida. Tres conceptos de sexo/género son columnas separadas porque responden diferentes preguntas y una columna no pueden servir a las tres. Administrativas género es lo que aparece en el papeleo; el sexo de nacimiento está probado en la certificación y secable; sexoForClinicalUse es el que impulsa rangos de referencia y dosificación. Confundirlos es como un paciente trans se hace la referencia equivocada rango en un resultado de laboratorio. La fecha de nacimiento es una cita local deliberadamente - una fecha de nacimiento no tiene tiempo y no zona, y darle uno la cambia a través de la línea de citas para cualquiera que viajes. Es por eso que la disciplina prohíbe el arnés LocalDateTime específicamente en lugar de todos los tipos locales. NacimientoDatePrecisión está ahí porque un paciente que sólo conoce su año de nacimiento es común, y almacenando eso como el 1 de enero entonces coincidir en la fecha exacta falla silenciosamente en encontrarlos. La raza y la etnia son una mesa de niños porque una persona puede reportar varios y una sola columna obliga a alguien de herencia mixta en cualquier caja de la El código se quedó. Alimentan medidas de calidad y información sobre disparidades, para que no sean decoración demográfica y autoinformes por defectos true porque se registran de lo que dijo un paciente, no se infieren. Idioma lleva intérpreteRequerido como un hecho independiente: un paciente puede prefiere español y decodificador un intérprete, e infiriendo uno del otro está equivocado en ambas direcciones. La sección 1557 se enciende en ambos. activo significa "este disco está en uso", NO suúctico, y fusionadoInto plus fusionaEntro existe porque la única fusión existente de la plataforma es de ida con no se despreven y fusionar a los dos pacientes equivocados está entre los más dañinos errores que una práctica puede cometer. contactId mantiene el enlace CRM para que la atribución de adquisición siga a una persona de la primera consulta en el gráfico. Ningún EHR puede hacer eso, porque no tiene ninguna persona antes de que tenga un paciente. 1651 pruebas verdes.
· kamo-shared-library
El libro de divulgación y las restricciones de los pacientes (SP2)
DivulgaciónLedger está separado de la phi-access-log a propósito. El registro de acceso registra cada READ, y la mayoría de las lecturas son un clínico que abre un gráfico; derivar una contabilidad de ella le entrega al paciente un listado de documentos miles de puntos de vista internos, lo cual es a la vez incorrecto y alarmante. 164,528 cuentas de DISCLOSURES - PHI saliendo de la entidad cubierta - no interna uso. Los dos también abarcan períodos diferentes y propósitos diferentes, que es por qué propósitoOfUse está estampado en el momento del acceso y llevado aquí en lugar de Se dedujo más tarde. hipaaAccountable se almacena en lugar de derivarse del propósito leído, porque la regla tiene excepciones el propósito por sí solo no capturar la divulgación del paciente autorizado se contabiliza de manera diferente a uno realizado con una excepción de tratamiento y recomputarla más tarde significa volver a conducir esas excepciones a los datos que ya no existen. La restricción del paciente conlleva la obligación de 164.522 que una entidad cubierta NO podrá rechazo: un paciente que paga de su bolsillo en su totalidad puede exigir que el el servicio no se revelará a su plan. Esa es la que se suele aplicar incorrecto, porque esconder el encuentro en una pantalla no cumple. Tiene que mantenerse fuera de la SUBMISION CLAIM y fuera de ELIGIBILIDAD ENQUIRIES, ya que ambos dile al plan que ocurrió el servicio. Un sistema que lo esconde en el gráfico y facturas de todos modos ha revelado exactamente lo que el paciente pagó para prevenir, y se enteran por su explicación de beneficios. Así que suprimirFromClaims es su propia bandera comprobada por el camino de facturación, no inferidas de una regla de visualización. Las reglas de visualización se relajan para la usabilidad y una supresión de facturación no debe viajar con ellos. suprimirDesde lalegiibilidad es separar de nuevo, porque un 270 preguntando un plan sobre un servicio señala el se contempla el servicio; suprimir el reclamo por sí solo filtra el mismo hecho más tranquilamente. Ambas mesas cierran filas en lugar de borrarlas. Una restricción elevada todavía explica por qué un servicio se sincúbilizó durante seis meses, y el libro mayor es Sólo a añadir porque una contabilidad que se puede editar no es una contabilidad. Los límites temporales son exclusivos al final del instante y el pin de pruebas ambos instrucciones, incluyendo que una fila incompleta niega en lugar de tirar. Este predicado se sienta en el camino de la facturación. 1653 pruebas de verde.
· kamo-shared-library
Relaciones de cuidado y cristales, los hechos detrás de la base de acceso (SP2)
PhiAccessBasis ganó CARE-TEAM y BREAK-GLASS último commit; sin estos dos tablas esos valores son decorativos. Nada en la plataforma modelado un relación proveedor-paciente en absoluto - la encuesta encontró que tal unión en cualquier lugar - por lo que la autorización sólo podía responder "que esta persona lea gráficos", que cada médico en una práctica puede. La pregunta mínimamente necesaria Las extintas son si pueden leer ESTA. CareRelationship es un FACT persistido, deliberadamente no un RoleRightType, y cada razón muerde por sí sola. Derechos se disparan en *** en el inicio de sesión, así que una revocación no llegaría a una sesión en vivo. dejar de conceder acceso ahora. Llega en silencio un nuevo derecho a la concesión roles de administrador, lo cual es catastrófica para algo destinado a ser por paciente. Y comprobarRight() devuelve lo cierto para todo bajo modo dios, mientras que una relación existe o no existe. Las filas se cierran con válidaTo, nunca borrada. "Esta persona estaba al cuidado El equipo cuando abrieron la tabla el pasado mes de marzo" no puede ser respondido por el de hoy equipo de atención, y eso es exactamente lo que pide una revisión de acceso. BreakGlassGrant existe porque negarse a construir no es la opción segura. Un paciente llega inconsciente y el médico tratante no está en equipo de atención sin embargo; un sistema que dice que no hay una gente que trabaje, y la solución es un inicio de sesión compartido. El control no es la prevención, es que el acceso es estrecho, dicho, cronomeado y READ AFTERWARDS. La razón es texto libre y requerido, porque su valor es que un humano lo escribió y otro humano lee El menú se hace clic sin leer. No el modo dios deliberia: eso es el rompimiento de la plataforma-personal, propiedad del servidor. En lanzan las emergencias clínicas de una entidad cubierta a través del vendedor de Kamo la puerta trasera es la que controla un revisor de BAA no pasará. Ambos predicados temporales tratan su final instantáneo como EXCLUSIVE, y las pruebas fijar el límite en ambas direcciones. Un extremo inclusivo extiende silenciosamente cada terminó la relación y cada anulación caducado por una garra de garrafa, y ninguno de los dos fracasos plantea cualquier cosa. 1644 pruebas de verde.
· InitializerService
Poneriente de la espalda en la parte delantera de las teclas de recursos clínicos
ddl-auto construido PRIMARY KEY (logical-id, resource-type, inquilant-id) on fhir.resource.current y fhir-resource-version, porque Hibernate emite Columnas de EdededId alfabéticamente en lugar de en orden de declaración. Encendida YugabyteDB la primera columna de la llave primaria decide el fragmento de hachís, así que liderando con un UUID distribuye una tabla completa de una práctica en cada tableta y convierte cada lectura en un fan-nodo cruzado de la noche. La clave compuesta existe. Recrea en lugar de ALTERs: cambiar una clave primaria es una reescritura de mesa y Yugabyte's ALTER ... El apoyo de ADD PRIMARY KEY es limitado. Ambas tablas son nuevas y vacía para que esto sea exacto y barato, y el corredor se compromete a tocar un mesa de las filas de la mesa en ese punto el movimiento correcto es una migración planificada con una copia de datos, y averiguarlo de una línea de registro latido labe a averiguarlo de las cartas que faltan. Idempotente, y verifica contra pg.constraint en lugar de asumir: una vez La clave es correcta que inspeccione, esté de acuerdo y no haga nada. Excepciones se capturan por mesa, porque un lanzamiento escapando de un corredor en silencio retenga a cada corredor ordenado después de eso.
· kamo-internal
Añadir la pestaña de errores del sistema
Miembros reportan defectos en la plataforma con capturas de pantalla y los sitios que la máquina de dev. Un inquilino solo ve los bichos de su propia organización y la plataforma organización ve el lado del servidor decidido de cada inquilino, por lo que la consola nunca tiene un alcance propio para equivocarse. MANAGE-SYSTEM-BUGS es una plataforma derecho y puertas una pestaña de ACION en lugar de una pestaña de configuración, que es lo que la prueba de la cubierta de superficie ahora se registra. La zona de lanzamiento de pantalla toma una pasta, así como un arrastre o un clic, porque una captura de pantalla casi siempre está en el portapapeles para cuando alguien Se sienta para reportar uno. Enviar a AI comprueba si la máquina de dev puede tomar un despacho ANTES de la operador escribe cualquier cosa, y mantiene su texto sobre un fracaso en lugar de haciéndoles escribirlo dos veces. Modelo y esfuerzo se envían como nombres; la consola nunca construye una bandera.
· kamo-shared-library
Etiquetas de seguridad DS4P, aplicadas en el momento de la escritura (SP2)
La proyección indexada de las etiquetas meta.security de un recurso, y la cosa que tiene que existir antes de la primera ruta de lectura clínica en lugar de después de primer cliente de salud conductual. Aplicado en el tiempo WRITE, nunca calculado en la hora de lectura, para un mecánico razón: una etiqueta derivada en el tiempo de lectura tiene que derivarse por cada camino de lectura Independientemente de la búsqueda FHIR, el portal, generación C-CDA, el TEFCA respuesta, exportación a granel, presentación de reclamaciones y la que olvidan que es el uno que se filtra. Escrito una vez al lado del recurso, es un solo predicado Cada ruta comparte. Indizados en lugar de vivir sólo dentro del recurso JSON, porque La segmentación es un FILTER en cada consulta clínica. Una etiqueta de la base de datos no puede ver los medios filtrar en el código de aplicación después de cargar las filas, que es lenta y exactamente la forma que se filtra bajo la paginación. labelKind existe porque los cuatro tipos se aplican de manera diferente y deben no ser comparados como una bolsa. Un nivel de confidencialidad es un límite máximo para quién puede lea; un código de sensibilidad dice qué consentimiento se aplica; una política de estribillo es un instrucción al RECIPIENTE que viaja con una revelación. Tratar a código de estribir como filtro de lectura no bloquea nada; tratar un código de sensibilidad como uno lo bloquea todo. pacienteId se desnormaliza porque un chequeo de consentimiento pregunta qué está restringido para ESTE paciente, y caminando de cada recurso etiquetado de vuelta a su el sujeto sería una unión por fila en el camino caliente de cada lectura clínica. manualmenteAsignado está allí por lo que una reetiqueta automatizada no puede sobrescribir silenciosamente una restricción explícita de un médico, y asignadoReason así que "quién decidió esto Nota es datos de la Parte 2" tiene una respuesta que no es "el sistema hecho" tanto para defender una restricción como para levantar una aplicada por error. Urgente en lugar de teórica: 42 CFR La fecha de cumplimiento de la segunda parte transcurrida 16 de febrero de 2026 y la OCR abrió la ley civil el día 13. El 2024 Regla relajaba la segregación física pero mantuvo el aviso de redisgregación y el prohibir el uso en los procedimientos legales, por lo que la procedencia de la Parte 2 debe seguir siendo etiquetados y deben sobrevivir aguas abajo.
· kamo-shared-library
Ampliar la columna vertebral de auditoría para contabilidad clínica (SP2)
Cuatro campos sin los caminos de lectura clínicos no pueden funcionar, y ninguno de los cuales puede ser rellenado - cada discos algo sólo conocido en el momento de acceso. propósitoOUse es el que más importa, porque DOS diferentes legales Los informes se construyen a partir de las mismas filas y no están de acuerdo. 164.528 HIPAA, Echalete de seis años de tratamiento, pago y operaciones EXCLUDES. 42 CFR 2,25 libras, segunda parte, mirada de tres años a través de un EHR, en vivo desde el 16 de febrero 2026 INCLUYé ellos. Una fila sin propósito no pertenece a ninguna de las dos y no puede ser asignado a uno más tarde; derivarlo de la ruta de solicitud después es conjetura, y la salida es un documento legal entregado a un paciente. Al informar sobre las alarmas sobre revelaciones que nunca ocurrieron, La subdeclaración es una violación, y ninguna de las dos plantea una excepción. pacienteCompartmentId NO es resourceId. El registro sensible suele ser un Observación o nota cuyo id no dice nada sobre de quién es el gráfico, así que sin ella la pregunta literal de 164.528 libras, todo lo que se ha visto acerca de esto paciente no tiene predicado y se convierte en un escaneo completo de la mesa más grande en la plataforma. Consiguió un índice, y ese es un comercio declarado en lugar de un libre gana: en Yugabyte cada índice secundario es una tabla distribuida separada, por lo que un inserto de auditoría se convierte en cinco escritos distribuidos en lugar de cuatro. El Escritor con lotes lo absorbe; un escáner completo contra un reloj legal de 60 días no absorbe nada. accessBasis registra lo que AUTORIDAD la persona que llamó llegó al récord, como Excepto por qué lo querían. "Abriendo este gráfico para el tratamiento" es poco notable; "abrió este gráfico para el tratamiento y no está en el equipo de cuidado" es el hallazgo de una revisión de la aguja de información privilegiada existe para salir a la superficie. Si alguien estuvo en un equipo de atención hace seis meses no es responsable del equipo de atención de hoy mesa, así que está estampada ahora o se ha ido. Diecimos tipos de recursos clínicos anexados, que llevan el nombre de su recurso FHIR tipos para una fila de auditoría, una proyección AuditEvent y una revelación de TEFCA Todos dicen la misma palabra. Seguro de apegarse sin migración: la columna es VARCHAR (40), sin CHECK y un pines de prueba que todo nombre aún encaba, porque un nombre de gran tamaño falla en la inserción, que para un tipo cerrado por fallas significa rechazar la lectura misma. Cada campo es nulo, por lo que todas las filas existentes y cada llama no clínica no se ven afectados. 1636 pruebas de verde.
· kamo-shared-library
Las ocho tablas de índice de búsqueda mecanografiadas (SP3)
La búsqueda se ejecuta sobre tablas escritas explícitas, no JSONB con GIN. Eso es forzado. por la base de datos, no elegido: los propios documentos de Yugabyte establecen que un índice GIN no puede utilizar más de una entrada de escaneo necesaria, la GIN multi-columna no está soportada, solo IndexScan está disponible, y UPDATE es DELETE INSERT. El sencillo consulta US Core ordena la mayoría. Observación por paciente y categoría - es dos las entradas de escaneo necesarias, por lo que un servidor JSONB-primaria sería más lento en exactamente qué pruebas de certificación. Cada tabla existe porque su tipo tiene un modo de falla que los demás no: - SpidxDate almacena un INTERVAL, porque una fecha de FHIR es una. 2026, 2026-08 y 2026-08-24 son valores diferentes y eq2026 significa todo el año. A un instante los colapsa y luego silenciosamente no coincide, así que un La fecha de nacimiento registrada como un año no se encuentra en una búsqueda para ese año. A null significa STILL RUNNING, no faltar. - Indices de SpidxQuantidad SOLO el valor canónico de la UCUM, y deliberadamente ha no hay columna para el par ingresado. Comparar unidades entrantes permite una consulta para 7500 ug se pierde un 7,5 mg almacenados, y la señorita es silenciosa - un resultado vacío Lee exactamente igual que el paciente sin esa observación. Cantidad que no se puede canonizar no está indexado en absoluto, que es el Resultado. - SpidxComposite sostiene ambas mitades en una fila. Uniéndose a una mesa de fichas a un tabla de cantidad sobre el recurso no puede expresar "mismo elemento": una sangre la presión tiene componentes sistólicos y diastólicos, y ese unirse coincidiría con el código sistólico contra el valor diastólico y reportar un hipertenso leyendo que nunca se tomó. - SpidxString se normaliza y se ensuso por separado, porque la coincidencia debe no cambiar lo que se muestra. :contienes necesita trigrama que coincida con Yugabyte no lo hace bien; el Estado de Capacidad debe decodificarla en lugar de ofrecer un modificador que se degrade a un escaneo. - SpidxReference está separado de fhir-reference-link a propósito. El vínculo mesa es el GRÁC que "include y encadenando caminar"; este es el INDEX a Filtros de búsqueda simples. Ampliarlos hace que cada búsqueda ordinaria pague por las filas más anchas del gráfico y la doble indexación. hashIdentity es un hash de 64 bits de (resourceType, paramName) por lo que el líder llave se mantiene estrecha y de ancho fijo. Las colisiones son inofensivas porque ambas las cadenas también se almacenan. Tratar el hash como autoritario sería el bug. FhirSearchIndexShapeP pincha a los invariantes cuya violación es silenciosa, y es probado por mutación: re-añadiendo el valor introducido a SpidxQuantity y Cae el índice de reindexación de SpidxToken falló cada uno con los suyos explicación antes de la revertida. ClínicaEntityLa exploración de campo de la prueba de campo ahora camina también por la jerarquía de clases, así que una violación estacionó en una Superclasa de Mapped Que es exactamente donde viven columnas compartidas ya no puede esconderse de ella. 1630 pruebas verdes.
· SecurityService
Enviar a la IA, cerrada en MANAGE-SYSTEM-BUGS
La clase lleva "RequirePlatformRight", por lo que el interceptor resuelve el llamar y se niega antes de que cualquier manejador ejecute un cheque por comisión tendría ha sido una anotación olvidada lejos de un agujero, y el punto final llega a un Lámidos. El control de acceso ES la defensa. El modelo y el esfuerzo se mapean desde un vocabulario fijo, por lo que un cuerpo de solicitud puede expresar un modelo diferente y nada más, nunca una bandera. La fila de auditoría es escritos y COMMITADOS antes de que se llame a la máquina de dev, desde su propio frijol: REQUIRES-NEA través de una auto-invocación es inerte, y una fila que sólo Aparece en el éxito faltarían los despachos que colgaron. SessionPlatformFacts ahora viene de la biblioteca compartida, por lo que MediaService y Este servicio lee diodModeActive de la misma manera.
· MediaService
Bug CRUD, capturas de pantalla y la regla de visibilidad de una regla de visibilidad
Un fallo del sistema cruza la línea de alquiler en una dirección: la plataforma La organización ve la de cada inquilino, y ningún inquilino ve la de otro. Esa regla vive en **************** y en ningún otro lugar, decidido por dentro la consulta en lugar de filtrar una página de compra, y escrita a mano larga porque Optional.mapa trata un resultado nulo como EMPTY como mapa(...).oElse(-1L) Cayó y el org de la plataforma no vio nada en absoluto. Capturan capturas de pantalla Img bajo la nueva asociación SYSTEM-BUG-SCREENSHOT, validado por bytes mágicos en lugar de por el tipo de contenido que el navegador reclama. MANAGE-SYSTEM-BUGS se resuelve a través de la plataforma compartidaResolver y la sesión compartida sessionPlatformFacts, nunca fuera de la lista de derechos de los inquilinos de la sesión: el ayudante del inquilino trata a GD solo como un bypass, mientras que una plataforma adecuada necesita una ventana de modo dios de Primera Resolución.
· kamo-shared-library
Versión de recursos FHIR y columna de referencia (SP3)
Tres tablas que entre ellos hacen lectura, vread, historia, ETag y todos la forma de trabajo de "include". fhir-resource-current es un puntero, una fila por recurso para siempre. Existe. Así que un GET es un solo lookup de tecla primaria: encontrar la versión más alta.id en su lugar escanearía toda la historia de un recurso en cada lectura, así que la mayor cantidad Los gráficos modificados - los pacientes enfermos - serían los más lentos en abrirse. Es también lo que hace que el contador de la versión sea seguro, porque reclamar la siguiente versión debe ser una actualización ... RETURNANDO como la primera declaración del escrito. Lectura entonces escribir es una lectura después de escribir en una transacción, que Yugabyte aborta con 40001 bajo carga. intermitentemente, por lo que se presenta como un punto muerto aleatorio que un bucle de retenimiento parece arreglar sin arreglar. fhir-resource-version es sólo a apéndice y tiene el JSON canónico como un DERIVED leer caché, no el sistema de registro. projectorLa versión está en él porque esa caché se va rancio en el momento en que el mapper o perfil cambia, y sin él un bache de US Core sigue en silencio sirviendo la forma del año pasado hasta Pruebas de certificación se entera. El guardia solo para aplausos es un lanzamiento PreUpdate/PreRemove, NO Column (updatable = falso): Hibernate silenciosamente omite tal columna de la Actualización, por lo que el escrito parece tener éxito y la El valor no cambia. La base de datos es un REVOKE en la migración, porque las llamadas de la entidad son sorteadas por JPQL a granel y SQL nativa. fhir.reference.link es la columna de espalda única para "include", .revinclude, :iterate, búsqueda encadenada y "has", indexado en direcciones BOTH porque Incluir y Rerevinclude son escaneos opuestos y ninguno de los dos va a servir otro. sourcePath mantiene separadas dos referencias al mismo objetivo Encuentro nombrando a un practicante como participante y asistiendo es dos diferentes afirmaciones clínicas. Los recursos borrados mantienen sus filas. FHIR requiere un recurso borrado para mantener Responder vread y la historia, y quitar la fila liberaría el identificador lógico para su reutilización, reencontrando silenciosamente un nuevo recurso a un viejo rastro de auditoría. El arnés de disciplina necesitaba una regla reescrita. TheClinicalBase probó el MECHANISM; ahora es cadaClínicaEntityITenant Alcance y prueba la PROPIEDAD, aceptando una entidad de ClinicalBase subclase o un "EmbeddedId", cuyo primer campo es el inquilino. La infraestructura tablas necesitan la segunda forma porque en Yugabyte la clave principal es también el llave de ubicación. Ambas nuevas reglas están probadas en mutaciones: despojar el Aclaraciones solo y reordenar la tecla compuesta falló cada uno su propia explicación antes de la revertida. 1624 pruebas de verde.
· kamo-internal
Muestra la foto de un miembro en el marcador, no sus iniciales
La cara ahora viene del mismo índice de directorios cada otra lista de miembros en el la plataforma lee (utilizarMemberProfiles), por lo que la imagen de una persona en el marcador es idéntico a su imagen en los recolectores y la consola de asistencia en lugar de meramente parecido. Las iniciales se mantienen como la retroceder, con el tono todavía derivado de la miembro id para que alguien sin foto mantenga una identidad estable a través de los períodos. La URL del avatar se añade deliberadamente al punto final del marcador. Construyendo uno es el trabajo de MemberAvatarUrlService y vive en SecurityService: necesita el repositorio de avatar, un JDBC leído para la extensión de la foto (un Avatar cargado perezosa es un proxy de Hibernate, tan averías de AvatarPhoto es falsa a menudo suficiente para servir un 404) y el huésped reenviado. Su propio javadoc dice no añadir otra copia, y un segundo la implementación en MediaService habría sido exactamente eso. MUI's Avatar en lugar de un img o siguiente/imagen, específicamente para su retroceso: hace que los niños cuando la imagen no llega a la LOAD, no sólo cuando el src está ausentes. Ese es el caso que realmente sucede - una fila de avatar puede sobrevivir a la objeto detrás de él, por lo que una URL 404 bien formada y una img laminado a mano dejaría un glifo de imagen roto en el medio de la tabla. La variante 'sm', que coincide con todos los demás discos pequeños: diez originales descargados para ser sorteada a 20px es el tipo de residuos que solo aparece en el de otra persona conexión. getAvatarSizedUrl deja un avatar SVG generado solo. El directorio se camina sólo una vez que existe una tabla y sólo para los ids en él, y el índice es una caché de sesión de módulos que se comparte con esas otras pantallas, así que en práctica que esto se paga una vez, si acaso.
· SecurityService
Enciende el picker del espacio de trabajo
Un miembro de varias organizaciones elige ahora cuál abrir después de su contraseña, en lugar de ser elegida para ellos por el nombre de host. Este es el interruptor que hace que una organización sin un dominio de su propio alcance a través de la puerta principal en lugar de sólo desde /network. Alcantado sólo en el host. Un dominio personalizado denomina a su organización por sí solo y se salta el seleccionador por completo, y un miembro de exactamente uno organización está firmada directamente sin pantalla extra 17 de 53 usuarios tiene más de una membresía, por lo que la mayoría de las insérveas no cambian. Encendida una vez antes y revirtió la misma hora: la redireccional era relativa y decidido a iniciar sesión..apex/validate, kamo-login's propio validate página, que pasa la tecla de una sola vez y vuelve a la pantalla de inicio de sesión. Eso sería han roto cada inicio de sesión en el host de la plataforma, no sólo los multi-org. Ambas vías de terminación ahora nombran internamente..Aapex- explícitamente (a26b480) y pruebas derriba el destino. Todo lo que dependa está en vivo: la avenidad dividida y la sesión/seleccionar con prueba-start y paridad de disponibilidad (604dee2), kamo-login's picker (59e1a7a), kamo-internal sacando su organización de la sesión más bien que el huésco (97cd4a0b), y la solución de redirección.
· SecurityService
Enciende el picker del espacio de trabajo
Un miembro de varias organizaciones elige ahora cuál abrir después su contraseña, en lugar de tenerla elegida por el nombre de host. Esto es el interruptor que hace una organización sin un dominio propio alcanzable por la puerta principal en lugar de sólo desde /red. Alcanzarse sólo en el huésco de la plataforma. Un dominio personalizado denomina su organización por sí solo y salta al seleccionador por completo, y un miembro de exactamente uno organización se firma directamente sin pantalla extra 17 de 53 usuarios tener más de una membresía, por lo que la mayoría de los indicios no han cambiado. Mantuado hasta que todas las piezas estuvieran en vivo: la división de SecurityService y sesión/seleccionar (604dee2, más el ensayo-start y la paridad de disponibilidad en el mismo commit), el selector de kamo-login (59e1a7a), y la toma de kamo-internal su organización de la sesión y no del anfitrión (97cd4a0b). Volviendo antes de kamo-login podría hacer una lista de espacio de trabajo habría mostrado un en el inicio no devolviendo ninguna sesión, que ese cliente reporta como un inicio de sesión fallido.
· kamo-internal
Mostrar la URL de llamada OAuth de Google en su tarjeta de registro
Un operador que rellenaba el registro de Google Workspace no tenía nada que decir que para poner en los URI de redireccionables de la consola de Google Cloud, y el campo URI de Redirección en la carta no es la respuesta. su propia redireccion y nunca lee esa columna, por lo que lo que sea que se escriba no cambia nada. Mostrar el real en su lugar: solo para leer, copiable, por encima de los campos de credencial, y prellenado en la redireccionada almacenada cuando la fila está vacía para que el registro está de acuerdo con la pantalla. ProveedorDef lo lleva sólo para proveedores callback se fija en código; el resto mantiene una redireccion y que realmente es lo que sea los tipos de operador.
· SecurityService
Aceptar una org explícita, no sólo el anfitrión
Registro condenó la cuenta a cualquier organización que el anfitrión resolviera a. En el registro.kamocrm.com - la página de registro para cada organización con no register host de su propia organización de la plataforma, así que cada una de esas inscripciones creó la cuenta en el lugar equivocado. Un org nombrado en el cuerpo ahora gana, resuelto a través de OrgResolutionService por id o alias, cayiéndose de nuevo a la mirada del anfitrión exactamente como antes cuando ninguno es dado. La misma forma que la pista de letido, y la misma regla: decide cuál organización en la que se crea la cuenta, como lo hizo el anfitrión, y cada puerta debajo está intacto. Verificado en un clon limpio: Pasan 953 pruebas. (El árbol de trabajo lleva El trabajo de PHI en vuelo de otra sesión, que falla 63 pruebas no relacionadas allí.)
· APIService
Adelante /api/email/oauth/callback to EmailService
OAuth de Google redirigen el objetivo. La misma forma que el email y el proveedor de atención callbacks a su lado: público y sin sesiones, porque el popup aterriza en esto origen de pasarela sin sesión de inquilinos y el org viaja en ?state. El camino exacto supera el /api/email/** comodín en la especificidad del patrón, así que la delantera de devolución de borrasca en lugar de la ordinaria.
· EmailService
Servir la llamada OAuth de Google en /api/email/oauth/callback
La consola de la plataforma necesita una dirección para mostrar a un operador configurando el Registro de Google Workspace, la forma en que VOIP tiene /api/voip/oauth/callback. La única llamada de correo electrónico que existía era ************* compartido por Microsoft 365, Google y Zoho a través de una redirija configurada. Dale a Google propio, en el camino más corto, y deja los otros dos donde son: una URI de redirigen vive en una consola de vendedores, así que volver a señalar los tres han significado volver a registrarse en Entra y Zoho para mover uno. EmailOAuthCallbackController es una segunda puerta en ProviderController's de llamada, no una segunda implementación - la página de resultados, la decodificación del estado y el intercambio simgráfico permanece en un solo lugar. La redirta se elige ahora por proveedor, y porque el intercambio simgráfico tiene que volver a jugar lo que sea que solicitud de autorización enviada, la devolución de la llamada lee al proveedor de vuelta fuera de la Declaro que fue entregado.
· kamo-register
Brunción de marca y alcance con ?org=
register.kamocrm.com es la página de registro para cada organización que no tiene registrar host propio, por lo que el nombre de huésco no puede decir cuál es el visitante Regístrate a. Los resolvió todos a la organización de la plataforma. pintó la marca equivocada, y creó la cuenta en el lugar equivocado. ?org= nombra a la organización por id o alias. Selecciona la marca y viajes con la inscripción como organización se crea la cuenta - debajo. Una pista, no una autorización: el servidor la resolvía y cada uno de los La puerta de inscripción no ha cambiado. La marca proviene de SecurityService's /org/public/-F., relevado más bien que reimplementado para que la regla sobre lo que una referencia adivinable pueda exponer Se queda en un solo lugar. La base temática sigue a la organización, utilizada como dados la caída de su primera etiqueta como lo hace el camino del host. acme.kamocrm.com en kamocrm.com y pintar a un inquilino como la plataforma. themePath es memoizado, y el primer render se ejecuta necesariamente antes de la La referencia se resuelve, por lo que se recomienda una vez que marca tierras. Una visita de nombres ninguna organización despeja ninguna referencia a una visita previa registrada en esta ficha. Theme.tsx aquí es CRLF y fue editado por el sapo, así que el diff es el adición y nada más.
· kamo-shared-library
La capa de tipo de datos FHIR y su arnés de disciplina (SP3)
La fundación que toda entidad clínica se reutiliza, y la puerta de construcción que se detiene está a la deriva. Ambos aterrizan juntos a propósito: un arnés escrito antes es cualquier cosa a la policía pasa vacuamente, que es un modo de fracaso este Codebase ha sido mordido por antes. ClinicalBaseEntity es deliberadamente NO BaseUuidEntity. Ese utiliza LocalDateTime y TIMESTAMP, y FHIR instantánea requiere un offset. plataforma ya envió un insecto donde un localDateTime llegó al alambre con ninguno y un mensaje de 3:33 AM hecho como 10:33 AM. En una marca clínica Ese es un error de trazado. También lleva el inquilinoId, que lleva cada índice porque en Yugabyte la columna principal decide la tableta Y es el garantía de aislamiento: el mismo ser humano es un paciente diferente en cada práctica, por lo que el paciente no es el límite. Los tipos de datos llevan las decisiones que vale la pena de no volver a litigar: - FhirConcept enclines la codificación PRIMARY y envía el resto a fhir-coding. Una mesa infantil pura forzaría unirse a cada observación y condición Lea, que es la mayor parte del gráfico. - FhirQuantity almacena el par cánónico UCUM por separado, porque la cantidad La búsqueda compara las magnitudes. Sin ella una consulta para 7500 feos se pierde a Almacenado 7,5 mg y devuelve un resultado vacío que se lee exactamente igual a la paciente sin esa observación. Una falta silenciosa en un valor de laboratorio es el el peor modo de fracaso en el esquema. - FhirPeriod mantiene la precisión, porque una fecha FHIR es un INTERVAL: 2026, 2026-08 y 2026-08-24 son valores diferentes y eq2026 significa el año. - FhirReference es un discriminador más un identificador, nunca Hibernate, de nadie, que no se puede unir en HQL o indexar útilmente en una tienda distribuida. - Nombres, direcciones y puntos de contacto son cuadros infantiles que se encuentran ingresados, normalizados y (para direcciones) formularios estandarizados por USPS por separado. El acondicionamiento no debe cambiar lo que se muestra, y la exhibición no debe decidir qué fósforos. El actual EmbNameFull, EmbDireress y EmbPhoneNumber no puede expresar esto y no puede ampliarse sin romper llamadas de CRM. El arnés se hace con la reflexión sobre las clases compiladas en lugar de una el regex de origen, porque cada regla se trata de una anotación VALUE. Es Demostrada: se inyectaron cuatro violaciones simultáneas y las cuatro las reglas se dispararon con sus propias explicaciones antes de la reversión. 1623 pruebas de verde.
· SecurityService
Rechaza las exportaciones de corpus de formación de IA para los inquilinos de PHI
ANALYTICS-EXPORT está bloqueado porque las exportaciones dejan el límite sin de-identificación. Ambas exportaciones de formación ya tenían una auditoría cerrada por fallos. Allí ES un registro - pero cada línea lleva la extracción de un El documento y la exportación existen para formar un modelo sobre ellos. Una entidad cubierta Necesita un camino de determinación de puerto seguro o experto primero, y ninguno existe. QcController.trainingExport es per-org. Configuración del sistemaControloller el corpus de plataforma cruza deliberadamente a cada inquilino, por lo que utiliza afirma PlatformWideEnmitido: una entidad cubierta en cualquier lugar en el despliegue es suficiente para hacer un vertedero indiferenciado del contenido de los documentos de todos una revelación. Ambas negativas aterrizan ante el repositorio y la auditoría escriben. HMDA NO está deliberadamente vigilado aquí, es una presentación de regulación hipotecaria bajo MLOS, no una exportación analítica. 953 pruebas de verde, incluyendo dos nuevos casos de denegación.
· MCPGatewayService
Rechaza la ejecución de herramientas MCP para un inquilino que maneja PHI
executeTool forwards operator-suministran argumentos a una URL tipo operador y puede desovatar un proceso de estrodio, sin percha, sin guardia de la SSRF y no auditoría de destinos para que el conjunto de procesadores al que pueda alcanzar esté ilimitado y incognoscible. Es por eso que MCP-GATEWAY es BLOCKED-NO-BAA en lugar de estar pendiente trabajo, y no tenía ningún punto de aplicación hasta ahora. El guardia se sienta en McpServerManager.executeTool en lugar del controlador, antes del control de alquiler y antes de que se toque cualquier transporte. Nota: ************* ya estaba fallando antes de este cambio y no está relacionado.
· MediaService
Guardar mensajería social y Canva en sus puntos de asolización
SOCIAL-MESSAGING se aplica en SocialCredsResolver.resolve . punto que cubre cada adaptador y ambas direcciones. Sin credenciales significa no Telegram, Meta, Instagram, X o llamada Discord se puede hacer en absoluto, entrando verificación webhook incluido, desde entonces, los HMAC con el mismo secreto. Ninguno de esos cuatro firmará un BAA a cualquier precio, por lo que ninguna ingeniería lo mueve. CANVA se aplica en getConnection AND saveConnection. Guardando sólo el conectar dejaría un org que ya estaba conectado cuando se convirtió en un PHI inquilino todavía puede usarlo, y la lectura es lo que cada llamada de la API va a través de obtener una ficha. 213 pruebas de verde.
· kamo-shared-library
Guarda las últimas cuatro capacidades no ejecutadas; la línea de base ya está vacía
SOCIAL-MESSAGING, CANVA, MCP-GATEWAY y ANALYTICS-EXPORT eran cada uno declarado fuera de la frontera de cumplimiento, obligado a no contar con ningún ServiceType, y La declaración era todo el control. Ellos eran basales cuando PhiCapabilityGuardCallSiteTest los encontró por primera vez; los cuatro ahora tienen sitios de llamadas reales y la línea base está vacía. PhiTenantResolver elimina las tres líneas que cada servicio estaba a punto de duplicado. Cargar el org, mapear la bandera, preguntar al guardia de dónde saca el Medio de un mal está en silencio: una fila faltante debe resolverse a UNKNOWN, y Ortografiarlo falso convierte a un inquilino irresoluble en uno permitido. afirmarPlatformWideEnmitía existe para superficies sin un solo org, como una exportación de corpus que cruza deliberadamente a cada inquilino. Preguntando a la per-org pregunta allí negaría a UNKNOWN por la razón equivocada y leía como una bug; la pregunta que realmente se aplica es si CUALQUIER inquilino maneja PHI. CONOCIMIENTO GUAD se mantiene como un conjunto vacío en lugar de borrado, porque el el mecanismo es el punto: añadir un nombre de vuelta es posible, pero deliberado y visible en revisión. 1597 pruebas de verde.
· kamo-shared-library
Derechos, entidades, repositorios y OCE
MANAGE-SYSTEM-BUGS es una plataformaRightType y debe permanecer una: el envío. un administrador de inquilinos puede editar los modelos de seguridad de su propia organización. Las capturas de pantalla no necesitan una mesa. una fila de Img ya lleva un tipo de assoc más assoc object id, e imgs no tiene ninguna restricción CHECK en assoc. El nuevo asociación es reclamada por su propio StorageDomain, por lo que la prueba de cobertura que Falla la construcción de una subida sin contplejista se mantiene satisfecha. SessionPlatformFacts se mueve aquí desde SecurityService: MediaService ahora resuelve los derechos de la plataforma también, y dos lectores de diodModeActive es precisamente el fracaso que la clase advierte.

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito