Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· kamo-shared-library
Zasady wytycznych + warunki + oceniający, współdzielenie silnika predycja LLPA (pisha-2 Slice 8)
Oświęca się w wytycznych w wysokości 8,1 stopnia 2. Krytycznie, UŻYTKOWNIK, Zrecenzjonarz Slice-4 Oceniający zamiast powielać logikę o znaczeniu krytycznym dla bezpieczeństwa. Refaktorka moczowa (nieregresywna – organy oceniające byte-identical): - PredicateCondinition interfejs - MlosAdjustmentWŚWWWWicj + MlosGuidelineRuleSZUŻA oba wdrażają go. - AdjustmentInvaluadvaluator uogólniony do PredicateCondin; korekta Pojedyncze -> wszystkie warunki (List?? przedłuża PredicateCondition>). Slice-4 test ponownie uruchomi się na zielono (9), oba wcześniejsze poprawki HIGH w stanie nienaruszonym. Nowość: - MlosGidelineRule (mlos_guideline_rule): guidelineVersionId FK, produktId FK, regułCode (unikalny na wersja), werdykt (RuleVerdict ELIGIBLE/INELIGIBLE/STIPULATED nr 10,3 vocab), wymógKind - wymóg, nasilanie, źródłoSectionRef, Nieuwarunkowana flaga. + MlosGuidelineRuleCondition (w rzeczywistości PredicateCondion). - WytycznaRuleOcenik (wygrany w komponent) + WytycznaOcela + GuidelineWytyczneWytyczne: wyłącznik reguły, gdy Wszystkie jego warunki utrzymują się (za pośrednictwem wspólnego oceniającego); INELIGIBLE iff wszelkie wystrzelone zasady INELIGIBLE; Zakwasy Zebrane. 8 WytycznaRuleEvaluatorZor zielony. Przeciwstawnie oceniany (2-agent): refaktora potwierdzona, byte-identical/non-regressive; fixed MEDIUM Zagrożenie przesadą — zasada niekoszyku z zerowymi warunkami teraz zawodzi SAFE (nie strzela) więc Zasada półauthor/duszy-FK INELIGIBLE nie może po ciemko blokować każdego pożyczkobiorcy (zbiornik wartości Nieujawnienie zamknięcia); wyraźna flaga „unconditioned” dla umyślnych zasad koca. NO KamoInitializer Code change change.
· InitializerService
Wyliczenie-wersja bez nakłaniania częściowy indeks (faza-2 Slice 7)
SchemaCleanupRunner: ux_guideline_version_active częściowy-ununowy ON mlos_guideline_version (organization_id, product_id) Wg Status_ACTIVE' AND effective_until IS NULL — jedna otwarta/okna wersja wytycznych ACTIVE per (org, produkt); lustra ux_rate_sheet_version_active (doc 02 ?6.5). Katalog repo pkg już zarejestrowany (Slice 1).
· kamo-shared-library
MlosGuidelineVersion (WORM) + GuidelineVersionResoluver (Phase-2 Slice 7)
Niezmienne skuteczne wytyczne VERSION – matryce kwalifikujące pojemniki - i przyszłe zasady zwiędną. Wierne replikacje Zrecenzowany Slice-1 MlosRateSheetVersion kręgosłup, kluczowy dla produktu (wbudowany na inwestora). - MlosGuidelineVersion (mlos_guideline_version): productId FK, wersja, wersja_from/dopóki, sekwencja_no, supersedes_id self-FK, status source_document_id FK, kb_article_guid + kb_article_version_no (> 6,4 KB-prose drift-pin, niezmienny). WORORZM częściowy/aplikacyjny PocztaLoad migawka + ?PreUpdate diff): zamraża tożsamość / treść, pozwala tylko DRAFT->ACTIVE, ACTIVE->UPERSED, ACTIVE->RERED + write-once effective_dobli close. - GuidelineVersionStatus - GuidelineVersionResolver (gated mlos.catalog.enabled): rozdzielczość okna punktowego w czasie, nigdy Najnowszy rzęd, rzuty na nakładanie się. Lustra EffectiveVersionResolver. - 17 testów zielonych (6 WytycznaWyjścieResoldnaTest + 11 KamoInitializer dodaje ux_guideline_version_active częściowy-unic (jeden otwarty ACTIVE na org/beks+ produktu).
· kamo-shared-library
Matryca kwalifikowawcza + dopasowycz do komórek (faza-2 Slice 6)
Podłoże filtra o krok-2 stopnia 2. stopnia 2. (komórka conjunct; guideline_rule + AUS gate AND W dalszej części). - MlosEligibilityMatrix (mlos_eligibility_matrix): per ? Skuteczne (skuteczne); REUSES zablokowany URL - przez ?Enumerowane (WsZRING) na nowych kolumnach (bez FK, nigdy ich nie edytuje); wskazówceVersionId soft-FK (niemożliwe do wytycznych). - MlosEligibilityCell (mlos_eligibility_cell: typowe okno kwalifikowalności — fico_low/wysokie, property_type (zamknięty mieniaTypeUrla), jednostka_low/wysoki, pożycz_mount_low/wysoki, stan_set_id (FK MlosValueSet), Limit_value. Numery cen / limity Sur BigDecimal (konwersja katakalska). - MlosMatrixType ?MAX_LTV,MAX_CLTV,MAX_DTI — dyskryminator, dla którego współczynnik limit_value caps. - EligibilityCellMatcher (wyłączony) + Scenariusze Zmiany włączenia + Wyliczeń + EligibilityWynik: zlokalizuj komórkę zawierającą Testowane RATIO-DISPATCH przez matrix_type (ltv/cltv/dti) vs limit; brak wymagane w tr - CANNOT_PRICE (zajęte przed zasięgiem); stan niezawinięty; nakładanie się na siebie - najbardziej restrykcyjne (powierzchnie w szczegółach). 12 KwalifikowalnośćCellMatcherTest zielony. Enum-reuse + spec specyfikacja z przepływu pracy badawczej; racjonalnie zrecenzowany (2-agent): stały zakres matrix_type ratio Wysyłka + podnoszona-racha CANNOT_PRICE + obserwacja nakładkowa + upuszczone niehonorowane INNE. Nie Zmiana kodu KamoInitializer (katalog repo pkg zarejestrowany Slice 1) – tylko powtórka.
· kamo-shared-library
MlosMarginSchedule + MarginScheduleResolver (początk 5)
Warstwa depozytu zabezpieczającego inwestora — termin "+ marża_schedule" w wysokości 8,8 stopnia 4. - MlosMarginSchedule (mlos_margin_schedule): kursSheetVersionId FK, productId (null-all), marginType, PożyczkaL1owo/Wysoka pasmo, wartość (surowy BigDecimal), compBasis (BORROWER_PAID|LENDER_PAID). - CompBasis enum — konwencja comp BASIS (jak wypłacana jest marża), a nie kwota planu układowego LO; LO comp comp Nigdy nie jest wynikiem punktowym (doc 13 - 8.5). - MarginScheduleResolver (spółka zaprzywna): dotyczy(schedules, loanAmount, compBasis) Zawiera ilość (włącznie, nieotwarte) I dopasowania comp; całkowitaMargin - wartości (ZERO, jeśli nie). 5 MarginScheduleResolverTest zielony. Numery cenowe na surowy BigDecimal (korekta uspokój-3). NO KamoInitializer code change (catalog repo pkg zarejestrowany Slice 1; indeksy – deklarowane przez podmioty) – tylko powtórne.
· InitializerService
Właściciele należącej do platformy CHECK (Faza-2 Slice 4)
SchemaCleanupRunner: ADD CONSTRAINT mlos_value_set_ownership_chk CHECK (platform_owned (organization_id IS NULL)) — doc 02 ?6.2: taksonomia platformy jest Platform_owned z null org; zestaw specyficzny dla orgia jest org-scoped. Biwaral - ... IS NULL Kształt przetrwa enum-whitelist sweep. Katalog repo pkg już zarejestrowany (Slice 1).
· kamo-shared-library
Korekty LLPA + zestawy wartości + ewaluator stanu (pomijeń haki-2 4)
Warstwa LLPA/adregulacji + deterministyczny silnik predykatu dla pasującego 8,1 stopnia-4 "(a) Dostosowanie pasuje do iff WSZYSTKIE jego warunki są spełnione"). - MlosPriceAdjustment (mlos_price_adjustment): rateSheetVersionId FK, productID (nullall), RegulacjaGroup, obsługa (ADDITIVE|MULTIPLICATIVE), wartość, stackOrder, capValue, etykieta. - MlosAdjustmentWSprawność (mlos_adjustment_condition): cenaAdjustmentId FK, atrybut, operator - numLow/numHigh, wartośćSetId FK. - MlosValueSet (mlos_value_set) + MlosValueMember (mlos_value_set_member): nazwa kategoryczne Zestawy; wyjątek platformy b) nr 02 nr 6 (organizacjaIDWA zwieńczalna + platformaPowinna flaga na Tylko SET; członek nie nosi lustra orgId — własność przez zestaw, bez powierzchni dryfu). - AdjustmentConinditionEvaluator (wygrany w składek) + ScenariuszZarządy: numeryczne ops vs num_low/high, set ops vs członkowie rozwiązani; Brak towaru - brak meczu; SET OPS FAIL CLOSED na członka pusty / nll Zestaw (zwisły miękki zestaw wartości FK nigdy cicho nie dopasowuje wszystkich) i nie jest bezpiecznym null-resolver (bez NPE). 9 - zielony. Przeglądany przeciwno-agentowo (2-agentowy przepływ pracy): stałe 2 błędy oceniające HIGH (NOT_IN fail-open na puste Ustaw; NPE na null resolver) + upuścił zbędne lustro(YC) orgId na przegląd. Ceny Liczy surowe BigDecimal (korekta uspokojowa 3). KamoInitializer dodaje własność ustalania wartości CHECK.
· kamo-shared-library
MlosBasePriceGrid + NoteRateLadder ogniwa cenowe (pokrwic z hazą 2)
Okolice cenowe/cena — jednostka pierwszego katalogu do FK BOTH wersja arkusza stawek (Slice 1) I produkt (Slice 2); podstawa montażu cenowego 8,1 euro. - MlosBasePriceGrid (mlos_base_pri_grid): kursSheetVersionId FK, productId FK, notat. lockPeriodDays, bazaCena (cena do 100), punkty bazowe, min/maxLAanCJA, ioFlag. Kompozyt UNIQUE (wersja, produkt, note_rate, lock_period_days, io_flag) podmiot-deklarowany (io_flag NOT NULL ? pełny Unikalny, bez surowego DDL). - NoteRateLadder (wysokresowy/spółentenny): par- komórka najbliższa cena do 100; najbliższaCeCJA (cel); krawaty -> niższa stopa notatek (doc 02 8,1 kroku 5). 5 NoteRateLadderTest zielony. KODOWANE KRRECCJA: doc 02 6 mówi EmbMoney/EmbPercent, ale zablokowany LoanPricingSnapshot (kotaza odtwarzania) wykorzystuje RAW BigDecimal — Odsetkowy DECIMAL(9,6), punkty DECIMAL(9,4), Bez osadzania; EmbPercent(9,4) nie może dorównać 6-decimal rate. Więc migawkowane ceny sieci Liczby używają raw BigDecimal matching LoanPricingSnapshot (note_rate 9,6 / base_price+points 9,4 / kwoty pożyczki 18,2). Brak zmiany kodu KamoInitializer (katalog repo pkg zarejestrowany Slice 1; unikalny Zadeklarowane jednostki indeksowe) – tylko powtórka.
· InitializerService
Mlos_product ARM-konsekcjonencja CHECK (pokoi półprzewodów 2)
SchemaCleanupRunner: ADD CONSTRAINT CHECK ((amortization_type ? 'ARM') (ramię_fixed_period_months NOT NOT NULL) — ustalony okres to Zdeklarowany IFF produkt jest ARM (doc 02 6,6). ... NIE ma kształtu NULL (nie jest nagim enum IN-listą) Przetrwa w generycznym enum-whitelist CHECK sweep. Katalog repo pkg już zarejestrowany w Slice 1.
· kamo-shared-library
MlosProduct + MlosArmIndex warstwa-taxonomii (pokład z hali 2)
Rodzaj kręgosłupa katalogu (doc 02 x 6,3): wszystko, co przewyższalne dolne polem (cena bazowa siatki, matryce kwalifikacyjne, zasady wytycznych) FK do MlosProduct.uid. - MlosProduct (mlos_product): na inwestora - inwestor Id FK, produktCode, amortyzacja (REUSES zablokowany URLA AmortizationType), termMiesiące, armFixedPeriodMonths, armIndexId FK, Pożyczka, Typ, zgodny, losProgramCodek (REUSES zablokowany 17-wartościowy LoanProgramCode, nr 6,4), WylinowanieVersionPointer (prawdziwy FK-by-id do przyszłości MlosGuidelineVersion.uid, znieważalny), aktywny. Konkurencja (ang.): arm_fixed_period_months set IFF amortization_type_ARM. - MlosArmIndex (mlos_arm_index): indexName, marginBps, początkowe/okresowe / terminowe czapki z życia + podłoga EmbPercent (doc 02 x 6 rate-via-EmbPercent), dostosuj miesiące. - 2 nowe ens LoanClass / DocumentationType (specyficzne katak; DocumentationType jest 3,5 EUR nie-QM Klasa doc-program, odrębna od Slice-1 MlosDocType). 2 Repo. BaseUuidEntity; orgId-Long ?JsonSerialize (ToString). 5 MlosProductInvariantTest zielony. KamoInitializer dodaje mlos_produkt ARM-konsekwencję DB CHECK (catalog repo pkg już zarejestrowany W Slice 1). Odroczony: cena + pisarz.
· InitializerService
Katalog rejestru repos + indeks konwersji arkusza stóp bez nalicza (pisek-2 Slice 1)
- .EnableJpaRepositories + com.kamo.shared.mlos.calos.calog (nowy MlosInvestor/ Repos; podmioty już objęte przezEntityScan). - SchemaCleanupRunner: ux_rate_sheet_version_active częściowy indeks ON mlos_rate_sheet_version (organization_id, investor_id) Wg efektywny_until IS NULL — backstops "one open ACTIVE wersja per (org, inwestor)" Niezmiennie działa na kalekę (dok 02 6,5; CRDB nie ma wyłączności dystansu).
· kamo-shared-library
Pochodzeniu w katalogu + efektywny wersjonowany kręgosłup (Faza-2 Slice 1)
Najmniejszy spedytor do ściskania katalogu Phase-2 (doc 02 ?6): łańcuszek pochodzenia ImgDat -> MlosSourceDocument -> MlosRateSheetVersion i niezmienny skuteczny Wersjonowanie kręgosłupa z rozdzielczością punktu w czasie. Substrate-first (bez MLOSCatalogService Autor jeszcze raz); jest to niezmienny fundament-katalog-PK DecisionInput będzie FK. Nowy pkg com.kamo.z.shared.mlos.catalog: - MlosInvestor (pod-org registry; short_code unikalny na org), MlosSourceDocument (cienny Zapisz się na zablokowany ImgDat; soft-FK img_dat_id, nigdy nie przechowuje bajtów, doc 02 ?6.4). - MlosRateSheetVersion: niezmienna wersja skuteczna (efektywnie/dopóki, Supersededs self-FK, sekwencja_no, cykl życia stanu, source_document FK, cutoff_time) Postrzeganie wału częściowego zmutowania WORM (postLoad snapshot + ?PreUpdate diff): zamrożenie Cena/identyfikowate cols, zezwala tylko na DRAFT->AKTYWNY, ACTIVE->SUPERSED, ACTIVE->RETIRED I zapisz się na close of effective_until. Żaden wyzwalacz DB (CRDB nie może sfinalizować się do 24.3). - EffectiveVersionResolver (gated mlos.catalog.enabled): rozdzielczość punkt-w-okresowy — wersji, której [effective_from, effective_until) okno CONTAINS priced_as_of, nigdy a "Najnowszy rząd" łączy; rzuca na siebie skuteczne nakładanie się na okno (obrona w dogłębnie, doc 02 6,5 / 8,1). - 6 próchnicowych . RateSheetVersionStatus) + 3 repozytoria. BaseUuidEntity (doc 02 .6.1); orgIdLong ?JsonSerialize(ToString) (zweryfikowany kod: Organization.id jest unikalny_rowid, nie doc 02 "UUID"). 17 testów zielony (6 resolator w czasie + 11 Strażników WORM). KamoInitializer dodaje katalog repo pkg + ux_rate_sheet_version_active Częściowo-wyjątkowy indeks bez nakładów.
· kamo-shared-library
Przeciążenie bramy ciepowej w stosunku do dziobca (przewodowe okablowanie konsig-gate)
Decyzja addytywnaGate. ocena(etap, zaufanie, prawnie wymagaHuman, BigDecimal TenantThresholdOverride) — dopracowana na autonomia murana najemcy rozwiązana Przez scenę, podłogę). A. o. w tym w tym w, w tym, że w tym w tym, że wt. w tym w, w tym, że Legalna ściana pozostaje absolutna, a nadpisem jest STILL podłogowane przez nie do zakłócenia Podłoga bezpieczeństwa (autonomia nigdy nie może auto-działać poniżej). Null override spada z powrotem domyślnie platformy; istniejące delegaci 3-arg ocenia() z null, więc Wysłana brama / decisionSpine zachowanie + ich testy pozostają niezmienione. Dodano bezpieczeństwoFloor() Getter więc dzwoniąc, rozwiązuje próg najemcy na tej samej podłodze. To łączy fundament familii Fazy 1 z bramką decyzyjnej: silnik może teraz do gate.evaluate(etap, conf, legalne, ) Etap, nr 9 DecyzjęGateTest (4 nowszy) + 5 DecyzjęSpineTest + 6 MlosActywaSServiceTest zielony.
· InitializerService
Częściowe unikalne indeksy + niezmienność obsługi (ukończenie konfig w hai-1)
SchemaCleanupRunner DDL dla nowych domen mlos.config (mlos.config już w EnableJPapaRepositories; Hibernate dddl-auto:update tworzy tabele): - jednoaktywne częściowe unikalne indeksy (WHERE is_active-true AND effective_to IS NULL) na mlos_pricing_policy / mlos_capital_policy / mlos_servicing_policy (lender_profile_id) + mlos_product_enablement (lender_profile_id, program_id) — Hibernate nie może emitować indeksów WHERE. - ServicingPolicy niezmienności: CHECK scra_enforced-true + fdcpa_enforced-true (E-CHECKs, przetrwaj enum-whitelist sweep).
· kamo-shared-library
Kompletne domeny konfiskaty fazy 1 + MlosActivationService (Slice 5)
Zakończenie inwentaryzacji podmiotu konfickiego doc 04 - singletony polityki (jednoaktywny narzut, skuteczny/tylko dla aplikacji): PricingPolicy (ppeSourcePierwszeństwo Lista upustu> — typ MortgageVendorType Odroczenie do domeny producenta 5 funtów; NO LO-comp), CapitalPolicy (NO pullThroughPct) + CapitalConcentrationLimit dziecko, ServicingPolityka (scra/fdcpa niezmienny Niewarianty). Częściowe unikalne indeksy + scra/fdcpa CHECKs trafią do KamoInitializer. - ProductEnablement (pojedynczoaktywny na program; ograniczenie kanału >ElementCollection; ProgramId UUID — Program.id to UUID, doc 'Long' to błąd zweryfikowany kodem). - Rodzina inwestorów: InvestorConfig + InvestorOverlay + DeliveryRule (reusy - no dudu) + CommitmentRule (reużytuje zobowiązanieTyp). - RiskOverlay (ruleExpressionion JSONB String). 11 nowych enums. - MlosActidentU Service (ggated mlos.config.enabled): resolveProfile(orgId) + - scena, podłoga) — krawaty LenderProfile + autonomia Config + AutonomyResolver (źródło dzierżawcy dla ściany zaufania bramy). 23 mlos.config testuje na zielono (MlosActuvationService 6 new). Wzorzec bazy zaufania i ograniczenia W całym (ręczna ?Id UUID + Embed EmbcordState; dzieci bez EmbRecordState). Plan: (rozszerzony). Odroczone: pełnoekranowy / moduł / matryca aktywacyjna / pieczywo + poprawnośćProfil + SecurityService Samole, które są skuteczne; tabele tylko dot.fugi.history; orzekający oceniający.
· kamo-shared-library
Silnik aplikacji (forma-1 Slice 4)
Deterministyczny najbardziej restrykcyjny resolent (doc 04 nr 8 – Produkt x kanał x Inwestor -> "ALLOWED|DISALLOWED, egzedycjaPath, władzaModel, finansowanie Zachowanie". - ChannelApplicability Jednostka ds. zasad: Stanwy wyrażeń (JSONB String, Program.rulesetJson precedens)/wyjście/ - daty + EmbRecordState. Priorytencja DERIVED z zakresu (nie przechowywanego). Ten sam wzór bazowy config. - 5 enums: RuleScope(+priorytet() Inwestor-0...Tenant-3, Kanał, Obowiązkowy, (HYBRID rozwiązał na nie zlewację), Zachowywanie(5, z w tym PORTFolIO_HOLD – 4-wartość DeliveryRule unieważnienie). - ChannelApplicabilityResolver - Komponent (wygrany, bezstanowy): pusty/dowolny-DISALLOWED DISALLOWED (bezpieczny najbardziej restrykcyjny odczyt niejednoznaczności 8,2 GBP); inne NAZWOLNE Z attrami z najsilniejszego zakresu. Rekord ChannelResolution. 5 - zielony (17 mlos.config test). stan Ekspresja Oceniający ewaluator + filtr efektywny do datowania + AiDecision pinning + MlosActivationService odroczonego. mlos.config już w skanie KamoInitializer — tylko ponownie uruchom. Plan: : .
· kamo-shared-library
AuthorityConfig (urzędy pisanie + delegacje rządowe) – Stopa 1 fazy 3
- AuthorityConfig (singleton per LenderProfile): underwritingAuthority DELEGATED/NON_DELEGATED/HYBRID + manualUWZUWZDNIE + govtDelegation Set FHA_DE, VA_SAR_LAPP,USDA,NONE via ?ElementCollection ( Tabela kolekcjonowania mlos_autouty_govt_delegment) — bramy wewnętrzny rząd UW vs referral agencji. Pomocnik hasGovtDelegation() (HYBRID/channel referred). - UnderwritingAuthority + GovtDelegation enums + AuthorityConfigRepository. - Ten sam wzór bazy konfiguracyjnej (ręczny identyfikator UUID + ?Embedded EmbRecordState); UNIQUE(lender_profile_id) singleton. Po pierwsze „ElementCollection in mlos.”. 3 AuthorityConfigTest zielony (12 mlos.config testami). mlos.config już w Skanowanie KamoInitializer — powtórne utworze tworzy mlos_autoity_config + stół do zbierania.
· kamo-shared-library
Konfiskacja autonomii AI + solektor na podłomie bezpieczeństwa (faza-1 Slice 2)
- AiAutonomyConfig (singleton na LenderProfile; autonomiaPouczwór Globalny DECIMAL DECIMAL _ _ _ _ _ z: GlobalDefaultThreshold DECIMAL(4,3), AutoExecuteEnabled) + AutonomyStageOverride (per (profil, sceniczny) LifecycleStage — nie istnieje osobna rura rurociągowa; zaufanie Prostota + AutoExecuteEnabled). Ten sam wzór podstawy konfig-entity (monualny Id UUID + ?Embedded EmbRecordState); UNIQUE(lender_profile_id) singleton + UNIQUE(profil, scena_key). - AutonomyResolver - Komponent (wyłączony, bezmistrzowny jak DecisionGate): skuteczny twierdza max(etapstageOverride?:global, bezpiecznyFloor) – autonomia dostrajana TYLKO ściana zaufania I NIGDY nie może obniżyć nietkable platformy (doc 13 8.7); autoExecuteEnabled Przepis a wtedy-globalny. Dowódca-najemca dla ściany zaufania bramy (wirowanie odroczone). 5 AutonomyResolverTest + 4 LicencjonowanieResolverTest zielony (TDD). Indeksy podmiotu – deklarowany. mlos.config już w skanie KamoInitializer — ponownie uruchom 2 nowe tabele.
· InitializerService
Zarejestruj się mlos.config repo pkg (faza-1 plaster 1)
Dodaj do koszyka com.kamo.z.shared.mlos.config do .EnableJpaRepositories, więc KamoInitializer Tworzy mlos_lender_profile + mlos_licensing_entry. Indeksy (w tym: Niejednolity Market_id) są zadeklarowane za pośrednictwem ’Table – nie jest to konieczne SchemaCleanupRunner DDL.
· kamo-shared-library
LenderProfile + LicensingEntry config foundation (pisza-1 Slice 1)
Nowa fundacja com.kamo.z.shared.mlos.config tenant-config (doc 04 nr 3): - LenderProfil (root, UNIQUE per MORTGAGE marketId) — soft-FKs zablokowane Organizacja (Long) + CommerceMarket (UUID) przez id. UWAGA marketId jest UUID (CommerceMarket.id is gen_random_uuid; doc 04's 'Long FK' jest sweryfikowany kod Błąd, ten sam przypadek, co AiDecision.loanFileId). - Licencjonowanie licencja (na licencji FIRMA, odrębne od członka StewardLicense) — licencjaType 8-wartościowe; stanConek ISO-3166-2; NIE przechowywany status, Od dat efektywnych/wyrycyjnych za pośrednictwem effictiveOn() (doc 04 nr 7,3). - Licencjonowanie Resolver - Komponent (ggated mlos.config.enabled): jestTenantLicensed( Profil, stan, typ) oparty na dacie; odsłonięte jurysdykcja -> false (act zablokowany). - Wzór podstawy konfesjonałowej: ręczny ?Id UUID + Embedded EmbcordState (NOT BaseUuidEntity — jego znaczniki czasu zdejmowałyby się; doc 04 nr 3). 4 LicencjonowanieResolverTest zielony (TDD). Indeksy jednostek – deklarowane (UNIQUE market_id). Odroczony: : ) singletony; MlosActivationService + SecurityService boot samona ichćczewka.
· DaemonService
DaemonService compliance-timeer SLA zamiatanie (timer adater)
Pierwszy użytkownik timerów zgodności MLOS: Quartz job (co 5 minut) - aby odwrócić ARMED-but-past-deadline ECOA (AdverseActionTimer) + Reg X (RegXTimer) zegary do EXPIRED, więc pożyczkobiorca BLOCKED Nie może cicho przesunąć terminu regulacyjnego. - ComplianceTimerSweepJob (Quartz Job) + QuartzConfig JobDetail/Trigger; timer Usługa jest "Autowired(required-false) + default-off flaga, więc praca Jest bezpieczny bez względu na konfiskatę. - "EnableJpaRepositories +" - konfigmapa: mlos.compliance.enabled-true (aktywuje usługę wspólnej lib) + Zużyteczne:truczne, cron:'0 ?/5 - ???''. Bezpieczne obroty, podczas gdy stoły timer są puste (nie ma jeszcze czasu ramion silnika).
· kamo-shared-library
- do zamiatania DaemonService SLA
Odciski każdego ARMED-but-deadline AdverseActionTimer + RegXTimer do EXPIRED (trwała eskalacja sygnalizuje powierzchnie ekranu stewarda zgodności; zdarzenie Emisja do kolejki zgodności jest kontynuacją). Zwraca liczenie; pusty timer Stoły są bezpiecznym no-opem. 2 nowe testy (12 ComplianceTimerServiceTest zielony).
· kamo-shared-library
Przypisanie licencji z drutu do DecisionSpine (Slice 2b-ii)
DecydecySpine.record() znaczki StewardTask.assignedMemId z the the StewardAssigner, gdy decyzja przekierowana jest kierowana, należy do jurysdykcji pożyczki: - Decyzja-Prośba zyskuje opcjonalny przedmiotStateCode (ISO-3166-2) + akt typu (LicensedActType). Kiedy istnieją obie teraźniejsze i fasoli StewardAssigner (mlos.legal.enabled), zadanie przekierowywane jest przypisane do stewarda licencjonowanego w To państwo dla tego czynu; w przeciwnym razie otwiera się bezprzydzielony (sprawca go twierdzi). - StewardAssigner wstrzyknięty jako OPTIONAL Docstor przez ObjectProvider, czyli a Kręgosnople biegnące bez mlos. Legal.enabled jest nienaruszone. Back-compat 6-arg Konstruktor zatrzymał — 4 istniejące przepustka DecyzjiSpineTest bez zmian. 29 mls testes zielony (DecisionSpine 5, StewardAssigner 5, LegalRegistry 9, ComplianceTimer 10). Kodowanie - bez zmian schematu, brak biegu KamoInitializer.
· kamo-shared-library
Licencja StewardAssigner (decision-spine Slice 2b-ii)
Dodaje selektora stewarda-uza, który jest świadomy licencją (doc 03 3,2; dok 01 ?6 ?9) — wybiera a Kierownik, którego MLOS StewardLicense jest ważny dla wymaganej licencji aktu Wpisz stan pożyczkobiorcy, zbalansowany na najmniej otwartych StewardTasks (tie -> Najniższy memberId); pusty, gdy żaden nie obejmuje jurysdykcji (kalleracja eskalacji). - StewardAssigner - Składnik (ggated mlos.legal.enabled) nad StewardLicense + StewardTask repos — odczytuje rejestr bramek MLOS, NOT zablokowane orgs.License (nie ma donotmodify deps; unika Członka->(orgId,userId)->License join). - StewardLicense.isValidOn(date) — pojedyncze źródło prawdy dla licencji na podstawie daty (status przeliczony, nigdy nie przechowywany); - refaktorowany do niego. - (bajek kandydatyczny). 5 StewardAssignerTest zielony; 9 LegalRegistryTest wciąż zielony (14 ogółem). Bez schematu Zmiana (brak biegu KamoInitializer). Substrate-first — okablowanie do DecisionSpine.record() ROUTE_TO_HUMAN do stempla przypisaneMemberId jest kontynuacją.
· InitializerService
Rejestracja mlos. Zgodność repo pkg (Slice 2c-i)
Dodaj do ? ?EnableJpaRepositories, aby KaoInitializer Tworzy mlos_adverse_action_timer + mlos_regx_timer. Indeksy – zadeklarowane przez - Nie jest to konieczne SchemaCleanupRunner DDL.
· kamo-shared-library
ECOA + Podłoże czasowe Reg X (decyzja-spine Slice 2c-i)
Nowy pakiet (doc 03 2,8) — kamo-owned Analogie zawartego donotmodify.TridTimer. Substrat-first: - AdverseActionTimer (ECOA/Reg B 30-dniowy zegar; noticeKind ECOA_AA/COUNTEROFFER/ INCOMPLETE_NOA) + RegXTimer (obsługi afirmatywne; c)Kind "W. Zmutowany - soft loanFileId ref, +orgId dla Izolacja lokatorów. Indeks Breach-sweep (status, deadline_at). - ComplianceTimerStatus enum + 2 repozytoria z . - ComplianceTimerService (ggated mlos.wncompliance.entabled): czasomierze ramion, koduje regulacyjne liczenia dzienne (30/36/120/5, zablokowane testami), KONTYNU. Potrzebny jest wyraźny termin, wykrywanie naruszenia za pośrednictwem wtryskiwanego zegara, zamiatania zamiatania. 10 ComplianceTimerServiceTest zielony (TDD). Indeksy podmiotu – zadeklarowane za pośrednictwem tabeli. DaemonService SLA-eskalacja + BLOCKED->STALE odroczenie (pozywa odsączki). Wykluczony ten plasterek: ComplianceFinding (FK donotmodify.TridTimer), RBPN/FCRA Zauważa, Zmienione okolicznościo porządku.
· InitializerService
Zarejestruj się mlos. legal repo pkg (Slice 2b)
Dodaj com.kamo.z.shared.mlos.legal do .EnableJpaRepozytorie tak KamoInitializer Utworzone mlos_licensed_act_registry / mlos_roligibility / mlos_steward_license. Wszystkie indeksy są deklarowane za pomocą .Table - nie jest potrzebne SchemaCleanupRunner DDL.
· kamo-shared-library
Państwowo świadomy substrat rejestrowy (decyzja-spine Slice 2b)
Pakiet New com.kamo.z.shared.mlos.legal – producent greenfield Absolutny wpis na ścianie prawnej DecisionG (doc 03 3,2). Substrate-first, nie Przysłonięty jeszcze do tego stopnia: - LicensedActRegistry (platform ref, per act+state) — czy to regulowane działanie Wymaga legalnie licencjonowanego człowieka? Unikalny (act_typ, state_code). - Licencja Ron (platform ref, na stan) — ronWszystkie dane/wymagane + Tokeny reguł zlecania/podmiotu/podmiotu nieruchomości. - StewardLicense (tenant-scoped, keyed to memberId) — Licencja NMLS-by-state. Nie przechowywana kolumna statusu: obliczona z efektywnejData-Daate-today-expiresAt (doc 13 -4.3 prawidła kielich prowadzi dolne pole stanu doc 03). - LegalRegicant (ggated mlos.legal.enabled, default off): fail-closeed WymagajHuman / stewardLicensedFor (oparte na randce) / ronowaneAllowedIn. StateCode to ISO-3166-2 String (międzynarodowo gotowe; USStateType to martwy kod). Indeksy – jednostki zarejestrowane za pośrednictwem .Table. 9 LegalRegistryTest (TDD). Ukomponuje wysłane Dec-Gate w drodze umowy – brak decyzji/zdjęcia edycji. Przydział StewardTask z licencjobiorcą odroczył się do następnego kawałka.
· InitializerService
Zarejestruj się mlos.steward + mlos.orchration repozys; Slice-2a schema
- KamoInitilicizerA ?EnableJpaRepozytoria: dodaj skumulowane repo MLOS Pakiety - plus esign/personal_loans więc KamoInitializer posiada swój schemat. - SchemaCleanupRunner: ogólne ?Wyliczana biała lista CHECK; częściowo/ Unikalne indeksy + FK dla . Indeksy Decyzji-spin Slice-2a są teraz Zadeklarowany by (Tabela), więc blok Slice-2a jest komentarzem no-op.
· kamo-shared-library
Decydea-spine Slice 2a — OrchestrationState + Stewardzas + maszyna stanowa DecisionSpine BLOCKED
OrchestrationState (per-loan-stage GREEN/BLOCKED/COMPLETE) + StewardTask (rekord wyjątku) + enums + DecSpine (?ConditionalOnProperty mlos.spine.enabled): komponuje wysłane DecGate + AiDecision WORM kieł. + skrzynka transakcyjna w jednym tx — ROUTE_TO_HUMAN otwiera zadanie + BLOCKs Etap; determinacja() pisze decyzję HUMAN_OVERRODE + odblokowywane. Zmutowane podmioty państwowe (nie -Readywidualna). 4/4 Mockito testuje zielony.

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej