Skip to main content

Contract

First-time workspace setup

Complete Getting Started — Recommended Setup Sequence step 8 (this tab — contract templates) after steps 5–7 Payments, Invoicing & Utilities and before step 9 Categories — full tab map: Recommended setup order. Finish steps 13–15 in Listings, Bookings, and Tenants, then Onboarding a New Property — Step 7. Guided steps 4–12: Onboarding a New Property. Lockout catch-up: Getting Started. Workflow pairing after go-live: Account Settings — Setup sequence after go-live.

Finding your way in this guide

Upload the account default in Uploading a template, author variables in Using dynamic variables (including Contract sign date vs generation date for renewal signature lines), choose Empty variables if missing values should print N/A, then add Property and unit overrides when templates differ by asset. Habit-specific shortcuts live under Related below.

Use the Contract tab under Account Settings to upload and manage the account default Word template, optional property or unit overrides, the Empty variables setting, and the in-app variable reference operators use when authoring .docx files.

Direct access

Open Account Settings > Billing > Contract at platform.vivin.app/settings/contract. See Deep Links for neighbouring settings routes.

Ask AI Chat “Where do I open Contract to upload the account default Word template and manage property or unit overrides?” — then open this Contract tab (ai-chat-product-context-contract-reply.png, ai-chat-product-context-contract-flow.mp4). The assistant may still say Settings → Faturação → Contrato (account default) and Anúncios for property/unit overrides, and may name Settings → Contract Templates for the consolidated override list; follow Settings → Billing → Contract instead. The English tab label is Contract under the Billing group. Same grounding external MCP clients get from get-vivin-context-bookings-tenants. Property and unit overrides can also be uploaded from Listings.

AI Assistant — where to open Contract for account default Word templates and overrides

Walkthrough: ask AI Assistant where to open Contract for the account default Word template, then open Settings → Billing → Contract (even if the reply says Faturação → Contrato, Anúncios, or Contract Templates).

Account Settings — Billing sidebar with Contract selected

Pair with other Account Settings tabs

Upload templates after General Information branding (logo on PDF headers) and seed Categories Lease Purpose options if contracts reference lease-type variables. Contract-generation volume does not appear on this tab — poll AI usage API only for landlord_chat / utility_bill_extraction during month-end review, not template uploads. Hub: Recommended setup order.

How to open the Contract tab​

Pair with other Contract sections

Navigation here pairs with Deep Links — Account Settings (/settings/contract) and General Information branding before you upload the account default.

  1. Sign in to the management frontend and open Account Settings (gear / company entry in the user area, or go to /settings).
  2. In the settings left sidebar, under Billing, choose Contract.
  3. Follow the three numbered steps on the page (prepare variables → check the full list → upload), then use Upload Contract Template for the account default or manage overrides in the Properties / Units sections below.

The capture below shows the full Contract workspace: step-by-step guidance, the current account template card (preview / download), and collapsible property and unit override groups.

Account Settings — Contract tab with default template, upload control, and property/unit override sections

Uploading a template​

Pair with other Contract sections

Upload the account default before first Processing a New Booking — property/unit overrides inherit the fallback chain documented in Listings — Contract tab.

Vivin uses a Word document (.docx) as the contract template. When a contract is generated for a booking, Vivin replaces placeholders in the document with booking data and produces a ready-to-sign PDF.

To upload or replace the account default:

  1. Prepare your contract in Microsoft Word or Google Docs (exported as .docx).
  2. Insert variable placeholders (see Using dynamic variables) where booking-specific information should appear.
  3. On the Contract tab, click Upload Contract Template, choose Account scope (unless you are replacing a property- or unit-specific file), and select your .docx.

Upload Contract Template modal — scope selector and .docx drop zone

The modal also supports Property and Unit scopes when you need an override instead of changing the account default. Use Replace on an existing override card to open the same dialog with scope locked to that entity.

Fonts and PDF fidelity​

Vivin converts your .docx to PDF with LibreOffice on the server. Layout depends on font metrics: if the conversion environment does not have a metric-compatible face for a font used in the template, LibreOffice substitutes a wider fallback. That silently re-flows the document — mid-word wraps, truncated headings, shifted page breaks, and tables that overflow — even though the same file looks perfect in Word on your laptop.

Prefer these faces (metric-compatible substitutes are installed in production):

Author in Word (or clone)Notes
Arial / HelveticaClassic sans
Times New RomanClassic serif
Courier NewMonospace
Calibri / CarlitoWord’s modern default body face
Cambria / CaladeaWord’s modern default heading/serif face
Calibri LightTreated as layout-safe with Calibri metrics

Avoid brand or Office-only faces that have no free metric clone — notably Aptos (Office 2024 default) and many decorative / display fonts. Those still substitute and re-flow.

Check before go-live

After upload, open Preview on the Contract tab (or the eye control on Listings → Contract) and compare pagination and table edges to your Word file. A mismatch on preview is almost always a font substitution — rewrite body/heading styles to Calibri, Arial, Cambria, or Times New Roman, then re-upload. Upload itself is never blocked for unsupported fonts (same non-blocking rule as the baked-signature image warning).

Account Settings — Contract, account template row with Preview control

Account Settings — Contract Template Preview modal showing LibreOffice-rendered PDF

Walkthrough: open Preview on the account contract template, review the LibreOffice PDF in Contract Template Preview, then close.

FAQ: Why does my contract PDF look different from Word?. Glossary: Contract PDF fonts.

Using dynamic variables​

Pair with other Contract sections

Financial tokens reference Invoicing & Payments — Dual pricing and Categories — Lease Purpose — overlap with Emails — Dynamic variables for tenant-facing copy.

Insert placeholders in your .docx using single braces around the token name, for example {TenantName} and {StartDate}. Vivin replaces them when generating the contract. Use the exact names shown below (PascalCase inside the braces). When a known variable has no value, that spot stays blank unless you turn on Empty variables (Print N/A for empty variables).

On the Contract tab, open Check the list of available variables here to see the same catalogue in a scrollable modal (useful when authoring offline).

Contract variables modal — full token list from the Contract settings tab

Tenant variables

VariableOutput
{TenantName}Tenant's full name
{TenantEmail}Tenant's email address
{TenantPhone}Tenant's phone number
{Nationality}Tenant's nationality
{FiscalId}Tenant's tax/fiscal ID number
{IdentificationId}Tenant's passport or ID number
{TenantIdDocumentType}Tenant's ID document type (e.g. Passport, ID Card)
{TenantIdDocumentCountry}Country of the tenant's ID document
{TenantIdDocumentExpiryDate}Tenant's ID document expiry date (DD/MM/YYYY)
{TenantFiscalAddress}Tenant's home address (billing address if empty)
{%TenantSignature}Tenant's signature image — filled when the tenant signs
{%LandlordSignature}Landlord's signature image — filled automatically when the tenant signs (see Landlord signature)
{%GuarantorSignature}Guarantor's signature image — drawn in the tenant portal when a guarantor signs; blank on drafts and when no guarantor signed (see Guarantor variables)

Second tenant variables​

When a booking has a second tenant, these render that person's details. They are available only when Second tenant is switched on in Settings → Preferences → Booking Defaults and the booking’s Tenants number is at least 2; on a booking with no second tenant they all stay blank (or print N/A if Empty variables is on), so a template that uses them stays safe on single-tenant bookings.

A second tenant records identity details only. Billing details, bank details (including the IBAN) and tenant category are intentionally not available — invoicing, payouts and category rules always follow the main tenant.

Switching Second tenant back off hides the section but keeps any details already saved, and contracts generated afterwards still fill these variables. Clear the fields on the booking first if you need them to stop appearing.

VariableOutput
{SecondTenantName}Second tenant's full name (first + last)
{SecondTenantFirstName}Second tenant's first name
{SecondTenantLastName}Second tenant's last name
{SecondTenantEmail}Second tenant's email address
{SecondTenantPhone}Second tenant's phone number
{SecondTenantNationality}Second tenant's nationality
{SecondTenantIdentificationId}Second tenant's identification number
{SecondTenantIdDocumentType}Second tenant's ID document type
{SecondTenantIdDocumentCountry}Country that issued the second tenant's ID
{SecondTenantIdDocumentExpiryDate}Second tenant's ID expiry date (DD/MM/YYYY)
{SecondTenantFiscalId}Second tenant's tax/fiscal ID number (NIF / CIF)
{SecondTenantFiscalAddress}Second tenant's home address

Contract Template Variables modal — second tenant tokens (SecondTenantName and identity fields)

caution

Add these tokens to your .docx only after Second tenant is available in your workspace. A placeholder Vivin does not recognise yet is left blank — or prints N/A if Empty variables is on. After the feature is live, regenerate the contract so names and IDs fill in.

Guarantor variables​

When a booking has a guarantor, these render that person's details. They are available only when Guarantor is switched on in Settings → Preferences → Booking Defaults — a separate switch from Second tenant, so you can use either without the other. On a booking with no guarantor they all stay blank (or print N/A if Empty variables is on).

A guarantor records identity details plus the amount guaranteed; billing, bank details and tenant category are not available. Unlike the second tenant, the guarantor does not depend on the booking's tenant count — a single-tenant booking can still have one. UI walkthrough: Bookings — Guarantor (bookings-detail-contract-info-guarantor-accordion.png, bookings-guarantor-flow.mp4). Catalogue shot below: settings-contract-variables-guarantor.png.

VariableOutput
{GuarantorName}Guarantor's full name (first + last)
{GuarantorFirstName}Guarantor's first name
{GuarantorLastName}Guarantor's last name
{GuarantorNationality}Guarantor's nationality
{GuarantorEmail}Guarantor's email address
{GuarantorPhone}Guarantor's phone number
{GuarantorIdentificationId}Guarantor's identification number
{GuarantorIdDocumentType}Guarantor's ID document type
{GuarantorIdDocumentCountry}Country that issued the guarantor's ID
{GuarantorIdDocumentExpiryDate}Guarantor's ID expiry date (DD/MM/YYYY)
{GuarantorFiscalId}Guarantor's tax/fiscal ID number (NIF / CIF)
{GuarantorFiscalAddress}Guarantor's home address
{GuarantorAmount}Amount guaranteed, in euros
{GuarantorAmountInTextEn|Pt|Es|It}The same amount spelled out in the named language (see Amount-in-text variables)
{%GuarantorSignature}Guarantor's signature image — drawn in the tenant portal at signature time; blank on drafts and when no guarantor signed (use the % prefix, same as tenant / landlord signatures)

{GuarantorAmount} is the figure the guarantor commits to cover, entered in the Guarantor amount (€) field on the booking’s Guarantor accordion. It renders the number only, so write the currency into the template yourself — for example Guarantee: {GuarantorAmount} €. Leave the field empty and the variable stays blank (or prints N/A if Empty variables is on) rather than 0, so a contract never states a guarantee that was not agreed. To print the same figure in words — três mil e quinhentos euros — use the matching {GuarantorAmountInText…} variable for the language your clause is written in.

Place {%GuarantorSignature} in the signature block when your contract needs a guarantor / avalista signature line. Like {%TenantSignature} and {%LandlordSignature}, drafts stay blank until the guarantor actually signs in the Tenant Portal — on bookings with a guarantor name, the portal wizard adds a fifth Guarantor step after the tenant signs (tenant-portal-signature-modal-guarantor-step.png). A booking with no guarantor (or a guarantor who never signed) leaves the placeholder empty rather than inventing a mark.

Contract Template Variables modal — guarantor tokens including GuarantorAmount and GuarantorAmountInTextEn|Pt|Es|It

Contract Template Variables modal — GuarantorSignature token listed with tenant and landlord signature tokens

Walkthrough: open available variables on Settings → Contract, then scroll from Second tenant tokens into the Guarantor block.

Switching Guarantor back off hides the section but keeps any details already saved, and contracts generated afterwards still fill these variables. Clear the fields on the booking first if you need them to stop appearing.

Owner variables​

These come from the property's owner record in Settings → Owners. A property that has no owner assigned leaves them blank (or prints N/A if Empty variables is on).

VariableOutput
{OwnerName}Owner's name
{OwnerFiscalId}Owner's tax/fiscal ID number (NIF / CIF)
{OwnerFiscalAddress}Owner's fiscal address
{OwnerEmail}Owner's email address
{OwnerPhone}Owner's phone number
{OwnerIdDocumentType}Owner's ID document type (e.g. Passport, ID, CC) — set it on the Owners record
Exact token names

Use these single-brace names exactly — there is no {OwnerFullName} or {OwnerAddress} alias. FAQ: Which owner fields appear on generated contracts?.

Set ID Document Type on the owner before you generate contracts that use {OwnerIdDocumentType}:

Account Settings — Add Owner with ID Document Type dropdown open for OwnerIdDocumentType

Property and unit variables

VariableOutput
{PropertyAddress}Full property address
{ListingInternalName}Unit/listing internal name
{Floor}Floor number
{RoomNumber}Room number
{PropertyTotalRooms}Number of units in the property (see Property rooms)
{ListingArea}Unit surface area in m² (see Surface area variables)
{PropertyArea}Building surface area in m² (see Surface area variables)
{PropertyRoomRange}The property's unit names as a range or list (see Property rooms)

Booking and financial variables

VariableOutput
{StartDate}Contract start date (DD/MM/YYYY)
{StartDateInTextEn|Pt|Es|It}The same start date written out, e.g. 1 de septiembre de 2026 (see Dates in long form)
{EndDate}Contract end date (DD/MM/YYYY)
{EndDateInTextEn|Pt|Es|It}The same end date written out (see Dates in long form)
{ContractDurationMonths}Contract duration in whole months, as a number (see Contract duration)
{ContractDurationInTextEn|Pt|Es|It}The same duration spelled out, e.g. seis [6] meses (see Contract duration)
{ContractDurationDays}Days left over after the whole months, as a number (see Contract duration)
{ContractDurationFullInTextEn|Pt|Es|It}Months and leftover days spelled out, e.g. tres [3] meses y trece [13] días (see Contract duration)
{CheckInDate}Tenant's physical move-in date (DD/MM/YYYY)
{CheckInDateInTextEn|Pt|Es|It}The same check-in date written out (see Dates in long form)
{CheckOutDate}Tenant's physical move-out date (DD/MM/YYYY)
{CheckOutDateInTextEn|Pt|Es|It}The same check-out date written out (see Dates in long form)
{CheckInTime}Check-in time
{CheckOutTime}Check-out time
{RentValue}Monthly rent amount
{SecurityDeposit}Security deposit amount
{AdministrativeFee}Administrative fee amount
{CleaningFee}Cleaning fee amount
{RentJan}–{RentDec}Monthly rent for each month (Jan–Dec)
{ContractSignDate}Contract signing date (DD/MM/YYYY). Prints today only while the stay has not started yet; from the start date onwards it prints the booking start date (see Contract sign date vs generation date)
{ContractGenerationDate}Date the contract PDF is produced (DD/MM/YYYY) — always today at generation time. Prefer this on signature lines when you regenerate after the stay has started (renewals)
{TotalValuePending}Total value pending
{ContractTotalValue}Total rent payable across the whole contract (distinct from Total value pending)
{Debt}Outstanding debt amount
{BillsIncludedMaxValue}Maximum bills-included value
{vIBAN}Tenant's virtual IBAN (bank transfer reference for this booking — not the tenant's personal IBAN)
{DueDate}Payment due date where applicable
{LocalRentCap} / {RentCapDifference}Populated when the booking uses dual pricing / local rent cap: LocalRentCap is the frozen cap in euros; RentCapDifference is rent − cap (the services slice). Empty when dual pricing does not apply.

The in-app modal may list additional tokens (for example {LeasePurpose}). Treat the modal as the authoritative catalogue for your workspace.

Contract sign date vs generation date​

Two booking-date tokens look similar in available variables, but they answer different questions on a printed lease:

TokenWhat it printsWhen to use it
{ContractSignDate}Today only while the booking start date is still in the future; from the start date onwards, the start dateClassic first-issue leases where the signature line should match the stay’s start once the contract has begun
{ContractGenerationDate}Always today’s date whenever Vivin builds or regenerates the PDFRenewals and any regenerate-after-start flow where the signature line must show the day the document was actually produced — not the original start date

{ContractSignDate} behaviour is unchanged for existing templates. When you renew a stay and regenerate the contract, swap the signature-line token to {ContractGenerationDate} (or author renewals with that token from the start) so the PDF does not reprint the first start date as if it were the signing day.

Both values are filled at render time — there is no separate “signature date” field to edit on the booking. The same map applies on first generation, regenerate, and the signed portal PDF.

Open Check the list of available variables here on Settings → Contract and scroll to the booking block — {ContractSignDate} and {ContractGenerationDate} sit together just after the monthly rent tokens:

Contract Template Variables modal — ContractSignDate and ContractGenerationDate listed together

Walkthrough: open Settings → Contract → available variables, then scroll from RentDec through ContractSignDate into ContractGenerationDate.
Renewals

If operators regenerate contracts mid-stay or for renewals, put {ContractGenerationDate} on the signature line. Leave {ContractSignDate} only when you intentionally want the start-date collapse after move-in.

The same two tokens appear in Emails → Variables for lifecycle and Communication Rule body copy.

Landlord signature​

The {%LandlordSignature} placeholder lets Vivin apply your signature to a contract as an image — the same way {%TenantSignature} works for the tenant and {%GuarantorSignature} works for a guarantor. This replaces the old practice of baking a signature picture into the Word template, which made every generated draft look pre-signed before anyone had actually signed.

How it works​

  • On a draft, the placeholder is empty. A generated contract (manual or from an OTA booking) never shows your signature until the tenant signs — so a draft is never a pre-signed document.
  • When the tenant e-signs in the tenant portal, your signature is applied automatically in the same document, so the signed PDF is the finished, both-party contract. There is no extra step for you — the operator flow is exactly as before.
  • If you have no signature on file, or the template does not contain {%LandlordSignature}, the tenant can still sign normally — the contract is simply signed by the tenant only. Applying your signature never blocks or delays the tenant's signature.
  • Guarantor signature is separate: add {%GuarantorSignature} when the template needs an avalista / guarantor mark. It fills only when a guarantor signs in the portal — see Guarantor variables.

Set up your signature​

  1. Open Settings ▸ Contract.
  2. In the Landlord signature card, either upload a PNG (transparent background recommended) or draw it with your mouse/finger.
  3. Vivin trims and resizes the image automatically, and clamps it to a sensible size when rendering, so it always fits the signature block — you don't need to worry about the source image's dimensions.
  4. Add the {%LandlordSignature} placeholder to your template wherever the landlord signature should appear (typically the signature block at the end), and remove any signature image that was previously baked into the document.
  5. Use Preview to check the placement — the preview renders your real signature so you can confirm exactly where it lands.

Account Settings — Contract, Landlord signature card with a signature on file, Upload PNG / Draw / Remove

Account Settings — Contract, Draw your signature modal with dashed pad, Clear, Cancel, and Save signature

Walkthrough: open the Landlord signature card on Settings → Contract, open Draw, then Cancel without overwriting the stored signature.
Migrating an existing template

If your current template has a signature baked in as a picture, replace that picture with the {%LandlordSignature} placeholder and re-upload the template. Until you do, generated drafts will keep showing the baked-in signature. Vivin warns you on upload when a template still contains an embedded image that might be a baked signature.

Empty variables​

The Empty variables card on Settings → Billing → Contract controls what a placeholder with no value prints in the generated PDF.

Print N/A for empty variables starts off (blank). Turn it on when you want missing text values to print N/A instead of a gap. The setting applies to new contracts, regenerated contracts, and the signed document. It does not rewrite PDFs that are already stored until you regenerate.

Signature image tokens ({%TenantSignature}, {%LandlordSignature}, {%GuarantorSignature}) stay blank either way — N/A is not drawn as an image.

The capture below shows the card with the switch on. Leave the default off if blank placeholders match your legal wording. Open Settings → Billing → Contract and scroll past Landlord signature to reach the card.

Account Settings — Contract — Empty variables card with Print N/A on

Walkthrough: open Settings → Billing → Contract, scroll to Empty variables, and review Print N/A for empty variables (demo does not change the switch).

Amount-in-text variables​

Pair with other Contract sections

Amount-in-text tokens build on the euro figures in Using dynamic variables and pair with Invoicing & Payments — Dual pricing when rent changes month to month.

Some legal templates must spell an amount out in words next to the figure (for example 1.500 € (mil e quinhentos euros)). Vivin provides amount-in-text tokens that render an amount as euro words, including the currency. Like every other placeholder, they use single braces and are case-sensitive — write them exactly as shown.

Each token names its own language with a suffix — …En (English), …Pt (Portuguese), …Es (Spanish), …It (Italian). Because the language lives in the token, you can mix languages in a single .docx: put a Portuguese clause and an English clause side by side and choose the language per token occurrence. This is what makes bilingual templates possible.

Open available variables on the Contract tab and scroll past {RentValue} — the catalogue lists every language-suffixed rent, deposit, cleaning-fee, contract-total, and guarantor-amount token with a one-line description and a copy control:

Contract Template Variables modal — amount-in-text tokens for monthly rent (En/Pt/Es/It)

Walkthrough: open available variables, then scroll from monthly rent through rent-in-words, deposit-in-words, full-contract-total-in-words, and guarantor-amount-in-words tokens.

Available tokens​

Monthly rent in words

VariableRenders in
{RentValueInTextEn}English (always)
{RentValueInTextPt}Portuguese (always)
{RentValueInTextEs}Spanish (always)
{RentValueInTextIt}Italian (always)

Security deposit in words

VariableRenders in
{SecurityDepositInTextEn}English (always)
{SecurityDepositInTextPt}Portuguese (always)
{SecurityDepositInTextEs}Spanish (always)
{SecurityDepositInTextIt}Italian (always)

Cleaning fee in words

VariableRenders in
{CleaningFeeInTextEn}English (always)
{CleaningFeeInTextPt}Portuguese (always)
{CleaningFeeInTextEs}Spanish (always)
{CleaningFeeInTextIt}Italian (always)

These read the same cleaning fee as {CleaningFee}, so the figure and the words always agree. A booking with no cleaning fee spells zero euros (localised), matching the 0 that {CleaningFee} prints — unlike the guarantee amount below, which stays blank.

Full contract total

VariableOutput
{ContractTotalValue}Full-contract total as a number
{ContractTotalValueInTextEn}Full-contract total in words — English (always)
{ContractTotalValueInTextPt}Full-contract total in words — Portuguese (always)
{ContractTotalValueInTextEs}Full-contract total in words — Spanish (always)
{ContractTotalValueInTextIt}Full-contract total in words — Italian (always)

Guarantee amount

VariableOutput
{GuarantorAmount}Amount guaranteed as a number
{GuarantorAmountInTextEn}Amount guaranteed in words — English (always)
{GuarantorAmountInTextPt}Amount guaranteed in words — Portuguese (always)
{GuarantorAmountInTextEs}Amount guaranteed in words — Spanish (always)
{GuarantorAmountInTextIt}Amount guaranteed in words — Italian (always)

These read the Amount (€) on the booking's guarantor. A booking with no guarantee amount renders all five blank — never 0 and never zero euros.

Contract Template Variables modal — GuarantorAmount plus GuarantorAmountInTextEn|Pt|Es|It amount-in-text tokens

What the contract total means​

{ContractTotalValue} (and its in-text variants) is the total rent payable across the whole contract duration — the contractual obligation. Vivin sums it from the booking's payment plan: the rent for every month of the stay, including proration, first/last-month splits, and dual-pricing rent.

Contract total is not Total value pending

{ContractTotalValue} is the total the tenant is contracted to pay and does not change as payments come in. {TotalValuePending} is the outstanding balance (debt) and shrinks as the tenant pays. Use {ContractTotalValue} for the contractual sum, and reach for {TotalValuePending} only when you specifically mean the amount still owed.

Contract total is not the "Contract Value" in the booking header

{ContractTotalValue} is total rent only. It is not the same figure as the Contract Value shown in the booking-details header, which also includes cleaning, admin and exit fees (everything except the deposit) — so the two normally differ. This token deliberately renders the total rent payable; the rent-plus-fees figure is not currently exposed as a contract variable.

The same rent-only total lands on the Bookings list export as contractTotalValue, next to bookingTotalValue (every payment line). Use the export column when you need spreadsheet rent totals that match this token.

How amounts are rendered​

Amounts render as euro words including the currency:

  • {RentValueInTextEs} → ochocientos cincuenta euros
  • {RentValueInTextPt} → mil e quinhentos euros
  • {RentValueInTextEn} → eight hundred and fifty euros

Cents are spelled out after the euros:

  • Spanish → … euros con cincuenta céntimos
  • Portuguese → … euros e cinquenta cêntimos
  • English → … euros and fifty cents
  • Italian → … euro e cinquanta centesimi

Whole amounts omit the cents clause, and a zero amount renders as zero euros (localised).

When rent varies month to month, the token renders a localised range between the lowest and highest monthly rent:

  • {RentValueInTextEs} → novecientos a mil cien euros
  • {RentValueInTextPt} → novecentos a mil e cem euros
  • {RentValueInTextEn} → nine hundred to one thousand one hundred euros

Bilingual template examples​

Because language-suffixed tokens always render in their named language, you can write one clause per language in the same .docx.

Portuguese + English

A renda mensal é de {RentValue} € ({RentValueInTextPt}).
The monthly rent is €{RentValue} ({RentValueInTextEn}).

Spanish + English

La renta mensual es de {RentValue} € ({RentValueInTextEs}).
The monthly rent is €{RentValue} ({RentValueInTextEn}).

Rent range — when the monthly rent changes across the stay:

Renda mensal: {RentValueInTextPt}.
→ Renda mensal: novecentos a mil e cem euros.

Cents — when an amount includes céntimos/cents:

Caução: {SecurityDepositInTextEn}.
→ Caução: eight hundred and fifty euros and fifty cents.
tip

Always use the language-suffixed token (…En, …Pt, …Es, …It) that matches the language of the surrounding clause. A single-language template uses one suffix throughout; a bilingual template uses two suffixes in their respective clauses.

Dates in long form​

{StartDate}, {EndDate}, {CheckInDate} and {CheckOutDate} print a date in figures (01/09/2026). Each of the four also has a long form, one token per language, for clauses that have to read as prose:

El contrato comienza el {StartDateInTextEs}
→ El contrato comienza el 1 de septiembre de 2026
TokenOutput for 01/09/2026
{StartDate}01/09/2026
{StartDateInTextEn}September 1, 2026
{StartDateInTextPt}1 de setembro de 2026
{StartDateInTextEs}1 de septiembre de 2026
{StartDateInTextIt}1 settembre 2026

{EndDateInText…}, {CheckInDateInText…} and {CheckOutDateInText…} follow the same pattern. The language suffixes work exactly like the amount-in-text variables — pick the one that matches the surrounding clause.

  • Only the month becomes a word. The day and the year stay as figures, which is the form a lease clause normally uses.
  • The day is not zero-padded: 1 de septiembre, never 01 de septiembre. Use {StartDate} when you want the padded numeric form.
  • Each long form prints the same day as its numeric token. {StartDateInText…} and {EndDateInText…} follow the contract dates — so if the booking is set to use the check-in/check-out dates on the contract, they move with it, exactly like {StartDate} / {EndDate} and the duration.
  • If a date is missing or invalid, the long form renders empty, together with its numeric token — never today's date.
  • The existing {StartDate} / {EndDate} / {CheckInDate} / {CheckOutDate} tokens are unchanged, so templates already in use keep printing exactly what they print today.
Do not put both forms side by side

{StartDate} {StartDateInTextEs} prints 01/09/2026 1 de septiembre de 2026 — the same date twice. Use one token per clause.

Contract duration​

{ContractDurationMonths} prints the length of the lease in whole months, as a plain number — no "months" word, so you can phrase the clause however you like. {ContractDurationInTextEn} / …Pt / …Es / …It print the same value spelled out, in the mixed words-and-figures format contracts usually require:

Duración: {ContractDurationInTextEs}
→ Duración: seis [6] meses
TokenOutput for a 6-month lease
{ContractDurationMonths}6
{ContractDurationInTextEn}six [6] months
{ContractDurationInTextPt}seis [6] meses
{ContractDurationInTextEs}seis [6] meses
{ContractDurationInTextIt}sei [6] mesi

The language suffixes work exactly like the amount-in-text variables — pick the one that matches the surrounding clause.

Leases that are not a whole number of months​

Because partial months are dropped, a lease of 3 months and 13 days prints 3 / tres [3] meses — the 13 days are not in those tokens. Use the full-duration family when the clause has to state the exact period:

TokenOutput for 18/08/2026 → 30/11/2026
{ContractDurationMonths}3
{ContractDurationDays}13
{ContractDurationFullInTextEn}three [3] months and thirteen [13] days
{ContractDurationFullInTextPt}três [3] meses e treze [13] dias
{ContractDurationFullInTextEs}tres [3] meses y trece [13] días
{ContractDurationFullInTextIt}tre [3] mesi e tredici [13] giorni
  • {ContractDurationDays} is the remainder, not a total day count — it is what is left after {ContractDurationMonths}. The two are designed to be read together: {ContractDurationMonths} meses y {ContractDurationDays} días.
  • On an exact-month lease the remainder is 0, and {ContractDurationFullInText…} prints just seis [6] meses — never seis [6] meses y cero [0] días.
  • The existing {ContractDurationMonths} and {ContractDurationInText…} tokens are unchanged, so templates already in use keep printing exactly what they print today.
Do not put two duration tokens side by side

{ContractDurationInTextEs} {ContractDurationMonths} prints tres [3] meses 3 — the spelled token already contains the figure in brackets, so the second token repeats it. Use one token per clause, or the Full one when you need the days.

Open available variables on the Contract tab and scroll past {StartDate} / {EndDate} — the catalogue lists the numeric duration token and every language-suffixed words form with a one-line description and a copy control:

Contract Template Variables modal — contract duration tokens (months number + En/Pt/Es/It in words)

How the duration is counted​

  • It is measured between the same two dates the contract prints as {StartDate} and {EndDate}. If the booking is set to use the check-in/check-out dates on the contract, the duration follows those instead — the three tokens can never disagree with each other.
  • The end date is inclusive (it is the last day of the lease), so 01/01/2026 → 30/06/2026 is 6 months, not 5.
  • Partial months are dropped, never rounded up: 01/01/2026 → 15/07/2026 is 6 months. The leftover days are available separately — see Leases that are not a whole number of months. This matches how the minimum/maximum stay period is checked when a booking is created.
  • A stay shorter than a month prints 0 (cero [0] meses), which is a real answer — not a missing one. Its days still show in {ContractDurationDays}.
  • If a date is missing, or the end date falls before the start date, every duration token renders empty rather than printing a wrong or negative number.

Property rooms​

{PropertyTotalRooms} prints how many units the property has — the same "rooms" figure the app shows everywhere else (every non-deleted unit, whatever its type; a whole-apartment property counts as 1). A property with no units prints 0; the token is only blank when the count is genuinely unavailable.

{PropertyRoomRange} prints the property's unit names. It only collapses them into a range when the names prove that is safe:

The property's units{PropertyRoomRange}
H.1 … H.6 (all present)H.1 a H.6
H.1, H.3, H.6H.1, H.3, H.6
H.1 onlyH.1
H.1, A.2A.2, H.1
Suite Azul, ÁticoÁtico, Suite Azul
H.1, H.1, H.2H.1, H.1, H.2
Why gaps are listed instead of ranged

A contract is a legal document, so H.1 a H.6 must never be printed for a property that does not actually have H.2, H.4 and H.5. Whenever the unit names have gaps, mix prefixes, or are not numbered, Vivin lists them instead — sorted naturally, so H.2 comes before H.10.

Two units may share a name (unit names are not forced to be unique). Both are listed, because both are real, separately-bookable units — a repeated name switches the token to the list form rather than being hidden inside a range.

Unit names come from each unit's internal name. Keep them consistently numbered (H.1, H.2, H.3, …) if you want the compact range form.

Open available variables and scroll to the property block — {PropertyTotalRooms} and {PropertyRoomRange} sit just after {PropertyAddress}:

Contract Template Variables modal — property rooms tokens (PropertyTotalRooms and PropertyRoomRange)

Walkthrough: open available variables, then scroll from property address through room-count / room-range tokens into contract duration (number + language-suffixed words).

Surface area variables​

{ListingArea} prints the unit's surface area in square metres and {PropertyArea} prints the building's. Both come from the areas you set on the Full integration pill — see Booking engine details — Surface area. A property or unit with no area set prints nothing.

VariableOutput
{ListingArea}Unit surface area, e.g. 24.5
{PropertyArea}Building surface area, e.g. 180

Each also has a written-out form, one token per language, so a clause can state the figure and the words together:

LanguageUnitProperty
English{ListingAreaInTextEn}{PropertyAreaInTextEn}
Portuguese{ListingAreaInTextPt}{PropertyAreaInTextPt}
Spanish{ListingAreaInTextEs}{PropertyAreaInTextEs}
Italian{ListingAreaInTextIt}{PropertyAreaInTextIt}

The written form repeats the figure in brackets, the way a lease normally states a measurement:

Area{ListingAreaInTextPt}{ListingAreaInTextEs}
62sessenta e dois [62] metros quadradossesenta y dos [62] metros cuadrados
24.5vinte e quatro vírgula cinquenta [24,50] metros quadradosveinticuatro coma cincuenta [24,50] metros cuadrados
1um [1] metro quadradoun [1] metro cuadrado

A typical clause pairs the two:

O quarto tem {ListingArea} m2 ({ListingAreaInTextPt}).
Choose the language in the token name

As with the amount and duration tokens, there is no plain {ListingAreaInText} — the language is part of the token name. That is what lets a bilingual template print the same area in two languages in different clauses.

Areas are rounded to two decimals

Both the figure and the words are rounded the same way, so they always state the same measurement. An area entered as 24.567 prints 24.57 and reads as twenty-four point fifty-seven — never two different numbers in one sentence.

Contract Template Variables modal — PropertyArea and ListingArea figure and language-suffixed word tokens

Unset areas stay blank

A property or unit with no surface area set prints nothing for both the figure and all four word tokens — Vivin does not invent 0 square metres. A stored 0 still prints as zero (and the matching words). Fill areas under Booking engine details — Surface area before you rely on these tokens in a lease.

Property and unit overrides​

Pair with other Contract sections

Resolution order is unit → property → account — per-building files pair with Listings — Contract tab and mixed-inventory onboarding in Onboarding a New Property.

Below the account default card, the Contract tab lists:

  • Properties with custom contract — a .docx that applies to all units on that property unless a unit override exists.
  • Units with custom contract — a template for a single listing only.

Use Search to filter by property or unit name. On a property row, follow overrides links to scope the unit list to that building. Each card offers Preview, Replace, and Remove (remove restores the next fallback: unit → property → account default).

Unit-specific contract templates​

Pair with other Contract sections

Unit overrides pair with Processing a New Booking — Step 4 (generate PDF per unit), Listings — Contract tab (resolution chain), Portal settings — Mandatory for contract signing (portal gates after PDF exists), and Tenant Portal — Digital contract signing (portal signing after generation). When tenants report a missing Sign contract button, confirm a PDF was generated — FAQ — Tenant contract signing blocked.

When only some units need a different legal agreement (for example accommodation services vs long-term lease), assign a unit override:

Add Contract Template modal — Unit scope with property and unit selectors

  1. Click Upload Contract Template (or Replace on a unit card).
  2. Choose scope Unit, pick the property and unit, and upload the alternative .docx.
  3. When a contract is generated for that unit, the unit template wins over the property and account defaults.

You can also set a property-level template so every unit on that building shares one file without uploading per unit.

Walkthrough: open the variables catalogue modal, close it, then open Upload Contract Template and Cancel without changing files.

Contract section cross-reference​

Use the sections above for this settings area. Related setup pages are linked from Related below when present, or from Account Settings.

Pair with other Contract guide sections

Related below links this Account Settings tab to modules, workflows, concepts, and escalation paths.

Documentation map & escalation​

Upstream & downstream workflows​

Deeper workflow reads​

See Upstream & downstream workflows above for the same guides.

Operator modules​

Deeper concept reads​

Companion API guides​

Module documentation hubs​

  • Bookings — Operator UI for contract generation and portal signing gates
  • Listings — Property wizard and per-property contract overrides
  • Finance — Portfolio ledgers and deposit refund workflow tied to contract end dates
  • Booking engine details — Marketing copy separate from contract .docx templates
  • Tenants — Tenant profile fields referenced by contract variables
  • Operations — Check-in/out coordination when unsigned contracts block access
  • API Reference hub — Partner HTTP contracts and partial vs full feeds

Operator habit hubs​

Day-to-day operator habits (lockout catch-up, pending receipts, payment triage, handoffs, and related playbooks) live on the Common Workflows habit hub.

Deep-link anchors for habit hubs

Lockout catch-up after password recovery​

Pending manual receipt approval​

Reject/revert mistaken receipts​

Portfolio segmentation by tenant category​

Notification row-click navigation​

Payment alert to receivables triage​

Confirmation alert triage​

Finance debt receivables triage​

Handling a Late Payment collections​

Finance Income status drill-down​

Cash flow forecast drill-down​

Key glossary terms​