Sales Workflows

Introduction

ERPNext provides a standard three-way-check between Sales Order, Delivery Note, and Sales Invoice that offers robust tracking and control for typical sales transactions. As described in the Three-Way-Check article, this structure ensures proper documentation of what was ordered, what was delivered, and what was billed.

The standard three-way-check works well for straightforward transactions, but many businesses need workflows that address long-term agreements, manufacturing requirements, and supply constraints. Specialized processes such as point-of-sale, drop shipping, and combined sale-and-payment are covered in Alternative Sales Workflows.

Blanket Order

Blanket Orders create a framework for managing long-term customer relationships and predictable revenue streams. These agreements with customers establish delivery quantities and rates over extended time periods, providing benefits to both sellers and buyers. Businesses choose Blanket Orders when they need structured arrangements for long-term supply contracts, quantity discount agreements, rate contracts with government entities or volume-based pricing arrangements. ERPNext's solution assumes that a Blanket Order is used to purchase up to a fixed quantity, of unknown quantities per Sales Order, with unknown timing. The quantity of the ordered item(s) to be kept in inventory at any time is not typically covered by the Blanket Order but often allows for pre-buying a fixed amount ahead of time.

Example: Chelsea Fruit Company signs a Blanket Order with a hotel chain to supply 1,000 boxes of premium fruit monthly for one year at $30 per box. Throughout the year, the hotel places individual Sales Orders referencing this Blanket Order, ensuring they receive the contracted price regardless of market fluctuations. This arrangement gives Chelsea predictable demand for planning their purchasing and production while giving the hotel price stability despite seasonal market variations.

Blanket Orders can also be used in the Purchasing Cycle but instead of connecting to Sales Orders, they connect to Purchase Orders.

Make to Order and Engineered to Order

Make to Order (MTO) and Engineered to Order (ETO) workflows connect sales processes with manufacturing operations when standard inventory models (often called "Make to Stock") aren't appropriate.

Make to Order

In MTO workflows, companies typically secure a deposit (often 10-30% of the total order value) when the Sales Order is created. This deposit creates a financial commitment from the customer while providing working capital to fund the production process. The simplest way to execute this is to reference the Sales Order in the Payment Entry, which creates a redeemable credit for that customer.

AccountPartyStock LedgerDebitCredit
Cash/Bank$5,000.00
Accounts ReceivableCustomer$5,000.00

A less commonly used option is to recognize unearned revenue along with the remaining balance. ERPNext's Sales Order does not create any activity on the General Ledger, though it would still be referenced by the Payment Entry that records the deposit in this example. If this workflow is appropriate, a Journal Entry can be used to make the entries to Unearned Revenue.

AccountPartyStock LedgerDebitCredit
Unearned Revenue$50,000.00
Cash deposit$5,000.00
Receivables not yet BilledCustomer$45,000.00

Engineered to Order

Engineered to Order extends the MTO concept by adding custom design and engineering phases before manufacturing begins. Due to the longer timeline and higher costs involved, ETO projects typically use milestone-based invoicing rather than a single invoice at completion.

ETO projects often follow a pattern based around milestones that are identifiable to both parties and sometimes a third party, like a lender.

  1. Design Milestone: After requirements gathering and initial design completion
  2. Engineering Milestone: Upon completion of detailed engineering and BOM creation
  3. Manufacturing Milestone: When production begins or at midpoint
  4. Delivery and Installation Milestone: Upon final delivery and acceptance

Each milestone triggers a separate invoice against the same Sales Order, allowing companies to recover costs as the project progresses rather than financing the entire project until completion.

For a $100,000 custom equipment order, we would expect to see invoices with the following entries:

Four invoices that simply record the receivable and revenue.

AccountPartyStock LedgerDebitCredit
Accounts ReceivableCustomer$25,000.00
Project Revenue$25,000.00

At least one Delivery Note that removes the Item(s) from inventory. In this context we have not capitalized the engineering labor into the Item and have only counted raw materials:

AccountPartyStock LedgerDebitCredit
Inventory on Hand-1 @ $50,000.00$50,000.00
Cost of Goods Sold$50,000.00

From an accounting perspective, ETO workflows can create unique project-based cost accumulation structures. Design labor, engineering time, materials, manufacturing overhead, and other costs all accumulate against the specific project. Further details on workflows like this are covered in the Project Accounting, Dimensional Accounting and Payment Terms chapters.

Supply Constrained Sales Workflows

Supply constraints challenge the basic assumptions of sales order processing. When demand exceeds available inventory, businesses need workflows to allocate limited resources while maintaining customer relationships.

Selling Short

"Selling short" refers to accepting customer orders despite insufficient current inventory. This approach allows sales teams to capture demand even when immediate fulfillment isn't possible, preserving revenue opportunities that might otherwise be lost.

When a business sells short, the three-way check between Sales Order, Delivery Note, and Sales Invoice reveals the gap. A Sales Order might specify 100 units, but if only 70 are available, the Delivery Note will show this partial fulfillment. The Sales Invoice typically matches the Delivery Note rather than the original Sales Order. This discrepancy provides valuable data about fulfillment performance.

Example: Chelsea Fruit Company receives an order for 100 boxes of specialty berries, but only has 70 boxes in stock. The Sales Order shows 100 boxes, but the company delivers only the available 70 boxes with a corresponding Delivery Note. In these scenarios, the most frequent solution is to close the Sales Order, documenting that company will not fill the remaining quantity. This workflow is common in industries with perishable inventory.

DocumentQuantityValue
Sales Order100 boxes$2,500
Delivery Note70 boxes$1,750
Sales Invoice70 boxes$1,750

The partial fulfillment creates these accounting entries:

Delivery Note

AccountPartyStock LedgerDebitCredit
Cost of Goods Sold$1,050.00
Inventory on Hand-70 @ $15.00$1,050.00

The corresponding Sales Invoice:

AccountPartyStock LedgerDebitCredit
Accounts ReceivableCustomer$1,750.00
Sales$1,750.00

ERPNext does not have a native concept for "back ordered", though this can be inferred from the combination of a partially fulfilled Sales Order and an open Purchase Order for the balance of the requested goods.

It is worth noting that reconciliation against Blanket Orders is common in industries with long-term supply agreements and predictable demand patterns but rarely used in retail or highly variable demand environments. Companies must decide whether unfulfilled quantities from a "short" situation should count against future Blanket Order fulfillment or be treated as lost sales.

Changes in Rate or Quantity

Market volatility frequently forces adjustments to pricing or available quantities after initial order placement. Agricultural businesses, industries with sensitivities to commodity markets and companies participating in international trade particularly benefit from flexible order amendment capabilities.

The following example shows the delivery and invoicing related to a Sales Order for (20) pieces at $12.50, delivered from two different procurements.

Sales Invoice #1

AccountPartyStock LedgerDebitCredit
Accounts ReceivableCustomer$12.50
Revenue$12.50

Delivery Note #1

AccountPartyStock LedgerDebitCredit
Inventory on Hand-10 @ $1.00$10.00
Cost of Goods Sold$10.00

Sales Invoice #2

AccountPartyStock LedgerDebitCredit
Accounts ReceivableCustomer$14.00
Revenue$14.00

Delivery Note #2

AccountPartyStock LedgerDebitCredit
Inventory on Hand-10 @ $1.15$11.50
Cost of Goods Sold$11.50

While this violates the three way check, it documents the change in price passed through to the customer.

ERPNext includes a price locking feature available in Selling Settings that can maintain consistent pricing throughout the three-way-check cycle, labeled as "Maintain Same Rate Throughout Sales Cycle". This feature is disabled by default. When enabled, the system preserves the original Sales Order rate in subsequent Delivery Notes and Sales Invoices, even when an item's price changes in the master price list. The "Create" button on the Sales Order has the same effect: the Items table is mapped as-is on to the downstream documents.

Sales Returns

Sales returns in ERPNext follow four distinct workflows depending on how the original sale was processed and what needs to be reversed. The system handles returns through Credit Notes (negative Sales Invoices) or Return Delivery Notes, maintaining the document trail while reversing the financial and inventory impacts of the original transaction.

No

Yes - No regulations

No - Regulations prohibit

Yes via Payment Entry

Yes via 'Is Paid'

Yes

Sales Return Request

Was Invoice Paid?

Can Cancel Invoice?

Cancel Sales Invoice

Create Credit Note
Creates negative outstanding

Create Credit Note
Creates credit balance for future use

Create Credit Note with 'Is Paid'
Reverses revenue and payment

Stock return only?
No pricing adjustment

Return Delivery Note
No financial impact

Unpaid Invoice Returns occur when customers request returns before processing payment. The simplest approach is canceling the Sales Invoice entirely, which voids the transaction as if it never occurred. However, many jurisdictions prohibit invoice cancellation after submission for audit trail requirements. In these cases, create a Credit Note against the Sales Invoice, which generates opposing entries while preserving the original document. The Credit Note creates a negative outstanding balance that can offset future purchases.

Paid Invoice Returns via Payment Entry handle situations where payment was processed separately from the invoice through a Payment Entry. The Credit Note reverses only the revenue recognition, creating a negative outstanding balance on the customer's account. This credit balance appears in Payment Reconciliation and automatically offsets against future invoices. The original payment remains in the customer's account as a credit. If immediate refund is needed, create a separate Payment Entry to return funds to the customer.

Paid Invoice Returns with Combined Payment address returns where the original Sales Invoice used the "Is Paid" checkbox to combine revenue recognition and payment collection. In this scenario, the Credit Note must also check "Is Paid" and specify the payment account. This single document reverses both the revenue entries and the payment. This maintains the symmetry of the original transaction, just as the invoice handled both aspects simultaneously, so does the return.

Stock-Only Returns through Return Delivery Notes affect inventory without touching any accounts other than the inventory account. This workflow suits scenarios where items are returned for replacement rather than refund, or when the financial settlement occurs separately from the physical return. The Return Delivery Note increases inventory at the original purchase rate while proportionally reversing the Cost of Goods Sold from the original delivery.

Example: A customer returns 10 boxes of fruit originally sold for $25 each (cost $15 each). The approach depends on the original transaction:

Scenario A: Invoice paid via separate Payment Entry - Credit Note creates:

AccountPartyStock LedgerDebitCredit
Sales Revenue$250.00
Accounts ReceivableCustomer$250.00
Inventory on Hand+10 @ $15.00$150.00
Cost of Goods Sold$150.00

Outstanding becomes -$250.00, available as credit for future purchases.

Scenario B: Invoice used "Is Paid" - Credit Note with "Is Paid" creates:

AccountPartyStock LedgerDebitCredit
Sales Revenue$250.00
Accounts ReceivableCustomer$250.00
Cash/Bank$250.00
Accounts ReceivableCustomer$250.00
Inventory on Hand+10 @ $15.00$150.00
Cost of Goods Sold$150.00

Both revenue and payment reverse immediately, with no remaining credit balance.

The "Update Outstanding for Self" field provides additional control over credit application. When unchecked (default), the Credit Note's amount affects the original invoice's outstanding balance, enabling automatic offsetting. When checked, the Credit Note maintains its own outstanding balance, useful for tracking specific credits separately or when planning immediate refunds. This distinction becomes critical when managing multiple returns or partial credits across different time periods.

Note that inventory always returns at the original purchase cost, not the sale price, maintaining proper inventory valuation. The system automatically calculates this from the stock ledger, ensuring margins remain accurate for the portion of goods actually sold versus returned.

Please contact us for corrections, additions, questions, or to request a topic.

© 2026 AgriTheory. All Rights Reserved.