Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-shared-library
Reglas de orientación - condiciones - evaluador, compartiendo el motor predicado LLPA (Fase-2 Slice 8)
El punto de referencia-gobernación de la regla del punto 8.1 paso-2. Críticamente, REUSES la condición revisada de Slice-4 evaluador en lugar de duplicar la lógica predicada crítica de la seguridad. Refactor DRY (organismos no regresivos de los evaluadores por te-idénticos): - Interfaz de condición Predicado ************* - MlosAdjustmentCondition - MlosGuidelineRuleCondition ambos implementarlo. - AdjustmentConditionEvaluator generalizado a PredicateCondition; adjustmentMatches --TodosConditionsMatch (Listá? extende PredicateCondition). Prueba de recargas verdes (9), ambas anteriores corridas ALpe intacta. Nuevo: - MlosGuidelineRule (mlos-guideline-rule): lineorVersionId FK, productId FK, ruleCode (unique per versión), veredicto (RuleVerdict ELIGIBLE/INELIGIBLE/STIPULATED 10.3 vocab), requisitoKind **************** requisitoValue, severidad, sourceSectionRef, bandera sin condiciones. MlosGuideline RuleCondition (ejecuciones PredicateCondition). - DirectivaRuleEvaluator (ungated .Component) . Directiva de la Directación de la OrientaciónOutcome: una norma de fuego cuando todas sus condiciones se mantienen (a través del evaluador compartido); INELIGIBLE si se ha disparado cualquier norma INELIGIBLE disparida; estipulaciones recogido. 8 DirectrizRuleEvaluatorTest verde. Revisado adversarialmente (2 agente): refactor confirmado byte-idid/no-regresivo; MEDIUM fijo peligro de bloqueo excesivo - una regla no manta con cero condiciones ahora falla SAFE (no es de fuego) por lo que a La regla INELIGIBLE a mitad de autor / sangling-FK no puede bloquear silenciosamente a cada prestatario (espejos de valor establecido fallar encerrada); bandera explícita de la bandera incondicionada para las reglas de la manta intencional. Ningún cambio de código de KamoInitializer.
· InitializerService
Directriz-versión sin sobrelúpado parcial-único (Fase-2 Slice 7)
SchemaCleanupRununner: ux.guideline.version.activo parcial-unique EN mlos.guideline.version (organizaciónid, productid) WHERE status='ACTIVE' Y eficaz-hasta que ES NULL - una versión de guía ACTIVE abierta/corriente por (org, producto); espejos ux.rate.sheet.version.active (doc. 02 6.5). Catálogo repo pkg ya registrado (Resillo 1).
· kamo-shared-library
Versión de MlosGuideline (WORM) - Direct GuidelineVersionResolver (Phase-2 Slice 7)
La directriz inmutable de fecha efectiva VERSION - las matrices de elegibilidad del contenedor ******************* y las futuras reglas de la guía se cuelgan. Replicación fiel de la volante revisada Slice-1 MlosRateSheetVersion, llaveda por producto (vs por inversor). - MlosGuidelineVersion (mlos-guideline-version): productId FK, revisionLabel, effective-from/un-in, secuencia.no, supersedes-id self-FK, status, source.document-id FK, kb-article-guid kb.article.version.no (-6.4 KB-prose drift-pin, inmutable). Aplicación de la mutabilidad parcial de la capa WORM (PostLoad snapshot - PreUpdate diff): congela identidad/contenido, permite sólo PROYECTO--ACTIVE, ACTIVE--SUPERSEDEDED, ACTIVE--RETIRED - write-once effective-once. - DirectrizVersiónStatus ************* - DirectrizVersionResolver (gated mlos.catalog.enabled): resolución de ventanas puntuales, nunca última, lanza la superposición. Espejos EfectuarioVersiónResolver. - 17 pruebas verde (6 GuidelineVersionResolverTest - 11 ********************** KamoInitializer añade ux.guideline.version.active parcial-unique (uno abierto ACTIVE per org-product).
· kamo-shared-library
Matriz de elegibilidad, células, celulares (Fácil de la fase 2 slice 6)
El sustrato de filtro de la elegibilidad No 8,1 paso-2 (el enlace de la celda; directriz-rule - AUS gate AND en más adelante). - MlosElegiibilityMatrix (mlos-eligibility-matrix): per ******************* con fecha efectiva; REUSES locked URLA **************** a través de "Enumerated(STRING) en nuevas columnas (sin KK, nunca las edita); guíaVersionId soft-FK (nualable hasta las directrices). - MlosElegiibilityCell (mlos-eligibility-cell): window mecanografiado de elegibilidad . fico-low/high, property-type (Ferro*GepeUrla), units-low/high, loan-amount-low/high, state-set-id (FK MlosValueSet), limit.valor. Precios/números de límite crudo BigDecimal (vena de catálogo). - MlosMatrixType .MAX-LTV,MAX-CLTV,MAX-DTI-- discriminador para qué relación limitar-valor caps. - EligibilityCellMatcher (ungated .Component) . ScenarioFacts reuse . EligibilityOutcome ******************* . EligibilityResult: Localice la celda que contiene a través ******************* RATIO-DISPATCH por matrix-type (ltv/cltv/dti) probado vs limit; falta requerido entr. CANNOT-PRICE (hosed before coverage); estado fallido-cerrado; superposición - la más restrictiva (en detalle). 12 EligibilidadCellMatcherTest verde. Reutilización Enum . spec from research workflow; contradictriamente revisado (2-agentes): ratio de tipo matriz fija despacho de la relación izada CANNOT-PRICE superpuesta a la observación despreveneda. NO KamoInitializer cambio de código (catalog repe pkg registrado Slice 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
· kamo-shared-library
MlosMarginSchedule - MarginScheduleResolver (Phase-2 Slice 5)
La capa de margen del inversor - el término "a-margen" de montaje de precios de 8,1 paso4. - MlosMarginSchedule (mlos-margin-schedule): rateSheetVersionId FK, productId (null=all), marginType, préstamoAmountLow/High band, value (raw BigDecimal), compBasis (BORROWER-PAID-LENDER-PAID). - CompBasis enum - la convención comp BASIS (cómo se paga el margen), NO una cantidad de Mark comp-plan; LO comp nunca es una entrada de puntuación (doc. 13 . - MarginScheduleResolver (sin comedor: aplicable (programas, préstamoAmount, compBasis) = banda contiene cantidad (inclusive, null=open) AND comp coincide; totalMargin = valores de x (ZERO si no). 5 MarginScheduleResolverTest verde. Números de precios crudos BigDecimal (corrección de la silice). NO KamoInitializer cambio de código (cadal repos pkg registró Slice 1; indexes de la entidad-declarado) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
· InitializerService
Propiedad de la plataforma de valores CHECK (Phase-2 Slice 4)
SchemaCleanupEunner: ADD CONSTRAINT mlos.value.set.ownership.chk CHECK (plataforma-propiádida = (organización-id IS NULL) - doc 02 6.2: una taxonomía de plataforma es de plataforma, propiedad de un org null; un conjunto específico de org es org-scoped. Bicondicionario .= ... ES NULL. La forma sobrevive al barrido enum-blanqueista. Catalogado repo pkg ya registrado (Slice 1).
· kamo-shared-library
Ajustes LLPA, valores y conjuntos de valor. evaluador de condición (Fase-2 Slice 4)
La capa de ajuste LLPA/ajuste - el motor predicado determinista para la combinación de 8.1 paso-4 ("an partidos de ajuste si TODAS sus condiciones están satisfechas"). - MlosPriceAdjustment (mlos-price-adjustment): rateSheetVersionId FK, productId (null=all), adjustmentGroup, operation (ADDITIVE-MULTIPLICATIVE), value, stackOrder, capValue, etiqueta. - MlosAdjustmentCondition (mlos.adojustment -condition): precioAdjustmentId FK, atributo, operador ******************* numLow/numHigh, valueSetId FK. - MlosValueSet (mlos.value-set) - MlosValueSetMember (mlos.value.set-member): nombrado categórico conjuntos; la excepción de propiedad de la plataforma doc 02 . el SET solamente; el miembro no lleva ningún espejo orgId propiedad a través del conjunto, no superficie de deriva). - AdjustmentConditionEvaluator (ungated .Component) . EscenarioFacts: ops numéricos vs num-low/high, set ops vs miembros resueltos; falle de hecho - no match; SET OPS FAIL CLOSED en miembro vacío/nula conjunto (un ajuste de valor blando-FK colgante nunca coincide silenciosamente con todos) y sin resolver null-resolutivo (no NPE). 9 **************** verde. Revisión adversariamente (2-agente de trabajo): fijo 2 OKs HIGH evaluadores insectos (NOT-IN fail-open en vacío set; NPE en null resolución) - dejó caer el miembro redundante orgId mirror per the review. Precios números bruto BigDecimal (corrección de la corta). KamoInitializer añade la propiedad de valores CHECK.
· kamo-shared-library
MlosBasePriceGrid - NoteRateCiidas preciosas de la escalera (Phase-2 Slice 3)
La tarifa/células de precios de precio de precio de primera entidad a FK BOTH una versión de hoja de tarifas (Resal 1) Y un producto (Refunción 2); la base del montaje de precio de 8,1 euros. - MlosBasePriceGrid (mlos-base-price-grid): rateSheetVersionId FK, productId FK, noteRate, lockPeriodDays, basePrice (precio a 100), basePoints, min/maxLoanAmount, ioFlag. Comosite UNIQUE (versión, producto, nota, lock.periodo, día de la entidad, declarado de la entidad (io-flag NOT NULL - completo único, sin DDL crudo). - NoteRateLadder (ungated .Component): par = celda más cercana de precio a 100; más cercanaToPrice (objetivo); lazos -o menor tasa de notas (doc. 02 8.1 step 5). 5 NoteRateLadderPuever verde. CORRECTION CODE-VERIFIED: doc 02 6 dice EmbMoney/EmbMocent, pero el LoanPricingSnapshot cerrado (el anclón de reproducibilidad) utiliza RAW BigDecimal . interestRate DECIMAL(9,6), puntos DECIMAL (9,4), sin incrustables; EmbPercent (9,4) no puede igualar una tasa de 6 decimosmales. Así que precios de la red manchado de instantáneas números use crudo BigDecimal matching LoanPricingSnapshot (nota 9,6 / base.price-points 9,4 / Importes de los préstamos 18,2). No cambia de código KamoInitializer (catalog repel pkg registró Slice 1; único entidad de índice - declaración de nuevo) . re-run solamente.
· InitializerService
Mlos-product ARM-consistencia CHECK (Fase-2 Slice 2)
SchemaCleanupRununner: ADD CONSTRAINT ************* CHECK ((amortization-type = 'ARM') = (arm.fixed-period-months IS NOT NULL) - un período fijo es un período fijo Declarado IFF el producto es un ARM (doc. 02 6.6). NO es forma de NULL (no una desnuda enum IN-list) sobrevive al barrido genérico enum-blanqueista CHECK. Catálogo repep pkg ya registrado en Slice 1.
· kamo-shared-library
MlosProduct . MlosArmIndex capa de taxonomía de producto (Flase-2 Slice 2)
La columna del producto del catálogo (doc 02 6.3): todo lo que puedes fijar hacia abajo (precio base cuadrículas, matrices de elegibilidad, reglas de directrices) FKs a MlosProduct.uid. - MlosProduct: producto per-inversor - investorId FK, productCode, amortizationType (REUSES bloqueado URLA AmortizationType), termmonthMonths, armFixedPeriodMonths, armIndexId FK, loanClass, documentaciónTipo, conformando, losProgramCode (REUSES bloqueado de 17 valores de LoanProgramCode, 6.4), lineverVersionPointer (real FK-by-id to future MlosGuidelineVersion.uid, anulado), activo. afirmarStructurallyValid (): arm--fixed-period-period-mes set IFF amortization-type=ARM. - MlosArmIndex (mlos-arm-index): indexName, marginBps, inicial/periodic/lifetime caps EmbPercent (doc. 02 - 6 rate-vía--EmbPercent), ajusteMes. - 2 nuevos enums LoanClass / DocumentationType (catáloga específica; DocumentationType es el no QM no Q5 clase doc-programa, distinta de Slice-1 MlosDocType). 2 repos. Base = BaseUuidEntity; orgId=Long .JsonSerialize(ToString). 5 MlosProductInvariantTest verde. KamoInitializer añade la actividad de la empresa ARM DB CHECK (catáloga pkg ya registrado en la rebanada 1). Aplazado: precio **************** El escritor.
· InitializerService
Registro de registros de catálogos . índice de no-version de versión sin sobreloverla (Fecha-2 Slice 1)
- HabilitarJpaRepositories .= com.kamo.z.shared.mlos.catalog (el nuevo MlosInvestor/ **************** repos; entidades ya cubiertas por el "EntityScan"). - SchemaCleanupRunner: índice ux-rate.version.version.active parcial-unique EN mlos.rate.sheet.version.version (organización-id, investorid) DOE status='ACTIVE' AND hasta la versión "un abierto versión ACTIVE per (org, investor) " invariante sin sobrecábero (doc. 02 6,5; CRDB no tiene restricción de exclusión de rango).
· kamo-shared-library
Prodanza Catálogo de versión con fecha efectiva (Phase-2 Slice 1)
Rebanada más pequeña del catálogo de Fase-2 (doc 02 6): la cadena de procedencia ImgDat --MlosFuenteDocument -- MlosRateSheetVersion y los inmutables con fecha efectiva versionar la columna vertebral con resolución punto a tiempo. Substrate-first (sin MLOSCatalogService Escritor aún; esta es la fundación inmutable-catáloga-PK DecisionInput se pondrá FK a. Nuevo pkg com.kamo.z.shared.mlos.catalog: - MlosInvestor (registro por-org; short-code unique per org), MlosSourceDocument (delgado anotación sobrecerrado ImgDat; soft-FK img.dat.id, nunca re-stores bytes, doc 02 6.4). - MlosRateSheetVersion: versión efectiva inmutable (evidencia efectiva de la ventana, supersedes auto-FK, secuencia-no, estado ciclo de vida, fuente-document FK, cutoff-time) con un protector de WORM de alterabilidad parcial de la capa de aplicaciones (PostLoad snapshot .PreUpdate diff): se congela cols de identidad/identidad, permite sólo PROYECTO----ACTIVE, ACTIVE---SUPERSEDEDED, ACTIVE-ERETIRED y el cierre de escritura de la vez más eficaz. Sin desencadenante de DB (CRDB no puede finalizar a 24.3). - EffectiveVersionResolver (gated mlos.catalog.enabled): resolución de punto en el tiempo versión cuya ventana [eficaz, efectiva-a-hasta) ConTAINS preciosas, nunca un "única fila" unirse; lanza una superposición de ventanas efectivas (defensa en profundidad, doc 02 .. . . . . . . . . . . . . . . . . . . . . . . . . . - 6 enums **************** RateSheetVersionStatus) 3 repos. Base = BaseUuidEntity (doc 02 6.1); orgId=Long .JsonSerialize(ToString) (verificado en código: Organization.id es único, no es de "UUID" de doc 02. 17 pruebas verdes (6 punto en hora punta 11 guardia WORM). KamoInitializer añade el catálogo repo pkg. el ux.rate.sheet.version.active índice no superrápido parcial-unique.
· kamo-shared-library
Subida por puerta de umbral de confianza-tenant (cableado de config.gate)
Decisión AditivaGate.evaltar (escenario, confianza, legalmenteRequiereHuman, Inquilino de BigDecimalThresholdOverride) - el muro autonómico sintonizado por inquilino resuelto por **************** escenario, piso). El el muro legal se mantiene absoluto y la anulación es STILL pisoteado por los intunables piso de seguridad (la autonomía nunca puede comportarse debajo de ella). La anulación de la nuca cae de nuevo la plataforma por defecto; los actuales delegados de 3 afichas con null, por lo que la Portada enviada/DecisionSpine comportamiento de las pruebas no cambian. Añadido fondo de seguridad () Atrapa, por lo que un llamante resuelve el umbral del inquilino contra el mismo piso. Esto conecta la base de configuración Fase-1 con la puerta de decisión: un motor ahora puede hacer gate.evaluar (escenario, conf, legal, ************* etapa, ************* 9 DecisionGateTest (4 nuevo) 6 MlosActivationServiceTest verde.
· InitializerService
Indices únicos parciales de servicio invariantes (configación de la fase-1)
SchemaCleanupRunner DDL para los nuevos dominios mlos.config (mlos.config ya en HabilitarJpaRepositorios; Hibernate ddl-auto:update crea las tablas): - índices únicos parciales de un activo (WHERE is-active=true AND effective-to IS NULL) en mlos-pricing-policy / mlos-capital-policy / mlos-serv-serv.policy (lender-profile-id) - mlos.product.enablement (lender-profileid, program-id) Hibernate no puede emitir Indices de EHERE. - ServicingPolicy invariantes inmutables: CHECK scra-enforced=true . fdcpa.enforced=true (=-CHECKs, sobreviértete al barrido enum-blanqueista).
· kamo-shared-library
Dominios de configuración de fase-1 completos - MlosActivationService (Regalo 5)
Completa el inventario de la entidad de configuración de doc 04 **************** - Los solteros de política (un solo activo-activo, con fecha efectiva/sólo de gastos): PricingPolicy (ppeSourcePriority List-String" - tecleado MortgageVendorType aplazado al dominio de vendedor número 5; NO LO-comp), CapitalPolicy (NO pullThroughPct) CapitalConcentrationLimit child, ServicingPolicy (scra/fdcpa inmutable invariantes). Indices únicos parciales - scra/fdcpa CHECKs ir en KamoInitializer. - Habilitación de producto (incocción por programa; canalRestricción de ElementColección; programId UUID . Program.id es UUID, doc's 'Long' es un error verificador de código). - Familia inversora: InvestorConfig - InvestorOverlay - DeliveryRule (reutilizaciones" ********************** no dup) Compromiso (reutiliza la regla de compromiso). - RiskOverlay (ruleExpression JSONB String). 11 nuevos enums. - MlosActivationService .Component (gated mlos.config.enabled): resoluciónPerfil (orgId) ************* etapa, piso) Lazos LenderPerfil - autonomía config . AutonomyResolver (la fuente per-tenant para el muro de confianza de la puerta). Pruebas de 23 mlos.config de color verde (MlosActivationService 6 nuevo). Patrón base de la config-entidad en todo (Manual UUID - Embedded EmbRecordState; niños no EmbRecordState). Plan: **************** (extendido). Aplazada: completa pantalla/module/virgación de activación de los proveedores . validateProfile . SecurityService auto-curación; *.config.history tablas de apéndices solo; evaluadores predicados.
· kamo-shared-library
Motor de aplicabilidad de canal (Phase-1 Slice 4)
El solucionador determinista más restrictivo (doc. 04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inversor - .ALLOWED-DISALLOWED, executionPath, authorityModel, fundingBehavior. - CanalSimplicabilidadEmntaciónEmntación: ********** condiciónExpresión(JSONB String, Program.rulesetJson precedente)/outcome/ ****************ed fechas EmbRecordState. Prioridad DERIVED del ámbito (no almacenado). El mismo patrón base de configuración. - 5 enums: RuleScope(priority() Investor=0..Tenant=3), Canal, Aplicabilidad, **************** (HYBRID resolvió por préstamo a estos), FondoBehavio (5, incl PORTFOLIO-HOLD - Delivery Rule unify unify de 4 valores diferidos). - CanalApaplicabilidadResolver -Component (ungated, apátrida): vacía/a cualquier-DISALLOWED * DISALLOWED (lectura segura más restrictiva de la ambiguedad número 8.2); de lo contrario ALLOWED con attrs del alcance más fuerte. Grabación de ChannelResolution. 5 ************* verde (17 mlos.config pruebas). condiciónExpresión Eevaluador de predicados - filtro de citas efectiva - AiDecision pinning - MlosActivationService aplazada. mlos.config ya en KamoInitializer scan scan y re-run solamente. Plan: *******************
· kamo-shared-library
AuthorityConfig (autoridad de la redacción de delegaciones . govt)
- AuthorityConfig (singleton per LenderProfile): suscripciónAutoridad DELEGATED/NON-DELEGATED/HYBRID - manualUwAllowed . govtDelegation Set FHA-DE,VA-SAR-LAPP,USDA,NONE-a través de la Colección de Element (mesa de colección mlos.authority.govt.delegation) - puertas interno govt UW vs agencia referral. haGovtDelegation() ayudante (HYBRID/canal resolución diferida). - SuscripciónAutoridad .GovtDelegation enums . AuthorityConfigRepository. - Patrón de base de la misma configuración (manual Id UUID.Embedded EmbRecordState); UNIQUE(lender-profile-id) singleton. Primero de la Colección de Element en mlos.*. 3 AuthorityConfigTest green (12 mlos.config pruebas). mlos.config ya en KamoInitializer escaneado de re-run crea mlos-authority.config - la mesa de colección.
· kamo-shared-library
Config de autonomía de IA y seguro de la planta de seguridad (Phase-1 Slice 2)
- AiAutonomyConfig (singleton per LenderProfile; autonomíaNivel ************* globalDefaultThreshold DECIMAL(4,3), autoejecuteHabilitado) - AutonomyStageOverride (por (perdefile, escenario); escenarioKey reutiliza LifecycleStage no existe separado PipelineStage enum; confianzaAdquot; . autoejecutaEnableado). Mismo patrón base de la config-entidad (manual Id UUID. EmbRecordState); UNIQUE(lender.profile.id) singleton . UNIQUE(profile,tage. - AutonomyResolver -Component (ungated, stateless like DecisionGate): eficazhold = max(stageOverride?:global, seguridadPiso) - autonomía sintonía SOLAMENTE el muro de confianza y NUNCA puede bajar el piso de la plataforma no atonable (doc. 13 8,8); autoejecuteEncableado sobretriga-ento-lunes-global. La fuente per-teniente para el muro de confianza de la puerta (atado de acá acá acá a que se aferró). 5 AutonomyResolverTest - 4 LicenciasResolverTest green (TDD). Estado de la entidad. mlos.config ya en KamoInitializer escaneo de re-run crea las 2 nuevas tablas.
· InitializerService
Registro mlos.config repo pkg (Phase-1 Slice 1)
Añadir com.kamo.z.shared.mlos.config a .EnableJpaRepositories para KamoInitializer crea mlos-lender-profile . mlos.licensing-entry. Indices (incl. UNIQUE market-id) se declaran de la entidad a través de la Table y no SchemaCleanupRunner DDL necesaria.
· kamo-shared-library
LenderProfile - LicenciasEntry config foundation (Phase-1 Slice 1)
Nueva com.kamo.z.shared.mlos.config de la fundación arrendatario-config (doc. 04 3): - LenderProfile (root, UNIQUE per MORTGAGE marketId) - Bland-FKs bloqueado Organización (Long) - CommerceMarket (UUID) por id. NOTE marketId es UUID (CommerceMarket.id es gen-random-uuuid; el 'Long FK' de doc 04 es un verificador error, mismo caso que AiDecision.loanFileId). perfilVersión para reproducción. - LicensingEntry (licencias de la EM COMPANY, distinta de miembro StewardLicense) licenciaType 8-value enum; stateCode ISO-3166-2; NO estado almacenado, computado desde fechas efectivas/expiradas vía isEffectiveOn() (doc. 04 7.3). - LicensingResolver .Component (gated mlos.config.enabled): isTenantLicensed ( perfil, estado, tipo) basado en la fecha; jurisdicción descubierta =- false (acto bloqueado). - Patrón base de la config-entidad: manual Id UUID.Embedded EmbRecordState (NO) BaseUuidEntity - sus marcas de tiempo chocarían; doc 04 . 4 LicenciasResolverTest verde (TDD). Indizados de la entidad (UNIQUE market-id). Diferido: **************** singletons; MlosActivationService - SecurityService boot auto-heal.
· DaemonService
DaemonService compliancetimer SLA sep ll de SLA (adoptador de tiempo)
Primer adoptante de los tiempos de cumplimiento del MLOS: un trabajo de Quartz (cada 5 min) llama **************** para voltear ARMED-pero-pas-deadline ECOA (AdverseActionTimer) - Reg X (RegXTimer) relojes para un prestatario BLOCKED no pueden arruinar silenciosamente un plazo regulatorio. - ComplianceTimerSweepJob (Quartz Job) - QuartzConfig JobDetail/Trigger; timer el servicio es "Autowired(required=false) - una bandera activa por defecto, por lo que el trabajo es a salvo de accidente independientemente de la configuración. - HabilitarJpaRepositorios = ************* - configmap: mlos.compliance.enabled=true (activa el servicio compartido-lib) ******************* .. . . . .d.: verdade, cron, cron: '0 * * * * * ?'. Seguro sinop mientras las mesas del temporizador están vacías (todavía no hay temporizadores de brazos en el motor).
· kamo-shared-library
************* para el barrido DaemonService SLA
Vuelta a cada ARMED-but-past-deadline AdverseActionTimer . RegXTimer tos (la escalada duradera señal de la pantalla de controlador de cumplimiento; evento la emisión a una cola de cumplimiento es un seguimiento). Devuelve el conteo; temporizador vacío Las mesas son una caja fuerte sin cambios. 2 nuevas pruebas (12 ComplianceTimerServiceTest green).
· kamo-shared-library
Asignación de licencia de cable en DecisionSpine (Resal 2b-ii)
DecisionSpine.record() ahora estampa a StewardTask.assignedMemberId del StewardAssigner cuando una decisión enrutado conlleva la jurisdicción del préstamo: - DecisionRequest gana sujeto opcional Código (ISO-3166-2) (LicensedActType). Cuando ambos presentes Y una judía StewardAssigner existe (mlos.legal.enabled), la tarea enrutado se asigna a un mayordomo con licencia en ese estado para ese acto; de lo contrario se abre sin asignación (un mayordomo lo reclama). - StewardAssigner inyectado como Docstor OPTIONAL vía ObjectProvider, así que un la columna que corre sin mlos.legal.enabled no se ve afectada. Juso trasero 6-arg constructor retenido . La 4 DecisiónSpineTest transcuerde sin cambios. 29 mlos pruebas verdes (DecisionSpine 5, StewardAssigner 5, LegalRegistry 9, ComplianceTimer 10). Sólo código, sin cambio de esquema, ni carrera de KamoInitializer.
· kamo-shared-library
Licencias de alcadistaAsigner (decision-spine Slice 2b-ii)
Añade el selector de mayordomo de la licencia (doc. 03 3,2; doc 01 . . . . . . . . . . . . . . . . . . . . . . . administrador cuyo MLOS StewardLicense es válido HOY para la licencia requerida del acto tipo en el estado del prestatario, desequilibrado con carga a menos abierto StewardTasks (atar - . miembro más bajoId); vacío cuando ninguno cubre la jurisdicción (caller se intensifica). - StewardAssigner .Component (gated mlos.legal.enabled) sobre StewardLicense StewardTask repos - lee el registro de la puerta MLOS, NO bloqueado-core orgs.License (sin donotmodificar deps; evita la adhesión del Miembro-E(orgId,userId)-La licencia). - StewardLicense.isValidOn(date) - única fuente de la verdad para la licenciatura basada en fechas (Estatuto calculado, nunca almacenado); **************** refactored a él. - ******************* (piscina de candidatos). 5 StewardAssignerTest green; 9 LegalRegistryPraz aún verde (14 total). Sin esquema cambio (no hay carrera de KamoInitializer). Substra-primer cableado en DecisionSpine.record() ROUTE-TO-HUMAN para el sello asignadoMemberId es un seguimiento.
· InitializerService
Registro mlos.compliance repo pkg (Resal 2c-i)
Añadir ************* a .EnabledoJpaRepositories para KamoInitializer crea mlos.adverse.action.timer . mlos.regx.timer. Indiciaciones de la entidad a través No se necesita SchemaCleanupRunner DDL.
· kamo-shared-library
ECOA - Sustrato de temporizador Reg X (decisión-spine Slice 2c-i)
Nuevo paquete **************** (doc 03 2.8) - propiedad de kamo análogos de cumplimiento de los bloqueados donotmodify.TridTimer. Sutrato-primero: - AdverseActionTimer (ECOA/Reg B reloj de 30 días; noticeKind ECOA-AA/COUNTEROFFER/ INCOMPLETE-NOA) RegXTimer (situtos de servicio de confirmación; dutyKind ******************* Mutable **************** préstamo suaveFileId ref, .orgId para aislamiento de inquilinos. Indice de barrido de brecha (estatuto, deadline-at). - ComplianceTimerStatus enum 2 repos con ********************** - ComplianceTimerService -Component (gated mlos.compliance.enabled): temporizadores de armas, codifica el recuento regulatorio de día (30/36/120/5, bloqueado por pruebas), CONTINUIDAD necesita un plazo explícito, detección de incumplimientos a través de reloj inyectado, buscadores de barrido. 10 ComplianceTimerServiceTest verde (TDD). Indización de la entidad a través de laTabla. DaemonService SLA-escalation . BLOCKED-ESTALE diferido (llama a los buscadores de barrido). Excluído esta rebanada: ComplianceFinding (FK donotmodify.TridTimer), RBPN/FCRA avisos, ChangedCircumstance.
· InitializerService
Registro mlos.legal repo pkg (Resal 2b)
Añadir com.kamo.z.shared.mlos.legal a .EnableJpaRepositories para KamoInitializer crea mlos.licensed.act-registry / mlos-ron-elegiibility / mlos-steward-license. Todos los índices se declaran en entidad a través de la necesidad de SchemaCleanupRunner DDL.
· kamo-shared-library
Sustrato del registro legal consciente del Estado (slice de espina de sepiño 2b)
Nuevo paquete com.kamo.z.shared.mlos.legal - el productor de Greenfield de la Entrada absoluta de relación jurídica de DecisionGate (doc. 03,2). Sustratema-primero, no adoptor, pero: - LicensedActRegistry (plataforma ref, por act-state) - hace este acto regulado legalmente requiere un ser humano con licencia? Unique(acto, código de estado). - RonElegiibility (plataforma ref, per: . . . . . . . . . . . . . . . . . . . . . . . . . . las fichas de la regla de la comisión/significadora/firma de la alineación. - StewardLicense (tenunidos, teclado para memberId) - Licensure NMLS-by-state. NO columna de estado almacenado: calculado de effectiveDate-=today-=expiresAt (doc. 13 rústica de correcciones de 4,3 anuló el campo de estado en línea de doc 03). - LegalRegistry .Component (gated mlos.legal.enabled, default off): fail-closed LegalRequiereHumanos / administradorLicensedFor (basado en fechas) / ronPersin. stateCode es ISO-3166-2 String (listo internacional; USStateType es código muerto). Indizados en la entidad a través de Table. 9 LegalRegistryPase de prueba (TDD). Composifica la resolución enviadaGate mediante contrato. No decision/steward edits. La asignación de StewardTask, consciente de la licencia, se aplazó a la siguiente porción.
· InitializerService
Regístree mlos.steward . mlos.orchestration repos; Slice-2a esquema
- KamoInitializerApp .EnableJpaRepositorios: añadir el repo MLOS acumulado paquetes ************* más Esign/personal-loans por lo que KamoInitializer es dueño de su esquema. - SchemaCleanupEununner: genérico barrido enumerado de la lista blanca-CHECK; parcial/ índices únicos de . FKs para **************** **************** Los índices de la espinilla de la espinilla Slice-2a son ahora entidad declarada (Table) por lo que el bloque Slice-2a es un comentario sinop.
· kamo-shared-library
Rebanada de la seluela de la espina de la decisión 2a . OrquestrState . StewardTask . DecisionSpine BLOCKED-state máquina
OrquetrationState (GREEN/BLOCKED/COMPLETE) enums - DecisionSpine (ConditionalOnProperty mlos.spine.enabled): se compone de la Decisión de la categata enviada AiDecision WORM ledger - outbox transaccional en un tx ROUTE.TO.HUMAN abre una tarea BLOCKs el Esceno; resolución (() escribe una decisión de HUMANo. Entidades estatales mutables (no "PreUpdate"). 4/4 Mockito prueba verde.

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito