- Shipped
- June 26, 2026 at 5:57 PM UTC
- Author
- Kamo
- Commit
- 780e29f
The priceable rate/price cells — first catalog entity to FK BOTH a rate-sheet version (Slice 1) AND a product (Slice 2); the base of the §8.1 price assembly. - MlosBasePriceGrid (mlos_base_price_grid): rateSheetVersionId FK, productId FK, noteRate, lockPeriodDays, basePrice (price-to-100), basePoints, min/maxLoanAmount, ioFlag. Composite UNIQUE (version, product, note_rate, lock_period_days, io_flag) entity-declared (io_flag NOT NULL → full unique, no raw DDL). - NoteRateLadder (ungated @Component): par = cell nearest price-to-100; nearestToPrice(target); ties -> lower note rate (doc 02 §8.1 step 5). 5 NoteRateLadderTest green. CODE-VERIFIED CORRECTION: doc 02 §6 says EmbMoney/EmbPercent, but the locked LoanPricingSnapshot (the reproducibility anchor) uses RAW BigDecimal — interestRate DECIMAL(9,6), points DECIMAL(9,4), no embeddables; EmbPercent(9,4) can't match a 6-decimal rate. So snapshot-mirrored grid pricing numbers use raw BigDecimal matching LoanPricingSnapshot (note_rate 9,6 / base_price+points 9,4 / loan amounts 18,2). No KamoInitializer code change (catalog repo pkg registered Slice 1; unique index entity-declared) — re-run only.