Domain · Features

Lakshmi Domain - Features

Lakshmi is implemented.

9sections14 minread

On this page
Supporting documentation. This domain also carries 3 operational supporting docs under docs/domains/lakshmi/ (API notes, ADRs, deep topic guides) — reconciled here by linking, kept beside the code as supporting material rather than a second canonical source (§2, §13).

Personal Finance Intelligence Platform (TODO Phase 61)

Lakshmi is the Oshun bounded context for personal and household finance. It gives users a single, consent-driven view of every account they hold — banks, brokerages, loans, credit cards, crypto wallets, real estate, insurance policies, and more — and turns that aggregated picture into actionable planning: budgets, goals, debt payoff, tax optimization, retirement projections, and AI-powered recommendations.

The platform is designed for individuals and households at every financial sophistication level. A first-time budgeter can link a checking account and track spending; an advanced investor can analyze portfolio attribution, harvest tax losses, run Monte Carlo retirement simulations, and manage equity compensation. A financial advisor can be granted time-limited, scoped read access to a client's full financial picture.

Lakshmi spans accounts, transactions, budgeting, investments, tax, debt, credit, retirement, insurance, estate, real-estate finance, crypto, income, goals, behavioral finance, household sharing, and self-employed/small-business finance.

Implementation Status#

Lakshmi is implemented. The domain ships as 24 TypeScript libraries under libs/lakshmi/* and 6 service applications under apps/lakshmi/*, covering the full Phase 61 capability surface — every layer and every capability module below exists in source. @lakshmi/transactions, @lakshmi/budgeting, and @lakshmi/behavioral together back the V2 responsible-play spend-insight integration.

Cross-domain contracts will be published under @contracts/lakshmi (planned; not yet present in source).

Architecture: Five-Layer Model#

Lakshmi is organized into five layers. Every feature below belongs to one layer, and the layering is a hard dependency rule — higher layers depend on lower ones, never the reverse. This constraint prevents circular dependencies and keeps the core primitives stable.

  • Core — money, account, institution, household, user, advisor-access, financial-profile, and calculation primitives, plus the Drizzle ORM data layer. @lakshmi/core, @lakshmi/db.
  • Integration — bank, card, brokerage, crypto, tax, payroll, payment, and document ingestion adapters. @lakshmi/accounts, @lakshmi/integrations.
  • Intelligence — categorization, forecasting, risk analysis, optimization, planning, and behavioral insight. @lakshmi/transactions, @lakshmi/budgeting, @lakshmi/behavioral, @lakshmi/investments, @lakshmi/ai-engine, and the tax/debt/credit/retirement/insurance/estate/ real-estate/crypto/income/goals/household/business modules.
  • Security — consent, encryption, PII minimization, fraud detection, audit logging, and regulatory controls. @lakshmi/security.
  • Experience — dashboards, alerts, reports, and guided planning flows. @lakshmi/reporting, @lakshmi/alerts, surfaced through the apps/lakshmi/* services (api-gateway, sync-engine, ai-agents, worker, scheduler, browser-extension).

Core Domain Objects#

@lakshmi/core defines the primitives every other layer builds on. Understanding these types is the starting point for working on any Lakshmi library: branded IDs, the FinancialAccount model, the user/household/advisor model, the Money value object, and a financial calculation engine.

Branded ID types (UserId, HouseholdId, AdvisorId, AdvisorAccessTokenId, AccountId, ConnectionId, InstitutionId, ManualAssetId) prevent accidental cross-entity reference at compile time — the TypeScript compiler will reject code that accidentally passes an AccountId where a UserId is expected. Every monetary field is stored as integer cents to avoid floating-point drift.

  • FinancialAccount — a discriminated union over a type field with 32 account variants across eight AccountCategory groups: depository (checking, savings, CD, money market), credit (credit card), loan (mortgage, auto, student, personal, HELOC), investment (brokerage, traditional/Roth/SEP/SIMPLE IRA, 401k/403b/457b, HSA, FSA, 529, UTMA/UGMA, trust, pension, annuity), crypto (exchange, wallet, DeFi position), real_estate, business, and manual (manual asset, manual liability). Each variant carries an AccountSign (asset or liability) that drives its net-worth contribution. Every account shares an AccountBase (AccountId, userId, optional householdId, institutionId, optional connectionId, currency, net-worth/sharing flags, and a status of active, inactive, closed, frozen, or pending).
  • AccountConnection — the consent-bearing link to an aggregation provider, identified by a branded ConnectionId. Its ConnectionStatus begins active and may move to degraded (partial data), pending_mfa / pending_oauth (awaiting authentication), disconnected (re-authentication required), error (unrecoverable), or revoked (token revoked by the institution or user). Only an active connection refreshes balances; a disconnected or pending_mfa connection surfaces a reconnect prompt and is driven back to active by a successful re-authentication.
  • LakshmiUser, Household, FinancialProfileLakshmiUser carries auth metadata, residence, subscription tier (free / premium / family), onboarding state, notification and privacy settings, and a soft-delete field for GDPR right-to-erasure. Household groups members under role-based access (owner, admin, member, viewer, child) with per-account designations and shared goals. FinancialProfile holds the risk-tolerance score, income bracket, tax filing status, employment type, and retirement assumptions used by the intelligence layer.
  • AdvisorAccess — a time-limited, scoped grant letting a financial advisor read a client's data. Its expiresAt is mandatory — advisor access is never indefinite — and every access is recorded in an audit accessLog.
  • Institution — a financial-institution record with per-provider coverage, regulator identifiers (FDIC / NCUA), and a reliability score.
  • Money — an immutable value object holding integer minor units plus an ISO 4217 currency. Arithmetic preserves currency and rejects cross-currency operations; division and fromDecimal use banker's rounding. @lakshmi/core also ships a calculation engine (compound interest, amortization, time-value-of-money, Monte Carlo, federal/state tax brackets, risk metrics, Social Security).

Transactions and financial goals are not core entities — they are owned by @lakshmi/transactions and @lakshmi/goals respectively, and persisted by @lakshmi/db.

Integration Layer#

Account Aggregation (@lakshmi/accounts, @lakshmi/integrations)#

The integration layer is the bridge between external financial institutions and Lakshmi's internal domain model. It normalizes wildly different provider APIs into uniform FinancialAccount records so that every higher layer can work with a single model regardless of whether the data came from Plaid, Yodlee, or a manual entry.

@lakshmi/accounts connects bank, brokerage, card, payroll, tax, crypto, and payment institutions through aggregation-provider adapters (Plaid, Yodlee, MX, Finicity, Tink) and turns them into FinancialAccount records. @lakshmi/integrations adds FDX/PSD2/CDR open-banking adapters and document storage. Balance refresh pulls current balances and new transactions for active connections only.

Account-health checks surface stale syncs, low balances, and institution outages. The MFA / re-authentication flow drives a pending_mfa or disconnected connection back to active. Sync-failure handling distinguishes a transient institution error (retry) from a credential failure (move to disconnected, prompt reconnect). Data lineage records which adapter and sync run produced each record; duplicate detection prevents the same posted transaction from being ingested twice across overlapping sync windows. All integrations are consent-first and revocable (see Privacy and Compliance).

Intelligence Layer#

The intelligence layer is where raw financial data becomes insight. Each module below owns a specific reasoning domain; they share core primitives but are otherwise independent so they can be tested and evolved separately.

Transaction Intelligence (@lakshmi/transactions)#

Every transaction that enters Lakshmi flows through this module before it appears in any budget or report. @lakshmi/transactions normalizes and categorizes ingested transactions, organized into four module groups: categorization, merchants, receipts, and analysis.

Categorization assigns each transaction a spending category from a Plaid-style taxonomy, with a confidence tier; low-confidence results route to a manual-review queue, and a personalization engine learns from user corrections. A user-supplied correction is recorded as a user_override categorization and pins the category against future automated re-categorization. Merchant enrichment resolves a raw descriptor to a canonical merchant, logo, and category hint. Receipt OCR extracts amounts, dates, and line items and matches receipts to transactions.

Recurring-transaction detection identifies subscriptions and regular bills from amount and cadence regularity. Anomaly detection flags a transaction that deviates from the account's established pattern — an unusual amount, a new merchant, an out-of-pattern location, time, or frequency — for user review. Refund matching, pending-settlement prediction, splits, fee disaggregation, and international/travel FX handling refine a transaction further.

Budgeting and Cash Flow (@lakshmi/budgeting)#

Budgeting is the most common entry point for new users. @lakshmi/budgeting builds envelope budgets and tracks spending against them so users always know how much they have left in each category before the period ends.

An envelope is a named, periodic spending allocation; zero-based plans assign every dollar of projected income to an envelope or a goal. Spending velocity tracks the rate of spend within an envelope against the elapsed fraction of the period — a velocity above 1.0 means the envelope is on pace to overspend. Variance tracking reports actual-versus-planned per envelope at period close. Rollover carries an envelope's unspent balance into the next period when configured. Bills, savings rate, and runway (months of expenses covered by liquid balances) are derived cash-flow metrics. Shared budgets and household permissions let multiple household members view or edit envelopes under a permission policy.

Budget overage is warning-only by default — it never blocks a transaction — unless a self-imposed cap or guardian control explicitly escalates it.

Behavioral Finance (@lakshmi/behavioral)#

Most financial apps tell users what happened; behavioral finance helps them understand why and nudges them toward their goals. @lakshmi/behavioral owns impulse detection, nudges, and weekly reflection.

Impulse detection flags a likely impulse purchase from signals such as an out-of-pattern discretionary spend, time of day, and merchant category, and can surface an at-checkout or post-transaction prompt. Nudges are short, opt-in behavioral prompts toward a user's stated goals — for example, a reminder when discretionary spending outpaces a savings goal. Weekly reflection assembles a summary of the week's spending, envelope variance, and goal progress into a reflective recap. All behavioral interventions require explicit user opt-in before they are applied; habit-formation tracking measures streaks against user-set financial habits.

Investment Management (@lakshmi/investments)#

@lakshmi/investments gives investors a complete picture of their portfolios across all custodians. It tracks holdings, asset allocation, and portfolio performance. It maintains holdings with cost basis and tax lots, computes performance attribution and risk, tallies fees, and proposes rebalancing trades to restore a target allocation. Dividend tracking and retirement-account holdings are included; portfolio scenario modeling projects outcomes under varied return assumptions.

Tax Planning (@lakshmi/tax)#

Tax is one of the largest controllable costs in a financial plan. @lakshmi/tax estimates and optimizes tax throughout the year rather than just at filing time. It tracks deductions, credits, and withholding, computes estimated quarterly taxes, identifies capital-gains harvesting opportunities from tax lots, and handles crypto and self-employment tax. Document collection assembles the records a filing needs; filing is a handoff — Lakshmi prepares and explains, it does not file.

Tax outputs are clearly separated into information versus regulated advice (see Privacy and Compliance).

Debt and Credit (@lakshmi/debt, @lakshmi/credit)#

Debt management and credit health are closely related but distinct concerns. @lakshmi/debt and @lakshmi/credit address them separately.

@lakshmi/debt computes amortization schedules, compares payoff strategies (avalanche by interest rate, snowball by balance), evaluates refinancing, and optimizes interest cost across multiple debts. @lakshmi/credit tracks the credit profile, utilization, and score drivers, supports credit disputes, and produces credit-building recommendations and alerts.

Retirement, Insurance, and Estate (@lakshmi/retirement, @lakshmi/insurance, @lakshmi/estate)#

These three modules handle long-horizon planning where the stakes are highest.

@lakshmi/retirement projects retirement readiness from contributions, models drawdown, and applies Social Security and pension assumptions across scenarios. @lakshmi/insurance maintains a coverage inventory across policy types, runs gap analysis against household risk, tracks premiums and claims, and recommends coverage changes. @lakshmi/estate tracks beneficiary designations, wealth-transfer plans, and estate documents; it is the source of truth for the V2 per-account vault asset-transfer surface (see V2 Surfaces).

Real Estate and Crypto (@lakshmi/real-estate, @lakshmi/crypto)#

Both modules illustrate Lakshmi's boundary discipline: each relies on an adjacent domain for raw facts while owning the personal-finance decision.

@lakshmi/real-estate computes home affordability, mortgage analysis, rental economics, and per-property cash flow. It consumes real-estate asset facts from Cybele while retaining ownership of the financial decision. @lakshmi/crypto does digital-asset accounting: wallet tracking, exchange and on-chain imports, DeFi position tracking, cost basis, tax, and risk scoring. On-chain infrastructure is supplied by Aje; Lakshmi owns the finance view of those assets.

Income, Goals, Household, and Business (@lakshmi/income, @lakshmi/goals, @lakshmi/household, @lakshmi/business)#

These four modules handle the remaining planning domains.

@lakshmi/income models salary, contractor, creator, gig, rental, and business income, including irregular and recurring streams. @lakshmi/goals plans financial goals and life events with milestone tracking and probability scoring, ordering goals by priority when they compete for surplus cash. @lakshmi/household manages family budgets, member permissions, shared goals, and dependent planning. @lakshmi/business covers self-employment and small-business finance: P&L, invoices, business tax, and cash reserves.

AI Reasoning (@lakshmi/ai-engine)#

@lakshmi/ai-engine sits above the other intelligence modules and provides financial reasoning, recommendation, and planning simulation across all of them. Every recommendation must preserve its inputs, assumptions, model version, and explanation metadata (see Privacy and Compliance) so any output is reproducible and auditable.

Security Layer#

Privacy and Compliance (@lakshmi/security)#

Privacy is not an afterthought in Lakshmi — it is a layer in the architecture. @lakshmi/security owns consent, encryption, PII minimization, fraud detection, audit logs, and regulatory controls.

The four binding requirements are:

  1. Consent-first and revocable — every integration requires explicit user consent before connection and can be revoked at any time, moving the affected AccountConnection to revoked.
  2. Encryption and least privilege — sensitive financial data is encrypted at rest and protected by least-privilege, role-based access.
  3. Explainable recommendations — every recommendation preserves inputs, assumptions, model version, and explanation metadata.
  4. Information versus advice — tax, investment, credit, and insurance outputs clearly separate general information from regulated advice; regulated advice is surfaced only where the product has the required compliance workflow.

Every financial calculation, recommendation, aggregation, and alert path must carry deterministic tests plus privacy, consent, audit, and contract tests. Integration tests use sandbox fixtures and never require live credentials in CI.

Experience Layer#

Reporting (@lakshmi/reporting)#

@lakshmi/reporting produces dashboards, statements, exports, analytics, and visualizations across every capability module, and supports data portability so a user can export their financial data in full.

Alerts (@lakshmi/alerts)#

@lakshmi/alerts sends notifications and proactive financial alerts on configurable thresholds — low balance, envelope overage, large transaction, bill due, goal milestone — and drives threshold-based automation.

V2 Surfaces#

Lakshmi exposes two adapter services to the V2 platform. Both are off-rollback — they must never feed deterministic match simulation or competitive game outcomes.

V2 Responsible-Play Spend Insight#

@v2/lakshmi-responsible-play-spend-insight is the V2 adapter for responsible-play store confirmation. It composes @lakshmi/behavioral, @lakshmi/budgeting, and @lakshmi/transactions to surface spending context during in-app purchases. (The historical @lakshmi/spend-insight reference is not implemented.)

The contract requires explicit player opt-in before any behavioral nudge, impulse-detection prompt, weekly summary reflection, or self-imposed cap is applied. Parental controls are guardian policy and apply independently of the player's own opt-in. Budget overages remain warning-only unless a self-imposed cap or a parental control explicitly blocks the action or requires guardian approval. The adapter is off rollback: spend insight can affect store confirmation, guardian approval, player education, and weekly summary copy, but it must never feed deterministic match simulation or competitive outcomes.

V2 Per-Account Vault Asset Transfer#

@v2/per-account-vault-estate-bridge is the V2 adapter for per-account vault estate planning. It bridges Lakshmi's estate data to two other domains: @oshun/identity validates account ownership and sensitive-action gates, and @themis/transparency provides an immutable audit record for the transfer. The boundary exists because estate transfers are legal events requiring a trustworthy audit chain — neither Lakshmi nor identity can provide that alone.

The reciprocal Lakshmi schema is v2.per-account-vault-asset-transfer, which requires nine fields: vaultPlanId, householdId, ownerOshunAccountId, assetId, beneficiaryId, delegationId, evidenceDocumentId, transferInstructions, and themisAuditRecordId.

Lakshmi remains the source of truth for asset-inventory readiness, encrypted estate-document-vault completeness, beneficiary designations, digital-legacy action items, emergency-access readiness, and executor/trustee runbooks. V2 may publish an estate-transfer manifest only when all of the following hold: each required asset transfer is marked ready by Lakshmi; the beneficiary tracker has no missing or conflicting designations; the delegation evidence document exists in the encrypted estate-document vault; @oshun/identity validates the canonical owner account and sensitive-action gates; and @themis/transparency records the delegation plus transfer execution in a valid hash chain with an anchored checkpoint.

This schema is an estate-administration control plane only. It is off rollback, server-authoritative, account/companion-only, and rejects live gameplay-frame RPCs. It must never feed deterministic match simulation, competitive frame outcomes, damage, AI, or rollback inputs.

Cross-Domain Integrations#

Lakshmi's boundaries are drawn around ownership of the financial decision, not raw data. Each adjacent domain owns its own data and exposes it to Lakshmi through a defined contract.

  • Maat consumes aggregate business intelligence and risk where permitted. Maat owns enterprise and organizational finance, Lakshmi owns personal and household finance. The boundary prevents Lakshmi from needing to understand organizational accounting and prevents Maat from needing to understand personal budgeting.
  • Aje supplies Web3 and on-chain asset/provenance infrastructure consumed by @lakshmi/crypto. Aje owns the chain integrations; Lakshmi owns how those assets appear in a user's net worth and tax picture.
  • Themis supplies governance and compliance policy primitives, and the immutable transfer audit records used by the V2 vault surface. Any operation that constitutes a legal transfer of ownership routes through Themis for audit-chain integrity.
  • Cybele supplies real-estate asset and mortgage context consumed by @lakshmi/real-estate; Lakshmi owns the personal-finance decision. This boundary avoids duplicating property records and AVM data.
  • Freya, Asase, Brigid, Saraswati, and other commercial domains may expose user-permitted income, expense, asset, and business data through explicit contracts.

Gaia Energy and Climate Integration#

Phase 175 adds Gaia renewable-energy-potential and climate-risk products as inputs to Lakshmi. Lakshmi consumes solar GHI, wind at 100m, hydro-inflow, heating/cooling degree days, storm risk, and climate-scenario outputs for energy-trading support, household capacity planning, insurance context, property-risk analysis, and financial-scenario modeling. Gaia owns forecast generation and uncertainty; Lakshmi owns financial-advice boundaries and the user-facing finance decision.