Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· InitializerService
Migração de provedores de telefone/SMS multiinstance
Executar após Hibernate ddl-auto:update cria novas tabelas (VOIP PROVIDER INSTANCI, BULK TEXT PROVIDER INSTÂNCIA, TELEFONE EXTENSÃO, TELEFONE END USER, TELEFONE DEVICE, PHONE VOiceMAIL, SYSTEM CONFIGURAÇÃO) das entidades renomeadas/novas em Kamo-shared-library commit 232d731. Lida com o que o Hibernate não consegue: - Copiar linhas do legado voip provider config / bulk text provider config para novas tabelas * instance, sintetizando o nome instância do tipo provedor. - Largar as linhas NOT CONFIGURED (ordinário 0) — a ausência é agora o estado "nenhum provedor". - Largue as tabelas * config do legado vazio. - Backfill instance id on member voip config, voip conversations, and kamotokens.org oauth token usando a instância ativa mais antiga de cada org. - Reconstruir org oauth token índice único de (org id, provedor) para (org id, provedor, instância id) então várias instâncias RingCentral por org funcionam. - Largue os índices únicos órfãos de tabelas de instância voip conversations + provedor. - Semeia a linha system configuration singleton (intervalo de sincronização voip 10min padrão, activado true) — o operador da plataforma configura isto através da nova configuração da plataforma Página VoIP & SMS. Todas as declarações idempotent; re-running em DB já migrado é seguro. Ordem 20 — após SchemaCleanupRunner (1), OrganizationTypeRemovalRunner (2), KamoCRMAgeReqUpdateRunner (10).
· kamo-shared-library
Multi-instance telefone / SMS provedor schema fundação
- Renomear VoipProviderConfig → VoipProviderInstance; drop UNIQUE(org id), adicione instância nome, config json, last sync at, last sync error. - Renomear BulkTextProviderConfig → BulkTextProviderInstance; mesmo tratamento multi-instance. - Novas entidades: PhoneExtension, PhoneEndUser, PhoneDevice, PhoneVoicemail, SystemConfiguration. - Adicionar instância id ao MemberVoipConfig, VoipConversation, OrgOAuthToken (multiple RingCentral instances per org). - Novo enums: PhoneExtensionStatus, PhoneEndUserStatus, PhoneDeviceType, PhoneDeviceRegistrationStatus. - Deprecate NOT CONFIGURED em ************************************************************************************************************************************************************************* (servido no ordinal 0 para preservar as linhas existentes em EnumType.ORDINAL). - Adicionar FLOWROUTE para BulkTextProviderType para o novo provedor de SMS Flowroute. - Provider-abstraction DTOs (ExtensionDto, PhoneUserDto, DeviceDto, VoicemailEntryDto, instanceHealthDto, Create/Update requests). Primeira fase de refactor multi-instance telefone / SMS - ver ************* (em repo kamo-login). Migração KamoInitializer + refatores de serviço a seguir.
· KlusterServices
Implantar a ponte FreePBX 17 + Jigasi SIP em k1m1 e k2m1
O FreePBX (tiredofit/freepbx:17-latest) é executado com o hostNetwork assim SIP/RTP preserva IPs reais do cliente, fixado um-por-nós via nodeSelector. SIP ligado 5060 UDP/TCP (5061 TLS), intervalo RTP 18000-18999 escolhido para evitar Janus (20000-20999), Coturn (52000-65535) e WireGuard (51820-51821). Conheça Jigasi adicionado como uma ponte interna ClusterIP SIP para FreePBX pode chamadas tronco em Meet conferências; Prosody agora fornece um usuário jigasi de JIGASI XMPP PASSWORD. IU de administração acessível via Traefik em pbx.k1.kluster.kamocrm.com / pbx.k2.kluster.kamocrm.com com certs Semeado através de auto-certe STATIC DOMAINS.
· kamo-internal
Visualização, paginação, busca ao vivo, filtros, logotipos org
Os administradores da plataforma (proprietário de org de nível superior) agora veem cada org no sistema através do novo endpoint /api/security/org/all-networks em vez de apenas seus próprios membros. O título do cabeçalho e a atualização de legendas para refletir o contexto do administrador. Outras melhorias: - Paginação: lado cliente, padrão 25/página, configurável (10/25/50/100) - Pesquisa ao vivo: filtros por título, título curto ou domínio em tempo real - Chips de filtro: "All", "Orgs I Own", "DNS Not Yet Configured" - Contagem de resultados mostrada ao lado do seletor de tamanho de página - Botões de número de página com colapso de elipse para grandes contagens de página - Componente OrgLogo consolida renderização de logotipo (logo curto via getOrgLogoUrl) tanto para o cartão de 'org' actual como para todas as cartas de org da lista - Botão ENTER corretamente guardado por org.memberId (registro compartilhado usuário + membro) - ENTER AS SISTEMA MEMBRO disponível para todas as orgs quando podeEnterAsSystemMembro
· SecurityService
Adicionar GET /api/security/org/all-networks para administradores de plataforma
Os proprietários de orgs de topo agora podem buscar todas as organizações no sistema com informações de adesão relativas ao chamador. Orgs onde o chamador tem um membro record get isOwner/memberId populed; outros get memberId: null, isOwner: false. Endpoint obriga que o chamador está tanto na org de nível superior e é um proprietário.
· kamo-internal
Sub-tabs no editor de modelo de segurança + limpeza
O editor de modelos de segurança está dividido. em quatro sub-tabs: Geral (Info Básico, Visibilidade, Quem Pode Criar, Configuração da Plataforma, Configuração do Domínio, Mercados de Comércio), Censura (álcool/ tabaco/armas de fogo + membro + grupos etários de membros da equipa), Aplicações permitidas, e Funções de Segurança Predefinidas. - Novo... permite que um administrador edite um modelo allowRootSubdomínios bandeira e aliases pai ao lado do resto disso configurações do modelo. Anteriormente, isto vivia dentro do subdomínio org-wide Os ramos aparecem. - Subdomain Branches popup é simplificado apenas para os bits de nível org - Credenciais GoDaddy + master habilitar para alternar. Apelidos por modelo removidos do diálogo e sua superfície de suporte; SecurityRoleManager deixa cair o Os adereços não usados também. - Remove todas as referências à equipeMembroPayFeesSetting / PayFeesSetting / TriStateFeeOption – as "Taxas de Kamo de pagamento próprio do empregado" selecionam no editor de modelo e seu chip na tabela de modelos se foram, juntamente com o digite apelidos no usoAplicadoModel. - /settings/platform/events e /settings/platform/plans pages são suprimidos (eles eram placeholders da superfície de faturamento desactualizada). A landing page, SettingsStatusWindow lista subtópica e route/icon mapeia todos os itens correspondentes. - Gerenciar sub-tab em **************** agora mostra o título do Grupo Padrão como um campo somente de leitura desabilitado (foi anteriormente escondido inteiramente atrás de um alerta de informação) para que os administradores possam ver o O nome do grupo enquanto o compreende não pode ser mudado.
· kamo-internal
Apelido visibilidade UI + Subdomínio Branches botão na página de tipos de ramificações
SubdomínioBranchesDialog: - Editor substituto lista de chips com uma lista de linhas de tabela mostrando Os membros e membros da equipe checkboxes por alias — admins controle que tipos de criadores ver cada alias pai em /network/create - onUpdateModelSubdomínioConfig assinatura atualizada para passar objetos alias completos (alias, visibleToMembers, visibleToTeamMembers) em vez de strings simples SegurançaRoleManager: - fullSecurityModels state + loadFullSecurityModelos mapeiam aliases com **************************** bandeiras - persistiModeloSubdomínioConfig passa objetos alias completos para a infraestrutura SetupManager **************************** - Adicionado Subdomínio Branches botão (mirrors segurança-roles página) com o mesmo SubdomínioBranchesDialog, status-fetch na montagem e reload do modelo quando a janela se abre
· SecurityService
Filtragem de visibilidade + auto-verificar propriedade do subdomínio
Controlador de Organização: - Criação da Web-alias org agora auto-marca propriedadeVerified=true e isDnsVerified=true on the created OrgDomain — no registro TXT necessário desde Providenciamos DNS em GoDaddy em seu nome - CUSTOM paiAliasType caminho agora impõe visibilidade do tipo criador por alias (mirrors / filtro creatable para que a infra- estrutura não possa ser contornada) BranchTypeController / creatable: - a lista paiAliases é agora filtrada pelo criador do chamadorType: MEMBROS ver apenas visívelAos membros=aliases verdadeiros, TEAM MEMBERS ver apenas VisibleToTeamMembers=true aliases, OwnERS ver tudo - Cada DTO alias agora inclui bandeiras visíveisToMembers + visíveisToTeamMembers SegurançaModelController: - processoSubdomínioBranchConfig agora lê **************************** a partir de alias mapear objetos e chamadas substituteAllFull para persisti-los
· kamo-shared-library
Adicionar sinalizadores de visibilidade do tipo criador por- alias
Adicionar visívelToMembers / visívelToTeamMembers boolean columns to ChildOrgSecurityModelAlias para que os administradores possam restringir os apelidos dos pais aparecer aos Membros vs Membros da Equipe ao criar orgs infantis. - Entidade: dois @Builder. Colunas verdadeiras padrão com VERDADEIRA DEFAULTA DE BOOL - SubdomínioAliasDTO: expor ambas as bandeiras da Entity - ************* ***novo álbum AliasEntry + substituirAllFull sobrecarga que persiste visibilidade; substitua todos(strings) delegados a ele
· kamo-internal
Janela de configuração, localização do assistente da web- alias e painel de provisionamento de DNS
Adiciona o Subdomínio Branches UI em três superfícies: * * * * * * * * * * * * novo botão "Subdomínio Branches" * abre uma janela para a opção de nível org comutar + credos GoDaddy, com uma por- security- model editor for allowRootSubdomínios + alias pai (reusa O assistente éValidAlias/para os ajudantes do SafeAlias) - /network/create: BasicsStep now branchs between a bring-your-one-domain caminho e um caminho Kamo web- alias (aberto na bandeira de habilitação do org pai, Status do GoDaddy e aliases do tipo de branch selecionado). Nome dos pais lista suspensa ROOT (quando permitido) mais aliases por modelo; ajuda ao vivo antever atualizações à medida que o usuário muda de campo - /setup/dns: nova DnsProvisioning Painel sonda o diário de abastecimento da org e superfícies por registro GoDaddy status com uma ação falhada de novo Apoiado pela Next.Js BFF rotas proxy sob *******************
· SecurityService
Config de nível Org, cliente GoDaddy e web-alias org criam caminho
Wires the new Subdomain Branches feature end-to-end on the backend: - SubdomínioBranchesController for org-level enable + GoDaddy creds (live-verified) - GoDaddyDnsClient realiza upserts CNAME idempotent e verificações credenciais - DnsProvisioning Service async- queues o subconjunto padrão KnownAliases e escreve linhas por gravação para OrgDnsProvisionLog - SegurançaModelController carrega allowRootSubdomínios + aliases[] on criar/atualizar * * ********** Aceita o caminho web-alias (useWebAlias + paiAliasType + paiAliasId + webAlias), calcula o resultante FQDN sob a zona raiz do pai, e inicia o provisionamento DNS após o org transacional criar concluído - O endpoint /creatable do BranchTypeController expõe os aliases por modelo e status de subdomínio-ramo pai-org para que o assistente possa bloquear a UI
· kamo-shared-library
Adicionar entidades, cifrar, e alias/DNS andaimes de registo
Adiciona creds por- org GoDaddy (AES- GCM encriptado), uma opção allowRootSubdomínios e recolha de pseudônimos para crianças no modelo de segurança, um provisionamento DNS log de auditoria, e um ajudante compartilhado do SecretCipher usado pelo SecurityService para fazer uma viagem de ida e volta chaves API armazenadas sem nunca devolvê- las à interface.
· kamo-internal
Prefix/sufixo dropdowns, porta de domínio da caixa de correio, estado explícito
- Prefixo de nome e sufixo são agora dropdowns povoados a partir do NomePrefixType / NomeSufixType catálogos entregues pela org-config endpoint. Mostra abreviatura + nome completo por opção. - "Forvision organization email mailbox" agora está desativado, a menos que o o domínio do email da organização corresponde a uma das caixas de correio verificadas da org domínios (pulled from GET /api/email/domínios). Limpar mensagens em linha explica se está desabilitado devido à falta de e- mail, sem verificação domínios configurados, ou uma incompatibilidade de domínio — e nomeia o real domínios configurados para que o administrador saiba o que usar. - O status de membro da equipe já não é padrão para o PROSPECT; os administradores devem escolher um estado de ciclo de vida explicitamente ou enviar está bloqueado. Resumo painel mostra "não definido" até que um status seja escolhido.
· SecurityService
Estado de equipe explícito + prefixo de nome/catálogos sufixos
Agora, devolve o nome Prefixes e NameSuffixes, fonte do NamePrefixType e NameSuffixType para o Adicionar os formulários Membros / Adicionar os Membros da Equipe não precisam de codificá-los. - POST /criar-equipe-membro agora rejeita um pedido que omite teamMembershipStatus (400). O anterior retrocesso silencioso do PROSPECT é ido — o chamador deve escolher um estado de ciclo de vida explicitamente assim equipe os membros nunca são mal etiquetados por padrão.
· kamo-internal
Largura total, três painéis Adicionar layout de formulário de membro
Reproduz o formulário de criação para usar toda a área de conteúdo em vez de um Coluna centrada de 1100px. - layout responsivo de 3 colunas: nav de seção esquerda pegajosa (md+), largura total formulário (sempre), painel de resumo ao vivo à direita (xl+). - Linhas de campo agora escalam para largura disponível: seção de nome é 5-up em md+, contato + linhas de papel ir até 4-up em pontos de interrupção xl. - Barra de ação inferior pegajosa abrange largura total com uma dica de status e um gradiente CTA primário. - Section nav usa scroll-spy para destacar a seção em que o usuário está e suporta click-to-scroll. - Estilo de cartão polido — bordas suaves, subtil lift hover, gradiente ícones de cabeça de secção. - Novo painel direito cartão sumário espelha o formulário dados ao vivo (avatar iniciais, nome, nome de usuário, e-mail, papel, chip de status) e mostra uma Indicador pronto para criar uma vez que a validação passe.
· kamo-register
Mesclar alias/email/nome/telefone em uma única etapa "Meu perfil"
Combine os "Meu E-Mail e Alias" anteriormente separados, "Meu Nome" e "Número de telefone" passa para um passo "Meu perfil" para 13+ registantes, com alias + e-mail + nome legal exigido e número de telefone opcional (verificado via SMS quando inserido). Sub-13 registantes Passo único renomeado "My User Alias" — sem e-mail, nome legal ou telefone. - RegisterFlow: lista de passos simplificada, identificador unificadoPróximo validação, novos casos renderStepContent. O passo do perfil é interno rolável para que as três seções se encaixem dentro do viewport. - RegisterStatus ganha um valor "REGISTERADO" para compleções abaixo de 13 onde não há e-mail para verificar — eles são encaminhados diretamente para o página de login com ?registrado=1 em vez da página de e-mail-verificação.
· SecurityService
Faça e-mail + nome legal opcional para sub-13 inscrições
O endpoint /api/segurança/registro anteriormente rejeitou qualquer pedido Falta o e-mail, primeiro nome ou sobrenome. Que fez o caminho under-13 (KIDS ONly orgs, ou ALL AGES com um registante sub-13) impossível — essas contas têm legitimamente apenas um alias + senha + frase de semente. A validação agora requer alias + senha em cada caminho, e trata e-mail + primeiro nome + último nome como um triplo tudo ou nada: fornecimento Qualquer um deles requer os três. A verificação-e-mail enviar e o campo de email de resposta agora guarda se um email foi realmente e o estado de resposta é "REGISTERADO" (v "EMAIL VERIFICAÇÃO REQUIRED") quando não há e-mail para verificar.
· kamo-shared-library
Adicione **************** para entrar como cheques
· kamo-internal
Página de configuração do usuário do sistema + ENTER rede como membro do sistema
Adiciona administração de plataforma → Configuração, um pai-org-proprietário-apenas página que concede ou revoga permissão para personificar a plataforma Usuário do sistema por departamento, cargo ou membro individual da equipe. Registrado nas três localizações de navegação (settings page tile list, ConfiguraçõesStatusWindow routes + sub-tópicos, e a própria página). Atualiza /rede para usar o novo /api/security/enter-como ponto final para o botão ENTER existente, então o domínio destino recebe uma sessão compilada a partir do membro da org- alvo (fixando o erro onde a fonte O membro de org ID/orgID vazou para a nova sessão). Adiciona um ENTER AS Botão MEMBRO DO SISTEMA ao lado do ENTER que só renderiza depois **************************** confirma que o chamador é elegível.
· SecurityService
Backfill, enter-as flow, mutation guards, config API
Provisionamento auto-cura: SystemUserBackfillService é executado em cada Inicialização do SecurityService (do DataLoader) para adicionar a coluna is system user e tabela system user access se faltar, garantir o sistema singleton O registro do usuário existe e cria um administrador-role TeamMember em cada não-top-level org a que já não pertence. Também funciona em createOrganização de tempo para que novas orgs obtenham uma assinatura do usuário do sistema imediatamente em vez de esperar pela próxima reinicialização. Fluxo de entrada Cross-org: substitui o antigo /api/generate-otk hand-off (que vazou a sessão de fonte-org do chamador para o domínio de destino) com /api/segurança/ent-as. O novo endpoint constrói um novo *** escopo para o membro real da org-alvo, então memberID/orgID/rights sempre correspondem A ordem de entrada. Adiciona um campo SUDO MEMBER ID à sessão JSON assim que a representação do utilizador do sistema carrega o membro do operador humanoId para atribuição de auditoria. Guardas: SystemUserGuard recusa qualquer mutação orientada por API para o Sistema Registo de utilizador ou qualquer dos seus membros (ligado ao MemberController, Controlo de Segurança dos Membros. Esconde o Usuário do sistema do GetMembersAndSubscribers, getTeamMembersAndContractors, e getMembersByDepartment endpoints para que os inquilinos nunca o vejam em listas. Superfície de configuração: SystemUserConfigController expõe CRUD sobre a concessão tabela para proprietários de topo-nível-org apenas, e SystemUserCapabilityController retorna um booleano que a página /network usa para decidir se deve renderizar o Digite como botão de membro do sistema.
· kamo-shared-library
Adicionar bandeira do usuário do sistema + entidade de acesso
Apresenta o modelo de usuário do sistema em toda a plataforma: a User.isSystemUser flag (índice parcial único aplica um singleton), mais uma tabela SystemUserAccess que registra quais departamentos de topo-org, títulos de emprego ou membros da equipe pode personificar o Usuário do Sistema para inserir orgs infantis. As linhas de acesso são plataforma- interna (não entradas RoleRightType) para que fiquem fora do Superfície de direitos virados para os inquilinos.
· kamo-register
Adicionar verificação de telefone + perguntas de segurança passos
Inserir dois novos passos entre senha e recuperação de conta para 13+ registantes: um passo número telefone (opcional, skippable, com código SMS verificação) e uma etapa de questões de segurança (necessário, 3 distintas perguntas com respostas). Sub-13 registantes continuam a saltar ambos e confiar na sua frase de semente para recuperação. - FormPhoneNumber: ocioso -> código de entrada -> máquina de estado verificada, per-step Capcha widget gating SMS send, change-number and skip paths. - FormSecurityPerguntas: 3 dropdowns + respostas, unicidade aplicada, catálogo obtido do novo endpoint da infraestrutura pública. - RegisterFlow: novos campos formData, passos condicionais, handleNext validação, telefone + segurançaPerguntas ligadas ao corpo de envio. - /api/security proxy agora envia X-Forwarded-Host para que a infraestrutura possa resolver o org para a seleção do provedor de SMS.
· SecurityService
Colete perguntas de segurança + telefone durante a inscrição
Mover o número de telefone e a coleção de questões de segurança para o self-service fluxo de registo (onde se destinaram inicialmente) em vez de necessitando de uma página de configurações pós-assinado. - Novo registoPhoneService: gera/verifica códigos SMS de 6 dígitos através BulkTextSmsClient, TTL de 10 minutos, limite de taxa de 5 por hora por número. - RegistrationService agora aceita um registro RegistrationParams com opcional verificado Telefone e uma lista de questões de segurança de 3 entradas; questões de segurança são bcrypt-hashed com a regra de normalização de respostas existente. - /api/segurança/registro aceita ******************* e reivindica o telefone verificado contra o código antes de persistir o Usuário. - Novos endpoints públicos POST /register/phone/iniciate (Capcha-gated), POST /registro/telefone/verificar, e obter *************************
· kamo-shared-library
Adicionar RegistroEntityPhoneCode + repositório
Nova tabela `registration phone codes` armazena códigos de verificação SMS de uma tomada emitido durante o registo de auto-serviço, antes de existir uma entidade do Utilizador. Mantido separado do AccountVerificationCode para evitar transportar um NULL userId naquela mesa.
· kamo-internal
Adicionar Páginas de Membro / Adicionar Páginas de Membro da Equipa
- /conta: substituir um único botão ambíguo por botões de tabulação Adicionar <Membro> na aba Membros, Adicionar < membro da equipe> na aba Membros da equipe. Cada botão encaminha para uma página de criação dedicada em vez da antiga quebrada desfasamento para a visão de detalhe do membro. - Novas /settings/member/new e /settings/team-member/novas páginas, ambas apoiado por um MemberCreateForm compartilhado com um suporte "variante". - Forma é um layout de uma única página, seção orientada (nome, identidade, contato, org caixa de correio, função/localização exclusiva do membro da equipa, revisão). Visualização ao vivo do utilizador e- mail e nome de utilizador avisam quando um utilizador já existe ou já está ligado como membro desta organização. - Honra o AgeReqType da org: se o requisito permite aos usuários menores de 13 anos, campos de e-mail pessoais e de organização estão ocultos e o nome de usuário se torna O identificador primário. - Opcional "Forvision organization email mailbox" caixa de seleção cria o correio via EmailService e atribui-o como caixa de correio principal do membro. - Página de perfil em /settings/member/[id] agora inclui Localização de Trabalho, Equipe Estatuto de Membro e Título Oficial de Trabalho para Registros de Membros da Equipe, com fio para o ponto final PUT /api/security/members/{id} existente.
· SecurityService
Adicionar Membro / Adicionar Fluxo de criação de membros da equipe
- Novo MemberCreateController expõe: * GET **************** - idade-req, fuso horário, departamentos, títulos de emprego * GET **************** — verificação de existência debitada por e-mail ou nome de usuário * POST /api/security/members/create — crie Membro na organização do chamador * POST ******************* departamento / cargo / local de trabalho / status de membro / nível de segurança - Reusa um Usuário existente quando o e-mail ou nome de usuário já corresponde; caso contrário cria um novo usuário e envia o modelo EMAIL VERIFICAÇÃO. BEM-VINDOS template é sempre enviado na criação. - Para orgs cuja AgeReqType permite em 13 usuários, pulou e nome de usuário torna-se o identificador primário. - Extende GET /members/{id} para retornar localização + equipeMembroStatus + IsOrganizaçãoProprietário para os membros da equipa, e PUT para manter a localização, teamMembershipStatus, e jobTitleOfficial quando o recorde é um membro da equipe. - atribuição de funções padrão + materialização de direitos delegada ao Serviço Membro assim, cada novo membro pousa com seus direitos efetivos já aplicados. - Fix EntitlementService: boolean getter foi escrito getIsOrganização Dono (Lombok gera isOrganizaçãoOwner para campos booleanos primitivos).
· kamo-shared-library
Adicionar AgeReqType.allowsUnder13() helper
Usado pelo fluxo Adicionar Membro / Adicionar Membro da Equipe para ignorar a coleção de emails para orgs cujo requisito de idade permita aos utilizadores com menos de 13 anos (ALL AGES, ALL COPPA GRADS).
· kamo-internal
Reconstruir os planos e faturamento dos membros em torno de grupos de faturamento
- Página de membros Plans & Billing guia é agora alinhado à direita com um brilho pulsante e um ícone StarRate na barra de páginas. Visível quando o membro visto é O utilizador assinado ou o utilizador subscrito é o proprietário da org. Índice dividido em quatro sub-tabs: Assinaturas, Faturas, Informações de pagamento, Gerenciar Grupo. Seletor de faturamento-grupo dropdown + botão de ícone "Adicionar grupo de faturamento" ao vivo à direita da barra sub-tab; a seleção do grupo dirige cada painel. - Painel de assinaturas mostra um cartão por mercado ativo (FREE DEFAULT KamoCRM sempre presente), com mudança de plano / cancelar / reativar e um grelha de atribuição de licenças por assento. Execução de auto- desactivação prioritária Server-side na redução do assento. - Painel de informações de pagamento envolve elementos de listras via StripeProvider + a Pagamento refatoMétodoForm que se apega a um grupo de faturamento (não o antigo cliente de nível org). - Gerenciar painel de grupo edita título / faturamento contato / permissão de membro (Licenciamento, Gerente de Plano de Grupo, canManageAsscriction, canManageBilling) e adiciona/remove membros. O Grupo Padrão é somente leitura — sua lista está implícito (todos não em um grupo explícito), e nenhum título ou as edições de permissão são permitidas. - /settings/account?tab=billing deleted right. BillingManager + PlanCalculator removido. Links atualizados para o novo membro Plans & Billing tab. - ConfiguraçõesStatusWindow + /settings landing nav ambos podados (três vias sincronizar de acordo com a regra nav-sync). - BranchSetupManager recebe uma nova seção "mercados de comércio" dentro da editor de modelo de segurança, usando o novo SecurityModelMarketController para Anexar/desenvolver os mercados de SUBSCRIPÇÃO com por âmbito Público/Membro Comutadores de membros da equipa. - Está bem. reescrito para mostrar por-org Billing Grupos + assinaturas por grupo + MRR. /settings/plataforma/eventos e /settings/platform/plans se tornam páginas de placeholder (seus conteúdos antigos se foram com o corte limpo). - Novos proxies de API: /api/segurança/direitos e **************************** Novo gancho de direitos de uso Consome direito de serviço de segurançaService para gating de recursos no UI. Arquivos de consumo legado (StatsManager, FeaturesManager, BranchSetupManager) carrega @ts-nocheck até sua assinatura baseada O código de gating é retrabalhado no usoOs direitos.
· SecurityService
Adicionar direitoServiço + SegurançaModelo de mercados comerciais
- DireitoServiço calcula por membro recursos subsídios por união ativo Características do plano BillingGroupLicense + KamoCRM Linha de base de nível livre. Caches Projecções de 15 minutos em Redis com a chave do membroId. - DireitoInvalidaçãoO Listener assina os direitos kamo.invalidate Redes canal (MEMBER:/GROUP:/ORG: cargas úteis) assim BillingService mutations propagar imediatamente. - Direito Controlador em /api/segurança/direitos expõe /me, ******************* e um cache-invalidation POST. - SegurançaModeloMarketController. attaches/detaches CommerceMarkets to a ChildOrgSecurityModel and flips the Público / Membro / Equipe-Membro escopo booleans.
· BillingService
Reescrever BillingService em torno de BillingGroups
Apaga o nível de org. Controladores, serviços e DTOs. Apresenta: - BillingGroupController grupos de montagem, membros, assinaturas, licenças, métodos de pagamento e facturas em /api/billing/groups. - BillingGroupService (ciclo de vida + grupo padrão + linha de base gratuita), BillingGroupMemberService (execução de um grupo por membro), BillingGroupSubscriptionService (Stripe sync with fallback to FREE DEFAULT Em caso de cancelamento/lapso), BillingGroupInvoiceService, LicenceService (prioridade de auto-desativação + reativação inversa-prioridade). - PlanCatalogService + PlanCatalogController - StripeWebhookServiço que consome eventos de assinatura / fatura / método de pagamento. - DireitoInvalidator publicando Redis sinais de invalidação. - PlatformAdminService + PlatformAdminController retornando roll-ups per-org.

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