VRPlatformVRPlatform

Owner Statements

Statement lifecycle, layouts, sections, publishing, and owner payouts

Owner Statements

Overview

Owner statements are periodic financial reports for property owners. They summarize revenue, expenses, management fees, and payouts for a specific time period. Statements are generated per ownership period, showing each owner their share of the property's financial activity.

Key uses:

  • Monthly/periodic reporting to property owners
  • Tracking owner balances and payouts
  • Providing transparent breakdown of income and expenses
  • Generating owner distributions

Key Concepts

Statement Lifecycle

Statements progress through these statuses:

StatusDescriptionData Locked?
draftPreview state, not persistedNo
inReviewSaved, ready for reviewYes
voidCanceled/supersededYes
publishedFinalized and sent to ownerYes

Important: Once a statement is saved (any status except draft), the underlying financial data becomes locked. This prevents modifications that would cause the statement totals to become inaccurate.

Financials Structure

Each statement calculates these financial totals:

FieldDescription
balanceStartCarry-forward balance from previous statement
netRevenueTotal revenue minus management fees
expensesProperty expenses allocated to owner
netIncomeRevenue minus expenses
transfersOwner payouts made
balanceEndRemaining balance owed to owner

Balance calculation:

balanceEnd = balanceStart + netIncome - transfers

Statement Rows

Statement content is organized into rows of three types:

Reservation rows - Revenue from guest bookings:

  • Guest name, dates, confirmation code
  • Rental income, fees, taxes
  • Payment status (paid, unpaid, underpaid)

Transaction rows - Expenses and deposits:

  • Repairs, utilities, supplies
  • Deposits received
  • Any manual adjustments

Summary rows - Section totals:

  • Subtotals by category
  • Grand totals

Sections

Rows are grouped into sections defined by the statement layout:

  • Revenue: Rental income by reservation
  • Fees: Management fees, channel fees, etc.
  • Expenses: Repairs, maintenance, utilities
  • Transfers: Owner payouts
  • Summary: Net income and ending balance

Ownership Period Matching

Statements are generated for specific ownership periods. Each statement shows:

  • The property (listing)
  • The ownership period with owner split percentages
  • Financial data for that time range

When a property has multiple owners (e.g., 60/40 split), each owner's statement reflects their percentage of revenue and expenses.

Transfers (Owner Payouts)

Transfers are payments made to owners. Two key concepts:

Triggered from statement: When you create a payout from a specific statement, that statement's transfers array shows the payout details.

Attached to statement: The payout amount is counted in the statement's financials.transfers total for balance calculations.

Example: Create a $5,000 payout from the September statement:

  • September transfers array shows the $5,000 payout
  • September financials.transfers = $5,000
  • September balanceEnd decreases by $5,000

View Modes

Statements support two viewing perspectives:

ModeDescription
ownerWhat the owner sees - may hide certain details
managerFull details including internal notes

Layout sections can be configured to show in one or both views.

Common Scenarios

Generating a Monthly Statement

POST /owner-statements
{
  "ownershipPeriodId": "period-123",
  "startAt": "2024-06-01",
  "endAt": "2024-07-01",
  "layoutId": "layout-456",
  "status": "draft"
}

Response includes:

  • Calculated financials (revenue, expenses, fees)
  • All reservation and transaction rows
  • Starting balance from previous statement
  • Issues/warnings if any

Publishing a Statement

PUT /owner-statements/stmt-789
{
  "status": "published"
}

Publishing:

  • Locks all underlying data permanently
  • Triggers owner notification (if enabled)
  • Makes the statement available in owner portal

Creating an Owner Payout

After reviewing a statement with positive balance:

POST /transactions
{
  "type": "transfer",
  "date": "2024-06-30",
  "description": "June 2024 Owner Payout",
  "ownerStatementId": "stmt-789",
  "lines": [
    {
      "accountId": "account-owner-payout",
      "contactId": "owner-123",
      "amount": 150000,
      "description": "June distribution"
    }
  ]
}

API Endpoints

MethodEndpointDescription
GET/owner-statementsList statements with filters
GET/owner-statements/{id}Get statement details
POST/owner-statementsGenerate a statement
PUT/owner-statements/{id}Update statement status
DELETE/owner-statements/{id}Delete a statement (if not locked)

Filtering Statements

GET /owner-statements?ownershipPeriodId=period-123&status=published&year=2024

Response Structure

{
  "id": "stmt-123",
  "status": "published",
  "uniqueRef": "2024-06-ABC",
  "startAt": "2024-06-01",
  "endAt": "2024-07-01",
  "currency": "USD",
  "listing": {
    "id": "listing-456",
    "name": "Beach House",
    "uniqueRef": "BH-001"
  },
  "ownership": {
    "id": "period-789",
    "startAt": "2024-01-01",
    "endAt": null,
    "members": [
      {
        "id": "member-1",
        "contactId": "owner-abc",
        "split": 60
      },
      {
        "id": "member-2",
        "contactId": "owner-def",
        "split": 40
      }
    ]
  },
  "financials": {
    "balanceStart": 0,
    "netRevenue": 425000,
    "expenses": 25000,
    "netIncome": 400000,
    "transfers": 350000,
    "balanceEnd": 50000
  },
  "transfers": [
    {
      "id": "txn-transfer-1",
      "date": "2024-06-28",
      "total": 350000,
      "totalFormatted": "$3,500.00"
    }
  ],
  "layout": {
    "id": "layout-standard",
    "name": "Standard Owner Statement"
  },
  "rows": [
    {
      "type": "reservation",
      "section": "revenue",
      "total": 65000,
      "source": {
        "id": "res-123",
        "confirmationCode": "ABC123",
        "guestName": "John Smith",
        "checkIn": "2024-06-01",
        "checkOut": "2024-06-05",
        "nights": 4
      },
      "columns": [
        {"name": "guest", "text": "John Smith", "type": "text"},
        {"name": "dates", "text": "Jun 1-5", "type": "text"},
        {"name": "total", "text": "$650.00", "type": "currency", "value": 65000}
      ],
      "issues": []
    }
  ],
  "issues": []
}

Validation & Issues

The issues array indicates potential problems:

CodeSeverityDescription
emptyJournalEntryAccountIdserrorEntries missing account assignments
netRevenueLayoutMismatcherrorLayout calculation doesn't match
listingInactiveerrorProperty is inactive
balanceMismatch_startwarningStarting balance differs from previous end
balanceMismatch_endwarningCalculated end balance differs
unpaidReservationswarningReservations with outstanding payments
previousMonthJournalEntrieswarningEntries from prior periods included

Locking Rules

Owner statements are subject to locking:

ConditionBlocked Operations
Statement exists (any status)Underlying reservations, transactions, and fees locked
Statement attached to entriesCannot delete statement

To modify locked data: Delete the statement first (if allowed), make changes, then regenerate.

On this page