Payment Terms
Payment terms define how and when your clients are expected to pay for quotes and invoices. NexusRMS provides reusable payment terms templates that you can assign at the project, client, or tenant level, with a three-tier resolution hierarchy that automatically selects the correct terms for every document.
Payment term types
Every payment terms template has a type field that controls how the payment schedule is calculated. NexusRMS supports five types:
- upfront — Full payment is required before work begins. The entire invoice amount is due immediately upon quote approval or invoice issue.
- on_completion — Full payment is due when the project completes. No payment is required until all work is finished and equipment is returned.
- net_term — Payment is due a set number of days after the invoice date. The net_days field controls the period (e.g., 14, 30, or 60 days).
- split — Payment is divided into milestones with defined percentages and triggers (e.g., 50% deposit on quote approval, 50% seven days before the event).
- custom — A fully customisable milestone schedule where you define an arbitrary number of payments with any combination of triggers and percentages.
Creating payment terms
Navigate to Financial > Payment Terms and click Create Payment Terms. The form fields are:
- Name (required) — A descriptive label such as "Net 30" or "50/50 Split"
- Code — A short unique code for internal reference (e.g., NET30, SPLIT50)
- Description — A human-readable explanation of the terms, shown to clients on documents
- Type (required) — One of the five types listed above
- Net Days — Number of days after invoice date for net_term types
- Late Fee Percentage — Percentage of the overdue amount charged as a late fee
- Late Fee Flat Amount — Fixed monetary amount charged per overdue period
- Grace Period Days — Number of days after the due date before late fees begin accruing
- System Default — Toggle to mark this template as the tenant-wide default. Only one template can be the system default at a time; enabling it on one template automatically clears it from all others.
- Active — Toggle to control whether this template appears in selection lists
- Sort Order — Numeric value controlling display order in dropdown menus
Milestone-based terms
When you select the split or custom type, the milestones editor becomes available. Milestones are stored as a JSON array on the milestones field, and each entry includes:
- id — A unique identifier for the milestone (e.g., ms_1, ms_2)
- name — Label for the milestone (e.g., "Deposit", "Final Payment")
- percentage — Percentage of the total amount due at this milestone
- trigger — When this milestone becomes due (see trigger types below)
- trigger_config — Additional configuration for the trigger, such as the number of days
- description — Client-facing explanation of the milestone
The hasValidMilestones() method validates that all milestone percentages sum to exactly 100%. If they do not, the system will reject the template on save.
Milestone trigger types
NexusRMS provides seven trigger types that control when each milestone payment becomes due:
- quote_approval — On Quote Approval: payment is due when the client accepts the quote
- invoice_date — From Invoice Date: payment is due relative to the invoice issue date
- days_before_start — Days Before Project Start: payment is due a configured number of days before the project begins
- on_delivery — On Delivery/Completion: payment is due when equipment is delivered or the project completes
- days_after_completion — Days After Completion: payment is due a configured number of days after the project ends
- on_term — Net Days from Invoice: payment follows the net_days value from the invoice date
- fixed_date — Fixed Date: payment is due on a specific calendar date
Late fees
Late fees are configured per payment terms template and applied to overdue invoices and payment plan installments. NexusRMS supports two fee types that can be used independently or together:
- late_fee_percentage — A percentage of the overdue amount (e.g., 2% per period)
- late_fee_flat_amount — A fixed monetary amount per overdue period (e.g., 25.00)
The grace_period_days field controls how many days after the due date must pass before late fees begin accruing. Set this to zero for immediate late fee application, or to a positive number to give clients a buffer.
Three-tier resolution hierarchy
When creating a quote or invoice, NexusRMS automatically resolves which payment terms to apply using a three-tier priority system managed by the resolvePaymentTerms method in PaymentTermsService:
- Project-level terms (highest priority) — If the project has a payment_terms_id set, those terms are used regardless of client or tenant settings.
- Client-level default terms — If no project-level override exists, the system checks the client's default_payment_terms_id field.
- Tenant-level default terms (fallback) — If neither the project nor the client specifies terms, the system falls back to the template marked with is_system_default set to true.
The resolve endpoint also returns a source field indicating which tier provided the terms (project, client, or tenant_default), so you can see exactly why specific terms were selected.
Standard templates
NexusRMS can seed a set of standard payment terms templates for your tenant. Use the Seed Standard Terms action (or the seed endpoint) to create the following templates automatically:
- 100% Upfront (UPFRONT) — Full payment on quote approval
- Pay on Completion (COMPLETION) — Full payment on project completion
- Net 14 (NET14) — Payment due 14 days from invoice date
- Net 30 (NET30) — Payment due 30 days from invoice date (set as system default)
- Net 60 (NET60) — Payment due 60 days from invoice date
- 50/50 Split (SPLIT50) — 50% deposit on approval, 50% due 7 days before event
- 30/70 Event Terms (SPLIT3070) — 30% deposit on approval, 70% due 14 days after completion
Templates are matched by code, so seeding will not create duplicates if a template with the same code already exists.
Usage tracking
The With Usage view shows how many clients, projects, quotes, and invoices reference each payment terms template. This helps you understand which templates are actively in use before editing or deleting them. When deleting a template that is in use, the system performs a soft delete (archive) rather than a permanent deletion, preserving the historical record.
Configuration
Additional payment terms settings are available in Configuration > Financial Settings > Payment Terms tab:
- deposit_percentage — Default deposit percentage for new quotes
- require_deposit — Toggle to require a deposit before confirming projects
- payment_instructions — Custom payment instructions displayed on invoices and quotes
Tips
- Seed standard terms on first setup — Use the Seed Standard Terms action to quickly populate your account with common payment terms rather than creating each one manually.
- Set client-level defaults for repeat clients — If a client always uses the same terms, set their default_payment_terms_id on the client record to avoid selecting terms on every quote.
- Use project-level overrides for exceptions — When a specific project requires different terms from the client's usual arrangement, set payment_terms_id on the project to override without changing the client default.
- Keep milestone percentages precise — Milestones must sum to exactly 100%. If they do not, the template will fail validation. Use the milestone editor to verify before saving.
- Set a grace period for client goodwill — A grace_period_days of 3 to 7 days gives clients a reasonable buffer before late fees apply, reducing disputes.
- Archive rather than delete — If a payment terms template is no longer needed but has historical usage, deactivate it by toggling is_active to false rather than deleting it.
Was this article helpful?