Managing Bookings
Complete setup step 13 Listings before step 14 — create or import reservations here after Getting Started — Recommended Setup Sequence steps 1–12. First reservation workflow: Processing a New Booking. After step 15 Tenants, run Onboarding a New Property — Step 7. Lifecycle vocabulary: Booking Lifecycle. Workflow pairing: Modules — Setup sequence after go-live.
Start with Understanding the Bookings List and Filtering and Searching Bookings (Other filters for segment scoping), then open The Timeline View or drill into The Booking Detail View. New reservations: Creating a New Booking. Guide subsection map: Bookings guide subsection index (list, sidebar, and lifecycle sections + Related subsections). Non-linear operator habits (Lockout catch-up, Pending manual receipt approval, Notification row-click navigation, Payment alert to receivables triage, Confirmation alert triage, Finance debt receivables triage, Finance Income status drill-down, Cash flow forecast drill-down, Reject/revert mistaken receipts, Partly collected security deposit, Wrong tenant on a booking, Cancel Booking vs Delete Booking, Portfolio retirement decisions, Portfolio segmentation by tenant category) have matching Related subsections below. Full pairing matrix: Bookings section cross-reference · Modules — Module cross-reference.
The Bookings module is your operational command center for managing all tenant reservations.
Open the Bookings module directly at platform.vivin.app/bookings (list view) or platform.vivin.app/bookings/timeline (timeline view). See Deep Links for all management frontend routes.
Enrich tenant context in Tenants; settle charges in Finance; coordinate arrivals in Operations; check overlap on Timeline or Sales → Multicalendar. Tenant Communication threads are distinct from landlord AI Chat — landlord_chat token spend is on AI usage API (GET /ai-usage/summary), not tenant WhatsApp. When a payment overdue alert row-clicks here, continue with Handling a Late Payment — Step 1 — landing-zone pairing: Notification row-click navigation, Payment alert to receivables triage, Confirmation alert triage. Section-to-doc pairing: Bookings section cross-reference. Hub tab matrix: Modules — Module cross-reference.
This is where you view, create, and manage every booking — from initial enquiry and booking confirmation, to check-in, stay, and check-out. It handles the full booking lifecycle with automatic tenant record creation, contract generation with digital signatures, and multi-channel booking import.

Understanding the Bookings List
The list pairs with Tenants module and Booking Lifecycle — row-click from payment overdue alerts continues with Handling a Late Payment — Step 1. Full pairing matrix: Bookings section cross-reference.
The Bookings module opens on a filterable table view. Each row represents one booking and shows:
- Tenant Name and contact information
- Property and Unit assigned to the booking
- Status (Upcoming, Ongoing, Ended, Canceled)
- Contract Start and End Dates
- Rent Value
- Platform (where the booking originated)
- Contract Signed indicator (hovering shows the exact date the contract was signed)
- Outstanding Balance (if the tenant has unpaid charges) — the same unpaid lines that can trigger payment overdue rows on
/notifications(row-click opens this sidebar; see Handling a Late Payment — Step 1)
Clicking any row opens the Booking Detail sidebar, where you can access all tabs for that booking.
Loading more rows (list view)
The table does not download your entire account in one request. Vivin loads the filtered portfolio in chunks from GET /bookings/portfolio:
| Phase | Behaviour |
|---|---|
| First paint | Up to 20 rows for the active filters, search, status card, platform cards, Sort By, and Other filters. |
| Scroll | When you scroll near the bottom of the main workspace, the next chunk (5 rows) loads automatically. A short skeleton strip may appear while the request is in flight. |
| Done | Loading stops when every row that matches the server-side filter has been fetched. There is no End of list footer on this table (unlike Listings, Tenants, or Notifications). |
Load failures — When the first GET /bookings/portfolio request fails, the list view shows a red inline alert card — Failed to load bookings. Please try again. — with optional server detail and Retry instead of an empty table or status cards. This is distinct from filters that match zero bookings. See FAQ — Directory list load failures and Glossary — Directory list load failures.

Status card counts (All, Ongoing, Upcoming, and so on) come from portfolio metadata for your current filter set — they reflect the full matching population, not only the rows already visible in the table.
The Timeline view uses a separate, listing-based loading model — see Loading listing rows (timeline view) and Timeline load failures below.

Filtering and Searching Bookings
Other filters tenant category pairs with Finance — Tenant category filter and Tenants — Tenant category filter — Portfolio KPI review — Step 6. Full pairing matrix: Bookings section cross-reference.
The module includes a comprehensive set of filters to help you locate specific reservations quickly.
Search Bar
The Search bar filters the portfolio server-side (accent-insensitive substring match after you pause typing). The API evaluates these fields together — a row appears when any column matches:
| Field | What is matched |
|---|---|
| Tenant name | First name, last name, and concatenated full name (for example Tim Trompa matches across both columns) |
| Tenant email / phone | Contact fields from the tenant profile |
| Unit internal name | Listing label (for example AA-11-5D-R2) |
| Property internal name / address | Building label and street when the booking is tied to a listing |
| Source platform | Integration label (Direct, Airbnb, Uniplaces, and similar) |
| Tenant IBAN | IBAN on the tenant profile or denormalised on the booking |
| Internal Notes text | Concatenated text from booking Internal Notes comments |
Booking UUIDs, sequential display ids, and individual Payment plan line labels are not in this haystack. Use status cards, Other filters, or a direct /bookings/list/:id link when you already know the reservation id.
Single-character queries are ignored (the server treats them as “no search”) so accidental one-letter input does not scan the whole portfolio. Use at least two characters for meaningful narrowing.
When a search term matches multiple fields on the same booking, Vivin ranks results so unit internal name matches appear first, then tenant name or email, then rows that matched only on other columns (property, platform, IBAN, internal notes, and similar). The list order therefore surfaces the reservation you meant when you paste a room code ahead of unrelated tenant-name hits.

Unit search ranking capture refreshed 2026-06-12 00:04 UTC (VIVIN_DOCS_UNIT_SEARCH=AA-11-5D-R6 npx tsx tools/capture-bookings-search-unit-rank-screenshot.ts). See Glossary — Directory search ranking for how Bookings differs from Listings and Tenants.
Bookmarkable search (?q=)
The toolbar Search field hydrates from ?q= when you open Bookings with a query in the URL — for example platform.vivin.app/bookings?q=smith. Use this for bookmarks, hand-offs, or links from external tools.
| Entry point | Behaviour |
|---|---|
| Direct link / bookmark | Open /bookings?q=… — the toolbar Search is pre-filled on load; browser back and forward keep the term in sync |
| Toolbar Search on Bookings | Filters the list in place; the URL is not updated as you type (unlike Tenants, which syncs q after a short debounce) |

Status Filter Cards
Click any status card to instantly filter the list:
| UI Label | Product Value (bookingStatus) | Description |
|---|---|---|
| All | n/a | Every booking regardless of status |
| Upcoming | upcoming | Reservations that have not yet started |
| Ongoing | current | Active reservations with tenants currently in residence |
| Ended | ended | Completed reservations |
| Canceled | canceled | Reservations terminated before completion |
The status cards use the same pill styling as row badges (teal All, green Ongoing, aqua Upcoming, grey Ended, red Canceled). Counts on each card reflect your other filters (search, property, platform, and Other filters) but not the status card you are selecting.



For how computed lifecycle values map to these labels, see Booking Lifecycle.
Platform Filter Cards
Platform cards filter by booking source (e.g., Direct, Airbnb, Booking.com, Uniplaces, Inlife, Idealista, Coliving, Channex, Edu Portugal, Erasmus Life Lisboa). Only platforms you have connected in Settings > Integrations appear as filter options. Channex and Edu Portugal affect bookings and Finance filters but do not appear as columns on Sales > Channels.
Property and category filters
- Select properties — multi-select toolbar control (desktop). Options come from the portfolio filter metadata returned with
GET /bookings/portfolio(distinct property internal names for your account), not the pagedGET /properties/searchpicker used on Finance → Other filters → Property, Operations → Other filters, Utilities → Select properties, and Sales → Pricing. Open the menu to tick one or more buildings from the full metadata list (no server search field — the account’s distinct property names load with portfolio data). The menu stays open while you add selections; dismiss it when finished. Selected properties appear as removable chips under the toolbar (same chip row as category filters). Leave the control empty to include every property. Changing property scope resets infinite scroll from the first chunk and updates status-card counts for the narrowed set.


Property filter captures refreshed 2026-06-13 04:12 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_PROPERTY_SEARCH=AA-11-5D npx tsx tools/capture-bookings-property-filter-screenshot.ts).
- Select categories dropdown — filter by booking tags configured under Settings > Categories > Bookings. The menu lists every tag in your account plus a synthetic No category row at the bottom.
| Selection | What appears in the list |
|---|---|
| One or more named tags | Bookings whose bookingTags include at least one of the selected labels (OR within the tag subset). |
| No category only | Bookings with no booking tags assigned (empty tag list). |
| Named tags + No category | Bookings that match any selected tag or have no tags (useful when cleaning up segmentation before you standardize labels). |
No category is resolved server-side: the portfolio query sends selected tag codes in tags and, when No category is checked, a noCategory flag that is OR-combined with those tags — so uncategorized rows are not dropped when you mix named tags with the empty case. The same rule applies to infinite scroll and Export (the download reflects the full filtered population, not only rows already loaded in the table).
Active category choices show as removable chips under the toolbar (the chip label reads No category for the uncategorized slice). Combine them with status cards, platform cards, property, search, and Other filters as needed.

When you filter by a named tag (for example Student), the chip shows the label from this catalog and the list narrows to bookings whose bookingTags include at least one selected tag (OR logic). Scoping Select properties to a clean building (for example AA-11-5D) keeps table rows publication-ready in docs captures.

Booking category filter captures refreshed 2026-06-13 14:45 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_PROPERTY_SEARCH=AA-11-5D VIVIN_DOCS_BOOKING_TAG=Student npx tsx tools/capture-bookings-category-filter-screenshots.ts). No category uses the same AA-11-5D property scope and main-region clone check as the named-tag captures so sidebar metadata does not block the PNG.
Sort By
The table’s default order is Unit Name ascending (click the Unit Name column header to reverse). The Sort By dropdown offers additional server-backed sorts:
- Debt (highest to lowest) — useful for collections follow-up
- Creation Date
- Move-in Date
- Contract Start Date
- Move-out Date
Changing the active sort (dropdown or a column header such as Created) also refreshes the portfolio filter catalog returned with GET /bookings/portfolio — see Select owners when the owner list looks empty on a fresh load.
Other filters
Click Filters in the toolbar to open the Other filters side drawer. The header shows how many drawer filters are active (for example Balance: Debt and Source platform: Direct in the capture below). Choices apply to the current list immediately and combine with status cards, platform cards, property, and search. Advanced criteria such as Source platform also appear as removable pills above the table when set; other drawer-only choices (for example Balance) update the list and the drawer badge count but do not add separate pills. Use Clear all on the toolbar to reset pill-backed filters without reopening the drawer.
The drawer is grouped into four sections:
Tenant
- Nationality — multi-select tenant nationalities (flag labels). The list includes No Nationality for bookings whose tenant profile has no ISO country code on file. You can combine No Nationality with specific countries (OR logic): the server sends
nationalitiesplus anoNationalityflag when needed, so pagination and Export include every row that matches any selected country or has a blank nationality field — not only the pages you have scrolled through.

- Tenant category — multi-select tenant categories assigned on the tenant profile (Tenant Info on Tenants). The menu lists every segment in your account plus No tenant category for bookings whose tenant has no category on file. You can combine named categories with No tenant category (OR logic): the server sends
tenantCategoryIdsplus anoTenantCategoryflag when needed, so pagination and Export include every row that matches any selected segment or has no category — not only the pages you have scrolled through. Scoping Select properties to a clean building (for example AA-11-5D) keeps table rows publication-ready in docs captures.

Tenant category filter capture refreshed 2026-06-27 23:05 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_PROPERTY_SEARCH=AA-11-5D VIVIN_DOCS_TENANT_CATEGORY_SEARCH="Teste Jorge" npx tsx tools/capture-bookings-tenants-tenant-category-filter-screenshots.ts).
- IBAN — All, With, or Without a tenant bank IBAN on file
- Fiscal Id — All, With, or Without a fiscal / tax ID on file
Booking
- Contract status — All, Signed, or Not signed
- Discounts — All, With, or Without discounts on the booking
- Deposit status — multi-select operational lifecycle values (Not paid, Partial paid, Fully paid, Disputed, Ready to refund, Refunded); empty = all statuses. Filters by
depositStatus(any-of within your selection) — same enum as the lifecycle pill on the Deposit tab and Finance → Deposits rows. See Glossary — Deposit lifecycle status, Finance — Deposit status filter, and FAQ — Partly collected security deposit (deposit shortfall triage).

Deposit status filter capture added 2026-07-09 00:08 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-deposit-status-filter-screenshots.ts).
- Comments — All, With, or Without internal comments on the booking
- Balance — All, Debt, or Overpayment (outstanding balance direction)
- Other items categories — multi-select of Others Items Categories used on extra charges for matching bookings (shown only when your account has at least one category configured)
Advanced
- Source platform — multi-select booking channel (same channels as platform cards and Finance Select platforms; see Glossary — Source platform)
- Number of rooms — optional min / max integer fields on how many units (listings) are registered under each property (#2151). When set, a removable toolbar pill shows the range (for example
3 – 8). Vivin rejects min greater than max with an inline validation message. The filter is sent toGET /bookings/portfolioasminRooms/maxRoomsand applies to infinite scroll and Export — useful for triaging coliving buildings vs single-unit properties. - Booking created — From / To on the booking creation date
- Move-in / contract start (or Contract start when the account uses contract dates) — date range on move-in or contract start
- Move-out / contract end (or Contract end when the account uses contract dates) — date range on move-out or contract end
Property & Listing
- Select owners — multi-select property owners (from the portfolio filter catalog in
meta.filterOptions.owners) to limit bookings to listings tied to those owners. The catalog is account-wide — it is not recomputed from only the rows already loaded in the table. Owner names match registered property owners. Combine with toolbar Select properties or drawer date ranges as needed. Finance uses the same owner vocabulary but narrows the Property picker server-side when owners are selected first — see Finance → Other filters → Select owners.
On the default Unit Name sort, Select owners can show No options found even when Settings → Owners lists owners on your account. The portfolio response on that sort path does not always populate meta.filterOptions.owners (the dedicated catalog at GET /bookings/portfolio/filter-options still returns the full owner list). Workaround: click the Created column header once, or pick Creation Date from Sort By, then reopen Other filters — the owner multi-select should list every registered owner. You can switch back to Unit Name after selecting owners; the filter stays applied.


Select owners (populated) capture refreshed 2026-06-20 20:08 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_OWNER_SEARCH="QA Owner Test" npx tsx tools/capture-bookings-other-filters-owner-screenshot.ts). Empty catalog capture refreshed 2026-06-19 09:15 UTC (npx tsx tools/capture-bookings-other-filters-select-owners-empty-screenshot.ts). The populated capture script sorts by Created first so the portfolio filter catalog includes owners (same vocabulary as GET /bookings/portfolio/filter-options).

Exporting the list (CSV or Excel)
On the list view (not Timeline), the toolbar includes an Export control next to Filters. Open it to download every booking that matches your current filters (search, status cards, platform cards, Other filters, and Sort By) — Vivin fetches the full filtered portfolio for the export even when the table has only loaded the first chunks. Narrow filters first when you need a smaller spreadsheet; you do not need to scroll the list to the end before exporting.
| Format | File name pattern | Notes |
|---|---|---|
| CSV | vivin-bookings-YYYY-MM-DD.csv | UTF-8 with BOM for Excel compatibility |
| Excel | vivin-bookings-YYYY-MM-DD.xlsx | Single Bookings worksheet |
Columns mirror the wide management export used for operational reporting (tenant and listing identifiers, contract and move dates, balances, deposit and fee fields, integration source, tags, comments, and JSON-stringified nested objects such as tenant and listing where the row carries rich data). The flat tenantCategory column carries the tenant segment name from Tenant Info (empty when the tenant has no category) — pair with Other filters → Tenant category before export when you need a segment-scoped spreadsheet (#2336). Use Export after you set Other filters or search so finance and collections teams receive the same subset they reviewed in the UI.

If the export request fails (network error, timeout, or server error while assembling the full filtered portfolio), Vivin shows a red inline alert directly under the toolbar instead of silently doing nothing — adjust filters and try Export again, or retry when connectivity improves. Other directory modules use the same toast pattern; see Glossary — Export and download failures.
Export is available only on the table list view. Switch back from Timeline when you need a spreadsheet download.
The Timeline View
Timeline pairs with Sales — Multicalendar and Audit — Manual Blocks — reconcile suppressed nights with Manual block hygiene. Full pairing matrix: Bookings section cross-reference.
Click Timeline in the view toggle (upper right) to switch from the table list to a Gantt-style chart at /bookings/timeline. Each row is a unit (listing); coloured bars show bookings across time. The same search, property, Select categories (booking tags), and Other filters toolbar as the list view still apply — the listing axis and bars refetch when you change tags or property scope. Export is hidden on Timeline (switch back to List for CSV/Excel).


Timeline category filter captures refreshed 2026-06-13 15:05 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_PROPERTY_SEARCH=AA-11-5D VIVIN_DOCS_BOOKING_TAG=Student npx tsx tools/capture-bookings-category-filter-screenshots.ts). No category uses the same property scope and publication-clean checks as the list view before switching to Timeline.
The chart’s horizontal range covers roughly six months in the past through eighteen months ahead (bookings and blocks outside that window are not drawn on the axis).
Loading listing rows (timeline view)
Timeline does not download every listing and booking in one request. Vivin loads in two coordinated steps:
- Listing axis (rows) — which units appear as rows for your current filters and date window.
- With Only bookings on: listings that have at least one non-cancelled booking overlapping the window (cancelled stays never draw as bars, so they are excluded from this booked axis).
- With Only bookings off (default): every in-scope listing, including vacant units with no reservation bars (
includeVacanton the server) — so the first view shows blocks and vacant units without clearing the pill.
- Booking bars — reservation spans for the listing ids already on the axis (fetched in server-sized chunks by
listingIds, not by re-sending property-name gates — so bars stay aligned when you change Select properties or when a property was renamed).
| Phase | Behaviour |
|---|---|
| First paint | Up to 50 listing rows for the active filters, search, status card (except Canceled — see below), platform cards, Sort By, and Other filters. |
| Initial wait | A full-chart skeleton (shimmer unit labels and placeholder bars) stays visible until both the first listing page and its booking bars have settled — avoids empty lanes while bars load. |
| Listing axis only | When booking bars for the first page have already painted but the listing column is still fetching the next server page, you may see shimmer rows on the left axis while real bars remain on the chart — distinct from the full-chart skeleton above. |
| Scroll down | When you scroll the timeline body near the bottom, the next chunk of listing rows loads automatically. A small spinner may appear at the bottom while the next page is in flight. |
| Done | Loading stops when every listing that matches the server-side filter for the window has been fetched. There is no End of list footer (same pattern as the list view). |



Timeline load-more spinner capture refreshed 2026-06-21 00:12 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-audit-bookings-enrichment-screenshots.ts).
Timeline load failures
Timeline runs two coordinated API calls: the listing axis (GET /bookings/timeline-listings) and booking bars for those rows (GET /bookings/portfolio scoped to loaded listing ids). When either fetch fails and there is nothing to draw yet, Vivin replaces the chart with a centered error panel — Couldn't load the timeline bookings. — optional server detail, and Retry that re-requests both the axis and the bars (#2310).
| Situation | What you see | Recovery |
|---|---|---|
| Axis or bars first-fetch fails (no rows/bars painted yet) | Centered red error panel in the chart area + Retry | Retry — or switch to List and use that view's Retry if you need the portfolio table |
| Successful fetch, zero matching listings | Empty chart lanes — not an error banner | Widen filters or clear Select properties / Other filters |
| Some bars already on screen when a refetch fails | Grid stays visible — no blocking error panel | Scroll or change filters to trigger a fresh fetch; partial data remains usable |
| Table list view failure (different toggle) | Failed to load bookings. Please try again. on the portfolio card | Loading more rows (list view) — distinct API path from Timeline |
Before #2310, a failed bars request could leave Timeline stuck on its skeleton forever; a failed axis request could show silent empty lanes with no Retry.

Timeline load-failure capture refreshed 2026-07-27 12:07 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-timeline-load-failure-screenshot.ts — blocks only GET /bookings/timeline-listings so the list-view portfolio query does not early-return the page).

Vertical scroll loads more unit rows when your portfolio is large. Horizontal scroll moves along the date axis (Day / Week / Month columns); it does not fetch additional listings by itself.
Day, Week, and Month scales
Above the date axis, use Day, Week, or Month to change how time is bucketed:
| Control | What you see |
|---|---|
| Day | One column per calendar day (default); best for turnover planning in the next few weeks. |
| Week | One column per ISO week; useful for medium-range occupancy. |
| Month | One column per calendar month; best for long-range portfolio scans. |


A vertical today marker separates past from future on each scale. Scroll the chart body horizontally; the date header stays aligned with the grid.
Bookings vs manual and channel blocks
Timeline defaults to Only bookings (toolbar toggle, timeline-only): checked means you see reservation bars only. Clear the toggle to also load unavailability blocks (manual blocks, Airbnb/Booking.com calendar holds, and similar) on the same rows — styled separately from stay bars (for example dashed Airbnb block / Booking.com block labels). For a portfolio-wide table of operator manual holds (filter, export, column sort), use Tools → Audit or the Manual block hygiene workflow — Timeline is for visual context on one Gantt, not bulk triage.

The Canceled status card is disabled on Timeline because canceled reservations are never drawn on the chart — the booked listing axis also excludes them, so a unit whose only stays in the window are cancelled does not appear as an empty row in Only bookings mode. Use the list view or remove other filters and open the booking from search when you need a canceled record.
Select properties on Timeline uses the same name-based chips as the list view and constrains the listing axis server-side. Changing property scope refetches rows and bars together (the chart no longer freezes on the skeleton when you narrow properties mid-load). With Only bookings off, the property dropdown widens to every visible (non-archived) property so you can scope to buildings whose units are entirely vacant — switching to the Timeline tab alone does not change dropdown options; only clearing Only bookings does.


Vacant-unit and widened property-dropdown captures refreshed 2026-06-17 03:10 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-timeline-vacant-units-screenshots.ts).
Open a booking from the chart
Click an ongoing or upcoming booking bar (green or teal styling) to open the same Booking detail sidebar as on the list. The URL updates to /bookings/timeline/<bookingId> so you can bookmark or share that timeline context.

Click a unit label on the left to open that listing in the Listings unit sidebar when your role allows.
This view is ideal for:
- Identifying gaps between bookings that could be filled
- Visualizing occupancy across your portfolio at a glance
- Planning turnovers by seeing back-to-back bookings side by side — especially same-day turnovers (departure and arrival on one calendar day); step-by-step: Managing a Check-in, Managing a Check-out, FAQ — How do I handle same-day turnovers?
- Spotting calendar blocks when Only bookings is off and channel/manual holds explain “missing” availability
The Booking Detail View
Sidebar tabs pair with Finance module, Payment Allocation, and Inbox — Communication tab — contract signing via Tenant Portal. Full pairing matrix: Bookings section cross-reference.
Clicking any booking row opens a sidebar showing all information about that booking.
Booking insights bar
Below the tenant name header, a collapsible insights strip summarizes financial health without opening Payment plan or Transactions. It is expanded by default; click the strip to collapse or expand it.
| Card / badge | Meaning |
|---|---|
| Paid to Date | Allocated payments recorded against scheduled charges to date |
| Due to Date | Scheduled charges that should have been collected by today |
| Contract Value | Total contract value excluding deposit (tooltip on hover) |
| Return of value | Shown when return-of-value adjustments exist on the booking |
| Contract — Not signed | Amber badge when the rental agreement is not signed yet |
| Overdue / Overpayment | Red or blue badge with the current financial balance when under- or over-paid |
| Next payment | Upcoming scheduled charge amount and due date (with days remaining or overdue) |
Use the insights bar for a quick collections check; confirm amounts and allocation in Contract Values or Transactions before operational action. Opening a row from Finance → Contract Values or Finance → Transactions can land on the matching tab with that payment or transaction row highlighted (see Finance — Cross-navigation from ledger rows).

The detail view is organized into tabs along the top of the sidebar (left to right):
| Tab | Purpose |
|---|---|
| Contract Info | Tenant, dates, rent, platform, contract upload, virtual IBAN |
| Payment Plan | Scheduled charges and due dates |
| Contract Values | How each charge amount was calculated |
| Transactions | Payments received and allocation |
| Deposit | Security deposit status, refund, and transfer |
| Internal Notes | Internal team thread with @mention notifications (sidebar label; docs anchor: comments-tab) |
| Communication | WhatsApp and email history with the tenant; reply on WhatsApp from the tab when chatbot is enabled |
| Tickets | Operations tickets linked to this booking (requires Operations module permission) |
| Files | Documents stored on the booking |
Contract Info tab
The first tab (Contract Info) displays the booking's core information:
- Tenant details (name, email, phone, nationality)
- Change tenant (reassign to another existing tenant — see below)
- Property and unit assignment
- Contract and occupancy dates
- Rent value and payment frequency
- Booking status and platform source
- Confirmation payments and Check-in payments (per-booking overrides — see below)
- Cleaning Fees requirement (Every Month vs one-time — see below)
- Admin fee, Cleaning fee, and Exit fee euro amounts when those fees are enabled for the account (see Booking-level fee amounts)
- Bills included — monthly utility ceiling copied from the property at create time; operators can override on an existing booking (see Bills included ceiling)
- Booking categories — multi-select chips from Settings > Categories
- Lease purpose — optional classification when the account enables it (see Lease purpose)
Changing contract dates and rent
Start date, Move in, Move out, End date, and Monthly rent on Contract Info → Booking information open dedicated modals when you are in edit mode (pencil on the section header). Inline fields on the card are read-only until you enter edit mode; date and rent rows use the pencil-on-row pattern to launch the modal for that value.
| Field | Modal title (English UI) | Typical use |
|---|---|---|
| Start date | Change contract start date | Shift the contractual span; optional Use check in date as contract start date mirrors move-in without regenerating the payment plan. |
| Move in | Change move-in date | Operational check-in; Update Payment Plan toggle (defaults from account preferences) controls whether scheduled rent lines are regenerated. |
| Move out | Change move-out date | Early or extended departure; supports Update Payment Plan and, when the plan updates, optional Rent value equal to current booking info or per-month rent entry (fixed vs varies). |
| End date | Change contract end date | Contractual end; optional Use check out date as contract end date mirrors move-out without impact in the payments plan. |
| Monthly rent | Change monthly rent | Set fixed monthly rent or varies with a Jan–Dec grid; saves independently of the main Update on the card. |
Already-invoiced months (rent floor) — The Change monthly rent modal includes an info banner: when you enter a new amount below what Finance has already invoiced for a given month, Vivin clamps that month's rent line to the invoiced total instead of saving a lower value or rejecting the whole change. The same invoiced floor applies when you edit individual rent lines on Contract Values (Edit amount — see Contract Values tab and bookings-detail-contract-values-invoiced-floor-edit-amount.png). To reduce invoiced rent in product, use Contract Values → Credit note (Manage credit notes) and issue from Finance → Transactions — see Glossary — Invoiced floor (rent) and FAQ — Lower rent below invoiced.
Contract-date change warnings (#1624) — After you shorten the contract span (for example move-in anticipation or an earlier move-out) with Update Payment Plan enabled, Vivin cannot rewrite already-invoiced charge lines. Any invoiced month that now falls outside the updated contract range stays on the ledger but may no longer match the new dates. On Contract Values and Payment plan, those stranded lines show an amber warning icon — hover for: The dates were changed, but already-invoiced amounts cannot be modified, so this line may be inconsistent. Reconcile with Finance (credit notes, manual adjustments, or support) before you treat the schedule as authoritative; the warning is informational, not a block on other row actions.



Contract-date stranded-line warnings (#1624) captured 2026-07-27 13:00 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_BOOKING_ID=2b4a7321-eb58-4b17-a0a4-c4e0646df82b npx tsx tools/capture-bookings-contract-date-stranded-warning-screenshot.ts — Payment Plan + Contract Values amber icons and hover tooltip).
Fixed rent on a variable unit
A unit can be configured as variable on Listings > Rent Value while an individual booking still stores fixed monthly rent. At create time (and when you inherit listing values on Add booking), Vivin inspects every contract month between Start date and End date — the same month boundaries used for rent generation. When each of those months has a configured rent in the unit's seasonal grid and every value is equal, the reservation is stored with isRentFixed = true and a single headline Monthly rent, even though the listing remains variable for future stays.
| What you see | Meaning |
|---|---|
| Contract Info → Monthly rent | One € headline; Change monthly rent opens with fixed selected. |
| Payment plan rent lines | Amounts match the common monthly value — unchanged from the per-month grid that would have applied. |
| Bookings list rent column / sort | Uses the fixed headline when isRentFixed is true. |
| Timeline bar label | May still show a seasonal breakdown when the booking is stored as variable; fixed bookings use the headline rent. |
If any contract month is missing from the unit's rentsPerMonth grid or the values differ, the booking stays variable with per-month rows. Operators can still switch fixed ↔ varies later via Change monthly rent.

Fixed-rent-on-variable-unit capture refreshed 2026-06-15 22:12 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_BOOKING_ID=0269f655-e5b7-454c-ab0a-a4d8f161414c npx tsx tools/capture-bookings-fixed-rent-variable-unit-screenshot.ts).
Legacy reservations created before this inference shipped were backfilled to the same rule when their stored per-month rows already shared one constant value — payment history and invoiced lines were not regenerated. Operators can still switch fixed ↔ variable later via Change monthly rent — invoiced-floor rules apply per FAQ — Lower rent below invoiced. See Glossary — Fixed Rent, Listings — Rent Value tab, Processing a New Booking — Step 3, and FAQ — Fixed rent on variable unit.
Contract cycle guards — For Monthly or Fortnightly contract cycles, Start date and End date modals validate day-of-month rules (for example monthly contracts require day 1 for start and the last day of the month for end). Pick a valid calendar date or use the operational-date checkbox when you only need alignment with check-in / check-out.
Integration bookings — When the booking came from a marketplace (Platform is set), date modals show an informational banner naming the integration. Calendar sync and partner rules still apply after you save; confirm outbound availability separately when you shorten stays.
Payment plan and Finance — Turning Update Payment Plan on for move-in or move-out changes regenerates rent and related scheduled lines. If regeneration conflicts with invoiced allocations, the API returns an error — resolve Finance records first (same pattern as fee amount edits). After a successful change, open Payment plan and check Contract Info → Timeline for logged date and rent events.
Provider platform payment
When the reservation was created through a partner with a platform-handled first payment, Booking information may show Provider platform payment (read-only in both view and edit mode). The amount is for reconciliation against the partner statement; it does not replace Payment plan or Finance Transactions for allocations in Vivin. While a non-rejected provider platform in-payment row still exists on the booking, Delete Booking is blocked (#2076) — Reject the payment on Transactions (or clear it via Assign to other booking when allowed) before you remove the reservation. See Delete Booking and Finance — Delete payment on the ledger.
Provider platform payment field + Delete Booking provider-platform guard toast (#2076) captured 2026-07-07 19:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL + tools/capture-bookings-provider-platform-delete-screenshots.ts on integration booking afa54ad5-945d-42a5-b470-5d8cab9aaad1). Reject-then-delete walkthrough MP4 added 2026-07-07 21:06 UTC (tools/record-bookings-provider-platform-reject-delete-flow-mp4.ts — same booking; payment rejected during capture, confirm dialog shown then cancelled). Last re-probe 2026-07-07 23:06 UTC: field PNG refreshed and guard-toast PNG re-verified on booking f029c02c-e803-47fb-b0c5-a0486371079a (pending provider_platform in-payment) via tools/capture-bookings-provider-platform-delete-screenshots.ts; toast bytes unchanged from the 19:15 UTC capture.



Change monthly rent modal (invoiced-floor banner #1738) refreshed 2026-06-12 19:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL dialog capture on local management frontend).


Booking-level fee amounts
When Account Settings > Fees has Admin fee, Cleaning fee, or Exit fee turned on, new bookings copy the property defaults from Listings — Contract Information. On an existing booking, operators can override each € amount on Contract Info → Booking information without changing property defaults for future reservations.
| Field | Visibility | Edit behaviour |
|---|---|---|
| Cleaning fee | Shown when the fee is on in Account Settings or this booking already stores a non-zero cleaning fee. | Enter edit mode (pencil on Booking information). Change the € input; use Cleaning Fees requirement on the same card for monthly vs one-time scheduling (see below). |
| Admin fee | Same rule — account toggle or non-zero value on the booking. | Edit the € amount in edit mode. Tiered property defaults from Per stay duration are resolved at booking create; this field is the stored amount for this reservation. |
| Exit fee | Same rule — account toggle or non-zero value on the booking. | Edit the € amount in edit mode. |
Each amount is a € input beside Deposit in edit mode. Changed fields highlight with an orange border until you Update. Labels follow your custom fee names when configured.
| Action | Payment plan behaviour |
|---|---|
| Raise a fee | Vivin syncs the matching scheduled line(s) to the new amount and may redistribute incoming payments across outstanding charges. |
| Lower a fee | Surplus non-invoiced allocation is freed and reapplied per your payment priority order. |
| Set a fee to €0 | Removes that fee from the payment plan for this booking (disables the charge without changing property defaults). |
Guards — Values must be ≥ 0. Canceled bookings cannot be updated. If a fee line is already invoiced, lowering the amount below what was invoiced fails — resolve Finance records first (same pattern as cleaning fees requirement edits).
After you Update, open Payment plan and confirm admin, cleaning, and exit lines match the new amounts. Check Contract Info → Timeline for logged fee-value changes. Changing property defaults in Listings does not retroactively change existing bookings (see Listings business rules).


Bills included ceiling
Each booking stores the Bills included ceiling (maximum monthly utility cost absorbed into rent) copied from the property wizard Step 3 at create time. Vivin uses this value with Utilities overage math — when a supplier bill exceeds the ceiling, tenants pay the difference on their payment plan.
| View | What you see |
|---|---|
| Read-only | Up to €… when a positive ceiling is stored; Not set when the value is 0 or empty (same as clearing the field). |
| Edit mode | Planned on Contract Info → Booking information (€ input beside platform and categories). Today the ceiling is read-only on existing bookings — set it at Add booking (when the property has bills included) or on the property wizard; the API accepts billsIncludedMaxValue on PUT /bookings/:id when your integration updates it directly. |

Bills-included read-only capture re-verified 2026-06-22 19:20 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-bills-included-screenshots.ts — auto-picked first publication-clean booking with billsIncludedMaxValue > 0; edit-mode PNG still skipped — no € input in Contract Info edit mode on develop).
Payment plan behaviour — Updating Bills included on an existing booking is inert for the payment plan: Vivin saves the new ceiling on the reservation record but does not regenerate scheduled lines or recalculate past utility overages. Use it when the contractual ceiling for this tenant differs from the property default without changing Listings for future bookings.
| Action | Payment plan / Utilities |
|---|---|
| Set or raise € | Stored on the booking only; future overage runs use the new ceiling. |
| Clear to €0 | Persists as 0 and displays Not set; overage math treats the booking as unlimited unless property-level ceilings still apply elsewhere. |
| Lower € | Same inert save — does not claw back overages already posted from a prior higher ceiling. |
Guards — Values must be ≥ 0. Canceled bookings cannot be updated. Negative amounts are rejected at save time.
Changing property defaults in Listings does not retroactively change existing bookings — override per reservation here when needed.
Cleaning fees requirement
Each booking stores the cleaning fee mode copied from the property at creation. On Contract Info, enter edit mode to change Cleaning Fees requirement for this reservation only:
| Option | Payment plan |
|---|---|
| Every Month | Monthly cleaning fee lines across the contract span (default when the field is empty / null). |
| One-Time Fee at Booking Confirmation | Single cleaning fee line at confirmation. |
| One-Time Fee at Move-in | Single cleaning fee line in the move-in month. |
The value is read-only until you click edit on the Booking information section (pencil icon in the section header). After you Update, open Payment plan and confirm cleaning fee rows match the new mode. If regeneration cannot remove surplus monthly rows because a cleaning allocation is already invoiced, the API returns an error — adjust Finance records first or keep the prior mode.


Confirmation payments and check-in payments
New bookings copy Confirmation payments and Check-in payments from the property’s Listings — Contract Information defaults at create time. On an existing reservation, operators can override either field on Contract Info → Booking information without changing property defaults for future bookings.
| Field | When charges are due (payment plan) |
|---|---|
| Confirmation payments | Lines flagged for booking confirmation — due on min(booking created, check-in date) so late-created reservations do not post confirmation charges after move-in. |
| Check-in payments | Lines flagged for move-in — due on the booking’s check-in date (deposit, first rent, last rent, and combinations). |
Read-only view shows the human-readable requirement (for example Deposit and first rent). When a value was never set on the booking, the UI may display property/account defaults — First rent for confirmation and Deposit and last rent for check-in are common fallbacks in the English UI.
Edit mode — click the pencil on Booking information, then use the two dropdowns:
| Option (English UI) | Typical meaning |
|---|---|
| Deposit | Security deposit only |
| First rent | First scheduled rent line |
| Last rent | Last scheduled rent line |
| Deposit and first rent | Deposit + first rent together |
| Deposit and last rent | Deposit + last rent together |
No double-charging — the product disables overlapping options across the two dropdowns. If Confirmation payments includes Deposit, Check-in payments cannot also require Deposit (same rule for First rent and Last rent). This mirrors the property wizard rule documented in Listings — Confirmation Payments.
Clear (×) — each dropdown has a clear control in edit mode. Clearing sends null for that requirement on this booking only, which can shift due dates when you Update.
Payment plan impact — saving a change calls the API to recompute due dates on requirement-flagged lines (persistDueDates). When the change moves first rent or last rent between confirmation and move-in buckets, Vivin may regenerate split rent lines on the payment plan. After Update:
- Open Payment plan and confirm deposit / rent due dates and requirement badges match the new split.
- Check Contract Info → Timeline for Move-in requirements or Booking confirmation requirements log lines.
Guards — Canceled bookings cannot be updated. If regeneration conflicts with invoiced allocations, resolve Finance records first (same pattern as cleaning fees requirement). Change unit stays disabled while confirmation payments are still outstanding on the booking.
See also Processing a new booking for the create-time flow and Payment allocation concepts for how confirmation vs move-in flags affect collections.



Dual pricing (local rent cap)
When the account has dual pricing enabled, the unit had a Local Rent Cap at booking create, and an Others category was configured, the booking stores useDualPricingRentSplit. On Contract Info → Booking information, you see Local Rent Cap (read-only until you enter edit mode on supported bookings).
| Surface | What to expect |
|---|---|
| Contract Info | Local Rent Cap in euros when the booking uses the split. |
| Payment plan / Contract Values | Each contract month shows a Rent line capped at the local rent cap plus a matching Others line for rent − cap (same category as Account Settings). |
| Allocation | Incoming payments can satisfy Rent and Others separately per your payment priority order. |
Editing the cap on an existing booking (dual-pricing bookings only): open Contract Info edit mode, change Local Rent Cap, and save. The value must stay above zero and below the booking’s rent. Vivin regenerates scheduled Rent and Others lines and logs the change on the booking Timeline. Canceled bookings cannot be updated. If regeneration conflicts with invoiced allocations, resolve Finance records first — same pattern as cleaning fees requirement edits.
Dual pricing is frozen at booking create — turning dual pricing off in Account Settings later does not remove the split from bookings that already have it.


Lease purpose
When Settings > Categories > Lease purpose has Enable Lease Purpose field turned on, operators can record why the tenant is renting (for example Tourism, Studies, or Work).
| Surface | Behaviour |
|---|---|
| Contract Info → Booking information | Read-only Lease purpose under Booking categories when a value is stored; No lease purpose when empty. |
| Contract Info edit mode | Searchable dropdown limited to the account’s configured chip list. When Make Lease Purpose mandatory is on, Update is blocked until a value is selected. |
| Add booking | Same dropdown on the tenant / platform step when the field is enabled (required asterisk when mandatory). |
| Tenant portal signing | When mandatory, the tenant must pick an allowed value on the Review step before Sign unlocks — see Tenant Portal — Digital contract signing. Pair with Preferences — Mandatory for contract signing (settings-preferences-tenant-portal-contract-signing-required.png). Operator troubleshooting: FAQ — Tenant contract signing blocked. |
Values must match one of the allowed chips from Categories; free-text outside the list is rejected on save. Turning the field off in Settings hides the control on new edits but does not erase values already stored on bookings.


Lease purpose captures re-verified 2026-06-19 10:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-lease-purpose-screenshots.ts — publication-clean booking 000a34cb-5f31-43b5-a0ff-c0a14993c93e, Lune Van Belleghem on AA-11-5D-R4).
Change tenant (reassign booking)
When a reservation was created under the wrong existing tenant profile (duplicate fiscal ID or email in the account, or a data-entry mistake before check-in), use Change tenant on the Contract Info tab instead of editing tenant master data in place.
Who can use it
- Requires
bookings.edit_items(same permission as editing booking line items). - The control appears only while the booking is Upcoming in the list filters sense (the product status card Upcoming).
When it is available
| Condition | Result |
|---|---|
| Booking is cancelled | Control disabled — cannot change tenant. |
| Check-in date is today or in the past | Disabled — cannot change tenant on or after check-in. |
A signed contract is on file (contractPath / upload on Contract Info) | Disabled — cannot change tenant once the contract is signed. |
| Any allocation on the booking is paid and invoiced (or otherwise protected) | Reassign booking is rejected with an error when you confirm. |
Confirmation payments may still be outstanding; reassignment is allowed before the structural blocks above apply.
What it does (and does not do)
- Updates the booking’s primary
tenantIdand the denormalized tenant snapshot on the booking (name, email, fiscal ID shown in the sidebar). - Clears an unsigned generated contract file so the regeneration job can rebuild the PDF for the new tenant — it does not regenerate the contract inline.
- Does not rebuild the Payment Plan, move historical Transactions, or rewrite invoiced allocations; past payments and issued invoices stay tied to the original tenant for audit and legal continuity (the modal states this explicitly).
Steps
- Open the booking from Bookings → List (or a deep link such as
/bookings/list/:bookingId). - On Contract Info, in the Tenant card header, click the swap icon (Change tenant).
- In the modal, review Current tenant, search New tenant by name, email, or NIF, then click Reassign booking.


The pencil on the same card edits contact fields for the current tenant on this booking. Change tenant points the whole booking at a different tenant record already in your account — use it when the wrong person was linked, not when you only need to fix a typo on the right profile.
Change unit (before check-in)
When a confirmed booking should move to a different unit in the same account before the tenant checks in (for example a maintenance issue on the original room), use Change unit on Contract Info instead of cancelling and re-creating the reservation.
Where it lives
- Contract Info → Property & Unit section, on the Unit internal name row — a small pencil beside the current unit opens Change unit when the booking is eligible.

When it is available
| Condition | Result |
|---|---|
| Booking is cancelled | Disabled — cannot change unit. |
| Booking is not confirmed (confirmation payments still outstanding) | Disabled — complete confirmation first. |
| Check-in date is today or in the past | Disabled — cannot change unit on or after check-in. |
| Target unit is the same as the current unit | No-op — the API skips side effects. |
| Target unit is deleted, its property is archived, unavailable for the date range, or has an overlapping confirmed booking | Move booking is rejected with a specific error. |
What the move does (V1)
| Area | Behaviour |
|---|---|
| Booking row | Updates listingId (and related property snapshot) to the new unit. |
| Calendar | Removes the block on the old unit and adds a Booked block on the new unit. |
| Nuki access | Regenerates door codes for the new unit when Nuki is configured (cross-property moves show stronger copy in the modal). |
| Emails | Re-sends check-in and onboarding emails for the new unit; refreshes scheduled reminders. Check-in email is skipped when Nuki regeneration fails — resolve access, then Resend Check-in email manually. The onboarding resend omits the contract PDF when the booking has no contractPath yet (even if Contract in onboarding email is on account-wide) so the message still delivers without a broken attachment. |
| Contract | Not regenerated — existing contractPath / signed contract files stay as-is. If a signed contract exists, the modal warns that the PDF may still reference the original unit. |
| Payment plan | Unchanged — rent, deposit, fees, and scheduled lines still reflect the original commercial terms until you edit them separately. |
After you pick a new unit, the modal lists verb-led effects (door codes, emails to the tenant, reminder refresh, calendar block move) and a teal Contract and payment plan unchanged callout — both stay tied to the original unit until you edit them separately. A separate amber alert appears when the booking already has a signed contract on file.
Steps
- Open the booking from Bookings → List (or a deep link such as
/bookings/list/:bookingId). - On Contract Info, in the Property section, click the pencil beside Unit internal name.
- In Change unit, review the current unit, pick a new unit from the searchable list (loaded from the lightweight account-wide listing options API — see Glossary — Listing options (management API)), and read the When you move this booking summary (door codes, emails, reminders, calendar) plus the Contract and payment plan unchanged note.
- Click Move booking. Partial failures (for example Nuki or email) surface as toasts — the unit change still commits; use Resend Onboarding email / Resend Check-in email on the same tab when needed.

Operational unit moves do not rebuild the payment schedule. After relocating a booking, open Payment Plan and Finance if rent or deposit should follow the new unit’s defaults — the same double-billing caution applies when manually editing dates on two overlapping bookings (see Room changes under Early departures).
Contract management also lives on this tab:
Automatic contract generation
When a booking is confirmed (from any channel), Vivin can automatically generate a digital rental contract:
- Smart data insertion — tenant name, unit details, dates, pricing, and custom clauses are populated automatically from the booking data.
- Digital signature — signature requests are sent via email, and tenants can sign from any device.
- Multiple contract types — support for traditional rental agreements, accommodation services contracts, and custom templates.
- All contracts stored and searchable — access contracts by tenant, property, or date range at any time.
Manual contract management
You can also manage contracts manually:
- Upload a signed contract PDF by clicking Upload Signed Contract on the Contract Info tab — the Add Signed Contract modal accepts drag-and-drop or file picker (PDF, DOC, DOCX)
- Download the generated contract to send to the tenant
- Preview the contract with all booking variables filled in

Uploading a file on the Contract Info tab marks the booking as "contract signed." The timestamp of the upload is recorded and displayed in the bookings list as a tooltip.

Virtual IBAN (bank transfers)
When virtual IBAN collection is enabled for the booking, the Contract Info tab shows the tenant's dedicated transfer reference under Method of payments:
- Copy — copy the full virtual IBAN to the clipboard for sharing with the tenant or your bank workflow.
- Download proof — download a PDF proof of the virtual IBAN (for records or tenant instructions).
- Switch IBAN — when supported by your setup, replace the virtual IBAN (for example after a banking or integration change).
Tenants use this virtual IBAN for incoming rent transfers; it is not the same as their personal bank account IBAN used for deposit refunds. See Finance > Automated Rent Collection and Tenant Portal > Online Payments.
Tenant Portal link (same card)
In the same Method of payments block, Tenant Portal gives operators quick access to the booking-scoped portal URL:
- Copy (clipboard icon) — copies the direct portal link (includes booking
idand accesscodewhen configured) so you can paste it into chat, SMS, or a manual email. - Impersonate Tenant — opens that URL in a new browser tab so you can preview what the tenant sees on the portal home (payments, contract, and self-service areas your account allows).
The link is disabled with a short error toast when the booking has no portal URL yet (for example very early in creation before credentials are provisioned).

Check-in & Check-out emails
Lower on Contract Info, the Check-in & Check-out card holds operational timing (check-in/out times and responsible team members) and email actions for this booking:
- Resend Onboarding email — sends (or resends) the tenant onboarding message that can include portal access and contract material per your Emails and Preferences settings.
- Send Check-in email / Resend Check-in email — triggers the check-in communication; when a message was already sent, hover the resend control for a Last sent timestamp.
Lifecycle triggers on Settings > Emails — Booking lifecycle emails evaluate automatically when move-in payments post or when the tenant completes digital contract signing in the Tenant Portal (signedContractPath) — not when you upload a signed PDF here. Use Send / Resend after manual contract upload, or when Nuki code generation blocked an earlier automatic send. When After contract signed never fires, pair FAQ — automatic check-in email with FAQ — Tenant contract signing blocked (bookings-detail-contract-check-in-out-emails.png).
Use these buttons when a tenant did not receive automated mail or you need to refresh portal credentials after a change. For the full check-in workflow (access codes, tickets, payment plan), see Managing a Check-in.

Timeline (booking change log)
Inside the same Check-in & Check-out card, the Changelog section (subtitle: All changes made to this booking.) combines milestone dates (contract start, check-in, check-out, end) with logged field changes from entityChangeLogEntries — for example rent, dates, or status updates. Each event shows when it happened and by which team member when recorded. The timeline lists operator-initiated edits and workflow milestones — not every default or normalized value Vivin stores when the reservation is first created. When more than four events exist, use View all (N) (magnifying-glass control with the total event count) to open the full changelog in a modal. The modal lists every event in reverse chronological order and includes a Search changes… field so you can filter by field name, author, or date text without leaving the booking sidebar.
Automatic cancellations tied to move-in debt may appear with localized copy (for example a move-in debt explanation) instead of the raw system log prefix Automatically canceled:.
Use this timeline when you need to see who changed contract dates or operational fields without opening Finance or Tools → Audit. The list shows operator-initiated edits only — not every default Vivin stores at create time (#2093); see FAQ — Booking Changelog scope. This is booking-scoped audit data — not the same block as Change history on Listings property/unit setup (building and unit field edits — listings-property-edit-change-history.png) or Tools → Audit (cross-portfolio manual blocks and discounts). Month-end block triage: Manual block hygiene.


Changelog captures re-verified 2026-07-08 00:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-change-history-screenshots.ts — inline section + View all modal refreshed).
Delete Booking (soft archive)
At the bottom of the Check-in & Check-out card, Cancel Booking and Delete Booking are separate actions:
| Control | What it does |
|---|---|
| Cancel Booking | Ends the stay through the normal cancellation flow (refund options, payment-plan cleanup, calendar release). Disabled when canCancel is false (for example already canceled or business rules block cancel). See Cancellations and Refunds. |
| Delete Booking | Soft-archives the reservation (archive API) — removes it from default Bookings lists and releases calendar unavailability while keeping payment and audit history for Finance. Confirm in the dialog; on success the sidebar closes. |
Delete Booking guards (API returns an error toast when blocked):
| Guard | Resolution |
|---|---|
| Any allocation is invoiced, manual, or draft | Resolve or revert invoice state in Finance first (same rule as cancel-with-settlement). |
| A provider platform in-payment is still present (not rejected) | Reject the row on booking Transactions or Finance → Transactions, or assign it to another booking when invoicing rules allow — then retry Delete Booking. See Provider platform payment above (#2076). |
| A credit card or Virtual IBAN system in-payment is still present (not rejected) | Reject the row on booking Transactions or Finance → Transactions, or assign it to another booking when allowed — then retry Delete Booking (#2200). Error toast: "The booking cannot be deleted while there is a VIVIN credit card or Virtual IBAN payment still present, please reject or reassign the payment." |
| vIBAN / provider platform rows on the ledger | Delete payment stays disabled on Finance for these rails; use Reject (when pending) or Revert instead — see Finance — Delete payment on the ledger. |
Use Delete Booking only for mistaken or test reservations that should leave the active pipeline — not as a substitute for Cancel Booking when a real stay ended or money must be settled. Cancel booking on the same card runs policy settlement and keeps the reservation in Canceled filters with full ledger history — see FAQ — Cancel Booking vs Delete Booking (bookings-cancel-booking-modal-refund-types.png, bookings-list-canceled-tab.png, workflows-cancel-booking-refund-modal-flow.mp4). Canceled bookings remain visible in list filters; archived bookings drop from default views — Finance → Transactions keeps only System Transactions (vIBAN, credit card) for those reservations; Manual Transactions (transfer, cash, provider platform) are hidden (#1897). Delete Booking is reservation-level — distinct from Archive property (building-level on Listings → Archived). See FAQ — Manual payments after Delete Booking when ledger rows disappear after soft-archive (finance-transactions-type-summary-cards.png, #1897), FAQ — Delete Booking on integration reservation when a provider platform in-payment blocks the action (#2076), FAQ — Delete Booking on VIVIN system payment when credit card or Virtual IBAN in-payments block (#2200), FAQ — Portfolio retirement decisions for the three-way scope table, Glossary — Archived property, Finance — Archived bookings on the ledger, and Cancelling a Booking for real voids.

Payment Plan tab
The Payment Plan tab shows the complete schedule of all expected payments for the booking lifecycle.

Each row in the payment schedule represents one charge:
- Type (Rent, Security Deposit, Admin Fee, Cleaning Fee, tenant Services purchased through the Tenant Services Marketplace, etc.)
- Due Date
- Amount
- Status (Pending, Paid, Overdue)

Schedule table columns and fee visibility
The main grid is one row per due date (not one row per charge type). Columns follow your account fee naming when customized:
| Column | Always shown? | Meaning |
|---|---|---|
| Status | Yes | Due-date pill (Scheduled, Paid, Overdue, Partial Paid, Partial Overdue) plus optional day context (for example days overdue). |
| Due date | Yes | Calendar due date for the grouped charges; optional subtitle when the API supplies a description. |
| Rent | Yes | Rent due on that date. |
| Cleaning fee | Conditional | Shown when Cleaning fee is enabled in Settings or this booking already has a non-zero cleaning amount on at least one due date — so disabling the account toggle does not hide columns on legacy bookings that still carry cleaning lines. |
| Admin fee | Conditional | Same rule as cleaning, using Admin fee settings and existing admin amounts on the booking. |
| Exit fee | Conditional | Same rule as cleaning, using Exit fee settings and existing exit amounts on the booking. |
| Deposit | Yes | Security deposit (and related deposit rows) due on that date. There is no hide toggle for this column. |
| Others | Yes | Marketplace Extra Services, penalties, and other non-rent/fee/deposit lines rolled into the due date. |
| Total | Yes | Sum of the visible amount columns for that row (see below). |
| Paid | Yes | Allocated incoming payments applied to charges due on that date. |
How Total is computed — Total adds Rent, each visible fee column, Deposit, and Others for that due date. When a fee column is hidden because the account toggle is off and the booking has no amounts for that fee, its value is excluded from Total so the number matches the columns you see. Deposit is always included even when fee columns are hidden, so deposit-only due dates still show a Total that aligns with Paid and outstanding balance.
Fee visibility is controlled under Settings → Invoicing & payments → Fees. To inspect individual charge lines (discounts, services, impairments), use Contract Values or click a row to open the breakdown panel below.
When a contract-date change left an invoiced line outside the updated span, the matching due-date row may show the amber contract-date change warning icon (same copy as on Contract Values — see Contract-date change warnings under Contract Info; screenshots bookings-detail-payment-plan-contract-date-warning.png and bookings-detail-payment-plan-contract-date-warning-tooltip.png).
Due-date breakdown panel
Click any row in the schedule table to open a slide-over breakdown for that due date. On desktop, the panel docks on the right (~400px wide) with a dimmed backdrop; on narrow viewports it expands full width so the schedule and breakdown are not squeezed side by side. Close with the × control or by clicking the backdrop.
The panel shows the due date in the header, an overall status pill (for example Paid or Overdue), a Total due figure with a progress bar when payments have started, and a Breakdown list grouped by charge category:
| Section in breakdown | What it includes |
|---|---|
| Rent | Monthly and prorated rent lines due on that date |
| Cleaning fee | Cleaning charges tied to the due date |
| Admin fee | One-time admin charges |
| Exit fee | Departure / exit charges when applicable |
| Deposit | Security deposit rows (including refund lines when present) |
| Extra Services | Purchases from the Tenant Services Marketplace — lines with category: services or a linked marketplace service id on the scheduled charge |
| Other Fees | Penalties, ad-hoc fees, and any non-standard charge types that are not marketplace services |
Extra Services and Other Fees are separate sections so you can reconcile tenant marketplace purchases without mixing them with penalties or one-off operator charges. Nested lines under each section still show discount, impairment loss, and return of value adjustments when present (see Discounts and payment adjustments on Contract Values).
Deposit refund lines on the schedule
When you record a deposit refund on the Deposit tab, Vivin adds matching deposit refund rows to the payment schedule (not only the ledger on Transactions):
| UI signal | Meaning |
|---|---|
| Due date subtitle Deposit Refund | Cash return to the tenant — not a monthly rent label such as Oct 2025 payment. |
| Deposit column with a leading − | Outgoing refund amount; nets against deposit collection on that due date. |
| Total for the row | Sums the visible amount columns with refunds netted — other charges on the same due date reduce the deposit net instead of inflating Total incorrectly. |
| Breakdown → Deposit | Same minus-prefixed line inside the due-date panel when you expand the row. |
Use this schedule view together with the Deposit tab payout breakdown and Finance → Transactions Deposit Refund card when reconciling check-out refunds against bank out-payments.

Payment plan deposit-refund line capture re-verified 2026-06-21 22:16 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-payment-plan-deposit-refund-screenshot.ts — 220×900 plan row with Deposit Refund subtitle).
The payment schedule is automatically generated when a booking is created, based on the property's contract settings (payment frequency, confirmation payments, check-in payments). Changes to the property settings after booking creation do not affect existing payment schedules.
Contract Values tab
The Contract Values tab is the line-item ledger for one booking: every scheduled charge (rent, deposit, admin fee, cleaning fee, tenant Services, and other types) with status, due date, amount after discounts, paid, and invoiced totals. Use it when you need to adjust a charge, apply or remove discounts, or reconcile what the tenant owes before you open Payment plan (schedule view) or Transactions (money received).

Category summary and filters
At the top, category cards roll up the booking by charge type (labels follow your account’s fee naming when customized):
| Card | Typical types |
|---|---|
| All | Every line on the booking |
| Rent | Monthly and prorated rent lines |
| Deposit | Security deposit and related deposit rows |
| Admin fee | One-time admin charges |
| Cleaning fee | Monthly or one-time cleaning lines (see Cleaning Fees requirement on Contract Info) |
| Other | Penalties, services, and non-standard types |
Each card shows the net total for that category and clickable sub-lines:
- Paid — lines with allocation (money applied)
- Debt — overdue or unpaid balance (red)
- Scheduled — future charges not yet due
- Partial lines — lines with some payment but remaining balance
Click a category pill to filter the table; click paid, debt, scheduled, or partial on a card to combine category + status filters. Click again to clear.
Line table
| Column | Meaning |
|---|---|
| Item | Charge label (respects custom fee names). Discount and return of value counts appear as small badges when present. |
| Status | Paid, Partial, Debt (overdue unpaid), or Scheduled (future). |
| Period | Contract month for recurring rent/cleaning rows when applicable. |
| Due date | When the charge is due; overdue lines show Xd overdue under the date. |
| Amount | Net amount after discounts. When a discount reduced the line, Original €… may show for audit. |
| Paid | Allocated incoming payment total on this line. |
| Invoiced | Draft + issued invoice totals tied to the line. |
| Actions | Row tools (see below), gated by permissions. |
Rows sort by due date (earliest first). Deep links from Finance, notifications, or the internal VIVIN Auditor can highlight a specific payment id in the table — open /bookings/list/<bookingId>?tab=payment-plan&paymentId=<paymentUuid> (see Deep Links — Bookings; #2092). Lines flagged after a contract-date change show the amber warning icon described under Changing contract dates and rent on Contract Info (bookings-detail-contract-values-contract-date-warning.png).

Row actions (permissions)
| Action | Permission | Notes |
|---|---|---|
| Edit amount | bookings.edit_items | Changes the scheduled line amount (blocked when invoicing rules prevent it). |
| Edit due date | bookings.change_payment_due_date | Moves the due date when the line is scheduled or in debt and the due date is not system-managed (see below). Check reporting month impact. |
| Discount | bookings.add_discounts | Per-line discount — fixed € or % of net, with a reason. Remove existing discounts from the same modal. |
| Credit note | bookings.add_credit_note | Opens Manage credit notes on a line that still has invoiced allocation headroom — creates a pending reversal for Finance to issue (see below). |
| Delete line | bookings.edit_items | Removes a scheduled payment when allowed (confirmation modal; invoiced lines may be blocked). |
| Return of value | bookings.add_return_of_value (Vivin internal accounts only) | Reduces net on a line against a parent allocation; capped by invoiced headroom and remaining allocation. Requires money already allocated on the line. |
Booking-scoped discount (toolbar on the booking header when your role has bookings.add_discounts): apply a percentage or fixed total discount across the whole booking or contract values only, with a required reason. The API distributes the discount across eligible lines; paid and heavily invoiced lines may limit what can be applied.
System-managed due dates
Some scheduled lines keep a due date computed by Vivin — the calendar action is disabled and the tooltip explains that manual edits are not allowed:
| Line type | Why the due date is locked |
|---|---|
| Move-in / check-in requirement | Tied to the booking’s move-in payment rules (moveInRequirement). |
| Booking confirmation requirement | Tied to confirmation-payment timing (bookingConfirmationRequirement). |
| Split rent | Parent or child lines from a rent split (parentPaymentId / splittedFromPaymentId) — changing one side would break the split schedule. |
For all other scheduled or in debt lines, operators with bookings.change_payment_due_date can open Edit Payment Due Date from the row calendar action or row menu. The same modal and permission apply on Finance → Contract Values at portfolio scope.


Lines with issued or draft invoices may block amount edits, deletes, or aggressive discounts. Resolve or revert invoice state in Finance first when the product returns an error.
Invoiced floor on Edit amount (#1738) — When Finance has already invoiced part of a line, Edit amount (pencil on the row) enforces the same invoiced floor as Change monthly rent on Contract Info. The modal shows Already invoiced: €… and disables Save when the new net would drop below that total (red inline error). To reduce invoiced rent in product, use the row Credit note action (Manage credit notes) and then issue from Finance → Transactions; do not lower the line below the invoiced floor with Edit amount. See Glossary — Invoiced floor (rent) and FAQ — Lower rent below invoiced.

Contract Values → Edit Payment Amount invoiced-floor capture refreshed 2026-06-22 02:13 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_BOOKING_ID=4664d6b8-60fe-46e9-b37b-3396a08c1d89 npx tsx tools/capture-bookings-contract-values-invoiced-floor.ts — inner modal panel selector fix).
Return of value is an internal Vivin workflow for correcting allocated amounts without deleting the underlying payment. It is not shown to non-internal operator accounts. Use only when your organization’s policy allows it; verify Payment plan and Transactions afterward.
See also Payment Allocation for how scheduled lines relate to incoming payments, and Finance > Contract Values for the portfolio-wide contract-values export (same charge concepts, account scope).
Manage credit notes on Contract Values
When a Contract Values line still has invoiced allocation headroom, operators with bookings.add_credit_note see a document-icon Credit note row action (disabled with tooltip Credit notes require at least one invoiced allocation on this line when none remain).
Credit note opens Manage credit notes:
- Review any existing credit notes on the line (status Pending / Invoiced / Manual — lifecycle is issued from Finance, not from this modal).
- Under Add credit note, pick the invoiced allocation to reverse, enter an Amount (capped by remaining headroom — Available: €…), and an optional Reason.
- Confirm Apply. Vivin creates a pending credit-note reversal; Finance then filters Not issued credit note and uses Issue credit notes (N) or transaction-detail Issue credit note to provider — see Finance — Issuing credit notes.

finance-issue-credit-notes-flow.mp4).Contract Values Credit note row action + Manage credit notes modal captured 2026-07-27 14:20 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_BOOKING_ID=2b4a7321-eb58-4b17-a0a4-c4e0646df82b npx tsx tools/capture-bookings-contract-values-credit-note-modal.ts — Luca Van Reeth / LC-01-13-R6; modal closed without applying). Walkthrough MP4 recorded 2026-07-27 15:16 UTC (npx tsx tools/record-bookings-contract-values-credit-note-flow-mp4.ts — same booking; no Apply).
Credit note reverses invoiced money. Return of value (internal accounts only) reverses paid, not-invoiced allocations. Discounts are blocked on a line that already has a credit note or return of value.
Discounts and payment adjustments
Contract Values is where operators change what the tenant owes on each scheduled line. Adjustments reduce the line’s net amount (what allocations compare against) without rewriting the original amount column used for audit. Glossary: Discount (booking), Credit note (payment reject/revert), Return of value, Impairment loss.
| Adjustment | Where you add it | Permission / notes |
|---|---|---|
| Line discount | Row action Discounts (percent icon) on a non-deposit line | bookings.add_discounts — fixed € or % on that line only; optional Reason; deposits cannot be discounted |
| Booking-scoped discount | Pill Apply booking discount in the tab toolbar (next to + Transaction) | Same permission — percentage or fixed total across the whole booking or selected scope; requires a reason |
| Credit note | Row action Credit note (document icon) on a line with invoiced headroom | bookings.add_credit_note — reverses an invoiced allocation; issue from Finance → Transactions afterward (Manage credit notes) |
| Return of value | Row action (return arrow) on a line that already has paid allocations | bookings.add_return_of_value and Vivin internal account — credits value back to the tenant up to invoiced/protected headroom; pairs with a negative allocation in Finance |
| Impairment loss | Applied in product data / integrations (not a separate row button in this tab) | Shows on Payment plan and in transaction Type when recorded |
Existing adjustments on a line appear in the Discounts modal list (with Delete when your role allows). Apply Discount / Apply booking discount persist only after you confirm.

Row Discounts (percent icon) opens Manage Discounts for a single scheduled line — fixed € or %, optional Reason, and any existing line-level adjustments:

On Payment plan, click a due-date row to open the breakdown panel. Nested lines under each charge show discount, impairment loss, and return of value adjustments (amount and reason) so you can reconcile net due dates with Contract Values:

For allocation rules and floor/invoicing limits, see Payment allocation. For a portfolio-wide table of every discounted contract value (KPI cards, export, row drill-down), use Audit — Discounts tab (/audit/discounts).
Transactions tab
The Transactions tab shows all incoming payments received from the tenant — what has actually been paid, as opposed to what is scheduled.

To record a manual in-payment while you are on this tab, click + Transaction in the tab strip (next to the sidebar pills). That opens the Add Payment modal — the modal title uses Add Payment even though the tab action is labeled + Transaction. Your role must allow recording payments; otherwise the control stays disabled.

Each transaction entry shows:
- Payment date (when the money was received)
- Amount received
- Payment method
- Which scheduled payment(s) it was applied to (allocation)
- Notes (if any)
The toolbar groups rows into All, System (vIBAN, card, platform payouts), and Manual (operator-recorded transfers). Use the Type column to spot Adjustment rows (discount-driven or automatic ledger entries). Pending system automatic adjustment in-payments show Approve and Reject actions until you confirm how the amount should apply — rejecting leaves the booking balance unchanged for that entry.
Row actions on in-payment rows
Each in-payment row exposes trailing icon actions. Availability depends on payment status, type, allocation invoice state, and role permissions (finance.approve_payments for approve / reject / revert; finance.assign_payments_to_other_bookings for reassignment — see Users and roles > Role Permissions).
| Action | When enabled | What it does |
|---|---|---|
| Approve payment (check) | Status is pending or processing | Confirms the in-payment and applies allocations per the payment plan. |
| Reject payment (×) | Same pending states | Removes the payment from the booking and related financial records. The confirmation modal includes a red banner: Warning: this may require a credit note and invoice follow-up. Body copy reminds you to issue a credit note and include it in the next invoice when accounting already recorded the charge. |
| Revert payment (↩) | Status is confirmed or rejected | Rolls the payment back so allocations and booking balances update. The confirmation modal shows a blue info banner: Info: this may require invoice or credit note updates afterwards. |
| Assign to other booking (↔) | No allocation on the row is invoiced | Moves the whole in-payment to another booking in the same Vivin account — the target may belong to a different tenant. See Assign a payment to another booking. |



Delete payment is not available on the booking sidebar — use Finance → Transactions when you need to remove an eligible manual in-payment from the ledger (see Finance > Transactions — Delete payment).
Approve, reject, and revert confirmation modals refreshed 2026-06-16 01:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-finance-bookings-payment-action-modals.ts). Row-actions walkthrough MP4: tools/record-bookings-payment-row-actions-mp4.ts.
If a tenant pays more than the scheduled amount, the system records the overpayment and carries it as a credit for future charges:

Assign a payment to another booking
When a bank transfer or manual in-payment was matched to the wrong booking, operators with Assign payments to other bookings (finance.assign_payments_to_other_bookings) can move it without re-entering the amount.
The target booking does not have to belong to the same tenant — any booking in the same Vivin account is a valid destination. This covers the everyday case where a tenant pays for a family member: the bank transfer lands on the payer's booking, and the receipt has to move to the relative's booking, which sits under a different tenant profile.
On each eligible in-payment row, use the Assign to other booking control (arrows icon) in the row actions. The control is disabled when any allocation on that payment is already invoiced, or when your role lacks the permission. The whole in-payment moves — partial reassignment (splitting one receipt across two bookings) is not supported.

The modal explains that the payment leaves the current booking and is reapplied to the target booking. Pick the destination from Select target booking — each option shows the property / unit, booking dates, and booking code alongside the tenant name so you can tell similar reservations apart — then confirm Assign to other booking. Archived bookings are not offered as targets. After success, refresh Payment Plan on both bookings if allocations look stale.
Because the target can belong to a different tenant, the move shifts the receipt onto another tenant's ledger. Confirm the booking code and property / unit in the picker before you assign.
The same action is available on Finance → Transactions for ledger-wide triage — see Finance > Transactions.
Deposit tab
The Deposit tab tracks the security deposit for this booking: how much was collected, how outstanding charges affect the return, refund status, and operator actions (Refund, Transfer, Undo Refund). Refund actions require the bookings.refund permission.
The card header shows Expected Refund Pending before a refund is recorded and Refund Completed afterward. Portfolio-wide triage uses the same deposit lifecycle on Finance > Deposits — Balance, Est. Refund, and status summary cards there align with the figures on this tab.
Before refund (planning card)
| Row (English UI) | Meaning |
|---|---|
| Initial Deposit | Contract deposit with € collected / € configured and an optional collection badge (see below). |
| Current Adjustments | Shown when the booking payment-plan balance is positive (tenant has overpaid relative to amounts due to date). Adds to the refundable total. |
| Current Deductions | Shown when the balance is negative (tenant still owes on scheduled charges). Reduces what can be returned from the deposit. |
| Total to refund | max(0, effective deposit collected + booking balance) — the cash payout Vivin estimates before you click Refund. Uses payment-plan balance (total paid − total due to date), not overdue-only debt, so payable-but-not-yet-overdue lines are included consistently with the Payment Plan tab. |
| Cash back to tenant | Replaces Total to refund when outstanding charges exceed the collected deposit: the amber helper explains how much is still owed after the deposit is fully offset and that €0 will be paid out. |
Effective deposit collected is capped at the configured deposit amount and at what was actually allocated to deposit lines — refund math never assumes a full deposit when only part was paid.
Initial Deposit badges (when deposit > 0 and not yet refunded):
| Badge (English UI) | Meaning |
|---|---|
| Paid (green) | Collected deposit equals or exceeds the configured amount. |
| Partially paid (amber) | Some deposit was collected but Paid < Amount; a remaining helper shows the shortfall. |
| Unpaid (red) | No deposit payment allocated yet; copy explains that refund is unavailable until collection. |
Ready To Refund — Toggle in the card header (pre-refund only; hidden while the deposit is Disputed) marks the booking as operationally ready for finance to process the bank transfer. It does not move money by itself. When Require "Ready to Refund" step is On at account level, this toggle is part of the required hand-off before Refund — finance and the Bookings list can filter Other filters → Deposit status → Ready to refund. See Finance — Deposit status filter.
Deposit lifecycle pill — When the account tracks payment-driven lifecycle (#781), a small badge beside Security Deposit summarizes collection state: Not Paid, Partial Paid, Fully Paid, Ready to Refund, Disputed, or Refunded. The pill is display-only; use the actions below for refunds and disputes. See Glossary — Deposit lifecycle status for how each state maps to refund and dispute actions.
Deposit disputes — When Enable deposit disputes is On and your role includes bookings.dispute, a Fully Paid (pre-refund) deposit can be flagged while you investigate damage claims or tenant pushback:
- Click Mark as Disputed (outline control beside Refund). The card title becomes Refund Disputed, the lifecycle pill shows Disputed, and an amber warning explains that Refund is blocked.
- Ready To Refund hides until the dispute is cleared.
- When the case is settled, click Resolve Dispute. Vivin returns the deposit to the normal pre-refund flow (Fully Paid or Ready to Refund, depending on account settings and the per-booking toggle).
Refund stays disabled with tooltip Resolve the dispute before refunding. while Disputed. The same Mark disputed / Resolve dispute actions appear on Finance → Deposits row chips when the booking is in the active date range — clear or widen the Deposits toolbar filter when the move-out is older than the default three-month window.


Deposit dispute captures refreshed 2026-06-19 12:00 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-deposit-disputes-screenshots.ts — booking Deposit tab states plus Finance → Deposits Mark disputed / Resolve dispute row chips after clearing the default date range). Walkthrough MP4 added 2026-06-20 12:08 UTC (tools/record-deposit-dispute-walkthrough-mp4.ts).

Ready To Refund toggle capture refreshed 2026-06-21 22:23 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-deposit-ready-to-refund-toggle-screenshot.ts — crops the deposit card header, not the full sidebar).
Refund — Opens a confirmation modal quoting the same Total to refund figure as the card. Vivin records the refund decision in the ledger; the actual bank transfer still happens outside the platform (see Managing a Check-out).
After refund (ledger card)
When Refund Completed is shown, the planning rows are replaced by a payout breakdown from recorded transactions:
| Line (English UI) | Meaning |
|---|---|
| From security deposit | Cash returned from deposit-related ledger lines. |
| From overpayment balance | Additional cash when overpayment returns were part of the payout. |
| Total refunded | Sum of bank payouts to the tenant. |
When the deposit was applied to charges with no bank transfer, an amber No bank transfer callout explains that the collected deposit offset outstanding charges and the tenant received €0 cash (with any remaining balance called out).
Transfer refund balance — After Refund Completed, use Transfer to move refundable credit to another booking for the same tenant (for example when the tenant rebooks and you want the prior deposit applied to the new stay):
- Click Transfer in the card header (requires bookings.refund).
- In Transfer Refund Balance, read the amber warning — the action creates a credit payment on the destination booking and the source refund becomes non-reversible.
- Pick the target reservation from Select a target booking (only other bookings for the same tenant appear).
- Click Confirm Transfer.
After a successful transfer, an amber banner on the tab explains that Transfer and Undo Refund are disabled because the balance already moved. Undo Refund — Reverts the refund record when your process allows and no transfer was logged.



Partially paid Initial Deposit badge capture added 2026-07-07 05:05 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-finance-deposits-status-cards-screenshots.ts — opens a partially collected row from Finance → Deposits partial sub-filter, then crops the Initial Deposit row on the booking Deposit tab).
Internal Notes tab
The product labels this tab Internal Notes (formerly Comments). It is an internal chat-style thread on the booking (not visible to tenants). Messages appear in bubbles grouped by day (date separators in the centre of the thread). Your posts align to the right with a mint bubble labelled You; teammates’ messages align left with a coloured initial avatar and display name. Each bubble shows a time stamp on the same row as the text.
- Compose — type in the bottom message field and send with Enter or the send control (Shift+Enter for a new line when the composer supports it).
@mention— type@followed by a colleague’s handle (for example@JaneDoe, built from first and last name without spaces). While you type, an autocomplete list filters property managers on your account; pick a row to insert the handle. Mentioned teammates receive an email when the comment is saved. Handles are normalized the same way on the server (diacritics stripped, lowercase) and are capped at 64 characters — use autocomplete rather than typing long free-form handles.- Highlighted mentions —
@handlesin saved messages render as highlighted tokens in the thread (the product avoids treating email addresses as mentions). - Delete — hover a bubble to reveal a trash control; confirm in the dialog to remove that comment permanently (your own messages or teammates’ messages, depending on your role’s delete rights on the booking).



@ to open teammate autocomplete, pick a handle, finish the message, and send (internal thread only — not visible to tenants).Booking sidebar tab load failures
Each tab inside the booking detail sidebar fetches its own data. A failure on one tab does not disable the others — open Contract Info, Payment Plan, or another tab while you retry the affected surface.
| Tab | Message (English UI) | Recovery |
|---|---|---|
| Communication | Could not load messages — Something went wrong loading the conversation. Try again. | Refresh in the booking sidebar header toolbar (shown while Communication is active) |
| Tickets | Could not load tickets. Try again. | Retry on the red banner in the tab |
See FAQ — Communication or Tickets load failure, Glossary — Booking detail sidebar tab load failures, Glossary — Booking sidebar tab load failures hub, FAQ — Directory list load failures, and Common Workflows — Booking sidebar tab load failures for whole-module list pages. When row-click from /notifications lands here but a tab fails, pair Notification row-click navigation with Notification triage — Step 4.
Per-guide mesh: - Manual block hygiene — Booking sidebar tab load failures — Communication Refresh during hold cleanup (Step 3) - Cancelling a Booking — Booking sidebar tab load failures — Payment Plan when Communication fails (Step 2) - Managing a Check-out — Booking sidebar tab load failures — Departure outreach tab recovery (Step 6) - Onboarding a New Property — Booking sidebar tab load failures — First booking tab Retry on Step 7 - Processing a New Booking — Booking sidebar tab load failures — Contract thread Refresh on Step 4 - Handling a Late Payment — Booking sidebar tab load failures — Communication Refresh during collections (Step 3) - Managing a Check-in — Booking sidebar tab load failures — Arrival-week tab recovery (Step 4) - Entering Monthly Utility Bills — Booking sidebar tab load failures — Overage dispute thread Refresh (Step 4) - Notification triage — Booking sidebar tab load failures — Row-click then tab fails (Step 4) - Resetting a Management User Password — Booking sidebar tab load failures — Lockout catch-up tab recovery (Step 3) - Using in-app support — Booking sidebar tab load failures — Bookings module defect tickets


Communication tab
The Communication tab shows WhatsApp and email exchanged with the booking’s tenant on your configured support channels (the same automation backend as the tenant chatbot). On the WhatsApp filter you can read the thread, apply conversation labels, Pause bot (when configured), and send outbound messages from the management UI. Email remains read-only in the tab — reply from your mail client; Vivin ingests events and shows them here for context on this reservation. Quick orientation: FAQ — WhatsApp and email per booking (bookings-detail-communication-tab-whatsapp-thread.png); portfolio-wide triage: Inbox module (inbox-module-overview.png); hub matrix: Common Workflows — WhatsApp per-booking messaging.
Under the hood, Vivin merges WhatsApp and email events for the booking into one chronological timeline (oldest → newest) for whichever channel filter is active. When data first loads, the feed scrolls to the latest message so you land on recent traffic. While email events are still fetching and nothing is on screen yet, skeleton rows appear instead of an empty state.
Channel filters
At the top of the tab, WhatsApp and Email pills switch the feed (one channel at a time — there is no combined “all channels” view):
| Filter | Layout |
|---|---|
| Chat-style bubbles on a muted background. Day separators (Today, Yesterday, or a formatted date) appear between message groups. Each bubble shows a small WA badge beside the sender label. | |
| Gmail-style inbox rows (sender, subject, snippet, time, paperclip when attachments exist). Click a row to expand To / Cc / Bcc, the message body (plain text or a sandboxed HTML iframe), and an Attachments (N) section when non-inline files were ingested with the message. Expanding a row scrolls it into view. |
On first load, the product picks the channel with more stored messages (WhatsApp wins ties). Outbound email rows may show a Sent badge in the expanded header.
Per-channel empty state
Emptiness is evaluated per active filter, not across both channels combined. If WhatsApp has stored messages but Email has none, switching to Email shows No messages yet (channel pills and the Labels row on WhatsApp still behave independently). The same applies when only email traffic exists and you open WhatsApp. This avoids a blank panel when one channel has history and the other does not.

Email attachments
When Vivin ingests an email with downloadable files, the collapsed inbox row shows a paperclip beside the timestamp. Expand the row to see an Attachments (N) block below the body (inline parts embedded in HTML — for example signature logos referenced as cid: — are hidden from this list).
| Control | Behaviour |
|---|---|
| Attachment chip | Shows filename and file size (for example 4.3 KB). Click a chip when preview data is available. |
| Preview modal | Opens for images and PDFs with the filename, size, and a Download attachment action in the header. Other file types show copy that preview is unavailable — use Download attachment to save the file. |
| Chip without preview | When content was not stored with the event, the chip is read-only (filename and size still visible). |
Attachments are read-only on this tab — download for your records; replying with files still happens from your email client.
WhatsApp labels
On the WhatsApp filter, a Labels row sits below the channel pills. Labels are the same tags configured on your connected WhatsApp business line (synced via the UAZAPI integration). Use them to classify the conversation for your team — for example Urgent, Payment, or Maintenance.
| Control | Behaviour |
|---|---|
| Applied chip | Coloured pill with the label name. Click × on a chip to remove the label from this booking’s conversation. |
| No labels yet | Shown when nothing is applied; history and composer still work. |
| Add label | Dashed + Add label opens a popover listing labels not yet applied. Pick one to attach it; the list reconciles with the server after a short delay. |
Labels apply to the WhatsApp conversation for this booking’s tenant phone number, not to individual messages or to email.
Pause bot toggle
When your Vivin account has a pause label configured on the WhatsApp business line (set by the Vivin team in internal admin as chatBotPauseLabelId), the Labels row on the WhatsApp filter includes a Pause bot switch to the left of the Labels heading. Turning it on applies that pause label to the conversation so automated bot replies stop for this booking until you turn it off or remove the label. The toggle only appears when the pause label is configured for the account; it does not replace manual Add label chips for other tags.

Ticket markers in the WhatsApp thread
On the WhatsApp filter only, maintenance tickets linked to this booking can appear as inline timeline markers between chat bubbles — a centred pill such as Ticket #42 — Leaking tap. Vivin inserts a marker only when the ticket’s created time falls strictly between the first and last WhatsApp message already on screen (not before the opening message or after the latest one). Markers are chronological with the rest of the thread; they do not appear on the Email filter.
Use markers to see when a tenant escalated into a formal ticket during an active chat. Open the full ticket from the booking’s separate Tickets tab or from Operations > Tickets.
New messages while the tab is open
Inbound WhatsApp and email arrive through integrations (there is no live websocket push). While Communication stays open, the tab polls in the background about every 15 seconds and compares message counts to what is already rendered.
| Signal | Behaviour |
|---|---|
| Floating pill | When either channel has unread traffic, a sticky pill appears above the bottom of the thread (for example 3 new messages). Click it to refetch both channels, clear the counter, and scroll smoothly to the newest item. |
| Sidebar Refresh | The header Refresh control (visible while Communication is active) forces an immediate reload without waiting for the next poll — use after you send from the composer or when the pill does not appear. |
WhatsApp composer
When the WhatsApp filter is active, the tenant chatbot integration is enabled, and Vivin has wired outbound WhatsApp for your account (UAZAPI credentials present), a message composer appears at the bottom of the tab (muted grey bar with a text field and Send button).
| Control / shortcut | Behaviour |
|---|---|
| Type a message… | Multi-line text field. Enter sends; Shift+Enter inserts a new line. |
| Send | Paper-plane button; disabled while the field is empty or a send is in progress. Outbound messages appear as You bubbles on the right. |
| Send failure | Could not send the message. Please try again. — your draft stays in the field so you can retry. |
Sent messages go through your business WhatsApp number (same channel as bot and human replies). Use Refresh in the sidebar header if a just-sent message does not appear immediately. If failures persist, open Account Settings → ChatBot → Status Bot and confirm the UAZAPI session is Connected — scan a new QR when Disconnected (Status Bot pairing).
Bot reasoning (audit)
When the tenant chatbot is enabled on your account and Vivin stored reasoning text with an automated Bot reply, the bubble shows a compact Reasoning control under the message body. Click it to expand the internal explanation Vivin used before sending (italic text in parentheses). Only Bot messages include this toggle; tenant and operator bubbles do not. Use it to audit automated answers without opening server logs.



When the tab is available
| State | What you see |
|---|---|
Chatbot enabled on the account (isTenantChatBotEnabled) | Tab loads WhatsApp and email events for the booking. When Vivin has ingested traffic, threads appear under WhatsApp or Email; when nothing is stored yet, you see No messages yet (channel pills and the Labels row still show). With outbound WhatsApp configured, the composer appears at the bottom. |
| Chatbot on, WhatsApp send not provisioned | History and Labels still load on WhatsApp, but the composer area shows WhatsApp replies aren't available yet — contact Vivin to connect your business line for replies from management (distinct from chatbot-off unlock below). |

Communication tab WhatsApp-not-provisioned capture refreshed 2026-06-18 08:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-communication-tab-whatsapp-not-configured-screenshot.ts — patches GET /accounts with isTenantChatBotEnabled: true and isTenantChatBotConfigured: false for docs capture only).
| Chatbot disabled | Tab is still clickable; the panel shows Unlock your communication history with copy to contact your account manager — channel filters remain visible but history does not load. |
| No phone or email on the tenant profile | With chatbot on, matching cannot run — you still see No messages yet until contact fields exist on the tenant profile linked to the booking. |
| Load failure | Could not load messages — use Refresh in the sidebar header toolbar and try again. |
WhatsApp bubbles
- Tenant messages align left (white bubble) with the tenant’s name from the booking.
- Outbound messages align right: Bot (mint bubble) when the tenant chatbot sent the reply (
wasSentByApi), or You (blue bubble) when a human replied from your business WhatsApp number — including messages sent from the tab composer or from the WhatsApp Business app. - When the agent’s display name is stored on the message, You may show that name instead of the generic label.
| Bubble position | Label in the UI | Meaning |
|---|---|---|
| Left | Tenant name | Inbound message from the tenant’s WhatsApp line |
| Right | Bot | Outbound reply sent by the tenant chatbot (wasSentByApi) |
| Right | You (or name) | Outbound reply sent by a human from your business number |
Use Refresh in the booking sidebar header toolbar (visible while Communication is active) to re-fetch both WhatsApp and email after new traffic.





When the chatbot is enabled but the tenant profile has no email or phone, or no stored events match the booking, the tab still loads channel filters and shows No messages yet:

When isTenantChatBotEnabled is false, the tab stays clickable but history does not load — channel pills and (on WhatsApp) the Labels row remain visible while the panel shows Unlock your communication history:

Communication tab chatbot-off capture refreshed 2026-06-18 07:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-bookings-communication-tab-disabled-unlock-screenshot.ts — patches GET /accounts for docs capture only).
Comments (Internal Notes) is an internal team thread on the booking. Communication is tenant-facing channel history. Persona and IF/THEN rules for the bot are edited under Account Settings → ChatBot (persona / IF/THEN subtab); WhatsApp line pairing (Connected / Disconnected, QR scan) lives on the same screen under Status Bot — not on this booking tab. Enabling the integration itself is an account-level flag (Vivin provisions tenant chatbot on the workspace).
Tickets tab
When your role includes the Operations module (operations.module), a Tickets tab appears on the booking sidebar. It is a read-only table of maintenance and operations tickets scoped to this reservation — tenant portal requests, chatbot escalations, team-created tickets, automatic check-in/out jobs, and recurring maintenance rules. Closed and cancelled tickets stay visible so you can audit history without leaving the booking.
The tab subtitle in English reads: Tickets linked to this booking (tenant app, chatbot, team, check-in/out, etc.).
Users without Operations access do not see this tab; triage still happens from Operations > Tickets.
| Column (English UI) | Content |
|---|---|
| Ticket | Sequential ticket id (for example T27) or a short internal id fallback. |
| Title | Ticket subject line. |
| Status | Workflow status with underscores shown as spaces (for example unassigned → Unassigned). |
| Source | How the ticket was opened — see source labels below. |
| Category | Maintenance category when set (underscores shown as spaces). |
| Created | Ticket creation date. |
Source labels (English UI):
| Source value | Label in UI |
|---|---|
tenant | Tenant |
tenant_portal | Tenant portal |
chatbot | Chatbot |
pm | Team |
automatic_check_in_out | Check-in / Check-out |
automatic_recurring | Recurring |
Navigation — Table rows are not clickable. Use Open Operations — Tickets in the tab header (also shown on the empty state) to jump to the full Operations workspace for assignment, notes, resolution, and Cost allocation (link operational cash flows to the ticket). Far-future Schedule date values may show Draft (display status) in Operations even when this read-only table lists the underlying workflow status. The Communication tab can show a ticket marker on the WhatsApp timeline when a linked ticket was created between the first and last messages in view.
Load errors — If the ticket list fails to load, a red banner shows Could not load tickets. Try again. with a Retry control. Your other booking tabs stay available while you retry.
Empty state — When no ticket exists yet for this booking, the tab shows No tickets yet, the helper line When the tenant or your team opens a ticket for this booking, it will appear here., and the same Open Operations — Tickets header link as the populated table.


Files tab
Files is a per-booking document workspace (grid layout, not a simple attachment list). Use it for IDs, signed contracts, receipts, and other PDFs or images that should stay with the booking for audit and handoffs.
- Upload — click Upload (multi-file picker) or drag files onto the tab. While uploads run, an Uploading… spinner appears in the header. New files sort newest first in the grid.
- Empty state — when no documents exist yet, the tab shows a circle icon and No files uploaded yet with the same drag-and-drop hint as the header Upload control.
- Drag overlay — dragging files over the tab shows a dashed Drop files here to upload banner until you release or leave the drop zone.
- Grid — each tile shows a type badge (PDF, IMG, XLS, DOC, or FILE), filename, and a row menu (Preview, Download, Delete when your role includes
bookings.delete_files). Image tiles show a thumbnail; PDF tiles embed a small preview in the card. - Open / preview — clicking a PDF or image tile (or Preview in the row menu) opens an in-tab overlay with the filename, Download, and Close. Excel, Word, and other types open in a new browser tab instead of the overlay.
- Delete — Delete in the row menu opens a confirmation dialog naming the file; confirm to remove it permanently from the booking.
- Contract tags — when multiple contract PDFs exist, the newest non-superseded contract upload shows a Current badge and older signed contracts an Old badge (tooltips explain which file tenants and exports treat as active).
- Hostkit invoices (read-only) — when Hostkit is your active invoicing provider and chargeable allocations have been invoiced, Vivin synthesises PDF tiles in the grid (filename pattern
Invoice_<ref>.pdf) so operators can Preview or Download the Hostkit document from the booking without hunting Finance. These entries are not storedbooking_filerows: the row menu omits Delete, and they disappear if you upload a real invoice-receipt file for the same booking. See Finance — Hostkit invoice links.
Uploading on Contract Info can still mark the booking as contract-signed; general attachments added here do not change that status unless you use the contract upload flow on Contract Info.




Tenant Management
The Bookings module centralises all tenant information and interactions:
- Centralised tenant profiles — contact details, documents, booking history, and payment records all accessible from the booking detail view.
- Team notes — internal booking threads with
@mentionemail alerts (see Internal Notes tab). - Communication — when the account tenant chatbot is enabled, the Communication tab shows WhatsApp (with labels and composer) and read-only email with the tenant (see Communication tab); configure bot behaviour under ChatBot settings.
- Other tenant channels — SMS rules, communication templates, and portal flows are documented under Automation & AI and Tenant Portal.
- Document storage — store ID copies, contracts, receipts, and other documents per tenant.
- Automatic record creation — tenant records are created automatically from booking data, whether the booking comes from a marketplace, the white label booking engine, or manual entry. No duplicate data entry needed.
For a tenant-first workspace (cross-booking tenant segmentation, debt filtering, profile updates, and history across bookings), use Tenants.
Creating a New Booking
Manual bookings pair with Processing a New Booking and Create New menu — Booking — assign tenant category per FAQ — Assign tenant category for direct booking. Full pairing matrix: Bookings section cross-reference.
To create a booking manually (for direct reservations not coming from an external platform), click + Create New in the left sidebar and select Booking.

The Tenant field uses a server-driven picker: opening the list prefetches a small batch, search hits the server with a short debounce, and scrolling near the bottom of the dropdown loads more tenants — useful on large accounts without loading the full directory into the browser at once.

The booking creation form captures:
- Tenant — pick an existing tenant with the Tenant name server-driven search picker: open the control, type to search names and emails on the server, and scroll the menu for more matches. Contact details come from the tenant profile you select (create or update tenants first in Tenants when someone is not in the list yet). Tenant category is assigned on Tenant Info, not in this wizard — see Processing a New Booking — Step 2 and FAQ — Assign tenant category for direct booking.
- Property and Unit — choose Property first, then Unit. Both fields use the same server-driven search picker pattern: a small first page when you open the menu, debounced server search as you type, and infinite scroll for more rows. When you type a search term, internalName matches rank above address-only or tag-only hits (exact → prefix → substring → other fields) before pagination — see Glossary — Picker search ranking. The Unit menu is scoped to the selected property — changing property after you picked a unit clears the unit and reloads the listing list for the new building so a room from another property cannot stay selected by mistake.

Property picker search-ranking captures refreshed 2026-06-17 15:10 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_PROPERTY_SEARCH=António npx tsx tools/capture-bookings-add-booking-property-picker-search-rank-screenshot.ts and …/capture-finance-other-filters-property-picker-search-rank-screenshot.ts).
- Dates — contract start date, move-in date, and expected end date
- Platform — select "Direct" for direct bookings, or the relevant external platform
- Booking categories — optional multi-select tags (when configured under Categories)
- Lease purpose — optional or required searchable dropdown when Lease purpose is enabled on the account

After selecting the unit and dates, the rent details step shows the financial configuration:
When the property uses Per stay duration admin fees (Listings > Admin fee), the Admin fee amount on this step may stay blank — Vivin resolves the tier from the booking’s stay length when you create the reservation. Enter a manual € amount only when you intend to override that default.
When the unit uses variable seasonal pricing but every contract month in the selected Start date–End date span shares the same configured € amount, Vivin stores the new booking as fixed rent at reservation level. The Add booking form still reflects unit defaults; after Create booking, open Contract Info to confirm the collapsed headline. See Fixed rent on a variable unit.
Monthly rent accepts €0 on Add booking (and in Change monthly rent on Contract Info) when you need a rent-free reservation — for example staff accommodation, promotional stays, or placeholder contracts where charges live only in fixed fees. Negative amounts are rejected; use €0 explicitly instead of leaving the field blank when fixed rent is required.
When the selected property has automatic check-in or check-out maintenance tickets configured on Listings — Maintenances tab, and you turn off Use unit contract rents and other contract details on the rent step, Vivin shows Maintenance tickets with Create check-in ticket and/or Create check-out ticket (only the event types enabled on the property). Both default checked — same as the property. Uncheck to skip automatic ticket creation for this reservation only; later bookings on the property still follow the property rule unless you opt out again. If neither auto-create is configured on the property, the subsection stays hidden. Troubleshooting: FAQ — Skip automatic check-in/out tickets for one booking.

Per-booking CI/CO ticket opt-out capture re-verified 2026-07-08 02:15 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5174 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL VIVIN_DOCS_PROPERTY_SEARCH=AA-11-5D VIVIN_DOCS_UNIT_SEARCH=AA-11-5D-R1 npx tsx tools/capture-bookings-add-booking-maintenance-ticket-opt-out-screenshot.ts on develop-line frontend #1140; prior PNG bytes unchanged). Staging-branch frontend (localhost:5173) lacks #1140 UI — use the develop worktree on 5174 for recapture.

The system previews the full payment structure before you confirm:

Click Create Booking to save. The payment schedule is automatically generated based on the property's contract settings.
If you select a unit that already has an active booking for the same date range, the system will warn you about the overlap. Overlapping bookings on the same unit are not permitted.
Adding Extra Charges to a Booking
To add a one-off charge to an existing booking (for example, a damage fee, a room change surcharge, or a guest fee), open the booking detail and click Add Charge.

Specify:
- Charge type (linked to Categories in Settings)
- Amount
- Due date — when this charge must be paid
- Description — an optional note explaining the charge
The new charge appears in the Payment Plan tab and is tracked alongside all other scheduled payments.
Cancellations and Refunds
Cancel flows pair with Cancelling a Booking and Payment Allocation for refund allocation. Full pairing matrix: Bookings section cross-reference.
When a booking is canceled, Vivin automatically handles the payment schedule cleanup based on the refund type:
Full Refund
All remaining payment items are removed from the payment schedule. Any payments already received are marked for refund. The unit becomes immediately available for new bookings.
No Refund
Only unpaid future items are removed from the payment schedule. Already-paid items are retained. The unit becomes available for new bookings from the cancellation date forward.
Partial Refund
Partial refunds require manual processing — the system does not automatically calculate partial amounts because the split depends on your specific cancellation terms and negotiation with the tenant. You will need to:
- Adjust the payment schedule manually
- Record the partial refund amount
- Document the agreed terms
For the full step-by-step cancellation workflow, see Cancelling a Booking.
Early Departures
When a tenant leaves before their contract end date, adjust dates from Contract Info so the payment plan and reporting match reality.
Change move-out date (physical departure)
Use this when the tenant actually leaves earlier than planned:
- Open the booking → Contract Info → Booking information → click the pencil to enter edit mode.
- On Move out, click Change move-out date.
- Pick the New Move-out Date and leave Update Payment Plan enabled (default) so Vivin recalculates the schedule and drops future unpaid charges after the new departure.
- For move-outs that shorten the stay, review optional rent controls in the modal (keep current rent vs adjust monthly amounts) before you confirm.

Change contract end date (legal boundary only)
Use End date → Change contract end date when you need to move the contract boundary without necessarily changing operational check-in/out — for example aligning the legal end to a signed amendment while move-out stays unchanged. The modal can mirror check-out to contract end when your account uses that pattern.

Move out drives operational departure and payment-plan span for most early-leave cases. End date is the contract boundary on the booking record; Finance and partner exports may treat them differently when check-in/out and contract dates diverge. When in doubt, update move-out for an early physical leave and confirm the Payment Plan tab afterward.
Room changes: If a tenant is moving from one unit to another within your portfolio, be careful when adjusting dates. Overlapping charges between the old and new unit can result in double billing. Always verify the payment schedules on both bookings after making changes.
Invoiced items: Charges that have already been invoiced through the accounting integration (e.g., Invoice-xpress) cannot be automatically removed from the payment schedule. These must be handled as credit notes or manual adjustments in your accounting system.
Key Business Rules for Bookings
-
Payment schedules are fixed at creation. Charges and due dates are generated at the time of booking creation based on the property settings in effect at that moment. Changing property settings afterward does not affect existing bookings.
-
Contract signed status is set by file upload. Uploading any PDF on the Contract Info tab marks the booking as "contract signed" and records the timestamp.
-
Platform filter options reflect your integrations. Only platforms enabled in Settings > Integrations appear as filter options in the bookings list.
-
Overpayments are tracked as credits. If a tenant pays more than a scheduled charge, the excess is recorded and automatically applied to the next charge.
-
Overlapping bookings are blocked. You cannot create a booking for a unit that is already occupied during the requested dates.
-
Bookings automatically generate tenant portal access. Once a booking is created, the tenant can access the Tenant Portal through an emailed access-link flow (default) or a direct URL containing booking credentials (
id, and usuallycode) to view their payment schedule and make payments (if the property's payment settings allow it). -
Cancellation automatically cleans up the payment schedule. Full refund removes all items; no refund removes only unpaid future items. Partial refunds require manual handling.
-
Invoiced items cannot be auto-removed. Once a charge has been invoiced through the accounting integration, it remains in the system and must be handled via credit notes.
Bookings guide subsection index
This index pairs Bookings list, sidebar, and lifecycle sections with Related subsections — use it when a reservation row disagrees with Finance ledgers, Tenants profiles, or Sales availability. Full pairing matrix: Bookings section cross-reference.
Bookings section cross-reference
Use this table when one Bookings section or control naturally leads into another module, workflow, or concept — each row links to the docs you should read before or after acting in that section.
Related
Related below links this module to settings, concepts, workflows, and escalation paths. Pair Documentation map & escalation with Modules hub — Documentation map & escalation; pair Upstream & downstream workflows with Common Workflows — Workflow cross-reference. Topic-to-section pairing in sections above: Bookings guide subsection index · Bookings section cross-reference. Full hub matrix: Module cross-reference · Modules hub subsection index.
Documentation map & escalation
Documentation-map bullets pair with Introduction — Section cross-reference and FAQ — Section cross-reference. Hub parity: Modules hub — Documentation map & escalation. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Modules hub — Hub pairing matrix across operator workspaces
- Using in-app support — Escalate contract, deposit, or communication issues to Vivin support with booking context
- Glossary — Term definitions used across booking lifecycle workflows
Upstream & downstream workflows
Workflow bullets pair with Common Workflows — Workflow cross-reference. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Processing a New Booking (section cross-reference; Deeper workflow reads; hub) — Step-by-step booking creation workflow
- Managing a Check-in (section cross-reference; Deeper workflow reads; hub) — Coordinate tenant arrivals
- Managing a Check-out & Deposit Refund (section cross-reference; Deeper workflow reads; hub) — Departure-week workflow for Deposit tab actions documented on this page
- Managing a Check-out (section cross-reference; Deeper workflow reads; hub) — Handle departures and deposits
- Cancelling a Booking (section cross-reference; Deeper workflow reads; hub) — Process cancellations
- Manual block hygiene (workflow) (section cross-reference; Deeper workflow reads; hub) — Clear stale holds when occupancy or Vacant Units looks suppressed
- Portfolio KPI review (section cross-reference; Deeper workflow reads; hub) — Reconcile booking counts with Dashboard, Sales, and Finance
- Entering Monthly Utility Bills (section cross-reference; Deeper workflow reads; hub) — Monthly supplier bills that drive overage charges against the stored ceiling
- Notifications — Payment overdue alerts — Operator Payments category rows that row-click into booking Payment Plan or Contract Values
- Handling a Late Payment — Step 1 (section cross-reference; Deeper workflow reads; hub) — Collections follow-up after a payment overdue alert lands on this module
Deeper workflow reads
Workflow reads pair with Common Workflows hub subsection index and Workflow cross-reference. Each workflow sub-guide reciprocates with [Deeper workflow reads](../modules/bookings/index.md#deeper-workflow-reads) anchors on Module documentation hubs bullets — hub parity: Modules hub — Deeper workflow reads. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Processing a New Booking — Import checks, manual Add booking, confirmation payment, and portal gates (section cross-reference; Deeper API reads; hub)
- Managing a Check-in — Arrival-week prep, move-in receipts, and Timeline overlap checks (section cross-reference; Deeper API reads; hub)
- Managing a Check-out & Deposit Refund — Departure-week settlement on booking Deposit and Transactions tabs (section cross-reference; Deeper API reads; hub)
- Cancelling a Booking — Sidebar cancel flow, refund allocation, and calendar release (section cross-reference; Deeper API reads; hub)
- Handling a Late Payment — Contract Values, Payment plan, and Transactions triage after payment overdue alerts (section cross-reference; Deeper API reads; hub)
- Notification triage — Row-click navigation into booking sidebars from
/notifications(section cross-reference; Deeper API reads; hub) - Manual block hygiene — Timeline overlap vs stale holds before rebooking (section cross-reference; Deeper API reads; hub)
- Portfolio KPI review — Other filters → Tenant category and list counts during month-end (section cross-reference; Deeper API reads; hub)
- Onboarding a New Property — First reservation verification after setup steps 13–14 (section cross-reference; Deeper API reads; hub)
Settings that shape Bookings
Settings bullets pair with Account Settings — Tab cross-reference. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Settings > Contract — Configure contract templates
- Settings > Preferences — In-app notifications — Account-wide booking, payment, and communication alert categories
- Settings > Integrations — Channex — Channel-manager imports without a Sales > Channels column
- Settings > Tenant categories — Segment portal modules and Category on Contract Info / tenant profiles for each reservation
- Settings > Emails — Resend Check-in email, lifecycle triggers, and Communication tab vs Communication Rules
Deeper concept reads
Concept reads pair with Concepts hub subsection index and Concept cross-reference. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Booking Lifecycle — Computed status tabs, Timeline Gantt, list filters, and transition rules (section cross-reference; hub)
- Payment Allocation — Two-layer receipts, invoiced-floor rent edits, and reject/revert warnings on booking Transactions (section cross-reference; hub)
- Integrations & Distribution — How bookings are imported from external channels (section cross-reference; hub)
- Automation & AI — Automated booking-to-contract pipeline (section cross-reference; hub)
- Services Marketplace — Ancillary tenant charges that appear on the Payment plan tab (section cross-reference; hub)
- Tenant MCP — External AI access to booking-scoped maintenance and portal links (section cross-reference; hub)
- Landlord MCP — Account-scoped portfolio tools from external clients (section cross-reference; hub)
Operator modules (pairing surfaces)
Module hub bullets pair with Modules — Module cross-reference. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Tenants Module — Tenant-first workspace for profiles, activity, and debt visibility
- Finance Module — Track payments and financial status
- Sales Module — Multicalendar/Pricing availability vs Bookings Timeline (reservation Gantt)
- Audit Module — Portfolio-wide manual blocks table (complements Timeline with Only bookings off)
- Audit — Discounts tab — Cross-portfolio discounted Contract Values with export and sidebar drill-down
- Listings Module — Manage properties and units
- Inbox module — Portfolio WhatsApp threads linked from the Communication tab
- Dashboard Module — Live debt and free-room KPIs for ongoing stays
- Analytics Module — Portfolio revenue/occupancy trends over a month range
- Utilities module — How supplier bills exceed Bills included and post to Payment plan
Lockout catch-up after password recovery
Operational backlog after sign-in recovery pairs with Resetting a Management User Password — Step 3. Hub parity: Common Workflows — Lockout catch-up after password recovery. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Lockout catch-up after password recovery — Hub matrix when sign-in was restored mid-setup before step 14 reservations are verified
- Getting Started — Lockout catch-up after password recovery — Canonical operational backlog mesh (notification triage, Pending Steps 6b, portal gates)
- Notification triage — Clear Payments category rows that row-click into booking sidebars before Mark all as read
- Processing a New Booking — Step 6 — Portal gates delayed by lockout on new imports
- Pending manual receipt approval — Month-end Pending mesh on booking Transactions after lockout
Pending manual receipt approval
Receipt approval pairs with Finance — Pending manual payments and Bookings — Transactions tab. Hub parity: Common Workflows — Pending manual receipt approval. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Pending manual receipt approval — Hub matrix when recorded bank transfers on booking Transactions still show pending until Approve payments
-
Transactions tab — Per-row Approve payment and amber Pending state on booking sidebar receipts
-
Finance — Pending manual payments — Portfolio Pending chip and bulk Approve selected on Finance → Transactions
-
Processing a New Booking — Step 5b/6b — Confirmation receipt mesh on new imports
-
Notification triage — Step 4 — Pending manual in-payment rows that row-click here
-
FAQ — Pending manual receipt approval hub — Symptom table for Approve payments / amber Pending
Notification row-click navigation
/notifications row-click with bookingId (or link to a booking route) opens the booking detail sidebar on this module — finish triage on the correct tab before you bulk Mark all as read on /notifications. Hub parity: Common Workflows — Notification row-click navigation. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Notification row-click navigation — Hub matrix (
notifications-module-row-click-target.png,notifications-row-navigate-to-booking-detail.png,notifications-row-navigation-flow.mp4) - Notifications module — Notification row-click navigation — Canonical inbox pairing
- Tenants — Notification row-click navigation — Tenant profile sidebar when alert carries
tenantId - Inbox — Notification row-click navigation — Bell Inbox
linkdeep-link vs General row-click - Operations — Notification row-click navigation — Turnover-week alerts that row-click into Bookings first
- Listings — Notification row-click navigation — Property or unit sidebar when alert carries
listingIdorpropertyId - Utilities — Notification row-click navigation — Overage payment overdue alerts after bill cycle
- Sales — Notification row-click navigation — Channel-import alerts before Multicalendar review
- Analytics — Notification row-click navigation — Month-range KPI charts after row-click opens booking context
- AI Chat — Notification row-click navigation — Verify assistant-cited alerts by row-click before operational follow-up
- Audit — Notification row-click navigation — Discounts / Manual Blocks month-end review after row-click
- Legacy
/propertiesURLs — Notification row-click navigation — Legacy bookmarks that land in Listings during alert triage - Booking engine details — Notification row-click navigation — Engine-sourced alerts before Full integration payload edits
- Dashboard — Notification row-click navigation — Bell General vs full
/notificationsrow-click - The Booking Detail View — Sidebar tabs after row-click lands
- Notification triage — Step 4 — Row-click before Step 5
- Payment alert to receivables triage — Ongoing/Ended payment overdue row-click
- Confirmation alert triage — Upcoming Booking created / Payment received row-click
- Pending manual receipt approval — Pending manual in-payment row-click → Transactions
- Booking sidebar tab load failures — Tab Refresh / Retry when row-click succeeds but a tab fails
- Handling a Late Payment — Notification row-click navigation — payment overdue on Step 1 after alert row-click
- Processing a New Booking — Notification row-click navigation — Booking created / Payment received on Step 6
- FAQ — Notification row-click navigation — Target field order (
link,bookingId,tenantId,listingId,propertyId)

Payment alert to receivables triage
Ongoing/Ended payment overdue alerts on /notifications row-click into this module — review Payment Plan, Contract Values, and Transactions on the opened booking before you trust portfolio Debt Aging or Dashboard Total Debt. Hub parity: Common Workflows — Payment alert to receivables triage. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Payment alert to receivables triage — Hub matrix (
notifications-row-navigate-to-booking-detail.png,notifications-row-navigation-flow.mp4,finance-overview-debt-aging-walkthrough-flow.mp4) - Notifications module — Payment alert to receivables triage — Payments category row-click entry
- Dashboard — Payment alert to receivables triage — Total Debt KPI after alert row-click
- Notification row-click navigation — Row-click on
/notificationsbefore portfolio KPI read - Payment Plan tab — Scheduled charges behind payment overdue alerts
- Contract Values tab — Unpaid lines that drive overdue notifications
- Transactions tab — Recorded receipts and amber Pending before collections
- Pending manual receipt approval — Approve before Debt Aging sign-off
- Confirmation alert triage — Contrast Upcoming vs Ongoing/Ended alerts
- Handling a Late Payment — Payment alert to receivables triage — payment overdue on Step 1 after alert row-click
- Finance — Payment alert to receivables triage — Overview Debt Aging after single-booking triage
- Tenants — Payment alert to receivables triage — With Debt cross-check on tenant profile
- Inbox — Payment alert to receivables triage — payment overdue on General before WhatsApp chase
- Operations — Payment alert to receivables triage — Unpaid move-in lines before key handover on Check-in & Check-out
- Listings — Payment alert to receivables triage — Property Payments Active portal charges on listing bookings
- Utilities — Payment alert to receivables triage — Utility overage lines behind overdue alerts
- Sales — Payment alert to receivables triage — Channel-import schedules behind overdue alerts
- Analytics — Payment alert to receivables triage — Revenue trend may lag until receivables clear
- AI Chat — Payment alert to receivables triage — Validate assistant debt answers after receivables triage
- Audit — Payment alert to receivables triage — Discounts review when receivables lag behind goodwill lines
- Legacy
/propertiesURLs — Payment alert to receivables triage — Collections on bookings tied to redirected properties - Booking engine details — Payment alert to receivables triage — Engine-sourced schedules behind overdue alerts
- Finance — Finance debt receivables triage — Top debtors when alert batch needs rank
- Notification triage — Payment alert to receivables triage — Payments row-click on Step 4
- FAQ — Payment alert to receivables triage — Alert-type contrast table
- FAQ — Payment alert to receivables triage hub — Payment Plan / Transactions on opened booking symptom table
Finance debt receivables triage
After Payment alert to receivables triage row-click, review Payment Plan / Contract Values on the opened booking before you trust portfolio Top debtors. Hub parity: Common Workflows — Finance debt receivables triage. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Finance debt receivables triage — Hub matrix (
finance-overview-income-chart-debt-aging.png,finance-overview-debt-aging-walkthrough-flow.mp4) - Payment alert to receivables triage — Single-booking alert triage before portfolio surfaces
- Finance — Finance debt receivables triage — Debt Aging Top debtors canonical surface
- Pending manual receipt approval — Clear amber Pending before Top debtors sign-off
- Dashboard — Finance debt receivables triage — Total Debt headline vs Finance drill-down
- Bookings — Finance debt receivables triage — Payment Plan on opened booking
- Handling a Late Payment — Finance debt receivables triage — Debt Aging on Step 1 before outreach
- Portfolio KPI review — Finance debt receivables triage — Month-end Top debtors on Step 7
- FAQ — Finance debt receivables triage hub — Symptom table for four-surface triage
- Payment Plan tab — Per-booking schedule behind payment overdue alerts
- Transactions tab — Amber Pending before Debt Aging sign-off
Finance Income status drill-down
After alert row-click, confirm Payment Plan / Contract Values on the opened booking before you trust Income → In debt month-scoped payment lines. Hub parity: Common Workflows — Finance Income status drill-down. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Finance Income status drill-down — Hub matrix (
finance-overview-income-status-in-debt-modal.png,finance-overview-income-drill-down-flow.mp4) - Finance debt receivables triage — Debt Aging Top debtors when payment-line modal is not enough
- Finance — Income status drill-down — Stacked Income chart canonical surface
- FAQ — Finance Income status drill-down hub — Symptom table for segment vs Debt Aging
- FAQ — Finance Income status drill-down — Paid / Scheduled / In debt segment-click habit
- Portfolio KPI review — Finance Income status drill-down — Month-end Income reconciliation on Step 7
- Payment Plan tab — Per-booking schedule behind Scheduled / In debt segments
- Contract Values tab — In Debt lines vs portfolio Debt Aging
Cash flow forecast drill-down
After alert row-click, Approve on Transactions before Cash flow forecast month bars reflect the transfer. Hub parity: Common Workflows — Cash flow forecast drill-down. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Cash flow forecast drill-down — Hub matrix (
finance-overview-cash-flow-all-payments-modal.png,finance-overview-cash-flow-day-view.png,finance-overview-cash-flow-drill-down-flow.mp4) - Finance Income status drill-down — Paid / Scheduled / In debt segments — not collections history
- Finance — Income chart and cash flow forecast — Canonical Cash flow forecast chart surface
- FAQ — Cash flow forecast drill-down hub — Symptom table for collections vs Income / Dashboard
- FAQ — Cash flow forecast drill-down — Month / Day bar-click habit
- Portfolio KPI review — Cash flow forecast drill-down — Month-end collections reconciliation on Step 7
- Transactions tab — Amber Pending before Cash flow forecast month bars update
- Payment Plan tab — Per-booking schedule behind Income segments vs collections
Confirmation alert triage
Upcoming Booking created / Payment received / Pending manual in-payment rows on /notifications row-click into this module — finish Processing a New Booking — Step 5b / Step 6 on Transactions or Contract Info before bulk-clear on post-login bell backlog. Hub parity: Common Workflows — Confirmation alert triage. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Confirmation alert triage — Hub matrix (
notifications-row-navigate-to-booking-detail.png,notifications-row-navigation-flow.mp4) - Notifications module — Confirmation alert triage — Canonical inbox pairing
- Dashboard — Confirmation alert triage — Post-login Upcoming alert backlog on bell
- Notification row-click navigation — Row-click on
/notificationsbefore mark-read - Payment alert to receivables triage — Contrast Upcoming vs Ongoing/Ended payment overdue
- Pending manual receipt approval — Payment received alert until Approve payments
- Transactions tab — Approve payment on confirmation receipts
- Contract Info tab — Portal gates and contract status on Upcoming imports
- Processing a New Booking — Step 5b / Step 6 — Canonical confirmation gates
- Finance — Confirmation alert triage — Transactions amber Pending before Overview KPI refresh
- Tenants — Confirmation alert triage — Tenant Info / Category on confirmation-week clusters
- Operations — Confirmation alert triage — Turnover prep after confirmation receipts approved
- Listings — Confirmation alert triage — Channel import bookings on go-live properties
- Utilities — Confirmation alert triage — First bill cycle after go-live alerts
- Sales — Confirmation alert triage — Channel-import Upcoming alerts before Channels linking
- Analytics — Confirmation alert triage — Upcoming alerts during month-end KPI review
- AI Chat — Confirmation alert triage — Assistant-cited confirmation backlog before bulk mark-read
- Audit — Confirmation alert triage — Month-end Discounts review after confirmation receipts approved
- Legacy
/propertiesURLs — Confirmation alert triage — First alerts after legacy redirects land in Listings - Booking engine details — Confirmation alert triage — White-label Upcoming alerts before payload sync
- Notification triage — Confirmation alert triage — Steps 4 / 5 path
- Portfolio KPI review — Confirmation alert triage — Month-end alert cleanup on Step 7
- Onboarding a New Property — Confirmation alert triage — First confirmation alerts on go-live (Step 7)
- FAQ — Confirmation alert triage — Alert-type table and bulk mark-read guard
- FAQ — Confirmation alert triage hub — Transactions / Contract Info on Upcoming imports symptom table
New inventory to first booking handoff
First Upcoming reservation on go-live inventory pairs Onboarding a New Property — Step 7 with Processing a New Booking — Steps 1–6 — duplicate import check before Add booking, portal gates on Step 6. Distinct from Property setup to first arrival handoff (downstream arrival week ~7 days out). Hub parity: Common Workflows — New inventory to first booking handoff. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — New inventory to first booking handoff — Hub matrix (
listings-module-overview.png,bookings-add-booking-modal.png,workflows-onboarding-property-wizard.mp4) - The Timeline view — Multicalendar overlap before first import
- Contract Info tab — Tenant category on first Upcoming stay (Step 6)
- Listings — New inventory to first booking handoff — Portfolio verify on Step 7
- Sales — New inventory to first booking handoff — Channel import before Add booking
- Onboarding a New Property — Step 7 — Upstream go-live verify
- Processing a New Booking — Step 1 — Duplicate check before manual create
- Confirmation alert triage — First Booking created alerts
- Property setup to first arrival handoff — Downstream arrival week
- FAQ — New inventory to first booking handoff — Symptom table for property wizard → first reservation
Property setup to first arrival handoff
First Upcoming reservation on go-live inventory pairs with Onboarding a New Property — Step 7 before Managing a Check-in — Step 1 (~7 days out). Distinct from Confirmation to check-in handoff (portal gates after first booking exists). Hub parity: Common Workflows — Property setup to first arrival handoff. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Property setup to first arrival handoff — Hub matrix (
listings-property-edit-access-lockers-tab.png,workflows-operations-check-in-out-planning-view.png,workflows-onboarding-property-wizard.mp4) - Contract Info tab — Tenant category / portal gates on first Upcoming stay
- Listings — Property setup to first arrival handoff — Access Lockers before Step 4
- Operations — Property setup to first arrival handoff — Check-in & Check-out Next 7 days on first move-in
- Onboarding a New Property — Step 7 — Upstream go-live verify before arrival week
- Managing a Check-in — Step 1 — Downstream arrival-week entry
- Confirmation to check-in handoff — Upstream Upcoming portal gates after first booking
- FAQ — Property setup to first arrival handoff — Symptom table for go-live → first arrival week
Confirmation to check-in handoff
Upcoming Contract Info portal gates and Transactions confirmation receipts must clear before Managing a Check-in — Step 1 (~7 days out). Hub parity: Common Workflows — Confirmation to check-in handoff. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Contract Info tab — Portal Copy / Impersonate Tenant gates on Upcoming imports
- Transactions tab — Approve payment on confirmation receipts before handoff
- Confirmation alert triage — Upcoming alert row-click into this module
- Operations — Confirmation to check-in handoff — Check-in & Check-out Next 7 days after Step 6
- Processing a New Booking — Step 6 — Canonical upstream portal sanity
- Managing a Check-in — Step 1 — Downstream arrival-week entry
- Common Workflows — Confirmation to check-in handoff — Hub matrix (
bookings-detail-contract-method-of-payments.png,workflows-operations-check-in-out-planning-view.png,booking-lifecycle-status-tabs-flow.mp4) - Pending manual receipt approval — Step 5b confirmation receipts before handoff
- FAQ — Confirmation to check-in handoff — Symptom table for Upcoming → arrival week
Check-in to check-out handoff
Ongoing stays after Managing a Check-in — Step 4 pair with Managing a Check-out — Step 1 (~7 days before departure). Hub parity: Common Workflows — Check-in to check-out handoff. Distinct from Confirmation to check-in handoff (Upcoming → arrival week). Full pairing matrix: bookings-section-cross-reference · Module cross-reference.
- Timeline view — Departure bar on Ongoing unit rows
- Filtering and Searching Bookings — Ongoing status card → departure-week planning
- Operations — Check-in to check-out handoff — Check-outs pill + Next 7 days
- Managing a Check-in — Step 4 — Upstream keys handed over
- Managing a Check-out — Step 1 — Downstream departure-week entry
- Common Workflows — Check-in to check-out handoff — Hub matrix (
operations-check-in-out-check-outs-next-7-days.png,bookings-timeline-view.png) - Common Workflows — Same-day turnover coordination — Shared-unit one-day overlap
- Common Workflows — Check-out final utilities handoff — Final overages before refund (distinct mesh)
- FAQ — Check-in to check-out handoff — Symptom table for Ongoing → departure week
Check-out final utilities handoff
Departure-week final utility overage lines on Payment Plan must settle via Entering Monthly Utility Bills — Step 4 before Managing a Check-out — Step 6 and Deposit Ready To Refund. Hub parity: Common Workflows — Check-out final utilities handoff. Distinct from Check-out collections before refund (rent/fee arrears) and Utility overage collections (mid-stay mesh). Full pairing matrix: bookings-section-cross-reference · Module cross-reference.
- Payment Plan tab — Final utility overage schedule lines blocking refund
- Deposit tab — Ready To Refund toggle after utility overage settles
- Utilities — Check-out final utilities handoff — Canonical Allocations / Bills posting
- Entering Monthly Utility Bills — Step 4 — Upstream overage posting verification
- Managing a Check-out — Step 6 — Settlement before deposit release
- Handling a Late Payment — Step 1 — Collections when overage blocks Ready To Refund
- Common Workflows — Check-out final utilities handoff — Hub matrix (
utilities-allocations-review-flow.mp4,bookings-detail-payment-plan-tab-schedule.png,bookings-detail-deposit-tab-ready-to-refund-toggle.png) - Check-out collections before refund — Rent/fee arrears contrast on same booking
- FAQ — Check-out final utilities handoff — Symptom table for final utility overage blocking refund
WhatsApp per-booking messaging
Communication tab WhatsApp composer pairs with cross-booking Inbox when operators need Payment Plan, Tickets, or Files on the same reservation. Hub parity: Glossary — WhatsApp per-booking messaging hub · Common Workflows — WhatsApp per-booking messaging. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — WhatsApp per-booking messaging — Hub matrix (
bookings-detail-communication-tab-whatsapp-thread.png,inbox-module-overview.png,inbox-module-triage-flow.mp4) - Glossary — WhatsApp per-booking messaging hub — Surface table + per-guide/module mesh reciprocal hub
- Dashboard — WhatsApp per-booking messaging — Bell Inbox sub-tab vs General on post-login scan
- Notifications — WhatsApp per-booking messaging — Canonical
/notificationsmessage alert rows - Inbox — WhatsApp per-booking messaging — Cross-booking triage and bell Inbox sub-tab
- Tenants — WhatsApp per-booking messaging — Tenant profile after Inbox name click
- Finance — WhatsApp per-booking messaging — Collections outreach with Transactions visible
- Operations — WhatsApp per-booking messaging — Maintenance ticket threads on Communication
- Listings — WhatsApp per-booking messaging — Go-live property tenant threads after channel import
- Utilities — WhatsApp per-booking messaging — Utility overage bill questions on Communication
- Sales — WhatsApp per-booking messaging — Channel-import message backlog during Multicalendar review
- Analytics — WhatsApp per-booking messaging — Month-end message backlog during KPI review
- AI Chat — WhatsApp per-booking messaging — Assistant-cited threads before operational follow-up
- Audit — WhatsApp per-booking messaging — Month-end communication review after Discounts audit
- Legacy
/propertiesURLs — WhatsApp per-booking messaging — Legacy bookmarks during message triage - Booking engine details — WhatsApp per-booking messaging — Engine-sourced tenant threads before payload sync
- Communication tab — Labels, Pause bot, Bot reasoning, email attachments
- Notification row-click navigation — Message alert row-click lands on booking sidebar
- Common Workflows — Notification row-click navigation —
New WhatsApp message from …on/notificationsvs bell Inbox - Notification triage — WhatsApp per-booking messaging — Message pings on bell Inbox /
/notifications - Handling a Late Payment — WhatsApp per-booking messaging — Collections outreach on Step 3
- Managing a Check-in — WhatsApp per-booking messaging — Arrival-week threads before Step 4
- Managing a Check-out — WhatsApp per-booking messaging — Departure settlement on Step 6
- Processing a New Booking — WhatsApp per-booking messaging — Confirmation follow-up on Step 6
- Cancelling a Booking — WhatsApp per-booking messaging — Void outreach before Step 4
- Entering Monthly Utility Bills — WhatsApp per-booking messaging — Overage bill questions on Step 4
- Portfolio KPI review — WhatsApp per-booking messaging — Month-end message backlog on Step 7
- Manual block hygiene — WhatsApp per-booking messaging — Blocked-date questions on Step 3
- Onboarding a New Property — WhatsApp per-booking messaging — First tenant threads on Step 7 go-live
- Using in-app support — WhatsApp per-booking messaging — Self-serve Inbox / Communication before filing
- Resetting a Management User Password — WhatsApp per-booking messaging — Lockout-delayed bell Inbox after Step 3
- FAQ — WhatsApp per-booking messaging hub — Communication tab composer with Payment Plan visible symptom table
- Glossary — WhatsApp per-booking messaging hub — Surface table + per-guide/module mesh reciprocal hub
Per-guide mesh: Manual block hygiene — Confirmation alert triage (Step 5), Cancelling a Booking — Confirmation alert triage (Step 2), Managing a Check-out — Confirmation alert triage (Step 6), Onboarding a New Property — Confirmation alert triage (Step 7), Processing a New Booking — Confirmation alert triage (Steps 5b / 6), Handling a Late Payment — Confirmation alert triage (Step 1), Managing a Check-in — Confirmation alert triage (Step 4), Entering Monthly Utility Bills — Confirmation alert triage, Notification triage — Confirmation alert triage, Portfolio KPI review — Confirmation alert triage (Step 7), Resetting a Management User Password — Confirmation alert triage (Step 3), Using in-app support — Confirmation alert triage
Bot reasoning (audit)
Canonical Communication Reasoning audit on Bot bubbles. Hub parity: Glossary — Bot reasoning (audit) hub · Common Workflows — Bot reasoning (audit). Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Bot reasoning (audit) — Hub matrix (
bookings-detail-communication-tab-bot-reasoning-expanded.png) - Glossary — Bot reasoning (audit) hub — Surface table + per-guide/module mesh reciprocal hub
- Bookings — Bot reasoning (audit) — Canonical Communication Reasoning control
- ChatBot settings — Read-only audit vs editable persona / IF/THEN
ChatBot settings
Account Settings → ChatBot pairs with Communication thread review — canonical communication reasoning audit on bot bubbles. Hub parity: Glossary — ChatBot settings hub · Common Workflows — ChatBot settings. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — ChatBot settings — Hub matrix (
settings-chatbot-tab-overview.png,settings-chatbot-status-bot-connected.png,settings-chatbot-save-rule-flow.mp4) - Glossary — ChatBot settings hub — Surface table + per-guide/module mesh reciprocal hub
- ChatBot settings — Persona, IF/THEN rules, Status Bot pairing
- Glossary — Bot reasoning (audit) hub — Thread audit after rule changes
Reject/revert mistaken receipts
Receipt cleanup pairs with Finance — Row actions on in-payment rows and Bookings — Row actions on in-payment rows. Hub parity: Common Workflows — Reject/revert mistaken receipts. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Reject/revert mistaken receipts — Hub matrix when duplicate receipts on booking Transactions need Reject / Revert after Approve
-
Row actions on in-payment rows — Per-row Reject payment and Revert payment on booking Transactions
-
Finance — Row actions on in-payment rows — Bulk Reject selected on portfolio Finance → Transactions
-
Payment Allocation — Correcting mistaken receipts — Two-layer model and credit note accounting follow-up
-
Processing a New Booking — Step 5b — Approve before reject when confirmation receipts were recorded twice
-
FAQ — Reject/revert mistaken receipts hub — Symptom table for Reject / Revert / Issue credit notes
Check-out ledger cleanup before refund
Duplicate-transfer cleanup pairs with Reject/revert mistaken receipts and Managing a Check-out. Hub parity: Common Workflows — Check-out ledger cleanup before refund. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Check-out ledger cleanup before refund — Hub matrix when Ready To Refund is blocked by duplicate departure transfers on booking Transactions
-
Reject/revert mistaken receipts — Reject / Revert duplicate before Ready To Refund
-
Managing a Check-out — Step 6 — Canonical departure-week duplicate cleanup before refund
-
Common Workflows — Check-out collections before refund — Real arrears contrast (tenant did not pay)
-
Deposit tab — Ready To Refund toggle after duplicate Revert on Transactions
-
Row actions on in-payment rows — Per-row Reject payment / Revert payment
-
Finance — Row actions on in-payment rows — Bulk Reject selected on portfolio ledger
-
FAQ — Check-out ledger cleanup before refund hub — Symptom table for phantom In Debt / Ready To Refund blocked when tenant paid once
Utility overage collections
Utility overage lines on Payment Plan pair with Entering Monthly Utility Bills and Handling a Late Payment. Hub parity: Common Workflows — Utility overage collections. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Utility overage collections — Hub matrix when utility overage rows on Payment Plan stay Unpaid / Overdue after bill posting (
bookings-detail-transactions-approve-payment-modal.png) -
Payment Plan tab — Overage schedule lines after Step 4
-
Row actions on in-payment rows — Approve payments on overage Step 4b receipts
-
Handling a Late Payment — Steps 1–4 — Collections when overage stays unpaid
-
Utilities — Allocations tab — Upstream overage math before lines post
-
Common Workflows — Check-out final utilities handoff — Departure-week overage contrast
-
FAQ — Utility overage collections hub — Symptom table for unpaid utility overage on Payment Plan after bill posting
Cancellation collections before void
Pre-cancel rent/fee arrears pair with Handling a Late Payment and Cancelling a Booking. Hub parity: Common Workflows — Cancellation collections before void. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Cancellation collections before void — Hub matrix when In Debt on Payment Plan or Contract Values blocks Cancel booking until Step 2 settlement
-
Cancelling a Booking — Step 2 — Canonical pre-cancel settlement before Step 4
-
Handling a Late Payment — Steps 1–4 — Collections when rent/fee rows stay unpaid
-
Common Workflows — Check-out collections before refund — Departure-week mesh contrast (completed stay, not policy void)
-
Reject/revert mistaken receipts — Duplicate settlement before void when tenant insists they paid
-
Payment Plan tab — Unpaid schedule lines blocking Cancel booking
-
Row actions on in-payment rows — Approve payments on Step 2a settlement receipts
-
FAQ — Cancellation collections before void hub — Symptom table for In Debt blocking Cancel booking until Payment Plan settles
Check-out collections before refund
Departure-week rent/fee arrears pair with Managing a Check-out (Step 6 before Step 5) and Handling a Late Payment. Hub parity: Common Workflows — Check-out collections before refund. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Check-out collections before refund — Hub matrix when In Debt on Payment Plan blocks Ready To Refund (
workflows-check-out-coordination-flow.mp4,bookings-detail-payment-plan-tab-schedule.png,bookings-detail-deposit-tab-ready-to-refund-toggle.png) -
Managing a Check-out — Step 6 — Canonical settlement before deposit release
-
Handling a Late Payment — Steps 1–4 — Collections when rent/fee rows stay unpaid
-
Payment Plan tab — Unpaid schedule lines blocking Ready To Refund
-
Deposit tab — Ready To Refund toggle after Step 6 settlement
-
Row actions on in-payment rows — Approve payments on Step 6b departure receipts
-
Common Workflows — Check-out ledger cleanup before refund — Duplicate transfer contrast (tenant paid once)
-
Common Workflows — Cancellation collections before void — Pre-cancel void contrast (not departure-week mesh)
-
FAQ — Check-out collections before refund hub — Symptom table for rent/fee In Debt blocking Ready To Refund before deposit release
Handling a Late Payment collections
After Payment alert to receivables triage row-click, use Payment Plan / Transactions on the opened booking for Handling a Late Payment Steps 1–6. Hub parity: Common Workflows — Handling a Late Payment collections hub. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Handling a Late Payment collections hub — Hub matrix when booking-sidebar triage needs collections follow-through (
bookings-detail-payment-plan-tab-schedule.png,notifications-row-navigate-to-booking-detail.png,finance-transactions-pending-pill.png) - Payment Plan tab — Per-booking schedule behind payment overdue alerts
- Transactions tab — Amber Pending before Step 3 outreach
- Payment alert to receivables triage — Alert row-click entry before portfolio Debt Aging
- Finance debt receivables triage — Portfolio Top debtors after single-booking confirm
- Pending manual receipt approval — Step 4b / Step 6b mesh
- Reject/revert mistaken receipts — Revert duplicate before collections outreach
- Communication tab — Step 3 tenant outreach with Payment Plan visible
- Common Workflows — Check-out collections before refund — Departure-week arrears on same booking
- FAQ — Handling a Late Payment collections hub — Symptom table for triage surface → collections step pairing
Check-out vs cancellation
Completed occupancy → Ended (Managing a Check-out Step 7) vs policy void → Canceled (Cancelling a Booking Step 4) — not Delete Booking for mistaken rows. Hub parity: Common Workflows — Check-out vs cancellation. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Check-out vs cancellation — Hub matrix: Ended vs Canceled (
workflows-cancel-booking-refund-modal-flow.mp4,bookings-cancel-booking-modal-refund-types.png,bookings-list-canceled-tab.png,bookings-detail-deposit-tab-ready-to-refund-toggle.png) - Managing a Check-out — Step 7 — Normal completed stay → Ended filter
- Cancelling a Booking — Step 4 — Policy void → Canceled tab + refund dialog
- Deposit tab — Ready To Refund on both paths after respective settlement meshes
- Cancel Booking vs Delete Booking — Real void vs mistaken Add booking cleanup
- Common Workflows — Cancellation collections before void — Pre-cancel rent arrears (not check-out mesh)
- Common Workflows — Check-out collections before refund — Departure-week arrears on completed stays
- FAQ — Check-out vs cancellation — Symptom table for lifecycle exit routing
Bulk Hostkit invoicing
Booking-sidebar repricing and Files invoice tiles pair with Finance → Transactions bulk Issue allocation / Issue credit notes (N) when external rent relief surfaces Not issued credit note rows. Hub parity: Common Workflows — Bulk Hostkit invoicing. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Bulk Hostkit invoicing — Hub matrix (
finance-transactions-bulk-selection-bar.png,settings-invoicing-hostkit-series.png) - Finance — Invoice automation — Bulk Issue allocation / Invoice selected toolbar
- Finance — Issuing credit notes — Not issued credit note filter → Issue credit notes (N)
- Processing a New Booking — Bulk Hostkit invoicing — First-month export after confirmation (Step 6b)
- Handling a Late Payment — Bulk Hostkit invoicing — Collections month-end mesh (Step 6b)
- Portfolio KPI review — Bulk Hostkit invoicing — Step 7 month-end sign-off
- Managing a Check-in — Bulk Hostkit invoicing — Move-in month-end mesh (Step 6b)
- Managing a Check-out — Bulk Hostkit invoicing — Departure-week mesh (Step 6b)
- Onboarding a New Property — Bulk Hostkit invoicing — First month-end on new inventory
- Cancelling a Booking — Bulk Hostkit invoicing — Settlement bulk export (Step 6b)
- Notification triage — Bulk Hostkit invoicing — Alert cleanup before month-end bulk export (Step 5)
- Entering Monthly Utility Bills — Bulk Hostkit invoicing — Finish Missing data before bulk export (Step 5)
- Manual block hygiene — Bulk Hostkit invoicing — Clear stale holds before Issue allocation (Step 5)
- Using in-app support — Bulk Hostkit invoicing — Self-serve Hostkit pacing before filing tickets
- Resetting a Management User Password — Bulk Hostkit invoicing — Lockout-delayed month-end export after Step 3
Rent reduction after invoicing
Change monthly rent and Contract Values → Edit amount enforce the invoiced floor on the booking sidebar — pair Bulk Hostkit invoicing when external rent relief surfaces Not issued credit note rows. Hub parity: Common Workflows — Rent reduction after invoicing. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Rent reduction after invoicing — Hub matrix (
bookings-detail-change-monthly-rent-modal.png,bookings-rent-reduction-invoiced-floor-flow.mp4) - Changing contract dates and rent — Contract Info repricing entry point
- Contract Values tab — Per-line Edit amount under the same floor
- Finance — Invoiced floor and rent edits — Why edits start here, not Finance → Transactions
- Processing a New Booking — Rent reduction after invoicing — Confirmation month already invoiced on Step 3
- Handling a Late Payment — Rent reduction after invoicing — Collections goodwill after Step 4
- Portfolio KPI review — Rent reduction after invoicing — Month-end repricing sign-off on Step 7
- Cancelling a Booking — Rent reduction after invoicing — Settlement repricing during Step 2b
- Managing a Check-in — Rent reduction after invoicing — Pre-move-in goodwill
- Managing a Check-out — Rent reduction after invoicing — Departure-week goodwill adjustments
- Notification triage — Rent reduction after invoicing — Row-click to invoiced booking on Step 4
- Entering Monthly Utility Bills — Rent reduction after invoicing — Month-end bill cycle on Step 5
- Manual block hygiene — Rent reduction after invoicing — Hold cleanup on Step 5
- Using in-app support — Rent reduction after invoicing — Self-serve before filing tickets
- Resetting a Management User Password — Rent reduction after invoicing — Lockout-delayed repricing after Step 3
- FAQ — Rent reduction after invoicing hub — Invoiced-floor modal walkthrough and Issue credit notes pacing
Deposit missing on Finance Deposits
Booking Deposit tab data can exist while Finance → Deposits hides the row — confirm Initial Deposit on Deposit tab, then clear the Finance toolbar date range. Hub parity: Common Workflows — Deposit missing on Finance Deposits. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Deposit missing on Finance Deposits — Hub matrix (
finance-deposits-date-range-clear-flow.mp4) - Deposit tab — Per-booking Initial Deposit vs Finance portfolio row
- Finance — Deposits tab — Toolbar date range default window
- Glossary — Finance Deposits date range — Intersection rule
- Managing a Check-out — Deposit missing on Finance Deposits — Clear toolbar range before Step 5 refund triage
- Cancelling a Booking — Deposit missing on Finance Deposits — Widen range before Step 3 dispute freeze
- Portfolio KPI review — Deposit missing on Finance Deposits — Month-end sign-off at Step 7
- Resetting a Management User Password — Deposit missing on Finance Deposits — Lockout-delayed older move-out catch-up
- Onboarding a New Property — Deposit missing on Finance Deposits — Clear toolbar range on first check-out deposit triage (Step 7)
- Entering Monthly Utility Bills — Deposit missing on Finance Deposits — Widen range before departure deposit release (Step 5)
- Manual block hygiene — Deposit missing on Finance Deposits — Clear range when debt KPIs stay high after holds cleared (Step 5)
- Using in-app support — Deposit missing on Finance Deposits — Self-serve date-range triage before filing tickets
Same-day turnover coordination
Timeline Week scale on one unit row confirms departure and arrival bars on the same calendar day — pair with hub Common Workflows — Same-day turnover coordination before you treat overlap as a duplicate import. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Same-day turnover coordination — Hub matrix (
bookings-timeline-view.png,bookings-timeline-day-week-month-and-sidebar.mp4) - The Timeline View — Gantt overlap on unit Search
- Sales — Multicalendar — Sales-scoped overlap without rent cells
- FAQ — Same-day turnovers — Visual overlap step in numbered habit
- Glossary — Same-day turnover — Distinct from channel double-book
- Managing a Check-in — Same-day turnover coordination — Check-ins / Timeline overlap on Step 1 before Step 4 handover
- Managing a Check-out — Same-day turnover coordination — Turnover ticket due date on Step 2 before incoming arrival
- Processing a New Booking — Same-day turnover coordination — Timeline overlap on shared units during Step 1
- Onboarding a New Property — Same-day turnover coordination — Multicalendar / Timeline turnover planning on Step 7
Occupancy KPI to block hygiene handoff
Timeline mystery blocks without a rate change pair with hub Common Workflows — Occupancy KPI to block hygiene handoff before blaming channel double-book — upstream Portfolio KPI review — Step 3 surfaces the dip. Hub parity: Common Workflows — Occupancy KPI to block hygiene handoff. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Occupancy KPI to block hygiene handoff — Hub matrix (
bookings-timeline-view.png,audit-manual-blocks-filter-scroll.mp4) - The Timeline view — Overlap bars from stale manual holds
- Manual block hygiene — Step 4 — Per-unit hold edit after Audit row-click
- Audit — Occupancy KPI to block hygiene handoff — Portfolio Manual Blocks workspace
- Portfolio KPI review — Step 7 — Post-hygiene reconciliation
- FAQ — Occupancy KPI to block hygiene handoff hub — Symptom table for Timeline overlap vs holds
- Managing a Check-in — Occupancy KPI to block hygiene handoff — Timeline overlap from stale holds on Step 1
- Managing a Check-out — Occupancy KPI to block hygiene handoff — Calendar bars persist after Step 7
- Cancelling a Booking — Occupancy KPI to block hygiene handoff — Availability not restored on Step 5
- Entering Monthly Utility Bills — Occupancy KPI to block hygiene handoff — Dashboard vs Analytics vacancy mismatch on Step 5
- Notification triage — Occupancy KPI to block hygiene handoff — Vacant Units vs Analytics on Step 1
- Resetting a Management User Password — Occupancy KPI to block hygiene handoff — Lockout-delayed KPI review after Step 3
- Using in-app support — Occupancy KPI to block hygiene handoff — Calendar edit blocked after block hygiene
- Handling a Late Payment — Occupancy KPI to block hygiene handoff — Vacant Units vs Multicalendar holds on Step 1
Partly collected security deposit
Deposit tab shortfalls pair with Finance — Deposit lifecycle status cards (Partial paid card). Hub parity: Common Workflows — Partly collected security deposit. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Common Workflows — Partly collected security deposit — Hub matrix when Paid on the deposit is above zero but below Amount
-
Finance — Deposit lifecycle status cards — Partial paid card for portfolio triage (#2091)
-
Bookings — Deposit tab — Partially paid badge and remaining helper on a single reservation
-
FAQ — Partly collected security deposit — Distinct from Partial Paid rent on Payment Plan
-
Processing a New Booking — Step 5 — Upstream confirmation deposit recording
-
Processing a New Booking — Partly collected security deposit — Confirmation deposit shortfall after Step 5
-
Managing a Check-in — Partly collected security deposit — Chase remaining before key handover
-
Handling a Late Payment — Partly collected security deposit — Deposit vs rent Partial Paid at Step 1
-
Cancelling a Booking — Partly collected security deposit — Settlement math on shortfall deposits
-
Portfolio KPI review — Partly collected security deposit — Month-end deposit sign-off (Step 7)
-
Managing a Check-out — Partly collected security deposit — Inspection shortfall before Ready to Refund (Steps 3–5)
-
Entering Monthly Utility Bills — Partly collected security deposit — Month-end Partial paid card alongside utility close
-
Notification triage — Partly collected security deposit — Deposit alert row-click opens Deposit tab (Step 4)
-
Onboarding a New Property — Partly collected security deposit — First confirmation deposit shortfall after go-live
-
Finance — Deposit lifecycle status cards — Deposit lifecycle status row (#2091)
-
Manual block hygiene — Partly collected security deposit — Partial paid card when debt KPIs stay high after holds cleared (Step 5)
-
Resetting a Management User Password — Partly collected security deposit — Lockout-delayed deposit triage after Step 3
-
Using in-app support — Partly collected security deposit — File Finance module tickets when partial filter or badge behaviour is wrong
-
Manual block hygiene — Directory list load failures — Audit → Manual Blocks Retry before row scan (Step 1)
-
Cancelling a Booking — Directory list load failures — Whole-module Bookings Retry before cancel execution (Step 4)
-
Managing a Check-out — Directory list load failures — Departure-week directory Retry on Step 1
-
Onboarding a New Property — Directory list load failures — Listings portfolio Retry on Step 7 go-live verify
-
Processing a New Booking — Directory list load failures — Bookings / /notifications Retry before import triage (Step 1)
-
FAQ — Bulk Hostkit invoicing hub — Booking-sidebar month-end bulk export Hostkit pacing symptom table
Month-end invoicing (fixed date)
Month-end confirmation Pending mesh on Payment Plan pairs with saving fixed Invoice date in Settings → Invoicing before Finance → Transactions bulk Issue allocation — pair Bulk Hostkit invoicing on the amber toolbar banner. Hub parity: Common Workflows — Month-end invoicing (fixed date). Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Month-end invoicing (fixed date) — Hub matrix (
settings-invoicing-invoice-date-toggle.png,finance-transactions-fixed-invoice-date-banner.png,finance-transactions-bulk-toolbar-fixed-invoice-date-banner.png) - Invoicing — Default invoice date — Account-wide toggle + Save
- Common Workflows — Bulk Hostkit invoicing — Issue allocation after fixed date is saved
- Payment Plan tab — Month-end Pending receipt mesh before bulk export
- Contract Values tab — Invoiced months context before goodwill repricing
- Finance — Month-end invoicing with a fixed date — Six-step operator habit on Transactions
- Processing a New Booking — Month-end invoicing (fixed date) — First-month bulk export after confirmation (Step 6b)
- Handling a Late Payment — Month-end invoicing (fixed date) — Collections batch during Step 6b
- Portfolio KPI review — Month-end invoicing (fixed date) — Step 7 sign-off mesh
- Notification triage — Month-end invoicing (fixed date) — Alert cleanup before bulk Issue allocation (Step 5)
- Entering Monthly Utility Bills — Month-end invoicing (fixed date) — Finish Missing data + overage Pending (Steps 4b–5)
- Manual block hygiene — Month-end invoicing (fixed date) — Clear stale holds before Issue allocation (Step 5)
- Using in-app support — Month-end invoicing (fixed date) — Self-serve before filing wrong-date tickets
- Resetting a Management User Password — Month-end invoicing (fixed date) — Lockout-delayed month-end export after Step 3
- FAQ — Month-end invoicing (fixed date) hub — Confirmation Pending mesh at month-end before bulk export symptom table
Directory list load failures
The Bookings list view first-fetch failure shows Failed to load bookings. Please try again. + Retry — distinct from filters that match zero rows and from Communication / Tickets tab errors inside one open booking. Hub parity: Common Workflows — Directory list load failures. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Directory list load failures — Hub matrix (
notifications-module-load-failure.png,directory-list-load-failures-recovery-flow.mp4) - Loading more rows (list view) — First-fetch Retry pattern on portfolio list
- Processing a New Booking — Directory list load failures — Import triage on Step 1
- Cancelling a Booking — Directory list load failures — Cancel workflow needs list access first
- Booking sidebar tab load failures — Tab-scoped Refresh / Retry — not whole list
- FAQ — Booking sidebar tab load failures hub — Tab-scoped recovery symptom table
- Glossary — Booking sidebar tab load failures hub — Surface table + per-guide/module mesh reciprocal hub
- FAQ — Directory list load failures — Symptom table and module surfaces
- FAQ — Directory list load failures hub — Whole-module Bookings list Retry vs booking-sidebar tab errors symptom table
- Glossary — Directory list load failures hub — Surface table + per-guide/module mesh reciprocal hub
Wrong tenant on a booking
Change tenant on Contract Info reassigns a valid Upcoming reservation to another existing tenant — distinct from Delete Booking on duplicate imports and from Cancel booking policy voids. Hub parity: Common Workflows — Wrong tenant on a booking. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Wrong tenant on a booking — Hub matrix (
bookings-detail-change-tenant-control.png,bookings-detail-change-tenant-flow.mp4) - Change tenant (reassign booking) — Control location, guards, and walkthrough
- Common Workflows — Cancel Booking vs Delete Booking — Duplicate row vs wrong profile
- Processing a New Booking — Wrong tenant on a booking — Step 6 post-import profile check
- FAQ — Wrong tenant on a booking — Symptom table
- Creating a New Booking — Picker mistakes before confirmation
Cancel Booking vs Delete Booking
Cancel booking and Delete Booking share Contract Info → Check-in & Check-out — Cancel runs policy settlement with refund-type dialogs; Delete soft-archives mistaken rows without settlement (#1897 / #2076). Hub parity: Common Workflows — Cancel Booking vs Delete Booking. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Cancel Booking vs Delete Booking — Hub matrix (
bookings-cancel-booking-modal-refund-types.png,bookings-list-canceled-tab.png,workflows-cancel-booking-refund-modal-flow.mp4) - Glossary — Cancel Booking vs Delete Booking hub — Surface table + per-guide/module mesh reciprocal hub
- Delete Booking (soft archive) — Mistaken/test rows — clear provider platform in-payment first (#2076)
- Wrong tenant on a booking — Valid stay with wrong profile → Change tenant
- Processing a New Booking — Cancel Booking vs Delete Booking — Duplicate import cleanup on Step 1
- Cancelling a Booking — Cancel Booking vs Delete Booking — Policy void on Step 4
- FAQ — Cancel Booking vs Delete Booking — Decision table
Provider platform Delete Booking guard
Integration reservations with a pending provider platform in-payment cannot be soft-archived until that row is Rejected or assigned (#2076). Pair with Provider platform payment and Delete Booking (soft archive). Hub parity: Common Workflows — Provider platform Delete Booking guard. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Provider platform Delete Booking guard — Hub matrix (
bookings-detail-provider-platform-payment-field.png,bookings-detail-delete-booking-provider-platform-error-toast.png,bookings-provider-platform-reject-delete-flow.mp4) - Glossary — Provider platform Delete Booking guard hub — Surface table + per-guide/module mesh reciprocal hub
- Provider platform payment — Read-only field on integration bookings
- Delete Booking (soft archive) — Retry after in-payment cleared
- Cancel Booking vs Delete Booking — When Delete is appropriate vs policy Cancel (#1897)
- FAQ — Delete Booking on integration reservation — Symptom table (#2076)
- Processing a New Booking — Provider platform Delete Booking guard — Duplicate imports on Step 1
Archived booking ledger visibility
After Delete Booking, Finance → Transactions hides Manual Transactions for that reservation while System Transactions (vIBAN, credit card) stay (#1897). Use Cancel booking when full ledger history matters. Hub parity: Common Workflows — Archived booking ledger visibility. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Archived booking ledger visibility — Hub matrix (
finance-transactions-type-summary-cards.png) - Glossary — Archived booking ledger visibility hub — Surface table + per-guide/module mesh reciprocal hub
- Delete Booking (soft archive) — Soft-archive control on Contract Info → Check-in & Check-out
- Cancel Booking vs Delete Booking — Cancel keeps full ledger; Delete hides manual rows (#1897)
- Finance — Archived bookings on the ledger — System vs Manual Transactions buckets
- FAQ — Manual payments after Delete Booking — Symptom table (#1897)
- Processing a New Booking — Archived booking ledger visibility — Duplicate import cleanup on Step 1
Portfolio retirement decisions
Delete Booking on the booking card is reservation-level soft-archive — distinct from Archive property on Listings → Portfolio (building scope) and from Cancel booking (policy void with settlement). Hub parity: Common Workflows — Portfolio retirement decisions. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Portfolio retirement decisions — Hub matrix (
bookings-cancel-booking-modal-refund-types.png,listings-archived-populated-table.png,finance-transactions-type-summary-cards.png) - Glossary — Portfolio retirement decisions hub — Surface table + per-guide/module mesh reciprocal hub
- Delete Booking (soft archive) — Mistaken/test rows — not building Archive
- FAQ — Cancel Booking vs Delete Booking — Cancel for real voids with refund dialog
- Listings — Archived properties — Building-level Archive / Unarchive
- Finance — Archived bookings on the ledger — Manual Transactions hidden after Delete (#1897)
- Processing a New Booking — Portfolio retirement decisions — Duplicate imports use Delete, not Cancel
Portfolio segmentation by tenant category
Segment filters pair with Settings > Tenant categories and Portfolio KPI review — Step 6. Hub parity: Common Workflows — Portfolio segmentation by tenant category. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Common Workflows — Portfolio segmentation by tenant category — Hub matrix when segment filters must align across reservations, receivables, and tenant profiles
- Other filters — Tenant → Tenant category in portfolio Other filters (OR-combined server filter)
- Finance — Tenant category filter — Ledger segmentation when reconciling Contract Values for one cohort
- Tenants — Tenant category filter — Directory toolbar dropdown for profile-count cross-check
- Portfolio KPI review — Step 6 — Optional month-end segment pass on weak booking counts
- Onboarding a New Property — Portfolio segmentation by tenant category — Define segments before channel imports
- Processing a New Booking — Portfolio segmentation by tenant category — Assign Category before contract mail (Step 2)
- Managing a Check-in — Portfolio segmentation by tenant category — Re-verify portal gates on arrival week
- Notification triage — Portfolio segmentation by tenant category — Alert clusters on one segment
- Handling a Late Payment — Portfolio segmentation by tenant category — Segment-scoped collections
- Portfolio KPI review — Portfolio segmentation by tenant category — Month-end segment pass (Step 6)
- Managing a Check-out — Portfolio segmentation by tenant category — Departure-week In Debt clusters (Step 6)
- Cancelling a Booking — Portfolio segmentation by tenant category — Settlement backlog on one segment (Step 2)
Key glossary terms
Glossary rows pair with Glossary cluster cross-reference. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
-
Invoiced floor (rent) — Change monthly rent and Contract Values Edit amount rules
-
FAQ — Bulk Hostkit invoicing slow — Vivin paces Hostkit API calls and retries HTTP 429 during bulk Issue allocation / Invoice selected; refresh Transactions before re-issuing
-
Discount (booking) — Line vs booking-scoped reductions and Other filters → Discounts
-
Booking detail sidebar tab load failures — Communication Refresh and Tickets Retry when one sidebar tab fails
-
Glossary — Directory list load failures — First-fetch directory failures show Retry / Try again; distinct from filter-empty states and booking-sidebar tab errors
-
Glossary — Vacant Unit Preference — Include manual blocks counts operator holds as free on Dashboard / Sales vacancy surfaces (#1427)
-
Bills included ceiling — Per-booking utility overage cap copied from Listings
-
Deposit dispute — Freeze deposit refunds on Deposit tab during contested retention
-
Operations — Tickets toolbar search — Paste the full sequential ticket ID (for example
S259,T27) when turnover alerts reference#S259(#2074) -
FAQ — Find a ticket by its ID — Paste the full sequential ticket ID (for example
S259,T27) in Operations → Tickets toolbar Search (#2074) -
FAQ — Skip automatic check-in/out tickets for one booking — Turn off Use unit contract rents and other contract details on Add booking to reveal CI/CO ticket checkboxes (#1140)
-
Glossary — Same-day turnover — Timeline Gantt overlap when departure and arrival share one calendar day on a unit
-
FAQ — Archive a property — Edit property sidebar Archive / Unarchive on Listings; building-level — not Delete Booking or Cancel booking
-
FAQ — Same-day turnovers — Four-step habit: Check-in & Check-out → turnover ticket → Timeline / Multicalendar → access times
-
FAQ — Manual payments after Delete Booking — Delete Booking hides manual/provider_platform rows on Finance → Transactions; vIBAN and credit card stay visible (#1897)
-
Operations — Property-level ticket search — Property-name matches share the top relevance tier with unit hits; building-scoped rows float first under an active Property filter (#2089)
-
Glossary — End-of-Booking cost split — Charge Time → End of Booking splits daily overage across every occupied unit; still-staying roommates stay in the denominator (#2111)
-
Glossary — Change history — Operator-initiated edits on Listings setup and Bookings Changelog; create-time defaults excluded (#2093)
-
FAQ — Booking Changelog scope — Operator-initiated edits only; create-time defaults excluded (#2093)
-
Glossary — Archived booking ledger visibility — Delete Booking hides manual/provider_platform rows on Finance → Transactions; vIBAN and credit card stay visible (#1897)
-
Provider platform payment — Non-rejected provider platform in-payment blocks Delete Booking until Reject or assign (#2076)
-
FAQ — Delete Booking on integration reservation — Error toast, Reject path, and assign alternative (#2076)
-
Listings — Property edit sidebar pills — Setup / Full integration / Photos pills on property and unit edit sidebars; replaced the old Go to details shortcut (#2082)
-
Glossary — Finance tenant category cache refresh — Recategorizing a tenant on Tenants → Tenant Info force-refreshes Finance caches so Contract Values, Overview, and Deposits filters match within seconds (#2088)
-
FAQ — Finance tenant category filter parity — Finance Other filters drawer lists segments on cached bookings only; mirror Bookings / Tenants when a segment is missing
-
Glossary — SIMAR water contract ID — SIMAR (Loures e Odivelas) water bills use Cód. Local in Connections — not Nº de Contador; leading zeros stripped (#2110)
-
FAQ — SIMAR water bill property match — Cód. Local in Connections — not Nº de Contador; strip leading zeros (#2110)
-
Glossary — Per-booking maintenance ticket opt-out — Add booking checkboxes skip automatic CI/CO tickets for one reservation only; property rule unchanged (#1140)
-
FAQ — Cancel Booking vs Delete Booking — Cancel for real stays with settlement; Delete soft-archives mistaken/test rows (#1897 / #2076)
-
Glossary — Archived property — Archive retires a building to Listings → Archived without deleting bookings; distinct from Delete Booking (reservation soft-archive) — Listings — Archived properties
-
FAQ — Portfolio retirement decisions — Archive property (building) vs Cancel booking vs Delete Booking (reservation soft-archive) — three-way decision table
-
Finance — Deposit lifecycle status cards — Deposit lifecycle status row on Finance → Deposits; click Partial paid for collection shortfalls (#2091)
-
Notification row navigation —
/notificationsand Dashboard bell rows that open this booking -
FAQ — Notification row-click navigation — On
/notifications, row click marks unread then openslink,bookingId,tenantId,listingId, orpropertyId(first match); Dashboard bell General rows stay in-panel unlesslinkis set -
FAQ — Phone shows Operations only — Mobile phone user agent locks operators with Operations access to
/operations; iPads and narrow desktop browsers keep the full module list -
FAQ — AI token usage — Poll GET /ai-usage / GET /ai-usage/summary with management JWT;
landlord_chat+utility_bill_extraction; no management UI screen yet -
FAQ — Tenant contract signing blocked — No PDF yet, mandatory Your Details gates, category locks, or Lease purpose; portal signing vs paper upload on Contract Info
-
FAQ — Automatic check-in email — Trigger matrix, 15-day cutoff, paper upload vs portal signing, Nuki-only toggle, Send / Resend on Contract Info
-
FAQ — WhatsApp and email per booking — Bookings → Communication tab when tenant chatbot is enabled; Inbox for portfolio-wide triage
-
FAQ — Deposit missing on Finance Deposits — Default ~3 months date range; clear or widen before triaging older move-outs or dispute row actions
-
FAQ — Pending manual in-payment on /notifications — Alert persists until Approve payments clears Finance or booking Transactions
-
FAQ — Uncovered Debt KPI — Finance Total Debt minus deposit offsets; pair with Debt Aging and In debt drill-down
-
FAQ — Dashboard Total Debt subtitle — Post-login Total Debt card headline vs >15 days subtitle; ongoing bookings only
-
FAQ — Analytics (KPI workspace) — Portfolio KPIs vs Sales/Listings/Dashboard; load-failure Try again
-
FAQ — Lower rent below invoiced — Change monthly rent clamps and Contract Values → Edit amount blocks net below exported invoice totals; use credit notes in accounting when you truly need a reduction
-
FAQ — Reject or revert an incoming payment — Reject pending rows or Revert confirmed ones; Finance → Transactions uses Reject selected bulk-only; modals warn about credit notes when Finance already invoiced
-
FAQ — Finance Income status drill-down — Overview Income chart (Paid / Scheduled / In debt); click a segment for month-scoped payment-line modal; Debt Aging for booking-level receivables
-
FAQ — Finance tenant category filter parity — Finance Other filters drawer may omit segments until cached on bookings; mirror this filter first
-
FAQ — Permission denied toast — Red You do not have permission to perform this action. toast when RBAC blocks a save; fix in Users → Role Permissions
-
FAQ — Bookings that owe money — Top debtors and overdue buckets on Finance → Overview; Total Debt KPI is not a table
API & companion guides
API bullets pair with API Reference hub. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- API Reference — Creating Bookings — Partner
POST …/bookingsimports that appear with platform badges - API Reference — Webhooks & Notifications — Partner HTTP
booking.*events that precede rows and alerts in this module - API Reference — Booking Lifecycle & Validations — Integration validation pipeline before imported stays reach List and Timeline
Module documentation hubs
Module hub bullets pair with Modules — Module cross-reference. Full pairing matrix: Bookings section cross-reference · Module cross-reference.
- Bookings module — Full reservation lifecycle with sidebar tabs and Timeline Gantt (this page)
- Utilities module — Bills Included ceiling model, Connections, AI bill upload, and tenant overage charges on payment plans (hub)
- Operations module — Maintenance tickets, cash flows, check-in/out coordination, Draft ticket queues, and linked cash flows (hub)
- Dashboard module — Post-login Today, Total debt, Vacant Units, and forecast KPI snapshot with bell notification triage (hub)
- Analytics module — Month-range portfolio KPI charts (Overview, Revenue, Occupancy, ADR, RevPAR, Maintenance) with rankings and heatmaps (hub)
- Listings module — Property wizard, Channels tab, Archived inventory, and unit management (hub)
- Properties workspace — Legacy
/propertiesURL redirects into Listings (hub) - Booking engine details — Rich marketplace payload editor via the Full integration pill (hub)
- Finance module — Portfolio ledgers (Overview, Income, Contract Values, Transactions, Payouts, Deposits) with payment approval and deposit settlement (hub)
- Tenants module — Tenant directory, profile sidebars, With Debt segmentation, and table expand for linked bookings (hub)
- Sales module — Portfolio availability, monthly rent editing, and channel manager connections (hub)
- Inbox module — Portfolio-wide WhatsApp workspace with Dashboard bell Inbox sub-tab deep links (hub)
- Notifications module — Full
/notificationshistory with search, filters, and row-click navigation (hub) - AI Chat module — Vivin-internal AI Assistant using Landlord MCP tools for portfolio Q&A (hub)
- Audit module — Portfolio-wide Manual Blocks and Discounts contract-value review (hub)
- Account Settings — Workspace-wide financial policies, templates, integrations, and operational defaults (hub)
- API Reference hub — Partner HTTP contracts, Swagger onboarding, and partial vs full feeds (hub)