உள்ளடக்கத்திற்குச் செல்லவும்
KAMOUniverse

மாற்று பதிவேடு

என்ன புதிது.

அது கப்பல்கள் போல், தளத்தில் ஒவ்வொரு மேம்பாடு.

  1. · DaemonService

    City-scene sampler over the KamoUniverse earth tiles

    - EdtTile: byte-exact reader for EDT4 tiles (Copernicus DEM + ESA WorldCover + WorldClim + HydroSHEDS + RESOLVE ecoregions + ocean mask), memory-mapped, offset reads per layer (KBs per point, not the 210MB tile). Verified against the real N34_W117 Mojave tile. - EcoResolver: eco_biomes.json (exported verbatim from universe-world foliage.rs + eco_table.rs) → per-ecoregion flora palette. ECO 433 → Joshua tree, no duplication. - CitySceneSampler: coordinates → the versioned scene-factor document (terrain relief + SW horizon silhouette, climate + Koppen, coast/river/lake distance+azimuth, land-cover mix at 1/5/15km, flora palette, built density + dark-sky). Built centroids fall back to the dominant nearby ecoregion. - CitySceneryFillService + CitySceneryFillJob: drain PENDING (and stale-generator) city_scene_profile rows on a 1-min tick. k8s: read-only /mnt/worldchunks earthdata mount (present on both nodes), SCENERY_ENABLED.

  2. · SecurityService

    Expose full geo fields + city-scene profile API

    - geoip/me now returns **************** (already loaded by the single block+location lookup, previously discarded) — powers city scenes and client personalization at zero new query cost. - CitySceneryService/Controller: GET /scenery/profile/{state}/{city} returns the city's sampled scene factors, materializing a PENDING row on first sight (portal renders the state scene meanwhile); resolves coordinates from the gazetteer, a caller lat/lon hint, or a stated-property ZIP. Internal PATCH overrides rail for curated art direction (X-Internal-Auth, constant-time).

  3. · kamo-shared-library

    CitySceneProfile entity + GeoLite city-lookup indexes for city-based portal scenes

    - CitySceneProfile (city_scene_profile): per-city environmental scene factors (terrain/relief/silhouette, climate/koppen, hydrology, RESOLVE ecoregion + flora palette, land-cover mix, built/dark-sky) as a versioned JSONB contract, materialized cold-path from the KamoUniverse earth tiles. UUID pk, PENDING→READY status, art_overrides layer, generator_version for re-sample. - GeoLiteBlock: geo_name_id + postal_code indexes so a gazetteer city / stated ZIP resolves to a representative coordinate; block/location repos gain the finders. - Fixed two stale count-pinned tests (ImageAssocType roster, canonical templates).

  4. · SecurityService

    E-consent with WRITTEN ESIGN Act text + the real credit-bureau adapter rail — no owner input required

    E-CONSENT: full ESIGN Act §101(c) disclosure authored in-code (scope of consent, right to paper copies, right to withdraw + effect, contact upkeep, hardware/software requirements, affirmative-act clause) as the default v1 DisclosureText, auto-seeded per org — a TENANT customizes by inserting a higher version (multi-tenant by construction, platform owner never in the loop). Capture = WORM ConsentRecord on the borrower's own LoanParty (created if absent): body sha256, disclosure version, WEB_CHECKBOX, IP, device; grant and withdraw both recorded, withdrawal never blocks the loan. Party-gated — consent is the borrower's own act, no operator bypass. CREDIT: CreditBureauAdapter SPI on the tenant's CREDIT vendor rail (MortgageProviderResolver — never hardcoded): StubCreditAdapter only when a tenant explicitly configures STUB; MismoRestCreditAdapter as the catch-all real-vendor adapter (MISMO 2.4 soft tri-merge over HTTPS, Basic auth from the config's clientId + AES-GCM-decrypted secret, CREDIT_SCORE parsing both attribute orders) — adding a bureau = adding a bean. Every order persists a Connection audit row **************** the credit-ledger reads; every non-orderable state is an HONEST status (NOT_CONFIGURED / ENDPOINT_NOT_CONFIGURED / CREDENTIALS_NOT_CONFIGURED / VENDOR_NOT_SUPPORTED / BORROWER_INCOMPLETE / VENDOR_ERROR), never a fabricated score.

  5. · SecurityService

    Account bridge — email check, existing-user sign-in provisioning, portal registration

    Owner flow: after the funnel captures full name + contact, the next step keys on EMAIL. /portal/account/check → exists?; /prepare-signin verifies the password then provisions membership in the PORTAL org before the standard login (so the session carries THIS org's memberID for the merge/promote seam); /register creates the user under the PLATFORM org (kamocrm) with membership in BOTH orgs (portal org + securityProvider mirror), full legal name (prefix/middle/suffix) + preferred (AKA) + phones, email marked verified (the borrower typed it twice; every loan touchpoint exercises that inbox — a verification-click gate would orphan the lead). ClaimedFacts gains **************** so the LEAD carries the complete contact card the moment it enters the accept pool.

  6. · SecurityService

    Closing eSign through the NATIVE engine — envelopes actually send now

    Recording a disclosure e-sign envelope was v1 metadata-only. Now, when the tenant's ESIGN vendor rail resolves to KAMO_NATIVE (per-market integrations config — never hardcoded), the envelope is SENT via ESigService's non-metered platform endpoint (contextType=DISCLOSURE, contextId=envelope id): signers = the loan's URLA borrowers with an email (primary carries memberId), invites go out immediately, and the disclosure row is patched **************** Every non-sendable case stays an honest metadata row with the reason surfaced to the steward in the response (ESIGN_NOT_CONFIGURED / EXTERNAL_VENDOR_PENDING / NO_TEMPLATE / NO_SIGNERS_WITH_EMAIL / NATIVE_SEND_FAILED) — never a fake SENT.

  7. · ESigService

    Non-metered internal platform-envelopes endpoint — DISCLOSURE-context signing rail

    Platform-internal envelopes (mortgage disclosure/closing signing) are product, not the tenant's programmatic API usage: tagged MANUAL so completed signatures never count toward the metered overage. Same X-Internal-Auth + X-Org-Id authorization; optional X-Member-Id rides into createdBy.

  8. · kamo-shared-library

    LOAN_STATUS_UPDATE canonical template — borrower notified at every loan-file stage change

  9. · SecurityService

    Leads-first resume rail — signed magic links, contact recovery, lead snapshot

    - PortalResumeService: 30-day HMAC token (PRESUME|guid|orgId|exp, keyed off the cluster internal.auth.secret — no new secret); mails RESUME_PORTAL_LINK. - POST /portal/resume/send (visitor's own link), /resume/redeem (token → guid for the portal to rebind as its httpOnly cookie), /resume/recover (lookup by email case-insensitive or exact phone; always acks ok:true — enumeration-safe). - GET /portal/lead: claimed-facts snapshot (exact inverse of applyFacts) so a fresh device rehydrates the funnel from the server-side lead. - PortalUrls extracts the myloan.<root> origin resolution shared with the meet-your-LO email.

  10. · kamo-shared-library

    RESUME_PORTAL_LINK canonical template — borrower magic-link to continue on any device

  11. · SecurityService

    Expose US state/region from GeoLite lookups

    GeoLookupResult gains subdivisionCode/subdivisionName (GeoLite2 subdivision_1 = US state incl. DC; territories PR/GU/VI/AS/MP arrive as countryCode with no usable subdivision, so callers branch on countryCode first). GET /api/security/geoip/me now returns region_code/region_name/city alongside the country fields — the KamoMLOS portal uses it to pick the visitor's initial state scene.

  12. · SecurityService

    Anonymous GET /portal/assigned-lo — accepting LO identity for the guid's lead

    Powers the borrower portal's top-left LO card the moment an LO accepts the lead (pre-login, pre-application): guid header + org host → lead → assignedTeamMember → {loName, loNmls, loEmail}; assigned:false until then.

  13. · SecurityService

    'Meet your loan officer' — the borrower hears the moment their lead is accepted

    On accept (ASSIGNED), best-effort MEET_YOUR_LO email to the mortgage lead's borrower: the accepting LO's real name + NMLS + email + a continue-application link. Addresses the borrower by their PREFERRED (AKA) name. Never fails the accept.

  14. · kamo-shared-library

    MEET_YOUR_LO canonical template — borrower intro when an LO accepts their lead

  15. · SecurityService

    The lead→application conversion seam — POST /portal/promote

    The funnel was a closed loop: nothing ever converted the portal lead into an application (blank mints only — no sourceLead, no seeded fields, no LO inheritance). promoteToApplication: merge GUID (idempotent) → reuse-or-createFromLead (URLA seeded from stated facts, sourceLead set) → link the member's ACCOUNT (party authz keys on it — createFromLead never set it) → ensureTransaction (inherits the accepted loan officer).

  16. · kamo-internal

    Member tooltip shows last active datetime + time ago

    Interaction Center member rows now show a two-line tooltip: availability status plus when the member was last active — 'Active now' while online, otherwise 'Last active: <datetime> (3D 9H 32M)' sourced from MediaService's new durable last-seen presence keys. Time-ago recomputes on each hover and ticks every 30s while open.

  17. · MediaService

    Durable last-seen timestamps + bulk endpoint

    PRESENCE:{id} is deleted the moment a member goes offline, so nothing recorded when they were last active. Stamp PRESENCE_LAST_SEEN:{id} (orgId + ts, 400d TTL) on connect/heartbeat/disconnect and expose GET **************** for the Interaction Center member tooltips.

  18. · SecurityService

    Borrower pricing-quote endpoint — party-gated, integration-config-gated

    POST **************** caller must be a loan party (or pipeline steward); resolves the tenant's PRICING_PPE integration — NOT_CONFIGURED / EXTERNAL_VENDOR_PENDING are honest statuses; only KAMO_NATIVE_PPE relays into the real PPE. Org/loanFile/borrowers server-stamped; FICO fact defaults from the lead's STATED credit estimate. Kills the need for the portal's hardcoded rate wherever the tenant wires the native engine.

  19. · kamo-shared-library

    **************** (borrower quote candidate set)

  20. · SecurityService

    Integrations-status endpoint — the portal's honest view of the org's vendor wiring

    GET **************** per-category **************** runtimeVendor from the market integrations config via the runtime resolver. Session-gated; no secrets.

  21. · kamo-shared-library

    The doc-04 vendor RUNTIME — MortgageProviderResolver + VendorTypeBridge

    The integrations tab wrote MortgageProviderConfig rows nothing consumed at runtime. Resolver: (org, VendorCategory) → activation-gated, profile-scoped, first-enabled provider (fail-closed empty → callers render honest not-connected states). Bridge: config vendorKey → locked ConnectionVendor at the adapter boundary (doc 04 §5 — the locked enum is never edited; keys without a peer route MLOS-side).

  22. · SecurityService

    AI vision document extraction — docs → org's vision provider → VerifiedFact(OCR)

    The first producer of VerifiedFactSource.OCR: POST **************** reads a vault document (bank **************** ID) with the ORG'S OWN configured vision provider (MlosAiClient, MEDIUM tier) via a short-lived HMAC-signed public URL (VaultDocUrlSigner keyed off internal.auth.secret; VaultDocPublicController re-verifies org+vault assoc, no-store) and records每 extracted field as an evidence-backed VerifiedFact with per-field confidence. Party + confused-deputy + app-party authz; best-effort by contract (no provider/unreadable → status, never 5xx). Reconcile then applies facts to the URLA. The AI reads — it never decides.

  23. · kamo-shared-library

    Real verified-fact reconciliation — evidence facts now populate the URLA

    Replaces the M3a log-only stub: asset.* facts (grouped per source document) become Asset rows and employment.* facts become Employment rows via BorrowerSectionService, idempotently (same institution+last4 / same employer → skipped on re-run; W-2 annual wages ÷ 12 → monthly base). identity.* facts are deliberately HELD for human review — OCR never silently overwrites a borrower's typed legal identity.

  24. · SecurityService

    ClaimedFactsDTO carries the FULL mortgage lead (35 fields)

    Adds the 16 fields the portal structurally couldn't send (monthlyDebts, taxes, insurance, HOA, currentPayment, sellerCredits, renovationCost, borrowerAge, isVeteran, currentLoanType, isRepresented, agent block, addressDetails) + applyFacts mappings. The portal can now populate every column a loan officer sees on the CRM lead.

  25. · kamo-internal

    Company NMLS ID field in org Company Info

    Edit + read row + hydration + PUT (nmlsId). Feeds the borrower portal footer trust pill and the originator projection's company NMLS.

  26. · kamo-shared-library

    NmlsId is patchable — the company NMLS finally has a write path

    Organization.nmlsId (SAFE Act identifier feeding the originator projection's originatorOrgNmlsId and the borrower portal's verified-license pill) was readable everywhere but writable nowhere. Whitelist it in patchOrganization (trimmed; blank clears).

  27. · kamo-internal

    Mortgage fields as 3 column panes on the Client Lead Data tab (reuse form via layout prop)

    Add layout?: 'tabs' | 'panes' to MortgageFieldsComponent (default 'tabs', byte-identical to the existing Mortgage Workshop rendering). editControls, loanFields, borrowerFields, and subjectPropertyFields are lifted verbatim into consts so 'panes' mode can render the same 3 field groups as side-by-side Cards with one shared edit header, no tabs, no What-If slot. Mount it on the Contact Info (Client Lead Data) tab in LeadViewClient, gated on marketConfig?.subType === 'RESIDENTIAL_MORTGAGE', wired to the same 'mortgage' pane lock and **************** the Mortgage Workshop tab already uses.

  28. · kamo-internal

    Make What-If Studio its own pane below the form (drop the 4th tab)

    Removes the "What-If Studio" sub-tab; the Scenario Sandbox now renders as its own pane below the Loan/Borrower/Subject Property form. Retitled "Scenario Sandbox (What-if Studio)" so there's no double header.

  29. · kamo-internal

    Address-field layout + move agent block to Borrower tab + Payment above Eligibility

    - Subject Property: Address + Address Details half-width side by side; City/State/Zip on one row (md 5/4/3, Zip narrowest). - Move buyer's-agent block (Represented/Agency/Agent*) to the Borrower tab. - Outputs right column: Payment Estimator above the Eligibility Snapshot.

  30. · kamo-internal

    Add savable Seller Credits field to the Loan tab

உங்கள் உலகம் காத்திருக்கிறது.

நிமிடங்களில் இலவசமாகத் தொடங்கவும். நீங்கள் தயாராக இருக்கும் போது பொருட்களை சேர்க்கவும் - எந்த மாற்றமும் இல்லை, புதிய உள்நுழைவுகள் இல்லை.

எப்பொழுதும் இலவசம் — கடன் அட்டை தேவையில்லை