Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· kamo-shared-library
Il piombo Mortgage trasporta i prestiti finanziari (reddito, credito, prezzo di acquisto, pagamento in contanti, saldo di rimborso/cash-out)
Supera l'esistente ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** LeadClaimMortgage; fili DTO (read/update/create), il registro del campo di storia e LeadService creare+update. Questi sono fatti del mutuatario CLAIMED/ESTIMATED (fuocato dall'URL verificatoA), dando l'ufficiale di prestito una ricca foto pre-1003 dal portale del mutuatario.
· SecurityService
Caricatore di processo come org bg + gate da nuovi diritti
- Nuova ImageResizeClient esegue gli upload di sfondo dei membri attraverso il SAME ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** memorizza il risultato come .webp. - ThemeBackgroundController: autorizzare tutti e cinque i punti finali dei nuovi diritti — MANAGE OWN BACKGROUND IMAGES per il proprio membro, **************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** per un altro membro (un superset; dio-mode bypass). Leggi risolvere il bersaglio utente del membro in modo che gli amministratori possono elencare / conservare le immagini degli altri; uploads store sotto il utente del membro di destinazione. - Nuovo GET/fondo tema/attivo restituisce la presentazione del membro della sessione URL immagine (empty => org fallback) per lo strato di sfondo globale. Diritti auto-seed sul boot tramite RoleRightsSyncService (necessario il nuovo condiviso-lib, che cloni CI). Non è necessario eseguire KamoInitializer.
· kamo-internal
Gate My-Profile sfondi per i nuovi diritti + slideshow membro/org
- Portare la sezione "Background & Theme" di MANAGE OWN BACKGROUND IMAGES E' solo che... (altri); lasciare un sottofondo aprire il profilo di un altro membro. - Persist la scelta org-vs-own tramite ogni sfondo è la bandiera di InSlideshow (org => nessuno attivo, proprio = > tutto attivo) — nessun cambiamento di schema; l'euristica di fetch ora deriva il toggle da immagini attive per abbinare ciò che serve lo slideshow. - OrgSlideshowLayer preferisce gli sfondi attivi del membro E torna a casa. org sfondi. Nuovo percorso proxy sottile /attivo.
· kamo-shared-library
Aggiungi Gestire il proprio / altri sfondo Immagini diritti (gruppo generale)
Aggiunge MANAGE OWN BACKGROUND IMAGES (165) e ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** (166) a RoleRightType, serviceType null in modo da atterrare nelle impostazioni generali gruppo (mirrori il precedente STATE LICENSING * OWN/ALL). Portare il per-membro le immagini di sfondo sul mio profilo. Append-only; versione invariata.
· SecurityService
Informare l'ufficiale di prestito assegnato quando i documenti del mutuatario di un prestito sono tutti ricevuti
Fuoco LOAN DOCS READY LO nei punti soddisfacenti accanto al mutuatario DOC COMPLETE. Sostiene il LO tramite prestitoFile -> Non e' vero. - > Membro; auto-guardato al prestito essere completamente raccolti, un LO assegnato e una e-mail risolvibile.
· kamo-shared-library
LOAN DOCS READY LO modello canonico — notificare LO assegnato quando i documenti di un prestito sono tutti in
· kamo-internal
Assegnare un ufficiale di prestito ad un accordo dalla sezione del creatore
La sezione Loan Originator di sola lettura ha ora un raccoglitore di prestito-ufficiale (i membri diorg via /members/names) + Assign, chiamando PUT************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ livello di transazione (eredato da tutti i prestiti per bambini). Su assegnare ri-fetches l'app così la proiezione dal vivo riflette immediatamente il nome di LO/NMLS/state-license. Nascosto una volta congelati (a partire). Questo rende operabile l'intero creatore del sistema — prima questo non c'era modo di impostare l'assegnazione, quindi i campi LO sempre proiettati vuoti. (Nuove stringhe UI in linea in attesa di un passaggio i18n, corrispondente alla nota esistente della sezione.) Verificato: tsc --noEmit pulito.
· kamo-internal
Campi di configurazione del provider per l'accesso alla posta cloud
Aggiungere gli input di configurazione il risolutore di EmailService legge per autenticare il cloud mailboxes: - Google Workspace: chiave di servizio-account (JSON) per IMAP a livello di dominio. - IceWarp: host di posta, password di posta di servizio, sicurezza dei trasporti. - Scambio (on-prem BASIC/NTLM): host di posta, password di posta di servizio, trasporto Sicurezza.
· EmailService
Percorrere la posta di tutti i fornitori di cloud attraverso IMAP/SMTP con OAuth2 (XOAUTH2)
Provider cloud (Microsoft 365, Exchange Online, Google Workspace, Zoho, IceWarp) Ereditò la lettura e l'invio da parte del personale, ma il risolutore non ha mai le credenziali di IMAP/SMTP popolate per loro, così ogni cartella / messaggio letto lanciato MailboxNotConfiguredException -> la schermata "email non configurata" (ad esempio org opzione su M365). KamoMail ha lavorato solo perché ha ricevuto le credenziali (colonna interna). Ora tutti i fornitori fluiscono attraverso un unico percorso IMAP/SMTP; KamoMail è invariato. - MailCredentials: Full Connection spec... - ImapStoreFactory + EmailSmtpService: SASL XOAUTH2 (native com.sun.mail) o basic auth per spec; STARTTLS richiesto (chiuso) così i gettoni non transitano mai chiarotesto. - MailProviderResolver: per-provider credenziali cablaggio + casella di posta predefinita membro + Rinfresco di OAuth token. M365/Exchange-Online utilizzare app-solo client-credentials token (outlook.office365.com; Non e' vero. inquilino derivato dal dominio mailbox; Google utilizza la delegazione a livello di dominio account di servizio; Zoho usa il token OAuth memorizzato; IceWarp/on-prem Exchange utilizzare auth base dalla configurazione del fornitore. - EmailImapServizio: risolvi Inviato/Draft via RFC 6154 SPECIAL-USE così inviato copie terra nella cartella nativa del fornitore (Gmail [Gmail]/Sent Mail, Exchange Sent Items). - ProviderController: persistono i campi config-form nella configurazione crittografata (precedentemente caduto); capacità di elenco senza coniare un token. - Rimuoveto il lancio RealtimeNotifier stubs da fornitori di cloud (coperture di inpolling in tempo reale; no push-webhook infra). M365/Exchange-Online richiedono l'applicazione IMAP.AccessAsApp + SMTP. SendAsApp con admin consenso e New-ServicePrincipal in Exchange Online (scopable per mailbox).
· kamo-internal
Trattare una volta caricata dalla scheda documenti del conto
La finestra di dialogo di upload ora offre un selettore "Deal" opzionale (l'account è transazioni); la scelta di uno francobolli prestitoTransactionId così un documento tempo-sensibile (credito relazione, dichiarazioni bancarie) è legata a tale accordo e soddisfa solo i suoi prestiti — mentre "Account-wide" mantiene il riuso senza tempo per i documenti di identità. Completa il modello end-to-end del documento con circuito elettronico. Verificato: tsc --noEmit pulito.
· SecurityService
L'upload del vaso può trattare un documento (loanTransaction Id)
Il caricamento del caveau ora accetta un prestito facoltativoTransazione Id, timbrato sul MemberDocument così un documento tempo-sensibile (relazione di credito / dichiarazione bancaria) può essere vincolato a una transazione specifica — la guardia di soddisfazione poi lo applica solo a quella dell'accordo prestiti. Omesso = riutilizzo senza account (non cambiato). Superato su MemberDocumentDTO. Verificato: mvn compila pulito.
· kamo-internal
Interruttore di sfondo per dispositivo — semplice gradiente o presentazione di foto org
Aggiunge un interruttore a due icona a destra (sotto la pillola di prova; si alza nella pillola posizionare una volta terminata la prova) per scegliere lo sfondo della console: - Plain gradient (default, migliori prestazioni) — lo sfondo oklab-blob esistente. - Org photo slideshow — riutilizza gli stessi asset a tema i siti di login / registrazione uso: <themePath>/json/config.json's backgroundImageCount → <themePath>/img/bg/{n}.webp, precaricata con 404s caduto e crossfaded (rispetti preferisce-ridotto-mozione; rientra nel campo normale se nessuna immagine si risolve). La scelta è salvata PER DEVICE in localStorage (usoBackgroundMode), non lato server, perché è una scelta di rendering/perf che dovrebbe rimanere locale. The Backdrop condiviso lo onora (casa + impostazioni); il gioco vive a casa. Ogni icona ha un tooltip. Nuove stringhe home.background.* spedite al dizionario.
· SecurityService
Bloccare l'istantanea del creatore all'Estima del prestito iniziale (Reg Z/TRID)
Completa il ciclo di vita del creatore: una risoluzione condivisaProiezione() ora alimenta BOTH live leggere la proiezione e il congelamento (nessuna deriva). Su emissione di una informativa INITIAL LE set, MortgageDisclosureController congela l'originato LoanOriginator — cattura il progetto LO + org + stato-licenza sulla riga WORM e francobolli congelatiAt/ congelatoState (idempotent; la guardia @PreUpdate blocca qualsiasi cambiamento successivo). Dopo questo org/LO rinomina non altera mai con chi ha avuto origine il mutuatario. Verificato: mvn compila pulito.
· kamo-internal
Transaction-first pipeline — PrimeReact righe espandibili
Sostituisce la griglia di prestito piana con un PrimeReact DataTable di TRASPORTI che iniziano crollato ed espandere IN PLACE ai loro prestiti membri (nessun cassetto a due clic), quindi un steward apre un prestito specifico direttamente. Colonne principali: Transazione #, Status Deal, Borrower(s), Prestiti, Chiudere l'obiettivo; file per bambini: Loan #, Borrower, Proprietà, Importo, Stato, aperto. I prestiti dell'orfano sono rappresentati come file a singolo raggio. Mantiene la ricerca, il filtro di stato, CSV export, New e punti di ingresso Board/HMDA. PrimeReact 10 (MIT). Commette anche la progettazione del refactor spec. Verificato: tsc --noEmit + successivo costruire sia pulito.
· kamo-internal
Re-add la pillola di prova top-right (colore-swapped NavPri pillola)
Mantiene la linea di prova nella striscia di stato della masthead e re-adds una pillola prominente in alto a destra così la modalità di prova di un org rimane evidente. È il NavPri espanso pillola di prova con i suoi colori di riempimento / testo swapped (fondo primario, bianco testo/icon) usando lo stesso ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** solo per il personale (TEAM MEMBER) su un diritto TRIAL.
· kamo-internal
Live "inserisci tra" mentre trascina, non solo drop-to-swap
In precedenza l'ordine è cambiato solo a goccia, quindi si legge come swapping in uno slot. Ora la lista rifluisce dal vivo mentre si trascina: dnd-kit onDragOver muove il trascinato opzione per l'opzione hovered slot (arrayMove), quindi il membro vede esattamente dove atterra tra gli altri. useHomeLayout.move avanza il suo ordine ref sincronizzatamente così eventi di trascinamento consecutivi comporre correttamente e prende un salvare la bandiera così scrive l'anteprima dal vivo; l'ordine finale persiste una volta su goccia tramite un nuovo commit().
· kamo-internal
Interruttore sibling-loan sulla vista dell'applicazione
Una transazione può raggruppare più prestiti; l'intestazione dell'app mostra ora un commutatore per saltare tra i prestiti agevolati dell'accordo (costituiti per le offerte individuali) invece di essere raggiungibile tramite il gasdotto. Verificato: tsc --noEmit pulito.
· kamo-shared-library
LoanFileDTO.loanTransactionId (app view know its deal)
Supera la transazione del prestito in modo che la vista /applicazioni può mostrare / scambiare fratelli prestiti. Verificato: mvn install clean.
· kamo-internal
E' il momento giusto. (tipo di FF)
Specchio il campo backend per la colonna Transaction # pipeline. Verificato: tsc --noEmit clean.
· SecurityService
Transazione superficiale Numero su TransactionSummaryDTO (trazione pipelina #)
La riga per-transazione pipeline ora porta il numero di transazione umana. Verificato: mvn compila pulito.
· SecurityService
La proiezione di Originator risolve la licenza per Stato
Completa la proiezione del live originator: il LO assegnato StewardLicense (NMLS MLO) per lo stato della SUBJECT PROPERTY (da property.address.subdivision, normalizzato a ISO-3166-2), uno attualmente-valide, popola l'originatoreStateLicenseId. Verificato: mvn compila pulito.
· kamo-internal
Drag-and-drop per riorganizzare le opzioni di avvio della tastiera, salvato per membro
I membri possono ora riordinare le loro opzioni di casa trascinando, e la disposizione è persistente lato server per membro (ricarica e li segue attraverso dispositivi) tramite lo stesso generico ui-preferences memorizzare gli usi del layout nav — un nuovo `homeLayout` chiave che tiene l'opzione ordinata ids. - useHomeLayout (disponibileIds) carica l'ordine memorizzato, si fonde con il opzioni attualmente-gated (nuove opzioni append, rimuovere quelli drop), e persiste riordini con un PUT ottimista, debounced a E' il momento giusto. - dnd-kit DndContext sulla muratura: MouseSensor (5px) + TouchSensor (250ms) così un rapido clic apre ancora una carta / il suo sub-item mentre una sporgenza riarrangia (solo puntatore, come i nav vivi). Reorder si impegna a goccia gli anelli del bersaglio a goccia. FeatureCard ottiene trascinabile={false} così nativo link-drag Non combatte il dnd-kit.
· kamo-internal
Fare Materiali la prima scheda + atterraggio predefinito; rimuovere Panoramica
Scheda panoramica rimossa; Materiali è ora il primo. L'indice /marketing reindirizza al primo scheda accessibile (Materiali per impostazione predefinita), quindi chiunque apre Marketing atterra su Materiali.
· SecurityService
Proiezione live originatore — org + assegnato LO, su lettura
GET /mortgage-apps/{uid} ora sovrappone una proiezione LIVE, sistema-managed originator (computato su letto, mai memorizzato) a meno che la riga non sia congelata: nome org/NMLS/indirizzo da l'Organizzazione, e il nome del mutuatario/NMLS/teamMemberId dal membro ASSIGNED al transazione del prestito (nome legale tramite User.EmbNameFull.formatFull(), NMLS via Membro.nmlsId). L'identità a mano stante è sgomberata — la sezione riflette solo fonte di verità. Una riga congelata (iniziale LE rilasciato) è l'istantanea WORM, lasciata intatta. Rimanendo per la proiezione completa: il per-stato StewardLicense (necessario il soggetto stato sul grafico dell'app) e il grilletto di blocco all'emissione iniziale di LE.
· kamo-internal
La sezione Loan Originator è in sola lettura / gestita dal sistema
La carta Loan Originator non ha più eseguito a mano i dati URLA §9 (la duplicazione di E' stato riabilitato. Rende sola lettura: una proiezione LIVE dell'ufficiale di prestito assegnato + org prima del prestito iniziale Stima, poi l'istantanea as-originata congelata dopo (frozenAt/frozenState/source ora su LoanOriginatorDTO). Rimuove gli ingressi modificabili + patch debouncedOriginator autosave. Proiezione di backend / congelare le terre di cablaggio successivo (SecurityService).
· SecurityService
Assegnazione del prestito a livello di transazione + numero di transazione
assicurarsiTransactionForApp ora timbra una transazione org-uniqueNumero (TXN-iutauid>). Nuovo... + PUT /mortgage-apps/transazioni/ {uid}/loan-officer stabilisce l'ufficiale di prestito assegnato dell'accordo (un Member.id, ereditato da tutti i prestiti per bambini) — l'unica fonte che guiderà il sistema gestito LoanOriginator proiezione/snapshot (l'originatore non è mai entrato a mano). Operatore... cancello, placcato org.
· InitializerService
Originaria/transazione-primi colonne (@Ordine 90)
Additive colonne nullable + indice numerico delle transazioni org-unique per MLOS originatore/refactor: mlos loan transaction (transaction number + assegnate lo *), prestito originatori (indicatori WORM congelati at/frozen state), mlos member document (loan transaction id deal-binding). Idemponte.
· kamo-shared-library
Originatore/transazione-primo schema — Incarico LO, congelare WORM, documentazione affare-scoped
Backbone per il sistema-gestito-originatore + primo refattore transazione (spec 2026-07-08): - LoanTransaction: transazioneNumero (org-unique) + assegnatoLoanOfficerMemberId (+ audit) — l'assegnazione LO a livello di transazione che guida l'autore proiezione, ereditato da tutti i prestiti per bambini. - LoanOriginator: congelatoA/frozenState + @PreUpdate WORM guardia — l'originatore è una proiezione LIVE del membro/org assegnato fino alla stima iniziale del prestito problemi (Reg Z/TRID), quindi un'istantanea immutabile as-originata. LoanOriginatorDTO espone congelatoAt/frozenState/source (LIVE|SNAPSHOT). - MemberDocument: prestitoTransactionId deal-binding — un documento a volta sensibile al tempo (relazione di credito, dichiarazione bancaria) è controllata da transazioni; NULL = senza account. La validità temporale rimane governata dalla FreshnessPolicy esistente (NOT duplicata). Proiezione / congelamento / assegnazione logica vive in SecurityService (che dipende sia donotmodify e mlos), non qui — il nucleo chiuso rimane mlos-decoupled.
· kamo-internal
Aggiungi filtro prodotto dipendente dal Fornitore
Aggiunge un filtro prodotto alla barra filtro /leads, immediatamente a destra della Filtro del fornitore. Si comporta come la coppia Stato/SubStatus: disabilitato fino a quando un fornitore selezionato, le sue opzioni sono i prodotti appartenenti al selezionato venditore, e si cancella quando il venditore cambia. Il filtro lato client stato del predicato e del filtro già esistito; questo fila il dropdown.
· kamo-shared-library
AusEngineClassifier condiviso — una fonte di verità per la mappatura dell'agenzia §8.2
Il programma→motore, run→motore, e la decisione→gate mappature erano locali per Non e' vero. Il capitale-markets lock-stage AUS hard-stop ha bisogno della classificazione identica, e un cancello in attesa non deve avere due copie che possono derivare. Estrarre i tre mapping puri in E' il momento giusto. (statico, interruttori esaustivi = completezza compilata / §8.2 guardia alla deriva). Il risolutore dei prezzi ora delegati a esso; LockStageAusGate dei mercati di capitale utilizza lo stesso. Additivo, niente schema.

Il tuo universo ti sta aspettando.
Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.
Gratis per sempre — nessuna carta di credito richiesta