Ir para o conteúdo
KAMOUniverse

Changelog

O que há de novo.

Cada melhoria para a plataforma, como ele envia.

  1. · kamo-shared-library

    Revisões de lista de gráficos, reação alérgica/severidade, razões de status, diagnósticos de pedidos, nota de revisão de resultados

    - ClinicalListReview (fhir_chart_list_review): um registro real revisado para a alergia e listas de medicação, então 'revisado' pára significando 'pelo menos uma linha existe' - AllergyIntolerance: reaction_text, reaction_severity, status_reason; findActiveForChecking agora exclui as afirmações NKDA (e linhas refutadas); findActiveNoKnownAllergy / findActiveRecord - Condition.status_reason, Observation.status_reason, ServiceRequest.reason_codes, Comentários sobre DiagnosticReport.review_note - EncounterDiagnosisRepository; **************** (folheto de fluxo de vitais)

  2. · kamo-shared-library

    Agendar entidades para o relógio da prática, salas, pagamentos de mesa e divulgação de lembretes

    - PracticeSettings (ehr_practice_settings): o fuso horário da prática e duração da visita padrão - PracticeRoom (ehr_practice_room): quartos um paciente é colocado em; aposentado, nunca excluído - PatientPayment (ehr_patient_payment): pagamentos de mesa registrados (nunca processados), anulados com um motivo - RecallOutreach (ehr_recall_outreach): tentativas de contato registradas contra um recall - Nomeação: room_id, rescheduled_from_id / rescheduled_to_id, checked_out_by_member_id - ScheduleBlock: rótulo para o tempo bloqueado (almoço, reunião, férias) - PatientRecallRepository: countDue / countOverdue; WaitlistEntryRepository: findCandidatesAnyType (um UUID nulo em ':x IS NULL' chega ao Postgres sem ser digitado) - PhiResourceType: PATIENT_RECALL, PATIENT_PAYMENT anexado

  3. · kamo-shared-library

    Registro de registro da recepção — detalhes de contato, contatos de emergência, contador MRN, campos de gravação de cobertura

    O paciente ganha o método de contato preferido, membro de cuidados primários e farmácia preferida; contatos de emergência são FHIR Patient.contact (fhir_patient_contact, retired not deleted); telecom e endereço usam as tabelas existentes fhir_contact_point / fhir_address (novo PatientCommunicationRepository para o idioma preferido. Um repositório por prática A linha ehr_mrn_counter aloca MRNs em um upsert atômico. A pesquisa de pacientes ganha given-name, birth-date-only, prefix-with-birth-date e by-id consultas. PriorAuthorization ganha uma descrição do serviço e EligibilityCheck uma nota do verificador. DDL aplicado à produção antes deste push.

  4. · kamo-shared-library

    Documentos de gráficos, modelos de notas de prática, texto de leitura de notas e registro de retirada

    - PatientDocument (ehr_patient_document): categoria, título, data do documento, conteúdo tipo, tamanho, SHA-256, imagem Img id + chave de armazenamento, uploader, inserido-em-erro com quem/quando/porquê. Nunca apagado. - ClinicalNoteTemplate (ehr_note_template): modelos de nota própria de uma prática. - ClinicalNote: colunas entered_in_error_at/_by/_reason; corpo de corrente transiente, tipo de versão, bandeira SI, nomes de autor/co-signatário/paciente para leituras. - ClinicalNoteVersion: nome do autor transiente. DDL aplicado à produção à mão (aditivo).

  5. · SecurityService

    Recusas reais, decisões de revisão de quebra de vidro, envio honesto de reclamações, EOBs digitados à mão

    - EhrRuleViolationException: uma recusa de regra de negócios (nota não assinada ao fechar, duplo registro, não o autor/co-signatário, auto-co-sign, já assinado, restrito pela seguradora, quebra-vidro sem motivo, muitas exportações, correspondência suprimida) agora responde 409/422 com sua sentença de linguagem simples em vez do opaco 'No such record'. Negações de relacionamento permanecem 404. - EhrExceptionHandler é executado com a maior precedência sobre o comércio global e abrange Qualidade, Administração de Portal, CCD, Exportação em Massa e FHIR (um faltando à direita havia um 500). - Revisão de quebra-vidro: fila com nomes mais história, e uma decisão (apropriado / inapropriado / precisa de acompanhamento, nota necessária, nunca a sua própria). - Diretório de parceiros de troca para médicos (VIEW_CHART, apenas nomes). - Reclamações: CPT/HCPCS, modificador, CID-10, ponteiro, NPI e local-de-serviço verificações de formato; pagador e membro id da cobertura escolhida; uma visita deve ser fechado à conta; procedimentos faturados deixam a fila não cobrada; um projeto de reivindicação Leia para o construtor. ClaimTransport seam: sem câmara de compensação, submeta marca PRONTO e diz assim; marca-enviado registra canal, quem e nota. - As remessas podem ser digitadas a partir de um EOB de papel, e a publicação agora move dinheiro de não aplicado para aplicado.

  6. · kamo-shared-library

    Registre como uma reclamação foi enviada e liste os acessos de emergência revisados

    Uma declaração ganha ready_at, submission_channel, submitted_by_member_id e submission_note, portanto, uma reclamação enviada à mão através de um portal de pagador ou em papel é registrado honestamente em vez de um status flip que finge ser uma câmara de compensação O repositório de concessão de quebra-vidro ganha o histórico de revisão finder a nova tela de revisão lista abaixo de sua fila.

  7. · kamo-internal

    A fatura mostra o bloco de remessa de Recebíveis, como as cotações fazem

    A caixa de diálogo da fatura renderiza o mesmo QuoteRemittanceBlock que a visualização da cotação usa, dos detalhes de Recebíveis do vendedor, enquanto qualquer coisa é devida. Os Recebíveis switch agora diz que abrange cotações e faturas.

  8. · kamo-signer-monorepo

    O bloco de remessa da fatura lê exatamente como o da cotação

    Mesmo cabeçalho, rótulos e aviso ACH Credit Only (signer.quote.remit), com o invoice-number referência mantida abaixo dele.

  9. · SecurityService

    As faturas imprimem os detalhes do ACH de Recebíveis exatamente como as cotações

    O PDF e o e-mail agora carregam o bloco de remessa da cotação, palavra por palavra: - Remeter o pagamento para - beneficiário (nome legal) - banco - número de roteamento (ABA) - número de conta - o aviso ACH Credit Only Estes são seguidos pela referência do número da fatura e o próprio mercado GET **************** dá ao console as instruções necessárias Assim como nas cotações, ele aparece quando o Receivables tem a informação ACH comutada ligado e ambos os números guardados.

  10. · kamo-internal

    Altere postos e licenças a partir de uma data, com a pré-visualização da taxa proporcional

    Alterar estações e licenças abre uma caixa de diálogo para definir: - as licenças de estações e de cada add-on (as licenças por usuário seguem as estações até sobrescrito por digitação); - a data em que entra em vigor (hoje ou mais tarde); - se a taxa proporcional vai em sua própria fatura agora (mesmo antes do data) ou na próxima renovação; - no caso de reduções, um crédito para a parte não utilizada. A visualização ao vivo do servidor mostra o período, os dias restantes, cada linha proporcional, qualquer taxa de configuração, o total, como será cobrado e a cobrança recorrente antes As alterações agendadas estão listadas na assinatura e podem ser acessadas a partir da página Cancelado. Substitui o antigo diálogo de assento imediato.

  11. · SecurityService

    Pontos finais para alterações de licença e assento datadas e proporcionais; o trabalho as aplica

    Novos pontos finais: - POST **************** - POST /subscriptions/{uid}/changes - GET /subscrições/{uid}/mudanças - POST **************** O trabalho de faturamento por hora aplica alterações cuja data chegou antes de levantar faturas, então as renovações cobram as novas contas.

  12. · kamo-shared-library

    Alterações de licença de assento e complemento no meio do período, em uma data escolhida, proporcionalmente

    O SubscriptionChangeService registra uma alteração nas vagas de uma assinatura ativa e licenças de complemento em vigor em qualquer data a partir de hoje cobrança proporcional: preço por período de cada unidade adicionada x dias restantes / dias no período em que ele cai, por exemplo, Harmony +6 assentos a partir de 1º de novembro = 6 x $124 x 17/31 = $408.00. A cobrança é faturada quando o operador escolhe: seu próprio projeto de fatura agora (mesmo antes da data efetiva) ou na próxima fatura de renovação. Na data efetiva, a tarefa de faturamento aplica a alteração: - os postos, licenças e MRR da subscrição; - o acesso do cliente (contagem de assentos, filas de assentos, licenças adicionais, cache); - cada rascunho de renovação posterior, reconstruído ou dado uma linha de ajuste se a equipe tivesse Eu editei-o. Casos de borda: - uma alteração exatamente em um dia de faturamento é realizada por essa renovação em vez de proporcionalmente duas vezes; - uma redução não cobra nada e pode creditar a parte não utilizada na próxima renovação; - uma alteração agendada pode ser cancelada, anulando o seu rascunho de fatura; - taxas de instalação para assentos adicionados leia o acordo do CLIENTE. O antigo caminho de mudança de lugares agora passa por este serviço. Nova tabela commerce_subscription_changes; nova coluna ****************

  13. · kamo-internal

    Status em linguagem simples em todos os lugares; preços adicionais acordados e um desconto mensal no assistente de pedidos

    StatusChip (89 sites de chamada) mostrava códigos brutos como PENDING_APPROVAL; agora mostra as palavras do dicionário (common.statusCodes), ou o código lido em voz alta para um O filtro da lista de pedidos e o CSV usam os mesmos rótulos. A equipe pode inserir um preço acordado por licença para cada complemento selecionado e um desconto mensal; ambos são enviados como addonUnitPrices / recurringDiscount e faturados em cada fatura.

  14. · kamo-signer-monorepo

    Pague com cartão na página da fatura

    Quando o servidor o oferece (faturas vendidas pela plataforma com saldo), a fatura Ele envia para /<locale>/i/<token>/pay, que envia o código de verificação para o servidor de pagamento cliente para uma página de pagamento hospedada em Stripe (a confirmação bancária acontece lá) e Um cliente que retorna vê o pagamento confirmado.

  15. · SecurityService

    Os clientes pagam as faturas com cartão online; uma solicitação SCA do banco chega ao cliente

    Nas faturas vendidas pela plataforma org (o único vendedor cuja conta Stripe é): - a fatura pública oferece Pagar com cartão: POST **************** abre uma página hospedada em Stripe que retorna para o mesmo link de fatura (criado do lado do servidor, nunca a partir da solicitação); - o pagamento é registado quando o cliente volta e pelo trabalho por hora, Exatamente uma vez. Quando uma cobrança automática precisa que o cliente a confirme com seu banco, eles são enviados por e-mail a fatura com esse pedido, e os proprietários são alertados como antes.

  16. · BillingService

    Pague uma fatura de assinatura com cartão em uma página hospedada em Stripe

    Internal POST **************** cria um modo de pagamento Sessão de checkout para o valor devido. Ele salva o cartão para futuros pagamentos automáticos cobranças quando o cliente tem uma conta, e a confirmação SCA do banco GET /checkout/{id} reporta se foi pago e com qual método O checkout do consumidor ignora essas sessões.

  17. · kamo-shared-library

    Acompanhe o pagamento pendente de uma fatura com cartão online

    Nova coluna nulable **************** mais ajudantes para listar e liquidar sessões pendentes idempotentemente (um pagamento que a mesma referência de processador nunca é gravada duas vezes).

  18. · kamo-shared-library

    Preços adicionais negociados e um desconto de cotação são transferidos para a assinatura

    A conversão de uma citação agora carrega: - o preço acordado por licença de cada add-on (quando for diferente do do catálogo) - o desconto do orçamento ou da opção aceite, como um montante mensal recorrente (um o período de desconto da opção é distribuído ao longo de seus meses) Os pedidos registram ambos em custom_pricing, então um rascunho de reajuste de preço os mantém coloca o preço acordado nas licenças adicionais e o desconto na assinatura (nova coluna nulable **************** para que cada fatura As ordens de pessoal podem declarar tanto diretamente como através de um formulário de contato (addonUnitPrices, recurringDiscount).

  19. · kamo-internal

    A renovação automática e as notas funcionam em assinaturas ativas; cartão no arquivo e cartão de cobrança agora

    - O interruptor de renovação automática define a própria renovação da assinatura (postou um campo o atualização de ordem somente de rascunho ignorada) e diz quando uma ordem não renovada termina. - Notas salvar em um pedido em qualquer estado. - Uma assinatura de cartão de pagamento mostra o cartão no arquivo. - Suas faturas abertas oferecem Carga de cartão agora e mostram por que a última tentativa de cartão falhou.

  20. · kamo-internal

    Mostrar licenças detidos e em uso onde caixas de correio e extensões são atribuídas

    Regra do proprietário 2026-10-22: complementos por usuário cobram as licenças compradas e o licenças são o único limite sobre o que pode estar em uso. Um LicenseUsageMeter ("4 de 10 licenças em uso", barra animada na cor da marca da organização, canto fita, chip de aviso e nota quando já terminar, link para Planos e Faturamento) lê GET /api/billing/licenses/usage e aparece em: - Configurações > Gerenciamento de caixa de correio de e-mail (KamoMail ou licenças de terceiros) - o seletor de extensão de configurações de telefone do membro (KamoPBX ou de terceiros) - Planos & Billing add-on linhas As recusas (409, a frase de linguagem simples do servidor) agora chegam à pessoa: atribuição de caixa de correio, concessão de caixa de correio compartilhada, atribuição de caixa de entrada pessoal/salvamento IMAP/OAuth connect e callback todos mostram-no no painel daquela caixa de correio (vários usados para jogar sem manipulação ou dizer uma falha genérica); cada tal ação atualiza o Novas cadeias de caracteres: settings.billing.licenses (kamo-translation-dictionary).

  21. · kamo-internal

    Cotações iniciam assinaturas; aceitação off-line; pedidos de locatários; faturamento em linguagem simples

    - Cotações: "Adicionar do catálogo de assinatura" preenche uma linha dos planos/complementos ao vivo (nome, mensais preço, "por usuário / mês" / "por bloco de 10 GB / mês") e mantém a referência do catálogo; cotações de assinatura aceitas convertem através de um diálogo (método de pagamento; organização alvo para a plataforma somente) em uma ordem de assinatura; "Registro de aceitação" para papel/e-mail/PO aceitações; visualizações de um DRAFT carregam uma marca d'água e cada impressão é registrada; preenchimento de termos {orgName} com o nome curto do vendedor. - Assistente de pedidos: organização-alvo apenas para a plataforma org; negociado apenas com a equipe substituição de preço por assento e taxa de instalação. - Lista de inscrições: próxima data de cobrança, saldo devido, badge em atraso; um método de pagamento compartilhado label helper para todos os seis métodos. - Página de assinatura: eventos em frases simples (Ativo → Vencido), número de ordem em vez de o id do registro. - Contato de vendas: nome, e-mail e telefone lido a partir da plataforma org através de um endpoint estreito.

  22. · SecurityService

    Recusar uma caixa de correio de departamento ou contato além das licenças de e-mail

    Regra do proprietário 2026-10-22: complementos por usuário cobram as licenças compradas; quantas O número de caixas de correio que podem estar em uso é limitado apenas por elas departamento alcançado em uma caixa de correio, ou as informações de contato da organização apontando para um, mapeia-o para Kamo (OrgMailboxBillingAggregator), então esses dois salvamentos podem colocar uma caixa de correio em uso tão seguramente quanto atribuí-la a um membro. - MailboxLicenseCapGuard pede verificação de licença interna do BillingService (X-Internal-Auth) antes de POST/PUT /api/security/departments e PUT /org/{id} mudar a caixa de correio; uma recusa é um 409 com a frase em erro/mensagem e razão LICENSE_LIMIT. Manter ou limpar a caixa de correio é nunca verificado; uma interrupção do BillingService falha OPEN com um aviso. - A porta de retransmissão de faturamento também passa GET /licenses/usage (mesmos direitos que o outras leituras de uso).

  23. · SecurityService

    Registre aceitações offline, registre impressões, converta cotações em assinaturas

    - POST **************** (SEND_QUOTES ou MANAGE_QUOTES) - POST **************** (VIEW_QUOTES ou MANAGE_QUOTES) - POST .../{uid}/convert toma um corpo opcional (organização alvo, método de pagamento); converter como COMP também precisa CREATE_SUBSCRIPTION_ORDERS - POSController recusa negotiatedUnitPrice / setupFeeOverride de chamadores OWN-only - GET **************** o nome publicado da plataforma org, e-mail de contato e telefone, para a caixa de diálogo Contato de vendas, em vez de constantes codificadas

  24. · kamo-shared-library

    As cotações são convertidas em assinaturas; os pedidos dos inquilinos nunca compensam o vendedor

    - Uma cotação em um mercado de SUBSCRIÇÃO, ou cujas linhas aceitas foram preenchidas a partir da assinatura catálogo, converte-se em um SubscriptionOrder (plano, assentos da quantidade da cotação, complementos com suas licenças, a taxa por assento aceita como um preço negociado, a taxa de instalação que o cliente visto, o compromisso da opção aceita como o ciclo, o método de pagamento escolhido na conversão). O pedido carrega quote_uid; uma segunda conversão é recusada; um evento CONVERTED é registrado. A conversão de varejo permanece inalterada. - QuoteService.acceptOffline: a equipe registra uma aceitação dada em papel / e-mail / PO - rascunho, enviado, citações visualizadas ou expiradas; totais através de applyOptionHeadlineTotals; nomes de eventos quem e por quê. - recordPrinted registra um evento PRINTED (impressões de rascunho dizem isso). - As linhas por assento armazenam a contagem de assentos da cotação em cada salvamento e revisão; a exibição de linha envia a quantidade em que uma linha tem preço. - As linhas de citação carregam catalog_ref_code / catalog_ref_uid. - Os termos suportam {orgName}, preenchido com o nome curto do vendedor na página do cliente. - provisionOnApproval e activateCompOrder requerem uma organização de destino — um pedido sem nenhum usado para provisionar a própria assinatura do VENDEDOR. - **************** / setupFeeOverride, aplicado após calculatePrice e lembrado em custom_pricing para que um rascunho de reajuste de preço mantenha o negócio. - Ordem e assinatura DTOs carregam próxima data de faturamento, saldo em aberto e um sinalizador em atraso, ler em duas consultas por lista.

  25. · EmailService

    Recusar uma caixa de correio além das licenças de email da organização

    Regra do proprietário 2026-10-22: complementos por usuário cobram as licenças compradas; quantas A quantidade de caixas de correio que podem estar em uso é limitada apenas por elas use, BillingService's **************** é solicitado (X-Internal-Auth); uma recusa é um 409 carregando sua sentença em linguagem simples (StatusReasonAdvice), por exemplo, "Todas as 10 de suas licenças de e-mail de terceiros estão em uso. Adicione licenças em Faturamento para conectar outra caixa de correio." Forçado, antes que qualquer coisa seja escrita: - criar uma caixa de correio (KamoMail conta de uma só vez; 3rd-party apenas uma vez mapeado) - atribuir uma caixa de correio a um membro - criar uma caixa de correio compartilhada, conceder acesso a uma, ligar uma novamente - conectar uma caixa de entrada pessoal (salvar IMAP, consentimento OAuth e callback) e atribuindo um já conectado - Provisionamento de caixa de correio de AI membros (NOT_READY / LICENSE_LIMIT) Um endereço já contado nunca é recusado, nada existente é não atribuído, e uma interrupção do BillingService falha OPEN com um aviso. O mailbox-assign, endpoints de acesso compartilhado e caixa de correio pessoal agora passam o status de uma recusa e sentença através em vez de um 500.

  26. · VOIPService

    Recusar uma extensão telefônica além das licenças da organização

    Regra do proprietário 2026-10-22: complementos por usuário cobram as licenças compradas; quantas A utilização de extensões que possam estar em uso é limitada apenas por elas em uso, o BillingService's **************** é (X-Internal-Auth); uma recusa é um 409 carregando sua linguagem simples sentença (LicenseCapAdvice), por exemplo, "Todas as 10 licenças de telefone de terceiros estão Adicione licenças em Faturamento para atribuir outra extensão." Forçado, antes que qualquer coisa seja escrita: - PUT /api/voip/member/{id}/config (configurações do telefone do membro), nomeando o extensão que o membro detém agora, então um movimento em um sistema de terceiros é livre - POST **************** (nova extensão; KamoPBX contagens cada um ativo, de terceiros apenas um atribuído) - PUT **************** quando o resultado é ACTIVE - Provisionamento de linha de voz AI (NOT_READY / LICENSE_LIMIT) Uma extensão já contada nunca é recusada, nada existente é não atribuído, e uma interrupção do BillingService falha OPEN com um aviso.

  27. · BillingService

    Uso de licença e verificações de licença por unidade para complementos por usuário

    Regra do proprietário 2026-10-22: cada complemento por usuário cobra as licenças compradas, como o número de caixas de correio ou extensões que podem estar em uso é limitado apenas por elas. - GET /api/billing/licenses/usage (sessão, X-Org-Id): por código de complemento (EMAIL_3P_INTEGRATION, EMAIL_HOSTING, PBX_3P_INTEGRATION, PBX_HOSTING) o número de contas de e-mail licenças detidos, em uso, disponíveis, over-by, e se a organização está isenta. - Obter **************** protegido pelo X-Internal-Auth (comparação de tempo constante com billing.internal-auth-secret), para o EmailService e VOIPService para perguntar antes colocando mais uma unidade em uso. - Licenciado = AddOnLicenses.licensed sobre a assinatura primária active_addon_codes / addon_quantities (ou um plano que inclua o complemento); as chaves reservadas __mailboxes:/__extensions: nunca são lidas como licenças. Em uso = OrgMailboxBillingAggregator / OrgPbxBillingAggregator, a contagem do utilizações noturnas da conta. - Plataforma org e OWNER_UNLIMITED estão isentos; PAID e COMP estão limitados; TRIAL, GRÁTIS e sem assinatura são deixados para os portões de direito existentes. - Apenas uma alteração que ADDS uma unidade além das licenças é recusada; uma unidade já contado, ou um movimento de extensão de terceiros que libera um, sempre passa.

  28. · SecurityService

    Endpoints para definir a renovação automática de uma assinatura e as notas de um pedido em qualquer status

  29. · kamo-shared-library

    Ativar ou desativar a renovação para uma assinatura ativa; notas em qualquer pedido

    A opção de renovação automática do console enviou um campo que a atualização do pedido somente de rascunho não fez nunca salvou; e as notas falharam em qualquer ordem após o rascunho.

  30. · SecurityService

    Os clientes com cartão são cobrados automaticamente no dia da faturação

    Para assinaturas AUTO_BILL, o trabalho de faturamento cobra cada fatura aprovada para o cartão salvo do cliente em seu dia de faturamento através do cartão interno do BillingService endpoint, registra o pagamento (método CARD, referência = PaymentIntent) e A bateria tenta carregar novamente a cada três dias até quatro vezes. Uma falha alerta o Aprovação e envio de uma fatura cujo dia de cobrança tenha chegado primeiro, então o e-mail do cliente é um recibo. Novos pontos de extremidade: - POST **************** - Obter ****************

Seu universo está esperando.

Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.

Gratuito para sempre — não é necessário cartão de crédito