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

    Examens de la liste des graphiques, réaction allergique/sévérité, raisons du statut, diagnostics de commande, note d'examen des résultats

    - ClinicalListReview (fhir_chart_list_review): un véritable dossier de revue pour l'allergie et Listes de médicaments, donc 'reviewed' s'arrête pour signifier 'au moins une ligne existe' - AllergyIntolerance: reaction_text, reaction_severity, status_reason; trouverActifPourContrôle Exclut maintenant les assertions NKDA (et les lignes réfutées); findActiveNoKnownAllergy / findActiveRecord - Condition.status_reason, Observation.status_reason, ServiceRequest.codes_raison, Commentaires sur DiagnosticReport.review_note - EncounterDiagnosisRepository; **************** (fiche de flux des éléments vitaux)

  2. · kamo-shared-library

    Entités de planification pour l'horloge de la pratique, les salles, les paiements de bureau et la sensibilisation au rappel

    - PracticeSettings (ehr_practice_settings): le fuseau horaire de la pratique et la durée de la visite par défaut - PracticeRoom (ehr_practice_room): les salles où un patient est placé; retiré, jamais supprimé - PatientPayment (ehr_patient_payment): paiements de bureau enregistrés (jamais traités), annulés avec une raison - RecallOutreach (ehr_recall_outreach): tentatives de contact enregistrées contre un rappel - Rendez-vous: room_id, rescheduled_from_id / rescheduled_to_id, checked_out_by_member_id - ScheduleBlock: étiquette pour le temps bloqué (déjeuner, réunion, vacances) - PatientRecallRepository: countDue / countOverdue ; WaitlistEntryRepository: findCandidatesAnyType (un UUID nul dans ':x IS NULL' atteint Postgres sans être tapé) - PhiResourceType: PATIENT_RECALL, PATIENT_PAYMENT ajouté

  3. · kamo-shared-library

    Dossier d'inscription à la réception — coordonnées, contacts d'urgence, compteur MRN, champs d'écriture de couverture

    Le patient obtient la méthode de contact préférée, le membre de soins primaires et la pharmacie préférée; les contacts d'urgence sont FHIR Patient.contact (fhir_patient_contact, retiré, non supprimé); Les tables télécom et adresse utilisent les tables existantes fhir_contact_point / fhir_address (nouveau PatientCommunicationRepository pour la langue de préférence. Un référentiel par pratique La ligne ehr_mrn_counter alloue les MRN dans un upsert atomique. La recherche de patients gagne given-name, Les requêtes date-de-naissance-seulement, préfixe-avec-date-de-naissance et par-id Description du service et EligibilityCheck une note de vérificateur. DDL appliqué à la production avant cette poussée.

  4. · kamo-shared-library

    Documents graphiques, modèles de notes d'exercice, texte côté lecture de la note et registre de retrait

    - PatientDocument (ehr_patient_document): catégorie, titre, date du document, contenu type, taille, SHA-256, imagerie Img id + clé de stockage, téléchargeur, saisie-dans-erreur Avec qui/quand/pourquoi. Jamais supprimé. - ClinicalNoteTemplate (ehr_note_template): modèles de notes propres à une pratique. - ClinicalNote: colonnes entered_in_error_at/_by/_reason; corps de courant transitoire, Type de version, drapeau SI, noms des auteurs/cosignataires/patients pour les lectures. - ClinicalNoteVersion: nom de l'auteur transitoire. DDL appliqué à la production à la main (additif).

  5. · SecurityService

    Refus réels, décisions d’examen de bris de verre, envoi honnête de réclamations, EOBs tapés à la main

    - EhrRuleViolationException: un refus de règle de gestion (note non signée à la fin, double réservation, pas l'auteur/cosignataire, auto-cosigner, déjà signé, restreint par l'assureur, bris de verre sans raison, trop d'exportations, Correspondance supprimée) répond maintenant à 409/422 avec sa phrase en langage clair Au lieu de l'opaque 'No such record'. Les dénis de relation restent 404. - EhrExceptionHandler fonctionne à la plus haute priorité sur le commerce mondial et couvre la qualité, l'administration du portail, le CCD, l'exportation en vrac et le FHIR (un Il manquait juste qu'il y ait une 500). - Revue de casse-verre: file d'attente avec les noms plus l'histoire, et une décision (approprié / inapproprié / nécessite un suivi, note requise, jamais la vôtre). - Annuaire des partenaires d'échange pour les cliniciens (VIEW_CHART, noms uniquement). - Réclamations: CPT/HCPCS, modificateur, CIM-10, pointeur, IPN et lieu de service vérifications de format; payeur et membre id de la couverture choisie; une visite doit être Fermé à la facturation; les procédures facturées quittent la file d'attente non facturée; un projet de réclamation ClaimTransport seam: sans chambre de compensation, soumettre une demande de remboursement marque READY et le dit; marque-sent enregistre le canal, qui et note. - Les envois de fonds peuvent être saisis à partir d'un EOB papier, et l'affichage déplace maintenant de l'argent de non appliqué à appliqué.

  6. · kamo-shared-library

    Enregistrer la façon dont une réclamation a été envoyée et répertorier les accès d’urgence examinés

    Une revendication gagne ready_at, submission_channel, submitted_by_member_id et submission_note, c'est-à-dire une réclamation envoyée à la main par l'intermédiaire d'un portail de paiement ou sur papier est enregistré honnêtement au lieu d'un flip de statut qui prétend être une chambre de compensation Le référentiel de subventions brise-verre gagne le statut de référentiel à historique révisé Finder affiche la nouvelle liste d'écrans de révision sous sa file d'attente.

  7. · kamo-internal

    La facture affiche le bloc de remise des comptes débiteurs, comme le font les devis

    La boîte de dialogue de facturation affiche le même QuoteRemittanceBlock que l'aperçu du devis, des détails des créances du vendeur, alors que tout est dû. Les créances Switch dit maintenant qu'il couvre les devis et les factures.

  8. · kamo-signer-monorepo

    Le bloc de remise de la facture se lit exactement comme celui du devis

    Même en-tête, étiquettes et avis ACH Credit Only (signer.quote.remit), avec le La référence du numéro de facture est conservée en dessous.

  9. · SecurityService

    Les factures impriment les détails des comptes débiteurs ACH exactement comme les devis

    Le PDF et le courriel contiennent maintenant le bloc de remise du devis, mot pour mot: - Remettre le paiement à - bénéficiaire (nom légal) - banque - numéro de routage (ABA) - numéro de compte - l'avis ACH Credit Only Ceux-ci sont suivis de la référence du numéro de facture et du numéro propre du marché GET **************** donne à la console les instructions suivantes: Comme sur les citations, il apparaît lorsque les créances ont les informations ACH commuté Les deux numéros sont sauvegardés.

  10. · kamo-internal

    Modifier les postes et les licences à partir d'une date, avec un aperçu des frais au prorata

    Modifier les sièges et les licences ouvre une boîte de dialogue pour définir: - les sièges et les licences de chaque add-on (les licences par utilisateur suivent les sièges jusqu'à dactylographié dessus); - la date d'entrée en vigueur (aujourd'hui ou ultérieurement); - si la charge au prorata va sur sa propre facture maintenant (même avant le date) ou lors du prochain renouvellement; - pour les réductions, un crédit pour la partie non utilisée. L'aperçu en direct du serveur montre la période, les jours restants, chaque ligne au prorata, tous les frais d'installation, le total, la façon dont ils seront facturés et les frais récurrents avant Les changements programmés sont répertoriés sur l'abonnement et peuvent être consultés en ligne Remplace l'ancienne boîte de dialogue de siège immédiat.

  11. · SecurityService

    Points de terminaison pour les changements de siège et de licence datés et proportionnels ; la tâche les applique

    Nouveaux paramètres : - POST **************** - POST /subscriptions/{uid}/changes - GET /subscriptions/{uid}/changes - POST **************** La tâche de facturation horaire applique les modifications dont la date est arrivée avant la levée Les factures, donc les renouvellements facturent les nouveaux comptes.

  12. · kamo-shared-library

    Changements de siège et de licence supplémentaire à mi-période, à une date choisie, au prorata

    SubscriptionChangeService enregistre un changement aux sièges d'un abonnement actif et Les licences complémentaires sont en vigueur à n'importe quelle date à partir d'aujourd'hui Frais au prorata : prix par période de chaque unité ajoutée x jours restants / jours dans la période par exemple, Harmony + 6 sièges à partir du 1er novembre = 6 x 124 $ x 17/31 = $408.00. La charge est facturée lorsque l'opérateur choisit: son propre projet de facture maintenant (même avant la date d'entrée en vigueur) ou sur la prochaine facture de renouvellement. À la date d'entrée en vigueur, le travail de facturation applique le changement: - les places, licences et MRR de l'abonnement ; - l'accès du client (nombre de sièges, rangées de sièges, licences supplémentaires, cache) ; - chaque projet de renouvellement ultérieur, reconstruit, ou donné une ligne d'ajustement si le personnel avait Je l'ai modifié. Cas de bord: - un changement exactement sur un jour de facturation est porté par ce renouvellement plutôt que deux fois au prorata; - une réduction ne facture rien et peut créditer la partie inutilisée lors du prochain renouvellement ; - une modification planifiée peut être annulée, annulant son projet de facture ; - les frais d'installation pour les sièges ajoutés lisent l'accord du CLIENT. L'ancien chemin de changement de siège passe maintenant par ce service. Nouvelle table commerce_subscription_changes; nouvelle colonne ****************

  13. · kamo-internal

    Statuts clairs partout, prix complémentaires convenus et remise mensuelle dans l’assistant de commande

    StatusChip (89 sites d'appel) affichait des codes bruts tels que PENDING_APPROVAL; il affiche maintenant Affiche les mots du dictionnaire (common.statusCodes), ou le code lu à haute voix pour un Le filtre de liste de commandes et le fichier CSV utilisent les mêmes étiquettes. Le personnel peut entrer un prix convenu par licence pour chaque module complémentaire sélectionné et un Les deux sont envoyés comme addonUnitPrices / recurringDiscount et facturés sur chaque facture.

  14. · kamo-signer-monorepo

    Payer par carte sur la page de la facture

    Lorsque le serveur l’offre (factures vendues sur plateforme avec solde), la facture Il envoie le message à /<locale>/i/<token>/pay, qui envoie le message à l'utilisateur Le client est dirigé vers une page de paiement hébergée par Stripe (la confirmation bancaire s'y déroule) et Un client de retour voit le paiement accusé de réception.

  15. · SecurityService

    Les clients paient les factures par carte en ligne; une demande SCA de la banque parvient au client

    Sur les factures vendues par la plateforme org (le seul vendeur dont le compte Stripe il est): - la facture publique propose de payer par carte bancaire: POST **************** ouvre une page hébergée par Stripe qui renvoie au même lien de facture (construit côté serveur, jamais à partir de la requête); - le paiement est enregistré au retour du client et par le travail horaire, Exactement une fois. Lorsqu'un prélèvement automatique nécessite que le client le confirme auprès de sa banque, il La facture avec cette demande est envoyée par courriel, et les propriétaires sont alertés comme auparavant.

  16. · BillingService

    Payer une facture d'abonnement par carte sur une page hébergée par Stripe

    Internal POST **************** crée un mode de paiement Session de paiement pour le montant dû. Il enregistre la carte pour les futurs paiements automatiques Les frais lorsque le client a un compte, et la confirmation de la SCA de la banque GET /checkout/{id} indique si le paiement a été effectué et avec quel moyen La commande du consommateur ignore ces sessions.

  17. · kamo-shared-library

    Suivre le paiement par carte en ligne d'une facture en attente

    Nouvelle colonne nulle **************** plus des assistants pour lister et régler les sessions en attente idempotemment (un paiement portant La même référence de processeur n'est jamais enregistrée deux fois).

  18. · kamo-shared-library

    Les prix supplémentaires négociés et la réduction d'un devis sont inclus dans l'abonnement

    La conversion d'une citation comporte maintenant: - le prix par licence convenu pour chaque add-on (quand il diffère de celui du catalogue) - l'escompte du devis ou de l'option acceptée, sous forme de montant mensuel récurrent (un La période de réduction de l'option est répartie sur ses mois) Les commandes enregistrent les deux dans custom_pricing, de sorte qu'un brouillon de repricing les conserve. Activation Met le prix convenu sur les licences supplémentaires et la réduction sur l'abonnement (nouvelle colonne nullable **************** donc chaque facture Les ordres du personnel peuvent indiquer à la fois directement et indirectement le montant de la transaction (addonPrixUnitaires, recurringDiscount).

  19. · kamo-internal

    Le renouvellement automatique et les notes fonctionnent sur les abonnements actifs; carte au dossier et carte de débit maintenant

    - Le commutateur de renouvellement automatique définit le renouvellement de l'abonnement lui-même (il a posté un champ le La mise à jour de l'ordre ignorée) et indique quand un ordre non renouvelable se termine. - Notes enregistrer sur une commande dans n'importe quel état. - Un abonnement payable par carte montre la carte au dossier. - Ses factures ouvertes offrent de charger la carte maintenant et de montrer pourquoi la dernière tentative de carte failed.

  20. · kamo-internal

    Afficher les licences détenues et utilisées lorsque des boîtes aux lettres et des postes sont affectés

    Règle du propriétaire 2026-10-22: les modules complémentaires facturent par utilisateur les licences achetées, et Les licences sont la seule limite sur ce qui peut être utilisé. Un LicenseUsageMeter ("4 des 10 licences en cours d'utilisation", barre animée aux couleurs de la marque de l'organisation, coin Ruban, puce d'avertissement et note quand déjà terminé, lien vers les plans et la facturation) GET /api/billing/licenses/usage et apparaît sur: - Paramètres > Gestion des boîtes aux lettres (KamoMail ou licences tierces) - le sélecteur d'extension des paramètres du téléphone du membre (KamoPBX ou tiers) - Plans et lignes de facturation supplémentaires Les refus (409, la phrase en langage clair du serveur) atteignent maintenant la personne: Attribution de boîte aux lettres, attribution de boîte aux lettres partagée, attribution de boîte de réception personnelle/enregistrement IMAP/OAuth connect et callback le montrent tous dans le panneau de cette boîte aux lettres (plusieurs utilisés pour throw unhandled ou dire un échec générique); chaque telle action rafraîchit le Nouvelles chaînes de caractères: settings.billing.licenses (kamo-translation-dictionary).

  21. · kamo-internal

    Démarrage des soumissions; acceptation hors ligne; commandes des locataires; facturation en langage clair

    - Citations: "Ajouter à partir du catalogue d'abonnement" remplit une ligne à partir des plans en direct / add-ons (nom, mensuel prix, "par utilisateur / mois" / "par bloc de 10 Go / mois") et conserve la référence du catalogue; Les devis d'abonnement acceptés se convertissent via une boîte de dialogue (mode de paiement; organisation cible) "Acceptation de l'enregistrement" pour le papier/le courriel/l'ordre d'achat Les aperçus d'un BROCHURE portent un filigrane et chaque impression est consignée; les termes sont remplis {orgName} avec le nom court du vendeur. - Assistant de commande: organisation cible uniquement pour l'org de la plate-forme; personnel uniquement négocié Prix par siège et frais d'installation. - Liste des inscriptions: prochaine date de facturation, solde dû, badge en retard; un mode de paiement partagé Label helper pour les six méthodes. - Page d'abonnement: événements en phrases simples (Actif → Échéance passée), numéro de commande au lieu de Id de l'enregistrement. - Contacter les ventes: nom, e-mail et téléphone lu à partir de l'org de la plate-forme via un point de terminaison étroit.

  22. · SecurityService

    Refuser une boîte aux lettres de service ou de contact au-delà des licences de messagerie

    Règle du propriétaire 2026-10-22: les modules complémentaires facturent par utilisateur les licences achetées; combien Le nombre de boîtes aux lettres pouvant être utilisées n'est limité que par elles ministère atteint à une boîte aux lettres, ou les coordonnées de l'organisation pointant vers un, le mappe vers Kamo (OrgMailboxBillingAggregator), donc ces Une seule sauvegarde peut mettre une boîte aux lettres en usage aussi sûrement qu'en l'attribuant à un membre. - MailboxLicenseCapGuard demande la vérification de licence interne de BillingService (X-Internal-Auth) avant POST/PUT /api/security/departments et PUT /org/{id} changer la boîte aux lettres; un refus est un 409 avec la phrase dans Le maintien ou la suppression de la boîte aux lettres est désactivé Une panne de BillingService échoue OPEN avec un avertissement. - La porte de relais de facturation passe également GET /licenses/usage (mêmes droits que le Autres lectures d'utilisation).

  23. · SecurityService

    Enregistrez les acceptations hors ligne, enregistrez les impressions, convertissez les devis en abonnements

    - POST **************** (SEND_QUOTES ou MANAGE_QUOTES) - POST **************** (VIEW_QUOTES ou MANAGE_QUOTES) - POST .../{uid}/convert prend un corps facultatif (organisation cible, mode de paiement); La conversion en COMP nécessite également CREATE_SUBSCRIPTION_ORDERS - POSController refuse negotiatedUnitPrice / setupFeeOverride des appelants OWN-only - GET **************** le nom publié de la plateforme org, contact email et téléphone, pour la boîte de dialogue Contacter les ventes, au lieu de constantes codées en dur

  24. · kamo-shared-library

    Les devis se convertissent en abonnements; les commandes des locataires ne compensent jamais le vendeur

    - Une cotation dans un marché d'ABONNEMENT, ou dont les lignes acceptées ont été remplies à partir de l'abonnement catalogue, se convertit en un SubscriptionOrder (plan, sièges à partir de la quantité de citation, des add-ons avec Les frais de licence, le tarif par poste accepté comme prix négocié, les frais d'installation (voir, l'engagement de l'option acceptée comme le cycle, le mode de paiement choisi à la conversion). La commande porte quote_uid ; une deuxième conversion est refusée ; un événement CONVERTED est enregistré. La conversion au détail est inchangée. - QuoteService.acceptOffline: le personnel enregistre une acceptation donnée sur papier/email/PO — brouillon, envoyé, Citations vues ou expirées; totaux via applyOptionHeadlineTotals; noms d'événement qui et pourquoi. - recordPrinted enregistre un événement PRINTED (les brouillons d'impression le disent). - Les lignes par siège stockent le nombre de sièges du devis à chaque sauvegarde et révision; la vue en ligne envoie La quantité à laquelle une ligne est évaluée. - Les lignes de citation portent catalog_ref_code / catalog_ref_uid. - Les termes supportent {orgName}, rempli avec le nom court du vendeur sur la page du client. - provisionOnApproval et activateCompOrder nécessitent une organisation cible — une commande sans aucune Utilisé pour fournir l'abonnement propre du VENDEUR. - **************** / setupFeeOverride, appliqué après calculatePrice et mémorisé dans custom_pricing afin qu'un projet de repricing conserve l'offre. - Les DTO de commande et d'abonnement portent la prochaine date de facturation, le solde impayé et un drapeau de retard, Lire en deux requêtes par liste.

  25. · EmailService

    Refuser une boîte aux lettres au-delà des licences de messagerie de l’organisation

    Règle du propriétaire 2026-10-22: les modules complémentaires facturent par utilisateur les licences achetées; combien Le nombre de boîtes aux lettres pouvant être utilisées n'est limité que par elles Si vous utilisez, BillingService's **************** est demandé (X-Internal-Auth); un refus est un 409 portant sa phrase en langage clair (StatusReasonAdvice), par exemple, « Les 10 licences de messagerie de votre fournisseur tiers sont toutes utilisées. Ajouter des licences dans la facturation pour connecter une autre boîte aux lettres." Forcer, avant que quoi que ce soit ne soit écrit: - création d'une boîte aux lettres (KamoMail la compte à la fois ; 3rd-party seulement une fois mappée) - attribuer une boîte aux lettres à un membre - créer une boîte aux lettres partagée, lui donner accès, la réactiver - la connexion d'une boîte de réception personnelle (enregistrement IMAP, consentement OAuth et rappel) et Attribution d'un compte déjà connecté - Provisionnement de boîte aux lettres AI membre (NOT_READY / LICENSE_LIMIT) Une adresse déjà comptée n'est jamais refusée, rien d'existant n'est non attribué, et une panne de BillingService échoue OPEN avec un avertissement. Le mailbox-assign, Les points d'extrémité d'accès partagé et de boîte aux lettres personnelle passent maintenant un statut de refus et Une phrase à travers au lieu d'un 500.

  26. · VOIPService

    Refuser un poste téléphonique au-delà des licences de l'organisation

    Règle du propriétaire 2026-10-22: les modules complémentaires facturent par utilisateur les licences achetées; combien Le nombre d'extensions qui peuvent être utilisées n'est limité que par elles En cours d'utilisation, le **************** de BillingService est Demandé (X-Internal-Auth) ; un refus est un 409 portant son nom en clair Une phrase (LicenseCapAdvice), par exemple "Les 10 licences de téléphone de tiers sont Ajoutez des licences dans la facturation pour attribuer une autre extension." Forcer, avant que quoi que ce soit ne soit écrit: - PUT /api/voip/member/{id}/config (paramètres du téléphone du membre), en nommant le L'extension que le membre détient maintenant, de sorte qu'un déplacement sur un système tiers est gratuit - POST **************** (nouvelle extension; KamoPBX comptes (chaque actif, 3ème partie uniquement un attribué) - PUT **************** lorsque le résultat est ACTIF - AI provisionnement de ligne vocale (NOT_READY / LICENSE_LIMIT) Une extension déjà comptée n'est jamais refusée, rien d'existant n'est Une interruption de BillingService échoue OPEN avec un avertissement.

  27. · BillingService

    Utilisation des licences et vérification des licences par unité pour les modules complémentaires par utilisateur

    Règle du propriétaire 2026-10-22: chaque add-on par utilisateur facture les licences achetées, comme Le nombre de boîtes aux lettres ou de postes pouvant être utilisés n'est limité que par eux. - GET /api/billing/licenses/usage (session, X-Org-Id): par code d'extension (EMAIL_3P_INTEGRATION, EMAIL_HOSTING, PBX_3P_INTEGRATION, PBX_HOSTING) est un service de messagerie électronique Les licences détenues, en cours d'utilisation, disponibles, en cours de validité, et si l'organisation est exemptée. - Obtenez **************** protégé par X-Internal-Auth (en temps constant par rapport à billing.internal-auth-secret), pour EmailService et VOIPService à demander avant Mise en service d'une unité supplémentaire. - Licensed = AddOnLicenses.licensed sur l'abonnement principal active_addon_codes / addon_quantities (ou un plan qui inclut le module complémentaire) ; Les clés réservées __mailboxes:/__extensions: ne sont jamais lues comme des licences. En cours d'utilisation = OrgMailboxBillingAggregator / OrgPbxBillingAggregator, le compte les La facture nocturne utilise. - Platform org et OWNER_UNLIMITED sont exemptés; PAID et COMP sont plafonnés; TRIAL, GRATUIT et aucun abonnement ne sont laissés aux portes d'admissibilité existantes. - Seul un changement qui ajoute une unité au-delà des licences est refusé; une unité déjà Un coup d'extension qui en libère un, passe toujours.

  28. · SecurityService

    Points de terminaison pour définir le renouvellement automatique d'un abonnement et les notes d'une commande dans n'importe quel statut

  29. · kamo-shared-library

    Activer ou désactiver le renouvellement d’un abonnement en cours ; notes sur toute commande

    Le commutateur de renouvellement automatique de la console a envoyé un champ que la mise à jour de l'ordre brouillon n'a pas fait Il n'a donc jamais été sauvegardé, et les notes ont échoué sur n'importe quelle commande après le brouillon.

  30. · SecurityService

    Les clients avec carte sont facturés automatiquement le jour de la facturation

    Pour les abonnements AUTO_BILL, la tâche de facturation facture chaque facture approuvée au Carte enregistrée du client le jour de sa facturation via la carte interne de BillingService endpoint, enregistre le paiement (méthode CARD, référence = PaymentIntent) et Une charge échouée est réessayée tous les trois jours jusqu'à quatre fois Approbation et envoi d'une facture dont le jour de facturation est arrivé Tout d'abord, de sorte que l'email du client est un reçu. Nouveaux paramètres : - POST **************** - Obtenez ****************

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