Accounting Model and Double Entry
Understand balanced journals, accounts, ledgers, and business resources
API clients create and update typed business resources. VRPlatform translates their financial consequences into balanced journals and then projects those journals into reports and statements.
Reservation, transaction, or fee -> posting buckets -> journal entries -> reports
Owner statement -> journal selection and attachment -> frozen statement projection
Bank record -> reconciliation relationship -> matched financial resourceStatements and bank records do not replace the journal. A statement selects and attaches existing eligible entries; a bank record reconciles cash activity to a financial resource.
Accounts
Accounts identify where amounts post. Type, category, system assignment, status, and banking configuration give an account meaning beyond its name. Assignments identify roles such as receivable, deferred revenue, payout, opening balance, tax, fee, or balancing accounts.
System assignments are tenant-wide roles. The same assignment cannot be active on several accounts. Treat an account's returned assignments as configuration, not as labels that a client may duplicate or infer from its name.
Reference Accounts
An account with type=nonPosting is a reference account. It preserves an
external amount or classification for formulas and source detail without
changing the live general ledger, guest receivable, or owner-statement totals.
Related financial lines can be returned with type=referenceAccount; render
them as context and do not add them back into posting totals.
Balanced Events
Every accounting event produces entries that net to zero in its posting bucket, the group of entries posted together for one event and date. Each entry carries a signed cent amount under the debit/credit convention, plus the dimensions that determine how it appears in reports.
Important dimensions include:
- account, currency, ledger, and journal date (
txnAt); - accounting party (
ownerormanager); - listing and effective parent-listing context;
- ownership period when owner-side attribution applies;
- source resource and source-line identity; and
- active status, trigger, and other returned provenance references.
Do not collapse those dimensions into one client-side category. For example, two entries with the same account and date can still belong to different ownership periods or source lines.
Ledgers
Live general-ledger entries drive current accounting. Historical-ledger imports preserve pre-go-live detail or statements without changing live post-go-live balances. Opening balances bridge the final source position into live accounting through dedicated workflows.
Trust, Operating, and Combined Ledgers
Live entries post to one of two ledgers. The trust ledger holds client and
owner funds the manager holds in trust: reservation revenue, owner balances,
and payouts. The operating ledger records the manager's own operating-expense
accounting, such as expenses paid from the manager's operating bank accounts.
An OPEX team is a team with the operations-accounting feature enabled; it runs
operating-expense accounting alongside trust accounting, and its manager-side
activity can post to the operating ledger. Teams without OPEX post everything
to the trust ledger. Reports accept an optional ledger filter (trust or
operating); omitting it returns the combined view across both ledgers.
Trust and operating are independently balanced ledgers. When one business event
affects both, VRPlatform uses the account assigned as dueToFromTrust to create
the balancing relationship inside each ledger. A combined report adds the two
balanced views; clients must not remove or manually eliminate these system
entries.
Dated Money Flow
One reservation can participate in several events with different accounting dates:
| Event | Date meaning |
|---|---|
| Booking creation | Operational source identity; not necessarily an accounting date |
| Guest charge | When the guest or channel receivable arises |
| Revenue recognition | When reservation income becomes recognized revenue |
| Cash receipt or refund | When cash and receivable or deferred revenue change |
| Statement attachment | Which owner period consumes eligible journal activity |
| Payout | The later transaction date on which owner funds are paid |
| Bank reconciliation | When a bank record is matched to the cash-side resource |
An advance deposit is cash received before its related revenue is recognized.
It normally remains a liability until recognition; accounts receivable instead
represents an amount still owed. Preserve the source relationships, but use
each returned journal's txnAt for accounting and as-of reporting.
Client Boundary
Render returned financial lines, totals, posting dates, and issues. Do not reimplement journal construction or use a client-computed balance to override the API.
See Revenue recognition, Banking, Reservations, Transactions, and Reports. For a finance-led overview, read the VRTrust General Ledger white paper.
