Aller au contenu
KAMOUniverse

Changelog

Ce qui est nouveau.

Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.

  1. · kamo-shared-library

    Repositories de ressources FHIR, avec la réclamation de la version 40001-safe

    claimNextVersion est une MISE À JOUR... SET current-version-id- current-version-id 1 et doit être la PREMIERE déclaration d'une opération par écrit. L'évidence alternatif - lire la version actuelle, ajouter une, écrire - est un lecture-après-écriture à l'intérieur d'une transaction, avec laquelle YugabyteDB avorte SQLSTATE 40001 en toute monnaie. Il échoue par intermittence, donc il présente comme une impasse aléatoire, et une boucle de ré-essai semble la fixer tout en fixant Rien: le ré-assignation a la même forme et ne fait que gagner la course plus souvent. L'UPMATE prend également la serrure et lit en un aller-retour, qui est un moins que ce qu'il remplace. findClaimedVersion indique la même transaction et est sûr malgré cet avertissement, parce que l'UPMATE a déjà pris l'écluse de la rangée - Yugabyte Le problème de redémarrage de lecture concerne les lignes qu'une autre transaction peut se déplacer sous vous. La recherche de ressources retourne délibérément des ressources DELETED. Un appelant doit dire "jamais n'a existé" (404) de "supprimé" (410 Gone), et FHIR nécessite un ressources supprimées pour continuer à répondre à vread et à zhistory; les filtrer ici rendrait cela impossible une couche. FhirResourceVersionRepository déclare NO supprimer et NO update, et un test veille à ce qu'elle n'en gagne jamais. L'entité refuse les deux - Prêtre/Pré-Update, mais ceux-ci sont des ALLIATS D'ENTITÉ, et une donnée de printemps dérivéement de la suppression de compiles en JPQL en masse qui les contourne complètement. Un tel Une méthode effacerait silencieusement les antécédents cliniques alors que l'entité est propre la protection n'a jamais été mise à feu. Ne pas en déclarer une est la protection effective, et c'est une décision qu'aucun compilateur n'impose. L'histoire et la reprojection sont toutes deux mises à la disposition des deux pages, car un éditeur de modification active le graphique accumule des versions et une lecture non bornée n'est pas liée exactement où Il fait le plus mal. SharedLibBeanSafetyTest passe toujours: les référentiels sont des interfaces, et non Un haricot stéréotypé a été ajouté à la bibliothèque. 1655 test vert.

  2. · kamo-shared-library

    La colonne vertébrale de la rencontre (SP5)

    L'entité tout ce qui est clinique est suspendue - une note, un ordre, un diagnostic et une charge à la rencontre dans laquelle ils sont apparus. Les temps calculés et temps réels sont des paires de colonnes séparées, qui sont à la fois un décision de faisabilité et juste vraie. R4 donne une Rencontre a période unique; R5 et R6 répartie prévue à partir de l'état réel, de sorte qu'une modélisation est maintenant signifierait réécrire chaque ligne de rencontre et chaque requête d'ordonnancement lorsque qui ont les terres. C'est aussi la façon dont une pratique mesure son propre retard - le fossé entre ce qui a été réservé et ce qui s'est passé est exactement la chose qui s'effondre Ils se jettent. classCode est stocké sous la forme d'un code clair plus son système plutôt que d'un système intégré Codage, parce que R4 le tape comme un Coding et R6 le change; les colonnes survivent les deux. Il n'est pas non plus cosmétique: il pilote le code de lieu de service sur le Une réclamation, et une visite de télésanté facturée en personne est une fausse réclamation. La raison est écartée du diagnostic. Ce que le patient a dit et ce que le Un clinicien conclu sont des faits différents, et une carte qui les confond perd entièrement la plainte qui est présentée. Le participant est un tableau pour enfants parce que le cas de surveillance ne peut être aplatis: le prestataire de facturation sur une réclamation est calculé à partir du de surveillance plutôt que dactylographiés par un facturage, et sous-traite décide si la visite est facturable. est son propre domaine parce qu'un médecin superviseur peut être disponible sans être dans la pièce, et déduire la présence du rôle serait silencieusement Affirmer quelque chose à propos d'une affirmation que personne n'a vérifié. EncounterDiagnosis.rank est porteur et a l'air cosmétique. Lignes de services sur un point de réclamation professionnel à des diagnostics par POSITION - le pointeur est un index, pas un code - donc un ordre stocké qui ne correspond pas aux documents soumis l'ordre renvoie mal à toute ligne, et la réclamation est soit rejetée, soit payée contre une condition que le patient n'a pas. répondAtEncounter existe parce que tous les diagnostics listés n'ont pas été effectivement évalués, et le niveau E/M est calculés à partir de ceux qui l'ont été, compter la simple présence le gonfle. Les rencontres ne sont jamais supprimées - une erreur créée devient Entrée en erreur et reste, parce que les commandes, les billets et les charges déjà la référence et une référence suspendue est pire qu'un enregistrement visiblement erroné. 1651 test vert.

  3. · kamo-internal

    Dites aux gens un alias web est pris pendant qu'ils le tapent

    Le magicien de création est long de onze étapes et l'alias n'a été validé que pour FORMAT localement - si quelqu'un qui en détenait déjà a été découvert lorsque le a été soumis, à la fin, à une organisation qui n'a pas pu être créé. Maintenant, le champ dit ainsi tant qu'il est encore à l'écran. Débounced à 400ms, donc taper un mot est une demande. Chaque chèque porte un ticket et une réponse rassis sont abandonnés: taper "aceau" puis "acème-2" ne doit jamais régler le verdict de "meme". Les règles locales - tous les chiffres, et le format [a-z0-9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - avant toute demande, et sont délibérément les mêmes règles SecurityService l'application de la création. S'ils dérivent, le champ dit "disponible" pour quelque chose créer alors refuse, ce qui est l'échec que cela élimine. Ils sont purs fonctionne de sorte qu'un test peut les épingler, et le crochet passe les essais. Un chèque inaccessible se lit comme suit: "pourrait ne pas vérifier" et laisse le membre porter au lieu de ne pas s'ouvrir à "disponible" et de les remettre où Ils ont commencé. "Taken" nom n'a pas d'organisation: le magicien n'a pas d'affaires parler d'un client d'un autre. Les deux entrées d'alias sont couvertes - la voie web-alias et la ligne. 2943 essais et les 8 gardes passent, i18n inclus. Copie débarquée en kamo-traduction-dictionnaire en premier.

  4. · InitializerService

    Faire de orgs.alias unique à l'échelle de la plate-forme

    La colonne n'a jamais été contrainte. Survivable alors qu'un pseudo-alias n'était résolus en tant que (sûreté-id, alias) derrière un hôte, depuis deux orgs dans le cadre de différents prestataires pourrait en partager un sans ambiguité. Une fois un org peut être nommé directement par son alias avec l'orge, une répétition fait la référence ambigu - le résolveur le refuse plutôt que de deviner, laissant les deux ordres inatteignable par alias. Appliqué à la base de données en direct, après avoir renommé les six rangées qui sont entrées en collision (quatre partageant "acme-corp", deux partages "kia-kaha", tous ensemencés le même jour) avec un suffixe numérique. C'est ce qui donne un nouvel environnement identique index; le service n'a pas d'IC, donc pousser les navires rien à lui seul. Sur le bas (alias), parce que l'alias est stocké mot pour mot et Postgres égalité n'est pas insensible aux casses: "Acme-Corp" et "acme-corp" résolvent la même chose référence et doit entrer en collision. Partielle, parce que NULL ou vide signifie "pas d'alias" plutôt qu'un nom revendiqué, et un nombre quelconque d'orges peuvent n'en avoir aucun. Enregistre et continue si elle ne peut pas être créée plutôt que d'échouer Cela signifie qu'il existe des doublons, et que la création/mise à jour vérifie en refuse de nouvelles Quoi qu'il en soit.

  5. · SecurityService

    Répondre si un alias web est toujours gratuit

    Le magicien de création d'un org est long de onze pas et l'alias n'a été vérifié que lorsque le formulaire a été soumis, de sorte que quelqu'un qui a choisi un autre nom L'organisation déjà détenue a été informée à la fin, sur un organisme qui pourrait ne pas être créés. GET /org/alias-disponible répond la même question que les chemins d'écriture appliquent - prise à l'échelle mondiale et insensible à la casse, ou à tous les chiffres - de sorte que le magicien et le serveur ne peut être en désaccord. S'ils le faisaient, le champ dirait "disponible" car quelque chose crée alors refuse, ce qui est l'échec que cela supprime. Présidée par la session. La réponse est un booléen sur un nom que l'appelant a tapé, qui créer leur diraient quand même, mais il n'y a aucune raison de remettre un un moyen d'énumérer les alias utilisés. Conseil, pas une réserve: deux personnes peuvent taper le même pseudonyme à une fois et les deux, on lui dit qu'il est gratuit. L'indice unique et le contrôle de création régler cela; cela ne fait que réduire la fenêtre à quelque chose qui n'est pas la matière dans la pratique. 964 tests passent.

  6. · kamo-shared-library

    L'entité patiente et ses satellites de base américains (SP5)

    Une nouvelle entité plutôt qu'une réutilisation, et chaque rejet est concret que stylistique. Non membre: GET/api/sécurité/membres/noms retourne tous les membre d'une org avec une porte droite NO et le nom de retour du point de terminaison by-id parties plus la date de naissance sur un seul chèque de mêmeorg, de sorte que tout authentifié session - y compris celle d'un autre patient - énumérerait la liste. Non Lead: c'est «Héritage» (JOINED), et un graphique de recherche dans l'un d'entre eux pris / convertit la version Hibernate une grande partie de la flotte continue. Non Interlocuteur: ceux-ci appartiennent à un carnet d'adresses personnel de l'utilisateur, qui est le à l'opposé d'un patient appartenant à la pratique. Le même être humain est un patient DIFFÉRENT dans chaque pratique. C'est le bail limite, et non pas un compromis - chaque entité couverte détient son propre dossier, MRN et la posture de consentement, et l'identité interpratique est un problème de contrepartie pour l'IPM plutôt qu'une ligne partagée. Trois concepts de sexe/sexe sont des colonnes séparées parce qu'ils répondent différentes questions et une colonne ne peuvent pas servir les trois. D' bagarrité administrative le sexe est ce qui apparaît sur la paperasserie; le sexe n'est pas conforme à la certification et Chez, sexForClinicalUse est celui qui entraîne des plages de référence et posologie. Leur confinement est la façon dont un patient trans obtient la mauvaise référence distance sur un résultat de laboratoire. La date est une date locale délibérément - une date de naissance n'a pas de temps et non et lui donner un déplacement sur la ligne de date pour quiconque les voyages. C'est pourquoi la discipline exploite spécifiquement les interdictions LocalDateTime plutôt que tous les types locaux. qui ne connaît que leur année de naissance est fréquent, et stocker cela comme le 1er janvier puis correspondre à la date exacte silencieusement ne les trouve pas. La race et l'appartenance ethnique sont une table pour enfant parce qu'une personne peut signaler plusieurs et une seule colonne force quelqu'un d'héritage mixte dans la case suivante: Il arrivait de code. Ils alimentent les mesures de qualité et les différences de déclaration, donc ils ne sont pas des décorations démographiques - et des défauts de paiement auto-déclarés sont vrais parce qu'ils sont enregistrés à partir de ce qu'un patient a dit, pas infermé. Langue porte l'interprèteRequis comme un fait indépendant: un patient peut préfèrent l'espagnol et le décodeur un interprète, et en déduire l'un de l'autre est faux dans les deux sens. L'article 1557 se transforme en deux. actif signifie "ce dossier est utilisé", NOT soft-délété, et fusionnéInto plus fusiondreAli exister parce que la seule fusion existante de la plate-forme est à sens unique avec pas de défusion - et la fusion des deux mauvais patients est l'un des plus dommageables les erreurs qu'une pratique peut commettre. contactId conserve le lien CRM de sorte que l'attribution d'acquisition suit une personne de la première demande d'information sur le graphique. Aucun RSE autonome ne peut le faire, parce que Il n'a personne avant qu'il n'ait un patient. 1651 test vert.

  7. · kamo-shared-library

    Restrictions à la divulgation du grand livre et aux patients (SP2)

    DisclosureLedger est séparé de but exprès de phi-access-log. Le journal d'accès enregistre tous les LED, et la plupart d'entre eux sont un clinicien qui ouvre un graphique; la dérive d'une comptabilité à partir du patient et une liste de documents Des milliers de points de vue internes, qui sont à la fois erronés et alarmants. 164.528 Comptes pour DISCLOSURES - PHI quittant l'entité couverte - non interne utilisation. Les deux couvrent également des périodes différentes et des objectifs différents, qui sont les suivants: Pourquoi purposeOfUse est estampillé au moment de l'accès et porté ici plutôt que enfermée plus tard. hipaaAccountable est stocké plutôt que dérivé de l'objet lu, parce que la règle comporte des exceptions, l'objectif à lui seul ne rend pas compte - a la divulgation du patient autorisé est prise en compte différente de celle qui a été faite dans le cadre d'une exception de traitement - et en le recalculant plus tard, c'est-à-dire la ré-dernière les exceptions à partir de données qui n'existent plus. La restriction du patient est soumise à l'obligation de 164,522 euros qu'une entité visée peut NE PAS refus: un patient qui paie hors de poche en totalité peut exiger que le le service ne doit pas être divulgué à leur plan. C'est celle qui est habituellement mise en œuvre tort, parce que cacher la rencontre sur un écran ne s'y conforme pas. Il doit rester hors de la SUBMISSION DE LA CLAMI et des Enquêtes sur l'égalité, depuis les deux Dites au plan que le service a eu lieu. Un système qui le cache dans le graphique et facture qu'il a de toute façon divulgué exactement ce que le patient a payé pour prévenir, et ils découvrent leur explication des avantages. Donc supprimerFromClaims est son propre drapeau vérifié par le chemin de facturation, pas inféré à partir d'une règle d'affichage - les règles d'affichage sont assouplies pour l'utilisabilité et une suppression de la facturation ne doit pas voyager avec eux. supprimer De l'éligibilité est séparer à nouveau, parce qu'un 270 demandant un plan sur un service signale le service est envisagé; la suppression de la seule demande de fuite constitue le même fait; plus silencieuse. Les deux tables ferment les lignes plutôt que de les supprimer. Une restriction levée toujours explique pourquoi un service n'a pas été facturé pendant six mois, et le grand livre est Appliquer uniquement parce qu'une comptabilité qui peut être éditée n'est pas une comptabilité. Les limites temporelles sont exclusives à l'instant final et les essais brossent les deux les directions, y compris qu'une ligne incomplète nie plutôt que de lancer ce prédicat repose sur le chemin de facturation. 1653 test vert.

  8. · kamo-shared-library

    Relations de soins et rupture de verre, faits à l'origine de la base d'accès (SP2)

    PhiAccessBasis a obtenu CARE-TEAM et BREAK-GLASS dernier engagement; sans ces derniers actes; sans ces actes Deux tableaux ces valeurs sont décoratifs. Rien sur la plate-forme modélisait un Relation entre prestataires et patients - l'enquête n'a constaté aucune adhésion de ce type n'importe où - donc l'autorisation ne pouvait répondre que "que cette personne puisse lire des graphiques", que chaque clinicien dans une pratique peut le faire. La question au minimum nécessaire s'il peut s'agir de lire CE. CareRelationship est un FACT persistant, délibérément pas un type de rôle de droite, et chaque raison mord tout seul. Les droits sont pris en compte dans - en tant que login, donc une révocation ne parviendrait pas à une session en direct - une relation de fin de vie doit cesser d'accorder l'accès dès maintenant. Un nouveau droit arrive silencieusement GANDTED pour la subvention rôles d'administrateur, ce qui est catastrophique pour quelque chose destiné à être par patient. Et checkRight() retourne vrai pour tout en mode dieu, considérant qu'une relation existe ou non. Les rangées sont fermées avec valideTo, jamais supprimée. "A été cette personne sur les soins l'équipe lorsqu'ils ont ouvert le graphique en mars dernier" ne peut être répondu par celui d'aujourd'hui l'équipe de soins, et c'est exactement ce qu'un examen d'accès demande. BreakGlassGrant existe parce que refuser de le construire n'est pas le choix sûr. Un patient arrive inconscient et le clinicien traitant n'est pas en équipe de soins. Pourtant; un système qui dit non qu'un seul peuple travaille, et le contournement est une connexion partagée. Le contrôle n'est pas la prévention - c'est que l'accès est Limites, déclarées, en fonction du temps et LIRE AFTERWARDS. La raison en est le texte libre et requis, parce que sa valeur est qu'un humain l'a écrit et un autre humain lit Il est possible de retomber sans lire. Délibéréement PAS le mode dieu: c'est le porte-frise de plate-forme, appartenant à un serveur. Rouvernement des urgences cliniques d'une entité couverte par le vendeur de Kamo La porte dérobée est celle qui contrôle un critique BAA ne passera pas. Les deux prédicats temporels traitent leur instant final comme EXCLUSIF, et les tests épingler la frontière dans les deux directions - une extrémité inclusive s'étend silencieusement chaque relation terminée et toute dérogation périmée par une tique, et aucun échec soulève n'importe quoi. 1644 tests verts.

  9. · InitializerService

    Remettez locataire-id au recto de la ressource clinique

    KEY PRIMAIRE (logique-id, type de ressource, fernien) construite sur fhir-ressource-courant et fhir-ressource-version, car Hibernate émet «EmbeddedId colonnes alphabétiquement plutôt que dans l'ordre de déclaration. Le YugabyteDB la PREMIERE colonne de clé primaire décide de l'éclat du hachage, donc menant avec un UUID distribue l'ensemble du graphique d'une pratique sur chaque tablette et transforme chaque lecture en un ventilateur entre les nœuds croisés - l'exact opposé de la raison pour laquelle le Il existe une clé composite. Recrexe plutôt qu'ALTERs: changer une clé primaire est une réécriture de table et L'Altère de Yugabyte... Le soutien à la clé PRIMAIRE est limité. Les deux tableaux sont nouveaux. et vide donc c'est exact et bon marché, et le coureur REFUSE pour toucher un table portant des lignes - à ce moment-là, le bon mouvement est une migration planifiée avec une copie de données, et en découvrant qu'une ligne de journal battent la découverte des graphiques manquants. Idémpotent, et il vérifie contre la contrainte pg plutôt que de supposer: une fois la clé est juste, elle inspecte, est d'accord et ne fait rien. Des exceptions sont prises par table, parce qu'un jet s'échappe d'un coureur silencieusement retient chaque coureur ordonnée après celle-ci.

  10. · kamo-internal

    Ajouter l'onglet Bugs du système

    Les membres signalent des défauts dans la plate-forme avec des captures d'écran et les sites qu'ils la machine de développement. Un locataire ne voit que les bogues de sa propre organisation et la plate-forme L'organisation voit le côté serveur décidé par chaque locataire, donc la console Il n'a jamais le pouvoir de se tromper. MANAGE-SYSTEM-BUGS est une plateforme et portes une ACTION plutôt qu'une onglet Configuration, qui est ce que L'essai de couverture de surface enregistre maintenant. La capture d'écran prend une pâte ainsi qu'un glisser ou un clic, parce que une capture d'écran est presque toujours déjà sur le presse-papier à l'époque où quelqu'un s'assoit pour en faire rapport un. Envoyer à l'IA vérifie si la machine dev peut prendre une expédition AVANT le l'opérateur écrit n'importe quoi, et conserve son texte sur un échec plutôt que les faire écrire deux fois. Le modèle et l'effort sont envoyés sous forme de noms; la console Ne construit jamais de drapeau.

  11. · kamo-shared-library

    Étiquettes de sécurité DS4P, appliquées au moment de l'écriture (SP2)

    La projection indexée des étiquettes méta.sécurité d'une ressource, et la chose qui doit exister avant la première voie clinique de lecture plutôt qu'après premier client comportemental et santé. Appliqué à l'heure ÉCRI, jamais calculé à l'heure de lecture, pour une mécanique raison: une étiquette dérivée au moment de lecture doit être dérivée par chaque chemin de lecture indépendamment - recherche FHIR, le portail, la génération C-CDA, le TEFCA répondeur, exportation en vrac, soumission de réclamation - et celui qui oublie est Celui qui fuit. Écrit une fois à côté de la ressource, il s'agit d'un seul prédicat chaque chemin partage. Indexé plutôt que de ne vivre qu'à l'intérieur de la ressource JSON, parce que la segmentation est un FILTRE sur chaque requête clinique. Un label de base de données ne peut pas voir des moyens de filtrage dans le code d'application après le chargement des lignes, qui est à la fois lent et exactement la forme qui fuit sous pagination. labelKind existe parce que les quatre types sont appliqués différemment et doivent ne pas être comparées en une seule poche. Un niveau de confidentialité est un plafond pour qui peut lire; un code de sensibilité indique quel consentement s'applique; une politique de refrain est une l'instruction au RECIPIENT qui circule avec une divulgation. Traiter un le code de refrain en tant que filtre lu bloque rien; traiter un code de sensibilité comme on bloque tout. patientId est dénormalisé parce qu'un contrôle de consentement demande ce qui est limité pour ce patient, et marcher de chaque ressource étiquetée à son sujet serait une jonction par rangée sur la voie chaude de chaque lecture clinique. l'appellé manuelle est là, de sorte qu'un relabel automatisé ne peut pas écraser silencieusement une restriction explicite du clinicien, et assignéReason de sorte "qui a décidé cela note est les données de la partie 2" ont une réponse qui n'est pas "le système a été" - nécessaire à la fois pour défendre une restriction et pour lever une application par erreur. Urgente plutôt que théorique: 42 CFR Partie 2 Date de conformité Le 16 février 2026 et l'OCR ont ouvert l'exécution civile le 13. La 2024 la règle a assoupli la ségrégation physique, mais a conservé l'avis de redivulgation et à l'usage dans le cadre d'une procédure judiciaire, de sorte que la partie 2 doit toujours être étiquetement et doit survivre en aval.

  12. · kamo-shared-library

    Étendre la colonne vertébrale d'audit pour la comptabilité clinique (SP2)

    Quatre domaines les chemins de lecture clinique ne peuvent pas fonctionner sans, et aucun d'entre eux peut être remblayé - chacun enregistre quelque chose de non-connaissable au moment où l'accès. purposeOfUse est celui qui compte le plus, parce que DEUX Les rapports sont construits à partir des mêmes lignes et ils ne sont pas d'accord. 164.528 - HIPAA, Rétroaction de six ans - EXCLUDES Traitement, paiement et opérations. 42 CFR 2,25 dollars É.-U. - Retour de trois ans à travers un DSE, en direct depuis le 16 février 2026 - INCLUME. Une ligne sans but ne doit ni figurer et ne peut être affecté à un plus tard; le déduire du chemin de demande par la suite est La conjecture, et le résultat est un document juridique remis à un patient. Les alarmer trop tard dans les alarmes sur les révélations qui n'ont jamais eu lieu, La sous-déclaration est une violation, et ni l'un ni l'autre n'en fait exception. patientCompartementId n'est PAS resourceId. Le dossier sensible est généralement un Observation ou une note dont l'id ne dit rien sur le graphique dont il est, donc Sans elle la question littérale 164.528 - tout ce qui a jamais vu à ce sujet patient - n'a pas de prédicat et devient un scanner complet du plus grand tableau sur la plate-forme. Il obtient un indice, et c'est un commerce déclaré plutôt qu'un win free win: sur Yugabyte chaque index secondaire est un tableau distribué séparé, De sorte qu'un encart d'audit devient cinq écrits distribués au lieu de quatre. Le un écrivain par lots l'absorbe; un balayage complet contre une horloge légale de 60 jours Ne pas absorber quoi que ce soit. accessBasis enregistre ce qui a atteint l'appelant, car Distinguent de la raison pour laquelle ils le souhaitent. "Ouvrir ce tableau pour le traitement" est « ouvrir ce graphique pour le traitement et ne fait pas partie de l'équipe de soins » est-ce qu'il existe une révision de la répétition de l'initié. Si quelqu'un Il y a six mois, il y a six mois, ne relève pas de l'équipe de soins d'aujourd'hui table, donc il est est estampillé maintenant ou il est parti. Dix-neuf types de ressources cliniques en annexe, nommés d'après leur ressource FHIR types donc une ligne d'audit, une projection AuditEvent et une information TEFCA Enregistrer tous dire le même mot. Sûr pour ajuster sans migration: la colonne est VARCHAR(40) sans CHECK et une broches d'essai que chaque nom correspond toujours, parce qu'un nom surdimensionné échoue à insérer, qui pour un type fermé en panne signifie refuser la lecture elle-même. Chaque champ est nul, donc toutes les lignes existantes et tous les appelants non cliniques ne sont pas affectées. 1636 tests verts.

  13. · kamo-shared-library

    Les huit tables dactylographes dactylographiés (SP3)

    La recherche s'effectue sur des tables typées explicites, et non JSONB avec GIN. C'est forcé par la base de données, non choisie: les documents de Yugabyte indiquent un indice GIN ne peut pas utiliser plus d'une entrée de balayage requise, le GIN multicolonnes n'est pas pris en charge, Seules IndexScan est disponible, et UPDATE est DELETE et INSERT. Le single Les mandats de base des États-Unis sont les plus - l'observation par le patient ET par catégorie - est deux les entrées de scan requises, donc un serveur primaire JSONB serait le plus lent à exactement quels tests de certification est exactement. Chaque table existe parce que son type a un mode de défaillance que les autres ne: - SpidxDate stocke un INTERVAL, parce qu'une date FHIR est une. 2026, 2026-08 et 2026-08-24 sont des valeurs différentes et eq2026 signifie l'année entière. A Un instant unique les efface et puis silencieusement ne correspond pas, donc un La date de naissance enregistrée en tant qu'année n'est pas trouvée par une recherche pour l'année. A null high signifie STILL RUNNING, pas manquant. - SpidxQuantity indique UNIQUEMENT la valeur de la monnaie numérique de l'UCUM, et a délibérément pas de colonne pour la paire saisie. La comparaison des unités entrées laisse une requête pour 7500 ug ratent un 7,5 mg stocké, et l'erreur est silencieuse - un résultat vide C'est exactement comme si le patient n'avait pas une telle observation. Quantité qui ne peut pas être canonicalisé n'est pas indexé du tout, ce qui est l'honnêteté résultat. - SpidxComposite tient les deux moitiés sur la rangée UNE. Joignez-vous à une table symbolique à un Un tableau de quantité sur la ressource ne peut pas exprimer "même élément": un sang la pression a des composants systoliques et diastoliques, et cette jonction correspondrait le code systolique contre la valeur diastolique et signaler un hypertenseur lire qui n'a jamais été prise. - SpidxString maintient la normalisation et le brut séparément, car l'appariement doit Ne pas changer ce qui est affiché. :contains a besoin de trigramme correspondant à Yugabyte ne fait pas de bien; la déclaration de capacité doit la décodeur plutôt que proposer un modificateur qui se dégrade à un scanner. - SpidxReference est distinct de l'objet de fhir-reference-link. Le lien le tableau est le GRAPH qui inclut et enchaîner la marche; c'est l'INDEX a Filtres de recherche en clair. Leur fusion rend chaque recherche ordinaire payant pour les lignes plus larges et la double indexation du graph. hashIdentity est un hachage 64 bits de (ressourceType, paramName) donc le principal la clé reste étroite et de la largeur fixe. Les abordages sont inoffensifs car les deux les chaînes sont également stockées - le traitement du hachage comme faisant autorité serait le bug. FhirSearchIndexShapeTest brosse les invariants dont la violation est silencieuse, et est prouvée par mutation: ré-ajout de la valeur inscrite à SpidxQuantity et abandonnant l'indice de réindex de SpidxToken ayant chacun échoué avec son propre explication avant le retour. ClinicalEntityDisciplineTest scanne sur le terrain maintenant marche aussi sur la hiérarchie de classe, donc une violation garée dans une classe de marché - qui est exactement là où vivent les colonnes partagées - ne peuvent plus s'en cacher. 1630 tests verts.

  14. · SecurityService

    Envoyer à l'IA, sur MANAGE-SYSTEM-BUGS

    La classe porte "RequirePlatformRight", de sorte que l'intercepteur résout le l'appelant et refuse avant tout maniement de l'actionnaire - un contrôle par méthode aurait a été une annotation oubliée à distance d'un trou, et le critère d'évaluation atteint un les incitations. Le contrôle de l'accès est la défense. Le modèle et l'effort sont cartographiés à partir d'un vocabulaire fixe, de sorte qu'un corps de demande peut Exprimer un modèle différent et rien d'autre - jamais un drapeau. La ligne d'audit est écrit et COMMITÉS avant que la machine dev soit appelée, à partir de son propre haricot: REQUIESS-NE-NEW par l'auto-invocation est inerte, et une ligne qui seulement Il serait adviensé du succès qui manquait les dépêches qui pendus. SessionPlatformFacts vient maintenant de la bibliothèque partagée, donc MediaService et Ce service a lu godModeActive de la même façon.

  15. · MediaService

    Bug CRUD, captures d'écran et règle de visibilité unique

    Un bogue système traverse la ligne de location dans une direction: la plate-forme L'organisation voit tous les locataires, et aucun locataire n'en voit un autre. Cette règle vit dans - et nulle part ailleurs, décidé à l'intérieur la requête plutôt qu'en filtrant une page récupérée, et écrite à main longue parce que Facultatif.map traite un résultat nul comme moyen de carte (...).... ou Else(-1L) Il est tombé à travers et l'orge de la plate-forme n'a rien vu du tout. Des captures d'écran sont des lignes Img sous la nouvelle association SYSTEM-BUG-SCREENSHOT, validés par des octets magiques plutôt que par le type de contenu revendiqué par le navigateur. MANAGE-SYSTEM-BUGS est résolu par le biais de la plateforme partagéeResolvant les droits et la sessionPlatformFacts partagée, jamais sur la liste des droits des locataires de la session: le locataire aide à traiter GD seul comme un by-pass, tandis qu'une plate-forme adéquate a besoin une fenêtre OUVERT.

  16. · kamo-shared-library

    Versement des ressources FHIR et dorsale de liaison de référence (SP3)

    Trois tableaux qui, entre eux, font lire, vread, 'history, ETag et chaque la forme de l'emploi. fhir-resource-current est un pointeur, une ligne par ressource pour toujours. Il existe Donc un GET est une seule recherche de clé primaire: trouver la version la plus élevée au lieu de cela, on pourrait balayer toute l'histoire d'une ressource sur chaque lecture, donc le plus Des graphiques modifiés - les patients malades - seraient les plus lents à ouvrir. C'est aussi ce qui rend le compteur de version sûr, parce que la revendication de la prochaine version doit être une MISE À JOUR... RETOUR comme la PREMIERE déclaration de l'écriture. Lecture puis l'écriture est une lecture-après-écriture dans une transaction, que Yugabyte avorte avec 40001 sous charge et par intermittence, de sorte qu'il se présente comme une impasse aléatoire qu'une boucle de réessai semble être fixée sans fixation. fhir-resource-version est appendice uniquement et maintient le JSON canonique comme un DERIVÉle cache de lecture, pas le système d'enregistrement. projectorVersion est dessus parce que cette cache sort le moment où le mappeur ou le profil change, et sans qu'un cœur américain se cache silencieusement qu'il sert la forme de l'année dernière jusqu'à ce que les tests de certification sont découverts. Le garde de l'appendice est un jet - Pré-à-le-dé-dés-désorgement/-prédécimal, PAS DE PASSERE DE VOUS DE L'ÉTÉRIEUR : Hibernate silencieusement omet une telle colonne de la MISE À JOUR, de sorte que l'écriture semble réussir et le La valeur ne change tout simplement pas. La moitié de la base de données est un REVOKE dans la migration, parce que les rappels d'entité sont contournés par le JPQL en masse et le SQL natif. fhir-reference-link est l'épine dorsale unique pour 'include, 'revinclude, :itéra, recherche enchaînée et zha, indexé dans les directions à la fois parce que Les scans sont opposés et aucun indice ne sert le autre. sourcePath maintient deux références à la même cible à l'écart - un Rencontre désignant un praticien à la fois comme participant et y participant est deux différentes allégations cliniques. Les ressources supprimées conservent leurs rangées. FHIR nécessite une ressource supprimée pour conserver répondre à vread et à l'histoire, et supprimer la ligne libérerait l'id logique pour réutiliser, rattacher silencieusement une nouvelle ressource à une ancienne piste d'audit. La discipline a besoin d'une règle réécrite. TheClinicalBase teste le MECHANISM; c'est maintenant chaqueClinicalEntityIsTenant Élément et test de la PROPRIÉTÉ, acceptant soit une entité clinique sous-classe ou un «EmbeddedId» dont le premier champ est le locataireId. L'infrastructure les tables ont besoin de la deuxième forme parce que sur Yugabyte la clé primaire est aussi la clé de colocalisation. Les deux nouvelles règles ont fait preuve de mutation: ajuster uniquement les annotations et réorganiser la clé composite chacune avec leur propre explication avant le retour. 1624 tests verts.

  17. · kamo-internal

    Montrez une photo d'un membre sur le tableau de bord, pas leurs initiales

    Le visage vient maintenant du même index d'annuaire tous les autres membres sur la la plate-forme est lue (utiliserMemberProfiles), donc l'image d'une personne sur le tableau de bord est identique à leur image dans les cueilleurs et la console de présence plutôt que simplement similaire. Les initiales restent comme la solution de repli, la teinte étant toujours dérivée de la membre id donc quelqu'un sans photo garde une identité stable à travers les périodes. L'URL de l'avatar n'est PAS additionnée au point d'extrémité du tableau d'affichage. Construire un est le travail de MemberAvatarUrlService et il vit dans SecurityService: il a besoin de dépôt d'avatars, une lecture JDBC pour l'extension de photo (un Avatar à charge paresseuse est a Proxy hiberné, donc cas d'AvatarPhoto est assez faux pour servir un 404) et l'hôte transmis. Son propre javadoc dit de ne pas ajouter une autre copie, et une seconde Dans le cadre de MediaService, cela aurait été exactement le cas. L'avatar de MUI plutôt qu'un img ou next/image, spécifiquement pour sa repli: il rend les enfants lorsque l'image ne parvient pas à se cacher, pas seulement quand le src est absents. C'est le cas qui se produit réellement - une rangée d'avatars peut survivre le objet derrière lui, donc une URL 404 bien formée et un img laminé à la main laisseraient un glyphe d'image brisée au milieu de la planche. La variante 'sm', faisant correspondre tous les autres petits disques: dix originaux téléchargés pour être dessiné à 20px est le genre de déchets qui n'apparaît que sur celui de quelqu'un d'autre getAvatarSizedUrl laisse un avatar SVG généré seul. Le répertoire n'est donné qu'une fois qu'un tableau existe et seulement pour les ids dessus, et l'index est un cache de session à portée de module partagé avec ces autres écrans, donc dans pratique, cela est payé une fois, le cas échéant.

  18. · SecurityService

    Retournez le sélecteur d'espace de travail

    Un membre de plusieurs organisations choisit maintenant celui qui ouvre après leur un mot de passe, au lieu d'être choisi pour eux par le nom d'hôte. C'est le le changement qui rend une organisation sans domaine de sa propre portée par la porte d'entrée plutôt que seulement à partir de / réseau. Atteint uniquement sur l'hôte de la plate-forme. Un domaine personnalisé nomme son organisation de son côté et saute entièrement le cueilleur, et un membre d'un couchage L'organisation est signée directement sans écran supplémentaire - 17 utilisateurs sur 53 avoir plus d'un membre, de sorte que la plupart des signes sont inchangés. Allé une fois auparavant et est revenu la même heure: la redirection était relative et résolu à login.-apex-/validate, kamo-login's own valid page, qui passe la clé à usage unique et retourne à l'écran de connexion. Cela serait ont brisé chaque inscription sur l'hôte de la plate-forme, et pas seulement les multi-orgs. Les deux voies d'achèvement désignent désormais l'intérieur. teste l'épingle de destination. Tout ce dont il dépend est en direct: la division auth et la session/sélection avec Début-essai et parité de disponibilité (604dee2), cueilleur de kmo-login (59e1a7a), alias internes, s'engageant plutôt à la session que l'hôte (97cd4a0b), et la correction de redirection.

  19. · SecurityService

    Retournez le sélecteur d'espace de travail

    Un membre de plusieurs organisations choisit maintenant lequel ouvrir après leur mot de passe, au lieu de le faire choisir pour eux par le nom d'hôte. C'est ce que est le changement qui fait une organisation sans domaine propre irrévisible par la porte d'entrée plutôt que seulement à partir de / réseau. Réveillé uniquement sur l'hôte de la plate-forme. Un domaine personnalisé nomme son organisation de son propre et saute entièrement le cueilleur, et un membre d'un membre exactement L'organisation est signée directement sans écran supplémentaire - 17 des 53 utilisateurs avoir plus d'un membre, de sorte que la plupart des signes sont inchangés. Détenu jusqu'à ce que chaque pièce soit en direct: la division de SecurityService auth et session/sélectionner (604dee2, plus la parité de départ et de disponibilité dans l'essai le même commit), le cueilleur du kamo-login (59e1a7a) et la prise intérieure de kémo son organisation à partir de la session plutôt que de l'hôte (97cd4a0b). Tourner avant que kamo-login puisse rendre une liste d'espace de travail aurait montré un l'incitation en ne renvoyant aucune session, que ce client signale comme un identifiant défaillant.

  20. · kamo-internal

    Montrez l'URL de rappel OAuth de Google sur sa carte d'enregistrement

    Un opérateur qui remplissait l'enregistrement de Google Workspace n'avait rien à dire les modalités de la redirection des URI de redirection autorisées de la console Google Cloud, et le champ de l'URI de redirection sur la carte n'est pas la réponse et la rediffusion du service Email sa propre redirection configurée et ne lit jamais cette colonne, donc tout ce qui est tapé Il n'y a rien qui change. Montrez plutôt le vrai: en lecture seule, copieable, au-dessus des champs d'accréditation, et pré-remplis dans la redirection stockée lorsque la ligne est vide, de sorte que l'enregistrement est d'accord avec l'écran. ProviderDef ne le porte que pour les prestataires dont callback est fixé en code; le reste garde une redirection qui est vraiment n'importe quoi les types d'opérateurs.

  21. · SecurityService

    Accepter un orge explicite, et pas seulement l'hôte

    Enregistrement lié le compte à toute organisation que l'hôte a résolu à. Sur register.kamocrm.com - la page d'inscription pour chaque organisation avec pas d'hébergement d'enregistrement de son propre site - c'est l'organisation de la plate-forme, de sorte que chaque L'une de ces inscriptions a créé le compte au mauvais endroit. Une orgée nommée dans le corps gagne maintenant, résolu par OrgResolutionService par id ou alias, retomber à la recherche de l'hôte exactement comme avant quand aucun n'est donnés. Même forme que l'indice de signe, et la même règle: il décide lequel l'organisation du compte est créé sous, comme l'a fait l'hôte, et chaque porte au-dessous de laquelle il n'est pas touché. Vérifié sur un clone propre: 953 tests passent. (L'arbre de travail porte les travaux d'une autre session en vol, qui échouent 63 tests non liés là-bas.)

  22. · APIService

    Transférer /api/email/oauth/callback à EmailService

    La cible de redirection OAuth de Google. Même forme que le courrier électronique et le fournisseur de rencontres rappels à côté d'elle: public et sans session, parce que le pop-up atterrit sur ce l'origine de la passerelle sans séance de locataires et les voyages de l'orge dans l'état. Le chemin exact dépasse le /api/email/- wildcard sur la spécificité du modèle, donc le rappel d'auth-stripping forward se déroule plutôt que l'ultracle.

  23. · EmailService

    Servir le rappel OAuth de Google sur /api/email/oauth/callback

    La console de plate-forme a besoin d'une adresse pour montrer qu'un opérateur met en place le Enregistrement de Google Workspace, la manière dont VOIP a /api/voip/oauth/callback. Le seul rappel par courriel qui existait était : partagée par Microsoft 365, Google et zoho par l'intermédiaire d'une redirection configurée. Donnez Google seul, sur le chemin le plus court, et laissez les deux autres où ils sont: un URI de redirection vit dans une console de vendeur, de sorte que le pointage des trois serait ont signifié une nouvelle enregistrion d'Entra et de zoho pour en déplacer un. EmailOAuthCallbackController est une deuxième porte sur la société ProviderController rappel, pas une deuxième implémentation et la page de résultat, le décodage d'état et l'échange de jetons restent au même endroit. La redirection est maintenant choisie. le fournisseur, et parce que l'échange de jetons doit rejouer n'importe quel demande d'autorisation envoyée, le rappel lit le fournisseur à partir du l'État a été remis.

  24. · kamo-register

    Marque et inscription sur l'étendue avec l'orge

    register.kamocrm.com est la page d'inscription pour chaque organisation qui n'a pas Inscrire son propre hôte, de sorte que le nom d'hôte ne peut pas indiquer lequel un visiteur est s'inscrire. Il les a toutes résolues à l'organisation de la plate-forme - qui a peint la mauvaise image, et a créé le compte au mauvais endroit. L'org désigne l'organisation par id ou alias. Il sélectionne le marquage et Voyages avec inscription en tant qu'organisation le compte est créé sous. Un indice, pas une autorisation: le serveur le résout et chaque L'enregistrement est inchangé. L'image de marque provient de SecurityService's /org/public/'ref', relayé plutôt que réimplémenté de manière à ce qu'une référence devinabilité peut exposer reste au même endroit. La base thématique suit ensuite l'organisation, utilisée comme - laisser tomber sa première étiquette la façon dont le chemin d'accueil tourne acme.kamocrm.com dans kamocrm.com et peignez un locataire comme plate-forme. themePath est commémoré, et le premier rendu court nécessairement avant le la résolution de référence, elle est donc recalculée une fois que les terres de marquage. Une visite de nommage Aucune organisation n'éclaire une référence à une visite antérieure enregistrée dans cet onglet. Theme.tsx ici est CRLF et a été édité en s'octet, donc le diff est le l'ajout et rien d'autre.

  25. · kamo-shared-library

    La couche de type de données FHIR et son harnais de discipline (SP3)

    La fondation chaque entité clinique réutilise, et la porte de construction qui s'arrête il dérive. Les deux atterrissent ensemble à dessein: un harnais écrit avant est n'importe quoi pour que la police passe de façon variable, ce qui est un mode de défaillance la base de code a été mordue par avant. ClinicalBaseEntity n'est délibérément PAS de baseUuidEntity. Celui-ci utilise LocalDateTime et TIMESTAMP, et FHIR instantané nécessite un décalage - ceci une plate-forme déjà expédiée d'un bogue où un LocalDateTime a atteint le fil avec Aucun et un message de 3:33 AM rendu à 10h33 AM. Sur un horodatage clinique c'est une erreur de cartographie. Il porte également locataireId, qui mène tous les index parce que sur Yugabyte la colonne principale décide que le comprimé ET est le garantie d'isolement: le même être humain est un patient différent dans chaque la pratique, donc le patient n'est pas la frontière. Les types de données portent les décisions qui ne méritent pas de se re-litguer: - FhirConcept met en ligne le codage PRIMARY et envoie le reste au codage fhir. Une table pour enfants purs forcerait une jonction sur chaque observation et condition lire, qui est la plupart du graphique. FhirQuantity stocke la paire de canoniques UCUM séparément, car la quantité la recherche compare les grandeurs. Sans cela, une requête pour 7500 ug manque a stocké 7,5 mg et retourne un résultat vide qui se lit exactement comme le patient n'ayant pas une telle observation. Un faux silence sur une valeur de laboratoire est le le pire mode de défaillance dans le schéma. - FhirPeriod garde la précision, car une date FHIR est un INTERVAL: 2026, 2026-08 et 2026-08-24 sont des valeurs différentes et eq2026 signifie l'année. - FhirReference est un discriminateur plus un id, jamais Hibernate 'N'importe lequel, qui ne peut pas être rejoint en HQL ou indexé utilement sur un magasin distribué. - Les noms, adresses et points de contact sont des tables pour enfants saisies; Formulaire normalisés et (pour les adresses) normalisés par USPS séparément. L'appariement ne doit pas changer ce qui est affiché, et l'affichage ne doit pas décider Qu'est-ce qui correspond. L'actuel EmbNameFull, EmbAddress et EmbPhoneNumber ne peut pas l'exprimer et ne peut être élargi sans casser les appelants du CRM. Le harnais fait respecter par réflexion sur les classes compilées plutôt qu'un source regex, parce que chaque règle est à propos d'une annotation VALUE. C'est manifestations de mutation: quatre violations simultanées ont été injectées et les quatre les règles ont été licenciées avec leurs propres explications avant le retour. 1623 test vert.

  26. · SecurityService

    Refuser les exportations de corpus de formation d'IA pour les locataires de l'Institut

    ANALYTICS-EXPORT est bloqué parce que les exportations quittent la frontière sans dés-identification. Les deux exportations de formation avaient déjà fait l'objet d'un audit fermé par défaut est un enregistrement, mais chaque ligne porte les CONTENUS COMMUTÉS Un document et l'exportation s'y trouvent pour former un modèle. Une entité visée a besoin d'une voie de détermination de la sphère de sécurité ou d'expert d'abord, et ni l'un ni l'autre n'existe. QcController.trainingExport est par or. SystemConfigurationContrôleur Un corpus de plate-forme traverse délibérément chaque locataire, il utilise donc assertPlatformWidePemetted: une entité couverte n'importe où sur le déploiement est suffisant pour faire une décharge indifférenciée du contenu du document de chacun une divulgation. Les deux refus décrochent avant la lecture du dépôt et l'écriture de l'audit. HMDA n'est pas délibérément gardé ici - il s'agit d'un dépôt réglementaire en matière de prêts hypothécaires MLOS, pas une exportation analytique. 953 tests verts, y compris deux nouveaux cas de refus.

  27. · MCPGatewayService

    Exécution de l'outil MCP de refus pour un locataire qui gère PHI

    executeTool forwards arguments fournis par l'opérateur à une URL de type opérateur et peut engendrer un processus stdio, sans liste d'autorisation, sans protection SSRF et sans l'audit de destination - de sorte que l'ensemble de processeurs qu'il peut atteindre n'est pas lié et Inconnaissable. C'est la raison pour laquelle MCP-GATEWAY est BLOCKÉ-NO-BAA plutôt qu'en attente et il n'avait pas de point d'application jusqu'à présent. Le garde se trouve dans McpServerManager.executeTool plutôt que dans le contrôleur, avant le contrôle de location et avant tout transport. Remarque: « avant ce changement et n'est pas lié.

  28. · MediaService

    Garder la messagerie sociale et Canva à leurs points d'étranglement des justificatifs d'identité

    Social-MESSAGING est appliqué dans SocialCredsResolver.resolve, le plus étroit point couvrant chaque adaptateur et les deux directions. Pas d'accréditation, ce n'est pas le cas. L'appel Telegram, Meta, Instagram, X ou Discord peut être effectué, entrant La vérification des crochets web incluait, puisque ces HMAC ont le même secret. Néant Parmi ces quatre-là, il signera un BAA à n'importe quel prix, donc aucune ingénierie ne le déplace. CANVA est appliqué sur getConnection AND saveConnection. Ne régnant que le connect laisserait un orge qui était déjà connecté quand il est devenu un PHI locataire toujours capable de l'utiliser, et la lecture est ce que chaque appel API va par l'intermédiaire d'un jeton. 213 tests verts.

  29. · kamo-shared-library

    Garder les quatre dernières capacités non appliquées; la ligne de base est maintenant vide

    SOCIÉTÉSALES, CANVA, MCP-GATEWAY et ANALYTICS-EXPORT étaient chacun déclaré en dehors de la limite de conformité, lié à l'absence de serviceType, et vérifiée par rien - la déclaration était l'entière contrôle. Ils étaient à l'inclusion lorsque PhiCapabilityGuallCallSiteTest les a découverts pour la première fois ; les quatre ont maintenant de véritables sites d'appel et la ligne de base est vide. PhiTenantResolver supprime les trois lignes chaque service était sur le point de dupliquer - charger l'orge, cartographier le drapeau, demander à la garde - où obtenir le au milieu, on se taise: une ligne manquante doit se résoudre à UN RECONNU, et l'orthographié fausse transforme un locataire insoluble en un locataire autorisé. assertPlatformWidePetitted existe pour les surfaces sans org unique, comme une exportation de corpus qui traverse délibérément tous les locataires. Demander l'or par or Une question serait liée à UNKNOWN pour la mauvaise raison et serait interprétée comme une bug ; la question qui s'applique réellement est de savoir si N'importe quel locataire gère le PHI. KNOWN-UNGUARDED est conservé en position vide plutôt que supprimé, parce que le mécanisme est le point: l'ajout d'un nom en retour est possible mais délibéré et visible dans l'examen. 1597 tests verts.

  30. · kamo-shared-library

    Droits, entités, référentiels et DTO

    MANAGE-SYSTEM-BUGS est un type PlatformRightType et doit rester un: l'expédition un administrateur locataire peut modifier les modèles de sécurité de sa propre organisation. Les captures d'écran n'ont pas besoin d'un tableau et une ligne Img porte déjà un type d'assompé plus un a assoc object id, et imgs n'a pas de contrainte VÉRIVANT sur assoc-id. La nouvelle l'association est revendiquée par son propre StorageDomain, de sorte que le critère de couverture échoue à la base d'un téléchargement non compris reste satisfait. SessionPlatformFacts déménage ici de SecurityService: MediaService maintenant résout aussi les droits de la plate-forme, et deux lecteurs de godModeActive est précisément l'échec dont la classe met en garde.

Votre univers vous attend.

Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.

Gratuit pour toujours — aucune carte de crédit requise