Skip to content

Estimates Module

Tenant customer-billing module on the frozen platform — the fourth Phase 3 (Billing) module, shipped alongside Invoices, Payments, and Credit Notes. Lets a tenant issue pre-sale cost estimates to a contact/company, optionally tied to an Opportunity or Quotation, and convert an accepted estimate straight into a draft Invoice.

Hard dependency on Invoices. Like Payments and Credit Notes, Estimates declares a required module_dependencies row on Invoices — a workspace must have Invoices installed before Estimates can be enabled from Marketplace (the conversion action always needs a place to create the resulting invoice).

Guides

AudienceDocument
Operators / workspace usersestimates.md
Engineersestimates.md
Production / opsestimates.md
Module Development Standardmodule-development.md
Reference blueprintquotations-overview.md, invoices-overview.md
Tenant API../api/tenant-v1-estimates.md

Capabilities

  • Estimate fields: title, optional contact/company link (gated New when Contacts/Companies entitled + create), optional opportunity/quotation link (Opportunity New when entitled + create), currency, valid-until date, notes
  • Auto-numbered (EST-00001; prefix backed by the estimates_number_prefix tenant setting, default EST- — editable under Settings → General → Document number prefixes)
  • Line items (description, quantity, unit price, tax rate) — subtotal / tax total / total computed server-side, same pattern as Invoices/Quotations
  • Status workflow: draft → sent → accepted | rejected | expired (POST /estimates/{id}/send, .../accept, .../status)
  • Download estimate PDF (workspace-branded; same layout family as invoices)
  • Email customer after Send (POST /estimates/{id}/email, estimates.send) — optional PDF attachment; default recipient from linked contact/company; records emailed timeline + tenant email log
  • Convert to invoice (POST /estimates/{id}/convert) — creates a draft CustomerInvoice with the estimate's lines, links it back via estimate_id, and marks the estimate Accepted if it wasn't already. One-way and one-time per estimate. Blocked if the linked quotation is already invoiced.
  • Assignment with assignee scoping via estimates.assign
  • Notes + domain activity timeline (mirrors Invoices/Quotations)
  • Ask EloSync triage (with AI Assistant entitled): fetch estimate, confirmed status / assign / note writes — see AI Assistant
  • Trash filtering plus Restore and Delete permanently
  • Module licensing (module:estimates) + Spatie permissions — free Marketplace opt-in (Billing category), requires Invoices
  • Audit + activity logging; assignment notification

Permissions

estimates.view · create · update · delete · restore · force.delete · assign · send · accept · convert

Enable Estimates from Marketplace (free) — Invoices must already be installed; Marketplace blocks the install otherwise. Catalog: slug estimates, category billing, is_default_included = false, is_billable = false, sort_order = 40, version 1.6.0.

Required: Invoices — Estimates cannot be installed, or converted, without it. Optional: Contacts, Companies, Opportunities, and Quotations (pickers only appear/validate when entitled). See Module Dependencies.

Explicitly deferred

  • Re-converting or reversing a converted estimate (conversion is one-way, one-time)
  • Multi-currency conversion
  • Approval workflow beyond the status enum

Official documentation for the EloSync SaaS Platform.