Getting started

ROU Asset is organized by organization (your company). Everything — leases, entries, reports — belongs to an org, and access is controlled per member. The whole close cycle lives here: onboard a lease, let the engine build the schedule, generate and approve journal entries, then export them to your general ledger.

  1. Create your account from Get started (email, or Google/Microsoft SSO).
  2. Create your organization when prompted. This seeds sensible defaults: account slots with example GL numbers, three lease types (Real Estate, Vehicles, Equipment), an IBR table, and a few demo leases flagged is_demo that you can delete.
  3. You land on the Dashboard — portfolio KPIs, your locations, critical dates, and a lease-cost trend.
  4. If billing is enabled on your deployment, subscribe from Settings → Billing to unlock the app.
app.rouasset.com/dashboard
Total lease liability
$3,914,207
Total ROU (net)
$3,602,880
Active leases
18
Cash due — 30 days
$142,650
Locations
Austin HQ6 leases
Austin, TX
Liability$1,204,880
Denver Yard3 leases
Denver, CO
Liability$612,410
Chicago Loop5 leases
Chicago, IL
Liability$988,120
Monthly lease cost
Trailing 12 mo$118,204 / mo
The dashboard after sign-in: KPIs, the locations panel, and the trailing lease-cost trend.
The left sidebar is your map: Dashboard, Leases, Journal Entries, Reports, Alerts, Settings. Press ⌘K anywhere to jump to a lease or location by name.

Settings & configuration

Configure your org before onboarding real leases — this is a five-minute, one-time setup that makes every later journal entry land on the right accounts. Settings has these areas:

  • Organization — accounting policy: period convention (calendar-month stub vs payment-anniversary), rate convention (compound vs simple), fiscal year-end, default entry status, capitalization threshold, and the ASC 842 classification thresholds (major-part-of-life default 75%, substantially-all default 90%). Also practical expedients (short-term, component separation, risk-free rate) and the email-digest opt-in.
  • Account Mapping — map each lease-accounting slot (ROU Asset, Accumulated Amortization–ROU, Lease Liability, Interest Expense, Operating Lease Expense, ROU Amortization Expense, Variable Lease Expense, Short-term Lease Expense, Gain/Loss on Termination, Lease Clearing) to your GL account number + name. These flow onto every journal entry line. Overridable per lease type and per lease.
  • Lease Types — categories (Real Estate, Vehicles, Equipment…) with default account slots and default alert offsets.
  • IBR Table — your incremental borrowing rates by term bucket × effective date. The new-lease flow uses this to suggest a discount rate.
  • Locations — properties/sites with structured addresses. Google Places autocomplete fills the fields and stores lat/lng (degrades to manual entry when no Maps key is configured). Leases reference a location. You can also add a location on the fly from the dashboard or the new-lease flow.
  • Export Templates — build custom GL export layouts (see Exports).
  • Team & Roles — membership is managed by your identity provider. Two enforced tiers: admin (the org owner — settings, billing, API keys, plus all accounting work) and member (all accounting work: create/activate leases, generate/approve/export entries — no settings or billing).
  • Audit Log — every create/update/approve/export is recorded with actor and before/after snapshots.
  • Billing — subscription status and plan management (Stripe).
Start with Account Mapping. Put in your real GL account numbers once and every generated entry — for every lease, forever — books to the correct accounts and exports cleanly.

Creating a lease (guided flow)

From Leases → New lease you get a step-by-step flow with a live measurement preview on the right that updates as you type. You can save as a draft at any step and come back.

app.rouasset.com/leases/new
1. Basics2. Term3. Payments4. Rate5. Costs6. Review
Payment stream
Type
Fixed
Frequency
Monthly
Timing
Advance
Base rent
$10,000.00
Escalation
3% / 12 mo
Free months
0, 1, 2
Live measurement
ClassificationFinance
Liability$511,766.66
ROU asset$511,766.66
Periodic rate0.4868%
The Payments step of the guided flow, with the liability and ROU recomputing live as you edit.
  1. Basics & location — name, contract reference, lessor name/email, location, and lease type. No location yet? Click + New next to the location field to add one (with Google address autocomplete) without leaving the flow.
  2. Term & options — commencement and non-cancellable end dates, plus renewal/termination/purchase options. Tick RC on an option to mark it reasonably certain; reasonably-certain renewals extend the computed term.
  3. Payments — click Add stream for each stream: choose type (fixed, in-substance fixed, variable-index, variable-usage, non-lease), frequency, advance/arrears timing, amount, escalation (fixed %, fixed $, or steps, every N months), and free-rent month indexes. A live cashflow table shows the expanded grid so you can sanity-check before moving on.
  4. Rate & classification — set the discount rate source and rate (use Suggest to pull from your IBR table by term), economic life, and fair value, then work the five-test walkthrough. You can override the computed classification, but the app requires a written reason.
  5. Initial costs — initial direct costs, prepaid rent, incentives received, and the probable residual-value guarantee. ROU = liability + prepaid + IDC − incentives.
  6. Review — computed liability, ROU, and the first-year schedule. Click Activate lease to persist the initial measurement and generate the full schedule.

AI lease extraction. If enabled, an Upload lease PDF panel appears at the top of the flow:

  1. Upload the executed lease PDF. Claude reads it and extracts the lease name, lessor, dates, payment streams (with escalations and free rent), options, initial costs, and the property address.
  2. The wizard pre-fills across every step. A toast tells you how many fields were filled — review each step before activating.
  3. If the document contains an address, ROU Asset creates the location automatically (or links a matching one) and selects it in Basics. Newly created locations are geocoded when a Maps key is present.
  4. The source PDF is saved to the lease's Documents tab when you save or activate, so the paper trail stays attached.
Drafts don't generate a schedule until you activate. Nothing hits your books from a draft.

Classification (ASC 842)

At commencement each lease is classified via the five tests — any "yes" makes it a finance lease, otherwise operating:

  • Ownership transfers at the end of the term.
  • A purchase option is reasonably certain to be exercised.
  • The term is a major part of the asset's economic life (policy threshold, default 75%).
  • The present value of payments is substantially all of the asset's fair value (default 90%).
  • The asset is specialized with no alternative use.

Two additional statuses:

  • Short-term — term ≤ 12 months with no reasonably-certain purchase option, when the org elects the expedient. Expensed straight-line, no balance sheet.
  • Expensed (threshold) — PV below the org capitalization threshold.

Every answer and input (economic life, fair value, ratios) is stored for audit. Changing a reasonably-certain flag on an active lease routes through the reassessment flow, never a direct edit.

Schedules & the engine

Activation generates the amortization schedule. Both classifications accrete the liability identically; they differ in ROU amortization:

  • Finance: interest = opening liability × periodic rate; principal = payment − interest; ROU amortizes straight-line over the term (or the asset's useful life when ownership passes). Two P&L lines.
  • Operating: a single straight-line lease cost; ROU amortization is the plug (straight-line cost − interest). Invariants: Σ straight-line = Σ fixed payments; ending ROU = 0; ending liability = 0.
app.rouasset.com/leases/downtown-office
Downtown Office — Schedule
Finance · 60 periods · 6.00% IBR
ties to 0.00
#PeriodPaymentInterestPrincipalLiability
1Feb 202610,000.002,528.447,471.56511,766.66
2Mar 202610,000.002,492.077,507.93504,258.73
3Apr 202610,000.002,455.517,544.49496,714.24
4May 202610,000.002,418.787,581.22489,133.02
5Jun 202610,000.002,381.867,618.14481,514.88
6Jul 202610,000.002,344.767,655.24473,859.64
A lease's Schedule tab — every period, with a badge confirming the liability retires to exactly 0.00.

The period convention (calendar-month stub vs payment-anniversary) and rate convention (compound (1+annual)^(1/12)−1 vs simple annual/12) are org settings, stamped on each measurement. Advance payments reduce the liability before interest accrues; arrears after.

Rounding discipline: every row rounds to the cent from rounded parts, and the final row trues up so the liability is exactly 0.00 and ROU accumulated amortization exactly equals ROU gross. The engine throws if an invariant fails — the numbers always tie.

On a lease's Schedule tab you see all rows grouped by measurement; superseded rows (from lifecycle events) are collapsed by default.

Journal entries center

Journal Entries is a period workbench. Pick a month with the period picker and you see every entry with totals by account and per-entry line drill-down.

app.rouasset.com/entries
February 2026
Odoo (Journal Items)Export batch
AccountDebitCredit
Interest Expense2,528.44
Lease Liability7,471.56
Lease Clearing10,000.00
ROU Amortization Exp.8,653.97
Accum. Amort. — ROU8,653.97
Balanced18,653.9718,653.97
The period workbench: pick a month, review balanced entries by account, then export the batch.
  1. Generate period — runs the engine for schedule rows due through the month end and books the commencement entry at activation. Generation is idempotent: a schedule row can never produce two entries, so it's safe to click again.
  2. Review — click any row to expand its balanced lines (each maps to your GL account number/name). The Totals-by-account card shows the period's debit/credit rollup.
  3. Approve — approve all drafts, or tick a subset and approve just those. Approval is a role-gated mutation (accountant or admin).
  4. Export — pick a format and export the batch (see Exports). Once a period is exported it shows a lock indicator; regenerating warns and asks for a reason.

Every payment credits a Lease Clearing account — your real AP/cash lives in your GL, and the clearing account makes reconciliation after import trivial.

Lifecycle events

From an active lease's Actions menu you can run any lifecycle event. Each opens a focused wizard with a before/after impact preview ("Liability 412,300 → 389,150; adjustment entry: …") before you confirm. Mechanics: unposted future rows are superseded, a new measurement + forward schedule is created, a balanced adjustment entry is emitted, and posted history is never touched.

  • Modify — remeasure at a revised rate; extensions/consideration changes adjust liability and ROU equally (no P&L). Classification is reassessed (an operating→finance switch applies finance mechanics forward).
  • Reassess — a reasonably-certain flag flips; remeasure at the revised rate and reassess classification.
  • Partial termination — both proportionate methods (decrease-in-ROU basis or decrease-in-liability basis) with a gain/loss plug.
  • Terminate — full early exit: derecognize the remaining liability and net ROU, book the penalty, and plug the gain/loss.
  • Impair — record an impairment loss against ROU; afterward ROU amortizes straight-line with interest presented separately.
  • Abandon — set a cease-use date; ROU accelerates to zero by that date while the liability schedule continues unchanged.

Transition (mid-life onboarding)

Most leases arrive years into their term. On a draft lease, Onboard mid-life gives two modes:

  • Back-compute from inception — enter the original terms + a go-live date; the engine computes the historical schedule and takes the go-live balances.
  • Enter carryover balances — provide the liability and ROU carrying amounts directly and roll forward.

Historical rows before go-live are saved as pre-system (reported, never exported), so nothing double-posts to your GL. No opening entry is booked by default ("balances already in your GL"), with an optional opening entry against an account you choose.

Variable & short-term costs

On a lease's Variable Costs tab, log a variable cost (date, amount, type — index differential / usage / taxes & insurance / CAM true-up / other, description). Each creates a draft journal entry (Dr Variable Lease Expense / Cr Lease Clearing).

For short-term leases, a monthly job books straight-line short-term lease expense. Both feed the lease-cost disclosure totals.

Index leases: the commencement index enters the liability; later index resets do not remeasure under ASC 842 — the differential is captured as a variable cost.

Reports & disclosures

Reports has six ASC 842 reports, each viewable on-screen and downloadable as CSV or XLSX, as of any date:

  • Maturity analysis — undiscounted payments by year (5 years + thereafter) less imputed interest, reconciling to the liability; split finance/operating.
  • Lease cost disclosure — finance interest, finance amortization, operating cost, short-term, and variable.
  • Quantitative disclosures — weighted-average remaining term & discount rate; cash paid split operating vs financing.
  • Liability & ROU roll-forward — opening + accretion − cash paid = closing, with a reconciliation diff column that shows 0.00.
  • Current vs non-current — the next-12-months principal split.
  • Register & forecast — a portfolio register and a payments forecast for cash planning.
app.rouasset.com/reports
Liability roll-forward — FY2026
LineAmountRecon.
Opening liability519,238.220.00
Interest accreted30,412.090.00
Cash paid(120,000.00)0.00
Closing liability429,650.310.00
Download CSVDownload XLSX
The liability roll-forward. The reconciliation column reads 0.00 — every report ties back to the schedule rows.

Dashboard & alerts

The Dashboard is the post-login landing: KPI row (total liability, total ROU, active leases, cash due next 30 days, weighted-avg term & rate), a locations panel (list or Google Map toggle — click a location to filter leases, or + New to add one on the spot), a critical-dates feed, upcoming payments (90 days), a trailing-12-month lease-cost chart, and a needs-attention widget.

Alerts lists option notice deadlines, expirations, and upcoming payments. Run Scan now to refresh; admins who opt in also get a daily email digest.

Exports & custom templates

Export a period's approved entries in a built-in format, or build your own layout. The built-ins available in the batch dropdown are:

  • Generic CSV — date, account number/name, debit, credit, memo, lease ref.
  • QuickBooks Online (Journal Entry) — the JournalNo / JournalDate / AccountName / Debits / Credits layout QBO journal imports read.
  • Xero (Manual Journal) — *Date, Narration, *AccountCode, Description, Debit, Credit.
  • NetSuite (JE Import) — External ID, Date, Account, Amount, Posting Type (D/C), Memo, Class.
  • Odoo (Journal Items) — Date, Number, Journal, Account, Label, Partner, Debit, Credit; rows sharing a Number import as one balanced move.
  • Sage Intacct (GL Journal) — Journal, Date, Reference No, GL Account, Description, Debit, Credit, Location.
  • Microsoft Dynamics 365 (General Journal) — Journal Batch, Posting Date, Document No., Account No., Description, signed Amount.
  • Excel workbook (.xlsx) — a formatted spreadsheet with a bold header row.

Each layout maps to the fields the target system's import expects, and every file is balanced by construction. See the per-system guides: QuickBooks, Xero, NetSuite, Odoo, Sage Intacct, Dynamics 365.

Need an exact match for your ERP? Build a custom template in Settings → Export Templates with the column designer:

app.rouasset.com/settings/export-templates
Export template — Odoo (Journal Items)
Columns
Datefield
Numberfield
Journalfield
Accountfield
Debitfield
Creditfield
Live preview
DateNumberJournalAccountDebitCredit
2026-02-01JE-1Lease81002528.44
2026-02-01JE-1Lease24007471.56
2026-02-01JE-1Lease245010000.00
The custom template builder: reorder columns on the left, watch a real batch render on the right.
  • Reorder columns; each column is a header + a source.
  • Sources: any field from the catalog (entry date, account number/name, debit, credit, signed amount, D/C flag, memo, lease name/ref, location, classification, line description…), a constant value (e.g. a subsidiary code), or a template string with placeholders like LEASE-{lease.contractRef}-{entry.period}.
  • Choose the file type, delimiter, quoting, header row, date format, amount handling (debit/credit columns, one signed column, or absolute + D/C flag), and row grain (one row per line vs one summarized row per entry).
  • A live preview renders sample rows as you edit; start from a copy of any built-in format, then mark one as your org default.

Built-in formats are just seeded templates in the same rendering pipeline — one engine, no special cases. Exported batches are stored and re-downloadable, and the period is marked exported.

API & MCP server

ROU Asset has a read-only REST API for pulling data out of the app — primarily journal entries, plus leases to join against. It's built for GL syncs, BI/warehouse loads, and letting an AI assistant read your entries through the bundled MCP server.

Authentication

  1. In Settings → API Keys (admin only), create a key and copy it — the full key is shown once and only its hash is stored.
  2. Send it on every request as Authorization: Bearer <key>. Keys are scoped to your organization; a request only ever sees that org's data.
  3. Revoke a key anytime from the same screen. Verify a key with GET /api/v1/ping.
The API is read-only — it never creates, approves, or exports. It reflects what's already generated and approved in the app. The exact base URL for your deployment is shown on the API Keys page (e.g. https://your-host/api/v1).

Endpoints

  • GET /api/v1/journal-entries — list entries with their balanced lines, newest first. Query params: period (YYYY-MM), status (draft/approved/exported), lease_id, limit (1–500, default 100), offset.
  • GET /api/v1/journal-entries/{id} — a single entry with its lines.
  • GET /api/v1/leases — the org's leases (id, name, status, classification, dates) to join against entries.
  • GET /api/v1/ping — confirm the key works; returns the org id it maps to.

Example

curl -s "https://your-host/api/v1/journal-entries?period=2026-07&status=approved" \
  -H "Authorization: Bearer rou_live_…"

Response (money kept as strings for exact precision):

{
  "data": [
    {
      "id": "…", "entry_date": "2026-07-01", "period": "2026-07",
      "source": "schedule_row", "status": "approved", "lease_id": "…",
      "memo": "Period 6", "export_batch_id": null,
      "lines": [
        { "account_slot": "interest_expense", "account_number": "8100",
          "account_name": "Interest Expense", "debit": "2344.76", "credit": "0.00",
          "description": "Interest" },
        { "account_slot": "lease_liability", "debit": "7655.24", "credit": "0.00", … },
        { "account_slot": "lease_clearing",  "debit": "0.00", "credit": "10000.00", … }
      ]
    }
  ],
  "pagination": { "limit": 100, "offset": 0, "total": 42, "has_more": false }
}

Errors come back as { "error": { "code", "message" } } with a matching HTTP status (401 for a missing/invalid key, 404 for an unknown entry). Responses send permissive CORS so browser clients work too.

MCP server

The repo ships an MCP server at packages/mcp/server.mjs so an AI assistant (Claude Desktop, Claude Code) can read your entries directly. It's a zero-dependency wrapper over the API and exposes four tools: rouasset_list_journal_entries, rouasset_get_journal_entry, rouasset_list_leases, and rouasset_ping.

  1. Create an API key (above).
  2. Point your MCP client's config at the server with your key:
{
  "mcpServers": {
    "rouasset": {
      "command": "node",
      "args": ["/absolute/path/to/rouasset/packages/mcp/server.mjs"],
      "env": {
        "ROUASSET_API_URL": "https://your-host",
        "ROUASSET_API_KEY": "rou_live_…"
      }
    }
  }
}

For Claude Code: claude mcp add rouasset -e ROUASSET_API_URL=https://your-host -e ROUASSET_API_KEY=rou_live_… -- node /absolute/path/to/packages/mcp/server.mjs. Then ask it things like “pull July's approved journal entries from ROU Asset.”

Roles, security & audit

  • Multi-tenant: every record is scoped to your organization; the data layer requires the org id on every query.
  • Roles enforced server-side: admin (owner) and member — never trusted from the client.
  • Immutable history: posted schedule rows and journal entries are never edited; lifecycle events supersede and regenerate. Deletes are soft.
  • Traceable: every journal line → schedule row → measurement → lease inputs, foreign-keyed all the way down.
  • Audited: every mutation writes an audit-log entry with actor and before/after snapshots.
Questions the docs don't answer? Everything in the app has a matching flow above — and the pricing page covers plans and billing.
Documentation | ROU Asset