What this covers, and where it stops
This is the pre-order half of the job: capturing the requirement, assembling a priced document, approving it, sending it, tracking the customer's decision and recording exactly what was accepted. Order creation, fulfilment, invoicing and reconciliation are the half that follows, and they are scoped separately because they answer to different people and different rules.
You probably need something more controlled if any of the following is true. Two people can quote the same job at different prices. Nobody can say which version the customer is holding. A discount went out that nobody senior would have approved. A quote from four months ago is still being treated as current. Or the number on the document is decided by whoever saved the file.
One number, and it is never reused
Start here, because it costs almost nothing to build and a great deal to retrofit. Every quotation gets one identifier allocated by the system rather than typed by a person. Revisions stay under that identifier as versions. A superseded version is kept rather than overwritten. Nothing reuses a number that has already been issued, even if the original was withdrawn the same day.
That one rule is what lets you answer the only questions that matter in a dispute: what did we send, when, at what price, and who approved it. It is also what removes the spreadsheet of documents that a quotation system was supposed to replace, because the sequence lives in the system that issues the numbers.
One number, every revision underneath it
Editorial framework. This is what settles a dispute: what was sent, when, at what price and who approved it.
Basis: Stripe: Quotes. Reviewed .
Read the graphic as text
- Number allocated. Issued by the system, never typed by a person
- Version sent. Immutable from the moment it leaves
- Revision. A new version under the same number
- Superseded kept. The earlier version retained, never replaced
What goes into a quote
A quote is a structured record before it is a document. Customer context, including who receives it and where it is sent. Line items, with quantities or units where those apply. The pricing inputs that produced each figure. Notes and terms. A validity period. And a version identity that travels with all of it.
Separate the reusable part from the transaction-specific part. Standard scope wording, terms and section structure belong to a template that a named person maintains. Prices, quantities, dates and names belong to the transaction. Mixing them is how a quotation ends up carrying last year's terms with this year's prices. Odoo's documentation describes one product's approach to that separation, with reusable quotation templates carrying validity settings, line items and a customer-facing preview. It illustrates the shape rather than recommending the tool, and the defaults it documents will not automatically fit your business.
Where the customer context comes from is its own decision. It may be typed, it may come from an existing customer record, or it may be pulled from an opportunity your sales team already keeps. That connection is a sibling piece of work and it belongs with CRM and integrations.
The e-Invoice mandate is already fully live
Published statistic. Every phase has passed. If a system issues invoices, e-Invoice is not an upcoming project, it is a current obligation with a turnover threshold attached.
Source: Inland Revenue Board of Malaysia: e-Invoice implementation timeline. Reviewed .
Read the graphic as text
- Above RM100 million. Mandatory since 1 August 2024
- RM25 million to RM100 million. Mandatory since 1 January 2025
- RM5 million to RM25 million. Mandatory since 1 July 2025
- Up to RM5 million. Mandatory since 1 January 2026
- Under RM3 million. Exempt, unless the company belongs to a larger group
Pricing rules and discounts
This is where a quotation system earns its place. Figures are resolved from an agreed rule rather than from memory: list price, customer or tier pricing, quantity breaks, and whatever your business genuinely does for a repeat client. The rule produces the number, and the number carries the inputs that produced it so somebody can check the arithmetic later without recreating the conversation.
Discounts need a policy before they need a field. Decide the threshold a salesperson may approve alone, what happens above it, whether a floor exists below which the system refuses outright, and whether a discount is recorded as a percentage, an amount or an overridden unit price, because those three reconcile differently once an order exists. An out-of-policy figure should route to a named reviewer rather than being quietly possible.
A worked example
The roles, policies and system responses below are assumed for teaching and the real scope stays to agree. The acceptance evidence describes tests to run rather than results already achieved.
| Workflow step | Assumed actor | Proposed system response | Exception | Acceptance evidence to collect |
|---|---|---|---|---|
| Draft a quote | Salesperson | Record the requirement and line items, and calculate a versioned total from the approved rules | A price is missing, or the discount falls outside policy | Collect the rule inputs and check each calculation against them, including the out-of-policy route |
| Approve and send | Sales manager | Approve one specific version, record the recipient and the time, then issue the document | A changed version goes out without a further approval | Test version, permission and approval history, and confirm a superseded version cannot be sent |
| Accept the quote | Customer and order owner | Record acceptance against the exact version before any agreed handoff | The version has expired or has been superseded | Collect the acceptance record with its version, and check it maps to the intended downstream record |
Who may approve, revise and send
An illustrative lifecycle runs draft, review, approved, sent, revision required and superseded, ending in accepted, rejected or expired. Your real states depend on how your business sells, and the useful exercise is naming them deliberately rather than adopting somebody else's list.
Then attach permissions, because states are only as good as the rules about who may move a quote between them. Who may edit the inputs. Who may approve a version. Who may send it, which is not always the same person. Who may revise an approved quote, and whether revising it automatically returns it for approval. Who may inspect the history.
Treat renewed approval after a material change as a control you configure, not a universal rule. Your business decides what counts as material: a price change, a scope change, a longer validity, a different recipient. What should not be configurable is whether the approval is recorded at all. Every version should be able to show who approved it and when, which is precisely what the approval row in the table is asking you to test.
Validity, supersession and expiry
Validity is a business rule rather than a formality. It belongs to a version, it should be visible on the document, and the system should know what to do when the date passes instead of leaving a stale quote quietly available to accept.
Three states get confused, and each prompts a different decision. Superseded means a newer version exists, so the question is whether the customer has seen it. Rejected means the customer said no, so the question is why, because that is some of the most useful sales data you will collect. Expired means time ran out, so the question is whether to reissue at the same price or requote.
Acceptance should be associated with the version it applies to, together with whatever evidence you agree to keep. Odoo's documentation describes one configured approach, where an online signature flow can retain signed-by and signed-on information against the quotation. Whether a signature, an email confirmation or a purchase order is the right evidence in your business is a scoping decision, and a system recording an acceptance is not the same thing as a legal opinion about the contract.
Four ways a quotation stops being live
Editorial framework. A stale quote left quietly acceptable is a price you no longer meant to offer.
Basis: Perfect Design: business systems explained. Reviewed .
Read the graphic as text
- Superseded. A newer version exists, has the customer seen it
- Rejected. The customer said no, and the reason is data
- Expired. Time ran out, so reissue or requote
- Accepted. Recorded against the exact version agreed
After acceptance
An agreed handoff settles four things: which quotation version is the input, which customer and line data transfers, who owns the work downstream, and what happens to an exception such as a line that cannot be delivered as quoted. Order creation, fulfilment, invoicing and reconciliation design begin on the other side of that boundary and are scoped as their own piece of work.
Which rails Malaysian money runs on
Published statistic. Share of transactions across the six payment systems Bank Negara reports. Real-time rails now carry four in five payments, which is why they belong in a checkout before a card form does.
Source: Bank Negara Malaysia: Payment Statistics, Table T3 Payment Systems, 2025. Reviewed .
Read the graphic as text
2025
- DuitNow: 79.7%. Real-time transfers and QR, 5.44 billion transactions
- FPX: 14.0%. Online banking, the e-commerce workhorse
- Interbank GIRO: 4.5%. Scheduled transfers, payroll and supplier runs
- JomPAY: 1.4%. Bill payments by biller code
- Direct debit and RENTAS: 0.4%. Recurring collections and large-value settlement
The document people actually read
The rendered document is not a detail. Totals that align, line items that do not break awkwardly across a page, dates in a format nobody misreads, and terms that stay attached to the version they belong to. We look at the rendered file before it goes anywhere, because a quotation is often the first part of your operation a customer inspects closely, and a misaligned total costs more trust than it should.
The cheque is finishing
Published statistic. Under one cheque per person per year, and falling by a fifth annually. Any process that still assumes a cheque in the post is quietly adding a week to getting paid.
Source: Bank Negara Malaysia: Annual Report 2025 and Payment Statistics T1. Reviewed .
Read the graphic as text
- 2020: 1.84.
- 2021: 1.48.
- 2022: 1.41.
- 2023: 1.22.
- 2024: 1.17.
- 2025: 0.92. 31.4m total
Chart scale: Cheques issued per Malaysian, per year.
Where your quotes begin
Two starting points behave differently. If a customer picks items from a catalogue and asks for a price, the quotation begins from a selection and most of the work is rules and approval. If quotes begin from a conversation, an enquiry form or an internal sales process, the work starts earlier, with capturing a requirement well enough that two people would quote it the same way.
Bring the current process, the change you want, who is involved, the tools already in use and any constraint that is fixed. Keep credentials out of a first message. Tell us how you quote today and we will say what we would control first, what belongs in a later phase, and whether a custom build is the right answer at all.


