Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· kamo-shared-library
Caixa de QC garantida pela confiança + dados de treinamento rotulados + conciliação dom/autoemprego
Motor QC (Fase 4 núcleo): - Verificado Facto ganha primeira classe EXTRACTION CONFIDENCE, DOC TYPE CODE, QC STATE colunas (QcState: ********************** Reconciliação agora aplica-se APENAS fatos de passagem (AUTO/CONFIRMADO + não-extração); A confiança espera por revisão, rejeitada nunca se aplica, corrigida é substituída. - ExtraçãoCorrection = dados de treinamento apenas com o anexo rotulado (doc, campo, valor de IA + confiança, verdade humana, ação). O QcReviewService captura- o em cada confirmar/correcta/rejeitar, menta um OPERADOR OVERRIDE de alta confiança numa correcção, e reconcilia-se. VerificadoFactRepository: QC-queue + revised-corpus consultas. Alargamento da extracção: - gift.* → Fila de presente (criarPresente adicionado; tipo=Cash Gift, fonte=Relativo injetado do tipo doc; AI lê quantidade + doador). declaração fiscal / Horário C → trabalhador independente Emprego (emprego. é bandeira de emprego do tipo doc).
· SecurityService
Prestações extractivas/rendimentos (SSA, pensão, abono de família)
Adiciona prompts de extração para SSA AWARD / PENSION / CRILD SUP (AI lê o bruto valor mensal + um rótulo), e selos o OtherIncomeSource id deterministicamente do tipo doc assim que a reconciliação pousa uma verdadeira linha OtherIncome. Reconstrui contra o ramo de reconciliação do Income.
· kamo-shared-library
Reconcile outrosfatos do Rendimento* em outras linhas
Alarga a reconciliação dos factos com um outro ramo do Income.*: documentos de atribuição/benefício (Segurança social, pensão/aposentadoria, pensão de alimentos) com um identificador OtherIncomeSource id + mensal. Idempotente sobre (emprestador, fonte). A fonte é um mapeamento determinístico do extrator injeta do documento tipo — nunca um palpite de IA; a IA lê apenas o montante.
· SecurityService
Classificar automaticamente os envios para capturar os envios de documentos errados
Um nível LUZ barato "o que é este documento?" passar na primeira página classifica o Fazer upload em uma família grosseira e compará-la com o tipo afirmado da exigência. Ao descompatibilizar a resposta do extrato sinaliza-a (detectadoTipo + tipoMismatch) para que o mutuário é dito "isso parece um extrato bancário" em vez de um arquivo errado Extraindo silenciosamente nada. Apenas aconselhamento — a extracção continua em curso.
· SecurityService
Extrair extratos bancários de 12 meses + VOE escrito
Amplia a extração de visão para mais dois tipos de doc mutuário que reutilizam o existente vocabulário de reconciliação (risco de reconciliação zero): BANK12MO lê como um ativo declaração (ativo.*), VOE W lê empregador + rendimento mensal bruto (emprego.*).
· SecurityService
Extração de documentos PDF de várias páginas (Fase 2)
O caminho da visão era apenas imagem-URL, de modo que o PDF multi-página de um mutuário (banco declaração, declaração fiscal) não podia ser lido. Agora: - VaultDocPublicController serve ?page=N, renderizando essa página PDF para PNG em a mosca (via ConversionService /render-page) — provedor-agnóstico, desde muitos provedores de visão aceitam apenas uma URL de imagem, não um PDF bruto. Não PDF/sem página Os pedidos são inalterados. Img→Carga MiniO fatorada em um VaultDocLoader compartilhado. - DocVisionExtractionService lê uma página PDF por página (capped a 15), mesclando campos entre páginas, mantendo a leitura de maior confiança de cada caminho. Uma única imagem ainda é lida como uma página (comportamento inalterado). - ConversionPageClient chama ConversionService (reusa conversion.service.url).
· ConversionService
Renderização completa por página em PDF para extração de documentos
Adiciona DocPageRenderService + POST /api/conversão/render-page (página N → PNG em 150 PPP, com um limite de 300) e/a contagem de páginas. Este é o companheiro de qualidade de leitura para o 300px thumbnail path: o pipeline vision-extraction do mutuário-document divide a Declaração/retorno multipáginas num PNG legível por página, pelo que qualquer fornecedor de visão (todos aceitam uma URL de imagem; apenas alguns aceitam um PDF bruto) pode ler cada página. Aditivo — parâmetros de conversão existentes inalterados.
· kamo-shared-library
Capture + criptografar SSN completo na aplicação mutuário
A postura de aplicação precisa do real social do mutuário, não um último-4 (um emprestador não pode fazer nada com 4 dígitos). Emprestador.ssnEncriptado existiu mas nunca foi escrita — apenas ssnLastFour foi povoada. Agora: - EmprestadorDTO ganha um campo WRITE ONLY `ssn` (completo) - apenas entrada, nunca serialized back out; lê ainda expõe apenas ssnLastFour. - EmprestadorSectionService criptografa um SSN completo fornecido em repouso (injetado opcionalmente SecretCipher — presente no SecurityService, ausente/seguro de arranque em contextos como KamoInitializer) e deriva o último-4. Um patch que omite o SSN agora preserva o valor armazenado em vez de limpar o último-4. - ssnCrypted/itinCrypted @Size( 32) -> 256 assim que o Ciphertext GCM-base64 se encaixa no coluna 256-char existente (sem alteração de esquema).
· SecurityService
Opcional ?phone= pesquisa reversa no GET /api/segurança/líderes
A aba CRM do softphone resolve um número de chamada ativo para um lead. Adicionar um Telefone opcional RequestParam que filtra a lista de leads de org por canônico (últimos 10 dígitos) correspondem ao PHONE PERSONAL/PHONE WORK antes da enxurrada Projecção LeadListDTO - sem alargamento PII, mesma visibilidade não atribuída Ligando como a grade não filtrada.
· kamo-internal
Interface de integração de CRM para dados reais
Substituir a aba de CRM simulada por um painel de procura de telefone reverso ao vivo. - Resolva o número de chamada / dialpad ativo para uma liderança CRM via leadsApi.searchByPhone (novo filtro ?phone= em GET /leads). - Mostrar o lead correspondente: contato, status, figuras de empréstimo, atribuído oficial; ações rápidas Chamada / Open Lead / Log Note (media/posts) / Agendar Callback (reutilizado CallbackDialog); atividade recente da Fonte de notícias. - Retalho quando nenhum lead corresponde: endereços-livro Contatos, em seguida, o diretório interno do membro (tanto do lado do cliente, reutilizando dados existentes caminhos), mostrados como um cartão de identidade. - Novos assistentes app/lib/phone.ts (correspondência de dígitos canônicos) e app/lib/directórioLookup.ts.
· EmailService
Suporte ao consentimento de imagem remota "desbloquear para sempre"
Adiciona um consentimento wildcard (allowAll / isAlwaysAllowed) para que um membro possa optar por mostrar imagens externas em cada mensagem. Reutiliza a tabela de consentimento existente via uma chave-id de mensagem sentinela reservada — nenhuma alteração de esquema. O POST /remote-image-consent endpoint aceita escopo=sempre para esta escolha global.
· kamo-internal
Adicionar opção "desbloquear para sempre" para imagens externas bloqueadas
O portal de imagens externas agora oferece duas ações: Desbloquear (esta mensagem, como antes) e desbloquear para sempre, que exibe imagens externas em cada mensagem A avançar. Desbloquear para sempre é fechado por trás de uma janela de confirmação e persistir no lado do servidor (dispositivo cruzado); uma transmissão desbloqueia outras mensagens abertas imediatamente.
· SecurityService
Um nome preferido diferente garfos um novo lead
Um nome preferido genuinamente diferente (comparado caso- insensível com exterior espaçamento aparado) é uma pessoa diferente, então crie um lead novo em vez de renomeando o existente — torna-se o líder atual do GUID através do findLeadByGuid Ordenação de decisão do UID. A re-casagem/espaçamento trivial ("john" ↔ "John " ↔ "JOHN") não Garfo. Aplicado ao caminho de criação POST e ao caminho de atualização PATCH (o legal- nome portão mantém o mesmo nome preferido, de modo que nunca garfos).
· MediaService
Alcance o próprio oficial do mutuário diretamente, nenhum portão direito de apoio
Retirar o requisito ACCEPT SUPPORT TICKETS da atribuiçãoAgente Preferido: a O agente de empréstimo do mutuário é acessível independentemente de ser um configurou o agente de suporte (o ID do membro já estava validado como Oficial do Serviço de Segurança). Manter uma verificação org-membros como um cinto de segurança cliente adulterado não pode encaminhar uma sessão para o membro de outro org; desconhecido/cross-org IDs voltam à fila pendente padrão.
· APIService
Proxy GET /lo-presence to MediaService
O proxy de sessão de suporte já encaminha o corpo bruto, então o widget mesclado preferidoAgentMemberId atinge MediaService intocado. Adicionar o proxy de presença assim o portal do mutuário pode questionar se o seu agente de empréstimo atribuído está online.
· MediaService
Roteamento direto para o OL + Endpoint de presença de LO
Powers the mutuário portal's fundiu LO/chat widget: - Está bem. Atribui directamente um chat público bilhete para um agente ESPECÍFICO (o gestor de empréstimos do mutuário) em vez de a fila pendente, quando esse oficial é um agente de suporte elegível para o tópico (adiciona-os à sessão de chat + notificá-los; grava a escolha na Rastreador de robina redonda). Regressa ao nulo para que o chamador mantenha o comportamento da fila. - Está bem. aceita preferidoAgenteMembro e rotas para esse oficial; somente pings a fila pendente org quando não roteado. - PublicChatController: lê preferidoAgentMemberId do órgão de sessão e adiciona GET /lo-presence?memberId= → {online} (PresenceService.isOnline) para o widget mostra o verdadeiro estado online do oficial e auto-coberturas com IA quando ausente.
· SecurityService
Expor ID de membro atribuído-LO + telefone para chat direto + presença
O widget LO/chat mesclado precisa (a) atingir o oficial designado diretamente a sessão de apoio ao vivo do mutuário e b) a consulta da presença ao vivo do agente. Ambos os sistemas MediaService chave no ID membro, então /portal/atribuído-lo agora Returns loMemberId (Id do oficial aceitante) e loPhone (do registro de usuário do oficial) ao lado do nome/NMLS/email existente.
· SecurityService
Atribuir um agente de empréstimo a um líder NAME-ONLY (antes de e-mail/telefone)
O portal do mutuário já cria a liderança no instante em que um nome é dado, mas enterAssignmentPoolIfActionable manteve um lead exclusivo para o nome Fora do crédito aceita piscina (um LO não poderia alcançar um mutuário sem contato, então aceitar apenas queimado um crédito). Essa razão já não se sustenta: uma superfície de chumbo designada a LO atribuída a o mutuário in-portal (LoContactCard, e o widget LO/chat que vem se fundindo), então um nome é um ponto de contacto acessível. Admitir um nome de chumbo para a piscina assim que um oficial pode ser atribuído o mais cedo possível — antes de email / telefone chegar.
· EmailService
Logotipo inline-CID org (SVG->PNG) para que ele renderize no Gmail; remova o conteúdo da mensagem; preserve o caso Do domínio
- FIX (segurança): os e-mails de notificação não carregam nenhum corpo de mensagem - remover messagePreview from template vars, bookger, samples and the settings alterle. - FIX (logo): org logos são SVG, que Gmail/a maioria dos clientes se recusam a renderizar. EmailLogoService rasteriza o org SVG para PNG (Batik) e o incorpora em linha via multiparte/relacionado (cid:emaillogo/emaillogomark), Redis-cached 24h, busca simultânea, gracioso retorno para o URL SVG em qualquer falha. - FIX (De caixa): displayCasedDomain reajusta o rótulo da marca da org title (prefix match, ccSLD-aware) assim From lê KamoCRM.com não kamocrm.com.
· kamo-internal
Mensagens perdidas links profundos de email, stash de autenticação-continuidade, auto-popup de chat não lido, configurações de notificação
DeepLinkToolBootstrap abre janelas de ferramentas ?openChat/?openTicket (os parâmetros sobrevivem o login em ida e volta através de uma sessãoStorage stash capturou pré-auth e preservado através da limpeza do /logout; AutoOpenUnread Conversas pops sessões de conversa não lidas uma vez por cada tab- session (cap 6, chat- only, ligação profunda desatualizada); Página de configurações de notificações (e-mail ligado/desligado, pré-visualização, horas silenciosas) MemberUiPreference; sessions/chat proxy agora encaminha o filtro de categorias.
· MediaService
Notificações de e-mail de mensagem perdida (chat + support) com supressão por fonte
NaTS durável consumidor chat-email-notifier em chat.session.> alimentando um Registo de mensagens EMAIL NOTICES (PENDING/SENT, por mensagem para chat, por bilhete para apoio), varredura 60s com portão de presença, horas tranquilas, digerir janela, voltar a tentar com o recuo (falha fechada). E-mails via EmailService templates com Variáveis X- Internal- Auth; escalonadas em HTML; Membro-> Recuo de e- mail do utilizador; Receptores mudos. Guardas Sudo: a representação já não escreve presença ou limpa/cria sinais de leitura. Activado por omissão (chat.email.enabled=true).
· EmailService
Variáveis de amostra do editor para modelos de notificação de mensagens perdidas
Amostras de antevisão para missed CHAT MESSAGE e SUPPORT TICKET REPLY incl. bruto vs. variantes de remetente/título html-escapado utilizadas pelos corpos canônicos.
· kamo-shared-library
Registro de notificação de e-mail faltado + modelos canônicos
MensagemEmailNotice entity (MESSAGE EMAIL NOTICES, receiver único+sourceKey+canal) com estados de supressão PENDING/SENT, repositório incl. sudo-safe markRead/ deletePendingLer, missed CHAT MESSAGE + SUPPORT TICKET REPLY modelos canônicos (registrado em CANONICAL KEYS), pesquisa de MediaSession MuteRepository.
· EmailService
Microsoft 365 e-mail via Microsoft Graph somente aplicativo (zero por configuração de caixa de correio)
O correio Microsoft 365 agora lê/envia somente para aplicativos do Microsoft Graph (Mail.ReadWrite/Mail. Enviar permissões de aplicação) em vez de IMAP — uma aplicação credencial cobre todas as caixas de correio atuais e futuras locatário-wide, assim adicionando um caixa de correio em Kamo apenas funciona: sem New-ServicePrincipal, sem subsídios por caixa de correio. - GraphMailProvider (novo): send/draft/search, adaptando ids gráficos opacos ao uid numérico existente contrato via GraphMessageIdService. Pastas normalizadas para INBOX/Sent/Drafts/ Junk/Trash/Archive via resolução de id de pastas bem conhecidas independente do locale. Attachment $select utiliza o ficheiroAttachment type-cast para contentId. - GraphMessageIdService (novo): uid sintético estável de 52 bits; race-safe on CONFLICT upsert. - Microsoft365Provider: estende GraphMailProvider; o e-mail usa um Graph apenas para aplicações token (tenente do domínio da caixa de correio, créditos do registo OAuth da plataforma); as operações de administração mantêm o token delegado. - ProviderHttpClient: Sobrecargas tipo URI (sem recodificação RestTemplate) + getBytes binário. - MailProviderResolver: MICROSOFT 365 já não constrói créditos IMAP (Graph self- autentica); cabos de recuperação de plataforma agora mortos. KamoMail e os outros fornecedores de IMAP (Exchange/Google/Zoho/IceWarp), controlador, metadados e a interface estão todos inalterados (contrato numeric-uid conservado). Precisa da nova tabela de compartilhamento de lib (correr KI) e Graph Mail. ReadWrite + Correio. Envie permissões de aplicação + consentimento administrativo no inquilino M365.
· kamo-shared-library
GraphMessageIdMap entity for Microsoft 365 Graph mail id mapping
Mapas opacos do Microsoft Graph IDs de mensagens para UIDs numéricos sintéticos estáveis por caixa de correio, assim Graph caixas de correio flui através do contrato de correio numérico-uid existente (controladores, metadados thread/search/label, frontend) sem alterações. A uid sintético é uma hash de 52 bits mantida dentro do intervalo JS safe-integer; uma race-safe EM CONFLICT upsert manipula simultaneamente primeira visão. Quadro do aditivo ******************* - criado pela KI, sem migração de dados.
· DaemonService
Bump GENERATOR VERSION 7 — Reforço da fauna GBIF em todas as cidades
O motor das aves agora consome o bloco da fauna, por isso enche-o em toda a parte: preencher tarefas re-drains linhas velhas em 24/min (cidades requisitadas pelo usuário primeiro), tão real aves localmente comuns convergem entre ~14h enquanto o motor está ligado ao habitat No entanto, não é ainda uma cidade de grande qualidade ou GBIF.
· DaemonService
Amostrar aves locais comuns do GBIF para a fauna da cidade
FaunaClient (mirrors PetrologyClient): faceta de ocorrência do GBIF em Aves da classe ~27km caixa em torno da cidade → top ~10 espécies por contagem de registros → resolver taxonomia (científico + nome comum, família, ordem) + um peso normalizado abundância. Verified real & habitat-specific (Tucson→Mourning Dove/Gila Woodpecker/Verdin/ Anna's Hummingbird; costa do Pacífico→Western Gull/cormorant; Everglades→White Ibis). Livre/aberto, nenhuma chave; distribuição de aves não está nos dados da Terra KamoUniverse. Fio em CitySceneSampler como um aditivo opcional `fauna` bloco. O portal bird engine maps family/order → arquétipo de voo + silhueta cliente-lado, assim esta camada permanece uma fonte de dados em cache. GENERATOR VERSÃO inalterada: fauna pousa em cidades recém-amostradas agora e enche no solavanco quando a renderização naves de motores (evita uma varredura GBIF prematura de 20k-cidade para dados nada desenha ainda).
· DaemonService
63 A flora da assinatura da ecoregião dos EUA sobrepõe-se (popular completamente os biomas)
Cidades dentro de um estado parecia o mesmo porque a flora veio de apenas 15 padrões de bioma grosseiro (+1 sobreposição de Mojave). Curou agora espécies assinatura real para 63 ecorregiões dos EUA (RESOLVE): Sierra Nevada → pinheiro gigante sequóia/ponderosa/açúcar; costa N.Cal → sequóia costeira/douglas abeto; Vale Central → vale / carvalho azul; Sonoran → saguaro/palo verde/ocotillo; Chihuahua → agave/ ocotillo; Rockies → aspen/engelmann spruce/lodgepole; Appalachian → carvalho branco/tulip poplar/ hickory; Everglades → manguezais/cipreste/paleira sabal; Piney Woods → loblolly/longleaf; planícies → esparse bur oak/cottonwood; etc. Então diferentes ecorregiões de um estado agora tornam distintas árvores. GERADOR VERSÃO 6 → re-amostra.
· DaemonService
Petrologia (Macrostrat) + estradas (.trf) + cascatas (.hyf) — subir o nível dos sistemas KamoUniverse
O GLiM nunca foi baixado (PANGAE 404s; o próprio KamoUniverse cai para o padrão litologia), assim a petrologia vem da API de mapa geológico global Macrostrat: por ponto Litologia → uma aula de rock grosseiro ******************* **************************** A rede rodoviária .trf e .hyf cachoeira sidecars foram cozidos na unidade, mas não utilizados — agora o sampler lê-los também: a estrada maior classe + bandeira não pavimentada perto da cidade, e a queda de cachoeira mais próxima. GERADOR VERSÃO 2 → todos os perfis da cidade re-amostra.
· DaemonService
Amostrador de cenas da cidade sobre as telhas de terra KamoUniverse
- EdtTile: leitor de byte-exact para azulejos EDT4 (Copernicus DEM + ESA WorldCover + WorldClim + HydroSHEDS + ecorregiões RESOLVE + máscara oceânica), memória mapeada, offset lê por camada (KBs por ponto, não a peça 210MB). Verificado contra o real N34 W117 Ladrilhos Mojave. - EcoResolver: eco biomes.json (exportado verbatim da folhagem do universo-mundo + eco table.rs) → paleta flora por região. ECO 433 → Árvore de Josué, sem duplicação. - CitySceneSampler: coordenadas → o documento de cena-factor versionado (release de terreno) + Silhueta do horizonte SW, clima + Koppen, costa/rio/distante do lago+azimute, mistura de cobertura de terra a 1/5/15 km, paleta floral, densidade construída + céu escuro). Construído Os centróides voltam para a ecorregião próxima dominante. - CitySceneryFillService + CitySceneryFillJob: dreno PENDING (e velho-gerador) city scene profile linhas em um tick de 1 minuto. k8s: somente leitura /mnt/worldchunks earthdata mount (presente em ambos os nós), SCENERY ENABLED.

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