Home / Help Center / pos-app / Money & Accounts / Rent Payments
💵 Money & Accounts

Rent Payments

Rent Payments turns your Rent Agreements into individual billing periods (like invoices) and lets you record how much of each one has actually been collected from the vendor.

📍 Menu path: Money & Accounts → Rent Payments
👤 Who uses it: Managers/Owners only (managerOnly nav item)
🏷️ Plan tier: advanced+

Overview

Each row on this page is one billing period for one agreement — it has a total amount, an amount paid so far, a remaining balance, and a status (Pending, Partial, Paid, Overdue).

Payments are not created automatically when you save an agreement; you either generate them one at a time for a specific agreement/period, or use Auto Generate to create the next due payment for every active agreement in one click.

Recording a payment supports partial payments — you can pay less than the balance and the record stays Partial until it is fully settled.

Before You Start

Step-by-Step Guide

1 Auto-generate rent payments for all active agreements

  1. Click Auto Generate at the top of the page.
  2. Confirm the prompt ("Generate rent payments for all active agreements?").
  3. The system creates the next due payment for every active agreement that does not already have one for the current period, and the list refreshes automatically.

2 Manually generate a payment for one agreement

  1. Click Generate Payment.
  2. Select the Agreement from the dropdown — each option shows vendor name and monthly rent for quick identification.
  3. Pick the Period Start date for the billing cycle you want to generate.
  4. Click Generate to create the payment record; it appears in the list with status Pending.

3 Filter the payments list by status

  1. Use the status chips at the top (All, Pending, Partial, Paid, Overdue) to narrow the list to one state.
  2. The active chip is highlighted; click it again or click "All" to clear the filter.

4 Record a payment received from a vendor

  1. On any payment row that is not already Paid, click Record Payment.
  2. Review the summary panel showing Total Amount, Already Paid, and Balance Due for that period.
  3. Enter the Payment Amount — it defaults to the full remaining balance but can be reduced for a partial payment (cannot exceed the balance).
  4. Choose the Payment Method: Cash, UPI, Bank Transfer, Cheque or Card.
  5. Optionally enter a Reference/Transaction ID for reconciliation.
  6. Click Record Payment to save — the balance and status update immediately (Partial if balance remains, Paid if fully settled).

Every Field & Button, Explained

Field / ButtonWhat it does
Auto GenerateBulk-creates the next due payment for every active agreement in one action, after a confirmation prompt.
Generate PaymentOpens a modal to manually create one payment for a chosen agreement and period start date.
Status filter chipsAll / Pending / Partial / Paid / Overdue — filters the payments list client-side against the selected status.
Invoice (column)The generated invoice number for that billing period.
Total (column)The full amount due for that billing period.
Paid (column)The amount already collected against this period, shown in green.
Balance (column)Total minus Paid — the amount still owed, shown in red.
Period / DueThe billing period (start to end date) and the due date for that period.
Record Payment (button)Opens the payment-recording modal for that specific billing row; hidden once a row is fully Paid.
Payment AmountDefaults to the outstanding balance; capped at the balance amount and accepts decimals.
Payment MethodCash, UPI, Bank Transfer, Cheque, or Card.
Reference/Transaction IDOptional free-text field for a UPI reference, cheque number, or bank transaction ID.

Tips & Best Practices

Troubleshooting & FAQ

Auto Generate did not create a payment for one of my vendors.
Auto Generate only creates a payment if one does not already exist for that agreement's current period, and only for agreements with Status = Active. Check the agreement's status and whether a payment already exists for that period.
I cannot enter more than the balance amount when recording a payment.
The Payment Amount field is capped at the current balance by design (max attribute) — record it as a partial payment instead, or issue a separate credit/adjustment if the vendor overpaid.
A payment stays Overdue even after generating it.
Status is computed from the due date versus today's date, not from when it was generated. A newly generated payment for a past period will show Overdue immediately until a payment is recorded against it.
"Generate Payment" fails with a validation error.
The backend returns specific validation messages (e.g. duplicate period, missing agreement) which are shown directly in the error toast — check that the selected agreement and period combination has not already been generated.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/RentPaymentsPage.jsx

Backend endpoints used:

  • GET /rent-management/payments
  • GET /rent-management/agreements
  • POST /rent-management/payments/generate
  • POST /rent-management/payments/auto-generate
  • POST /rent-management/payments/:id/record

Related tables (db-core repositories):

  • RentPayment
  • RentAgreement

Redux slices:

  • scope (selectCurrentScope / getScopeQueryParams)

Feature flag key: rent_management (requires advanced plan tier or above)

Status filter is sent to the backend as a query param (params.status) rather than filtered purely client-side, so the payments list is re-fetched whenever the filter changes. The agreements dropdown used for "Generate Payment" only loads ACTIVE agreements (status: 'ACTIVE' param) via a separate call from the main payments list. openPaymentModal seeds the payment form's amount from payment.balanceAmount.