Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· SecurityService
P4 documento membro volte backend (documenti riutilizzabili attraverso prestiti)
- MemberDocumentService: caricare un documento ONCE su AccountBorrowerParty → ImageService crea un Img in Secchio auto-creato per l'imaging-membro-vault********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Elenco per parte/account. Guardia di prestito-partita chiusa (isMemberPartyToPartyAccount). - MemberDocumentController /api/security/member-documents (POST upload multipart, GET list): gli operatori gestiscono qualsiasi caveau del partito (LOS VIEW PIPELINE); un mutuatario solo le parti del proprio account. La volta Img è l'ancora di riutilizzo RequirementSatisfier(imgId) punti a soddisfare i requisiti per-loan attraverso molti prestiti (satisfy-wiring è la prossima fetta). Compili puliti; nessun cambiamento di schema (P1 entità).
· kamo-internal
Per-transazione pipeline — elenco per accordo, non per prestito (req proprietario)
ApplicazioniPipelineConsole ora elenca UN fila per LoanTransaction (il suo prestito rappresentativo + eventuali prestiti ereditari non raggruppati), con una colonna "Deal / Status" pinata che mostra il derivato chip di stato di gruppo, un chip N-loans per le offerte multi-loan, e una bandiera negata-eccezione. Tasse E' il momento giusto. (+ TransactionSummaryDTO tipo) e si unisce alle file di prestito. Buckets/filters/journey ri-based sulle righe rappresentative delle transazioni.
· kamo-internal
Il portale KamoMLOS designazione del prodotto predefinito nei produttori-prodotti (#11)
Un gioco a stella su ogni prodotto designa il singolo KamoMLOS portale prodotto auto-assegna (single-attivi). Gated via GET /lead-vendors/mlos-readiness: mostrato solo quando il mercato modificato IS il mercato di riferimento residenziale-mortgage e POS + un mercato di commercio MORTGAGE sono configurati. Riflessi / modifica il default dal vivo tramite PUT .../products/{id}/mlos-default. (i18n nella spazzata P6.)
· SecurityService
Backend di design del prodotto predefinito P3 (single-active) + prontezza dell'operatore
- No, no. designa UN LeadVendorProduct come KamoMLOS dell'org prodotto porta auto-assegna; singolo-attivo (demode qualsiasi altro, org-scoped, fail-closed) via JPQL aggiornamenti di massa. - LeadVendorController: GET /mlos-readiness (che il prodotto è predefinito + se POS + RESIDENTIAL MORTGAGE lead market + Il mercato commerciale MORTGAGE è configurato) — sostiene le impostazioni gate + mostra lo stato corrente. Compili puliti; nessun cambiamento schema/shared-lib.
· SecurityService
P2c porta il primo portale backend
- MortgageVerticalResolver: risolve un org RESIDENTIAL MORTGAGE LeadMarket, MORTGAGE CommerceMarket, designato default LeadVendorProduct, e EFFECTIVE POS-enabled — uno prontezza deterministica per il supporto sia al gate delle impostazioni (#11) che al gate del portale (#12). - PortalLeadService: lead-first — creareOrGetAnonymousLead (chiamato su un cookie AccountGuid, auto-assegnato il prodotto predefinito nel mercato del mutuo, chiuso a mancare sulla prontezza — NO registrazione, NO AppMortgage), patchEstimate, e il sign-in mergeGuidIntoMember (lega la GUID al Account + restituisce i lead(i), rispecchiando la storia di LeadAccount scrive). - PortalController Non e' vero. piombo POST/PATCH, fusione}: anonimo (org-da-host, GUID dal fidato intestazione BFF X-Kamo-Guid); unione è ***-bound. Compili puliti. Percorsi anonimi passano il permessoTutta la catena del filtro (controller self-gate).
· kamo-internal
UI (MERGE ACCOUNTS)
AccountManager acquisisce un'azione di Merge Accounts (consegnata da ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** selezionare esattamente due account cliente, scegliere il sopravvissuto, opzionalmente mantenere il duplicato Stripe cliente/membro primario, poi unisci — restituisce tutti i bambini sul sopravvissuto e soft-disattiva il duplicato. accountApi.mergeCustomer() → POST /account/customers/{uid}/merge. (i18n chiavi da aggiungere nella spazzata P6.)
· SecurityService
Strumento di emergenza account P2a + backend di transazione P2b
P2a — conto di amministrazione si fondono (requisito proprietario A), gated da MERGE ACCOUNTS: - AccountMergeService: reparents EVERY account uid bambino tramite UPDATE nativo (passa JPA orfanoRemoval in modo che i lead/app del perdente sopravvivano), dedup il globally-unique account members + (account, market,target) abbonamenti, riconcilia stripe customer id / primarioMember / puntatore FKs (sopravivor-wins + manutenzione-da-perdente overrides), soft-disattiva il perdente. Solo lo stesso-org. - AccountController POST ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** P2b — backend del gruppo di accordi: - LoanTransactionService: garantire TransactionForApp (gruppo singolo auto su creare, idempotent), derivaStatus (scritto da LoanFileStatus tramite LoanTransactionStatusDeriver), E' il momento giusto. (TransactionSummaryDTO), èMemberPartyToTransaction (D52) generalizzato al gruppo), backfillOrganization. - MortgageAppController: creare() ora raggruppa automaticamente il prestito; GET /transactions list per-transactions (operatori=org pipeline, mutuatario=account proprio). - Registrare mlos.transaction + mlos.docs repos in SecurityServiceApplication @EnableJpaRepositories. Schema già creato da KI (P1). Compili puliti contro installato condiviso-lib.
· kamo-shared-library
Fondazione P1 entità — primo capo/refattore contabile-centrico/gruppo transazioni
NUOVE entità (additive; KI gestisce DDL): - TransactionGroupStatus enum + LoanTransactionStatusDeriver: gruppo derivato lifecycle (Created→...→Completato) arrotolato dal membro LoanFileStatus (mai conservato in modo autorevole). - AccountGuid (account): cookie di lunga durata GUID↔Account (nullable) per il primo flusso anonimo. - AccountBorrowerParty (conti): comune identità di prestito-borrower (Membro opzionale) + chiave doc-vault. - MemberDocument (mlos.docs): volta del documento riutilizzabile a livello dei membri. - LoanTransaction Timeline (+event enum), SharedTransaction Attività (+status/severity enums): feed di gruppo condiviso + attività. - repos per tutto quanto sopra. Enum appends (id-stable / ordinal-safe): - LoanFileStatus.SOLD BOARDED(9) — allegato a END (memorizzazione ORDINALE); +isTerminal; interruttori fissi esaurienti. E' un secchio da quattro soldi. - No, no. — Impostazioni generali (serviceType=null) per lo strumento di espansione account amministratore. Colonne FK (nullable, pinned ColumnDefinition, no default — Unique rowid/gen random uuid orfano trap): - LoanFile.loan transaction id. Lead.account guid id, CommerceMarket.lead market id, the CommerceMarket.lead market id E' il momento giusto. Disegno: Nessuna versione urto.
· SecurityService
Autorizzazione self-service di Borrower (guardia IDOR di partito)
Un mutuatario è un semplice membro org senza diritti LOS dell'operatore; possono agire sull'ONE l'applicazione sono un partito a — e solo quello. Guardia a strati: cancello operatore prima, altro un mancato-chiuso prestito-partita di controllo (isMemberPartyToApp). MortgageAppController: - Si'. scrivere endpoint e i 3 helper di sezione ripetitiva. - elenco: gli operatori vedono l'org pipeline; un mutuatario vede solo app di proprietà. - creare: l'operatore prende l'app (incl. da-lead); un mutuatario auto-crea il proprio (proprietà-stamped) — la zecca premio KamoMLOS-gate. - delete: operatore suspend-right O il mutuatario di proprietà; ricerche: qualsiasi autenticato sessione (riferimento enumera le esigenze di assunzione); viaggio rimane solo operatore. MortgageProgramController: chiuso un IDOR preesistente sul setPersona/setSelettoProgramma (controllo di sola lettura) — ora operatore-LOS-role O prestito-partita. Operatori invariati; mutuatari muniti di vetro; cross-borrower IDOR chiuso (D52).
· kamo-shared-library
Proprietà del prestito di Borrower su AppMortgageService
Aggiunge i primitivi di proprietà per il self-service del mutuatario (un mutuatario è un semplice org Membro senza diritti LOS operatore): - creareBlankOwnedByMember(orgId, memberId): creareBlank + timbro di proprietà collegando (o riutilizzo) un conto il cui primarioMember è il mutuatario. - isMemberPartyToApp(appUid, orgId, memberId): guasto della guardia del partito di prestito — org match E chiamante è primarioMember/AccountMember del Conto dell'app. - listOwnedByMember(orgId, memberId): le applicazioni proprie del mutuatario. La proprietà è il design-mandato**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** AccountMember esiste già, quindi nessun schema/KI. Solo additivo (D52).
· kamo-internal
Colonna Borrower-journey + filtro di aspirazione nella pipeline di prestito
La sotto=pipeline datagrid (ApplicationsPipelineConsole) ora mostra pre-app-taken avanzamento del debitore-giornale in modo che i dipendenti possano rivedere lo stato di un'applicazione come Il mutuatario completa il proprio prestito attraverso il portale KamoMLOS. - colonna 'Borrower Journey': chip di stato (solo iniziato / Compilare / Pronto per inviare) + barra di avanzamento decisa + sezioni n/totale, con un tooltip in attesa; '—' per prestiti già accordati. - secchiello filtro 'Borrower Intake': prestiti con ingresso in viaggio auto-serve dal vivo. - listJourney() API client + BorrowerJourneyDTO tipo + i18n chiavi. Fonte di GET /mortgage-apps/journey (D51).
· SecurityService
Pre-app-taken prestito-journey endpoint per la pipeline dell'operatore
Nuovo GET E' il momento giusto. (LOS VIEW PIPELINE) restituisce per-DRAFT avanzamento del mutuatario in modo che gli amministratori del gasdotto possono guardare un prestito prendere forma mentre il Il mutuatario lo sta ancora riservando attraverso il portale KamoMLOS. BorrowerJourneyService ricomputa la sezione della procedura guidata del portale sopra il grafico canonica AppMortgage (controlli di presenza tolleranti — i DTO canonici e il portale client DTOs hanno nomi di campo diversi). Stato = STARTATO / IN PROGRESS / READY TO SUBMIT su 7 sezioni pre-sottomissione; mutui inversa saltare la finanza sezioni, corrispondenti al portale. Nulla è persistito; incassato a 300 bozze/vista. BorrowerJourneyDTO è un record di SecurityService così dontmodify rimane intatto. Parte del DOC03 pipeline repurpose (D51).
· SecurityService
I controller LOS accettano per-borrower *** sessioni (doc03 §0.1)
BaseLosController ora risolve la sessione del chiamante tramite CallerSessionResolver (X-OTK-validated attributo FIRST — operatori/BFF invariati — allora una prima parte *** cookie fallback) invece dell'attributo X-OTK. Questa è la chiave che consente al portale KamoMLOS di raggiungere /api/security/mortgage-apps/** con un sessione per-borrower reale (un mutuatario è un membro normale org tramite lo standard login→ITK→validate-otk→*** flusso) piuttosto che un account di servizio condiviso. Indietro. compatibile; tutti i 7 controller LOS beneficiano. Compili puliti.
· SecurityService
LOE-Core server-authoritative program scorer + /programs/scores (doc03 §9 Fase 2)
Porta il cliente di KamoMLOS (lib/los/scoring.ts) in SecurityService LOE-Core: LoeCoreScorer segna l'efficace catalogo del programma dell'org (baseline profonda con org overlay) contro un mutuatario AppSnapshot — identico LTV/DTI/occupazione/riserve/ VA-entitlement/reverse-age checks — ritorno ProgramScoreDTO nel client esatto Forma ProgramScore. POST E' il momento giusto. Primo server: questa nave prima della cancellazione §9 Fase 3 client-scorer. 3 test verdi.
· InitializerService
Seed 17 regole del programma reale (doc03 §9 Fase 1)
Migra i dati autorevoli ProgramRuleset dal regolamento client KamoMLOS I fascicoli in un'altra stanza. (17 codici, estratti fedelmente) e sostituisce ProgramSeederRunner's RulesetJson("{}") placeholder con reale regole per codice caricate dal classpath. Idempotent: inserisce i programmi mancanti e aggiorna i segnaposto esistenti "{}" a dati reali, mai clobbering operatore modifiche. Applicato sulla prossima corsa KamoInitializer (user-run). Prereq per il §9 Fase 2 server scorer che elimina il client scorer.
· kamo-shared-library
Real deep-merge per org programma-ruleset overrides (doc03 §9 Fase 0)
Sostituisce il M2 ultimo-scrittura-wins mergeOverlay segnaposto (che silenziosamente scartato l'autorevole linea di base su qualsiasi org override) con una ricorsiva JSON deep-merge: org overrides fornisce solo le chiavi che cambiano, oggetti nidificati ricorsi, array sostituire all'ingrosso, e un override malformato non riesce a raggiungere la linea di base. Blocca il Contratto ProgramRuleset davanti al segnapunti autoritativo del server (§9 Fase 2) che cancellerà il punteggio client. Programma/ProgramService javadoc rinominato. 3 test verdi.
· kamo-shared-library
MlosExtractedCandidate entità di staging per la pipeline di ingestione (D48)
L'uscita terminale per campo del parser di MLOSIngestionService: una fase, recensibile candidato di estrazione (segment/source-doc FK, targetEntity, fieldPath, cellRef, valore grezzo/normalizzato, DECIMAL(4,3) fiducia, reviewStatus). I candidati non promuovono in soggetti di catalogo canonici tranne attraverso il tasso di MLOSCatalogServiceSheetSanityGate + approvazione umana. Completa il substrato di ingestione. Tempo di estrazione preesistente). mlos.catalog già in KI scan → auto-creas da tavolo su prossima corsa KI; servizi eseguire ddl-auto:none.
· kamo-shared-library
Riscrittura del profilo migliore di sforzo isolato per i percorsi di parete legale (D47)
mergeFactsBestEffort esegue l'arricchimento write-back nella sua transazione OWN (REQUIRES NEW) in modo che un fallimento non possa mai tornare indietro la transazione del chiamante — la sicuro per un percorso decisionale della parete legale (AUS/internal-rules) il cui la decisione di registrazione deve persistere indipendentemente. Salta silenziosamente quando non esiste nessun profilo. +1 test condiviso-lib (skip-When-absent / delegato-quando-presente).
· kamo-internal
Sezione Licensing basata su Stato sul mio profilo
New SectionCard (NMLS ID + tabella con licenza per Stato con attivo- fornire la casella di controllo e le date di rinnovo / scadenza, il rinnovo E' stato un piacere. Aggiunge il prossimo percorso proxy, TS RoleRightType specchio, e design / progetti doc.
· SecurityService
Stato membro licenza API + licenza-consapevole disponibilità di piombo
Aggiunga il regolatore di licenza degli Stati membri (GET/PUT /api/security/members/{id}/ stato-licenza) gated da diritti STATE LICENSING * con lato server rinnovare la validazione dell'esposizione. Abilitare mlos.legal JPA repos. Riepilogo popup e Leads-Available griglia ora rispettare l'ammissibilità di licenza statale.
· kamo-shared-library
Con licenza di Stato membro + cancello di accettazione
Riutilizzare mlos.legal StewardLicense come singolo per-member/per-state NMLS registro (add attivamenteProvidingBusiness). Aggiungi Member.nmlsId. Aggiunta dei diritti General-Permissions E' il momento giusto. CreditLeadAssignmentService ora salta candidati ipotecari il cui stato di proprietà esplicita il membro non è attivamente concesso in licenza.
· kamo-internal
Aggiungi Source ai campi di piombo mappabili
"fonte di piombo" è mostrato nella pagina di dettaglio principale, ma mancava dalla lista di campo di importazione; aggiungere (percorso 'fonte') ora che l'importatore backend + CreateLeadRequest lo supporta.
· SecurityService
Mappa una colonna importata sul campo `source` principale
Aggiungi caso "fonte" per impostareDirectFieldOnCreateRequest in modo che il percorso di mappatura 'fonte' sia onorato.
· kamo-shared-library
Aggiungi il campo `source` importabile per CreateLeadRequest + persisterlo in createLead
Il Piombo ha una `source` di testo libero (mostrata/edited sulla pagina di dettaglio di piombo) ma era non importabile — CreateLeadRequest non aveva campo sorgente, quindi creareLead non lo ha mai impostato. Aggiungilo così le importazioni manuali possono mappare una colonna di file alla fonte del piombo.
· kamo-shared-library
Aggiungi ScenarioProfileSource.PRICING per sceneggiatore FICO/ratio write-back (D45)
· kamo-shared-library
Spina dello scenario-fatto canonico — genesi derivante + fattiJson populate + write-back + overlay matcher (D45)
D1/D45 amplia il consumo di BorrowerScenarioProfile. Popola il dormiente fattiJson e lo rende la fonte comune di verità per il mutuatario / fatti soli: - ScenarioFactKeys: singolo vocabolario di fatto-chiave canonica + livello (strutturale vs arricchimento) + normalizzare(); il D21 whitelist/deriver/consumers li fa riferimento. - ScenarioFactDeriver: promuove la D18 LTV/CLTV/HCLTV + derivazione categorica su MLOSPricingService in condiviso-lib (una casa per fatti derivati da entità). - BorrowerScenarioProfileService: produrreDaUrla ora popola fatti strutturali (preservare l'arricchimento); risolvereFatti() per il gap-riempimento consultivo; mergeFatti() write-back che filtra al livello di arricchimento (genesi possiede strutturale, D45.3). - ScenarioFacts.fillGapsFrom(): unione di consulenza (richiesta vince, il profilo riempie le lacune). - InvestorOverlayMatcher: fiammifero puro e sicuro (solo presente e violante). Nessun cambiamento di schema/KI (produttoriJson colonna preesistente). 27 test mirati verdi.
· kamo-internal
Canale Regole scheda — completa la superficie di configurazione §3.2
· SecurityService
Canale di applicazione regole raccolta CRUD — completa §3.2 config
creareChannelRule/update/delete sulla spina dorsale di raccolta piana D31 (livello file, org fail-closed, WORM change-log); controller /channel-rules GET/POST/PUT (Cancella via attivo:falso). E' richiesto il risultato finale. autorità/finanziamento + finestra effettiva opzionale. Ultimo §3.2 entità di configurazione.
· kamo-internal
Scheda di abilitazione del prodotto (per-programma, versioned)
· SecurityService
Configurazione di attivazione del prodotto — per-programma monoattivo, efficace-dated
Non e' vero. (program-scoped demote-then-insert) + leggi; controller /product-enablements GET (attivo per programma) / PUT (pubblicato). Corpo trasporta programmaId, abilitato, ciclo di vitaVariante, canaleRistrizione, efficaceDa.

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