Maintenance Contracts

Manage recurring service agreements with your clients. Maintenance contracts let you track ongoing obligations, automate payment schedules, and monitor contract health so nothing falls through the cracks.

Setting Up Contracts

Maintenance contracts represent ongoing service agreements between your company and a client. Each contract defines the scope, billing terms, and schedule for recurring work such as support retainers, managed services, or periodic maintenance.

Creating a new contract

To create a maintenance contract, navigate to the Maintenance Contracts page and click the Add button. The multi-step form walks you through all required information:

  1. Contract - Select the client, give the contract a descriptive name, link it to an existing project via the Project field, assign a Supplier from the Suppliers module, and describe the Service being maintained (e.g., "Monthly server monitoring" or "Annual HVAC inspection").
  2. Schedule - Set the Start Date and End Date for the contract period, choose the billing Term (monthly, quarterly, annually, etc.), and set the initial Status. Contracts can be filtered as "Active" or "Closed" to quickly separate ongoing agreements from completed ones.
  3. Financial - Enter the recurring Amount the client pays per billing cycle, select the Currency, and add an optional Description with any notes or special terms for this contract.

Key fields

  • Client - The client this contract is tied to. Every contract must be linked to an existing client record.
  • Contract Name - A descriptive label for the agreement (e.g., "Monthly IT Support" or "Quarterly Server Maintenance").
  • Contract Value - The recurring amount the client pays per billing cycle.
  • Project - Link the maintenance contract to an existing project. This connects the contract to the broader scope of work for that client.
  • Supplier - Link to a supplier from the Suppliers module. Useful when a third-party vendor delivers the maintained service.
  • Service - A description of the service being maintained (e.g., "Quarterly security audit" or "Monthly cloud hosting").
  • Currency - The billing currency for this contract. Defaults to your system default currency but can be changed per contract.
  • Frequency / Term - Defines the billing cycle length and how payment coverage dates are calculated.
  • Start Date - When the contract takes effect and the first payment cycle begins.
  • End Date - When the contract period expires. Used together with Start Date to define the full duration of the agreement.
  • Status - The current state of the contract. Contracts can be filtered as "Active" or "Closed" to quickly separate ongoing agreements from terminated ones.

Linking contracts to clients

Each maintenance contract is associated with a single client. When you open a client record, you can see all their active and past contracts. This gives you a complete picture of your ongoing obligations to each client.

Viewing and managing contracts

Click any contract row to open the entity drawer, which shows the full contract details in a structured layout: the hero header displays the contract name and client, while grouped sections show billing terms, payment history, and status information. Use the edit action to modify contract details at any time.

Tip: Use descriptive contract names that include the service type and frequency. This makes it easier to identify contracts at a glance when you have many active agreements.

Payment Schedules

Maintenance payments track individual billing cycles against a contract. Each payment record represents one coverage period and its associated amount, giving you a clear history of what has been billed and paid.

How maintenance payments work

The primary way to manage maintenance payments is through the "Payments" row action. Right-click a contract row (or click the three-dot menu) and select Payments. This opens a dedicated MaintenancePaymentsModal - a popup dialog where you can view, add, and manage all payments for that specific contract without leaving the page. The modal shows the full payment history for the contract and lets you create new payment records inline.

When you record a payment against a maintenance contract, Belvak creates a payment record that includes the amount, currency, and the coverage period (start and end dates) that the payment covers. These records form the backbone of the contract status system - the platform uses them to determine whether a contract is current or needs attention.

Payment fields

  • Amount - The payment amount for this billing cycle. Auto-filled from the contract value when you create a new payment.
  • Currency - Inherited from the parent contract by default. Supports multi-currency if your organization bills in different currencies.
  • Coverage Start Date - The first day of the period this payment covers.
  • Coverage End Date - The last day of the covered period. This date drives the contract status calculation.

Auto-fill behavior

When you add a new payment to a contract, the amount and coverage dates are automatically calculated based on the contract term and the most recent existing payment. This reduces manual data entry and ensures coverage periods are sequential without gaps or overlaps.

Tip: You can override the auto-filled values if needed - for example, if a client negotiated a different rate for a specific period or if you need to adjust coverage dates for a mid-cycle change.

Payment history

The contract drawer shows a complete payment history, making it easy to review past billing cycles, identify gaps in coverage, and verify that payments are up to date. You can also access the full Maintenance Payments list to filter and search across all contracts.

Multi-currency support

Each contract and its payments store their own currency code. If your organization manages contracts in multiple currencies, each one tracks independently. Currency formatting in tables and drawers adapts automatically based on the stored currency.

Status Monitoring

Belvak automatically tracks the health of each maintenance contract based on payment coverage dates. This eliminates the need to manually check whether contracts are current, expiring soon, or overdue.

The "Check Now" / "All Good" cycle

Contract status follows a simple two-state cycle:

  • All Good - The contract has active coverage. The most recent payment's end date is more than 15 days in the future. No action needed.
  • Check Now - The contract needs attention. The most recent payment's coverage is ending within 15 days or has already expired. Time to record a new payment or follow up with the client.

How status is computed

The status is calculated dynamically each time you view the contracts list. The system looks at the most recent payment's end date for each contract and computes the number of days between today and that date. If the difference is 15 days or fewer (meaning coverage expires within the next two weeks or has already expired), the contract flips to "Check Now."

Note: The 15-day threshold is designed to give you enough lead time to process a renewal payment before coverage lapses. If your billing cycle requires more lead time, plan to act on "Check Now" contracts promptly.

Visual indicators

The contracts table displays status badges that make it immediately clear which contracts need attention. "All Good" contracts show a positive indicator, while "Check Now" contracts are highlighted to draw your eye. This lets you quickly scan your entire portfolio and prioritize follow-ups.

Filtering by status

Use the table filters to narrow the list to only "Check Now" contracts when you want to focus on renewals, or filter to "All Good" to review your stable agreements. Combined with sorting by client or contract value, this helps you prioritize which contracts to address first.

Tip: Make it a habit to check the "Check Now" filter at the start of each week. This ensures you catch expiring contracts before they lapse and keeps your client relationships running smoothly. You can also spot the same warning per client by opening the client and checking the Related tab, where contracts due within 15 days appear with a red "Needs Attention" badge next to the contract name.

Contract Renewals

Renewing a maintenance contract in Belvak is straightforward: record a new payment that extends the coverage period. The system handles the rest, automatically updating the contract status based on the new coverage dates.

Renewal workflow

  1. Identify contracts that need renewal by filtering for "Check Now" status or reviewing the contracts list.
  2. Open the contract and add a new payment. The coverage dates and amount will be auto-filled based on the contract term and the last payment period.
  3. Confirm the payment details and save. The contract status automatically updates to "All Good" once the new coverage period extends beyond the 15-day threshold.

Keeping contracts active

The key to maintaining healthy contracts is recording payments on time. As long as each payment's coverage end date extends into the future (beyond the 15-day threshold), the contract remains in "All Good" status. Sequential payments with no coverage gaps ensure a clean history.

Modifying contract terms

If a client renegotiates their contract - whether the value changes, the billing frequency shifts, or the scope of services evolves - you can edit the contract record directly. Future payments will auto-fill based on the updated terms. Past payment records remain unchanged, preserving your billing history.

Note: Changing the contract value only affects the auto-fill amount for future payments. Existing payment records are not retroactively modified, so your historical billing data stays accurate.

Termination and reactivation

To terminate a contract, update its status to reflect that it is no longer active. The contract and all its payment history remain in the system for reference. If a client later decides to resume services, you can reactivate the contract and begin recording new payments - the status system picks up right where you left off.

Best practices

  • Record payments promptly to keep contract statuses accurate and avoid false "Check Now" alerts.
  • Review the "Check Now" list weekly to catch expiring contracts before coverage lapses.
  • Use descriptive contract names and consistent naming conventions across your team.
  • When modifying terms, add a note to the contract record explaining the change for future reference.
  • Keep terminated contracts in the system rather than deleting them - the payment history is valuable for reporting and audits.

Tip: For clients with multiple contracts, stagger renewal dates so they do not all come due at the same time. This smooths out your billing workload and reduces the chance of something slipping through.

Related Articles