Manufacturing

ERPNext Subcontracting Tolerance: Receipt Button Disappears (2026)

You issued 110 units against a PO of 100 using the excess tolerance, received 102, and the Create Subcontracting Receipt button vanished — with stock still at the supplier. Here is why, how to recover the stranded quantity, and how to stop it recurring.

MManojJuly 29, 202610 min read
#erpnext#manufacturing#subcontracting#stock
Share

Your Purchase Order is for 100 units. The excess tolerance is set to 10%, so you legitimately issued 110 sets of components to the job worker. Receipts come back in batches, and somewhere past 100 the Create > Subcontracting Receipt button quietly disappears — while units you issued are still physically sitting at the supplier. The tolerance applied on the way out and not on the way back. This guide shows how to work out exactly how much is stranded, the two ways to recover it, and whether your release carries the fix.

Setting subcontracting up from scratch?

This post assumes a working subcontracting flow and a specific fault in it. If you are still configuring the process, start with how to set up subcontracting and job work in ERPNext and come back to this when tolerance becomes relevant.

Stock stranded at a job worker is the least visible inventory problem a manufacturer has, because it is not in your warehouse and not in your finished goods. I am Manoj, ERPNext and Frappe implementation lead at Mith Tech in Bengaluru, and this is one of the more common ways it happens.

What the tolerance actually governs

ERPNext lets you configure an over receipt and delivery allowance — a percentage above the ordered quantity that transactions may exceed without being blocked. In a subcontracting flow this is genuinely useful: job workers rarely return exactly what you sent, minimum batch sizes at the supplier do not respect your order quantity, and setup scrap is real.

The reported behaviour in #45824 is that the allowance was honoured on the issue side and not on the receipt side of the same order. With a Purchase Order for 100 and a 10% tolerance, components for 110 could be issued across multiple Stock Entries. On the way back, receipts were accepted until the cumulative received quantity reached the Subcontracting Order quantity — and at that point the Create > Subcontracting Receipt action was withdrawn, leaving the balance unreceivable through the normal path.

The reporter's expectation, and the sensible reading, is that the order should remain open until received quantity equals order quantity plus the tolerance allowance. The issue is now closed with PR #51305 linked against it.

Closed is not the same as shipped to you

An issue closing tells you a change was accepted, not which release carries it. Before you plan around the fix, read the release notes for your branch and re-run the reproduction on staging. The report was raised on the v14 line; if you are on v15 or v16 the code path has moved considerably, and testing is faster than archaeology.

Put a number on it first

Before choosing a recovery route, establish how much is actually at the supplier. The answer changes whether this is a five-minute correction or a conversation with your job worker.

CalculatorTolerance Gap Calculatorlink

Enter your order quantity, tolerance, issued and received quantities to see how much stock is stranded and whether the receipt path is closed.

Tolerance allows issuing up to
110
Receipt stops at (affected version)
100
Stranded at the supplier
8
Receipt path is closed with quantity outstanding

Received has reached the Purchase Order quantity of 100, so on an affected version the Create > Subcontracting Receipt button disappears — while 8 units you legitimately issued are still physically with the supplier. Expected behaviour is for the order to stay open to 110.

Modelled on the behaviour reported in frappe/erpnext #45824 (ERPNext v14.78.9). Confirm against your own release before treating the ceiling as fixed.

The number that matters is issued-within-tolerance minus received. If that is above zero while cumulative received has reached the order quantity, you are looking at this fault rather than a supplier who simply has not finished. The distinction is worth being sure about, because the recovery for "ERPNext will not let me receive" is quite different from the recovery for "the job worker has not delivered".

Five subcontracting faults that present identically

Subcontracting has accumulated several distinct issues whose user-facing symptom is some version of "the button I need is not there". Conflating them wastes an upgrade window.

InteractiveSubcontracting Symptom Deciderlink

Select the subcontracting symptom you are seeing to identify which tracking issue it belongs to and what the fix path is.

Pick the subcontracting symptom you are seeing.

Two are worth separating explicitly. Component consumption ignoring the BOM ratio when the transferred quantity differs is #45075 — a different defect with its own fix line, not covered by the tolerance change. And a missing Return of Components action is #37423, which matters here because returning components is one of your two recovery routes; if the button is absent you need the Stock Entry fallback.

There is also a base-data problem worth ruling out early: quantity mismatches between the Purchase Order and the Subcontracting Order derived from it (#34317). If those two documents disagree, every tolerance calculation downstream was built on the wrong number and no patch will make it behave.

Recover the stranded quantity

Code recipeDiagnose · Recover · Upgrade · Preventlink

Copy-paste diagnosis, both recovery routes, the upgrade check, and the process habits that stop stock stranding at job workers.

Establish how much stock is actually stranded at the supplier before you decide on a recovery route.

text
1. Open the Subcontracting Order. Record:
     PO Qty            = ?
     Received Qty      = ?
     Status            = ?

2. Buying Settings / Stock Settings:
     "Over Receipt/Delivery Allowance (%)"  = ?
   This is the tolerance that applied on issue.

3. Physical position at the supplier:
     Report: Stock Ledger, filtered to the supplier
             warehouse for the component items.
   Issued minus consumed = what they still hold.

4. Stranded = (issued within tolerance) - received
   If that is above zero AND received >= PO Qty, the
   receipt path is closed on an affected version.
   That is the #45824 signature.

Establish the order and physical position

Note the Subcontracting Order's PO quantity, received quantity and status. Read the over receipt and delivery allowance from Buying or Stock Settings. Then run the Stock Ledger against the supplier warehouse for the component items — issued minus consumed is what the job worker still holds. You now have both the system position and the physical one.

Decide which recovery you need

If the supplier has completed the excess and you want the finished units, that is Route A: a second Subcontracting Order for the outstanding quantity. If the excess components are coming back unworked, that is Route B: a component return. The physical reality decides, not convenience.

Route A — a second Subcontracting Order

Raise a new Subcontracting Order for the outstanding quantity only, and reference the original Purchase Order in the remarks or a custom field. Receive against it normally. The cost is two orders against one commercial agreement, which is untidy but auditable — note the reason on both documents so the split is explainable a year later.

Route B — return the components

Try Subcontracting Order > Return of Components first. Where that action is missing (#37423), post a Material Transfer Stock Entry from the supplier warehouse back to stores for the unconsumed components. The stock movement is correct; what you lose is the document link back to the Subcontracting Order, so record the reference manually.

Reconcile the supplier warehouse

After either route, confirm the supplier warehouse balance matches what the job worker physically holds. Stranded quantity that is never reconciled becomes an opening discrepancy on the next order, and the second time it happens nobody can tell which order it came from. If the balance is already wrong, our stock reconciliation guide covers setting it back to the counted truth.

When purchase, stores and production are different people

The structural problem here is that the person who sets the tolerance is in purchasing, the person who issues components is in stores, and the person who discovers the stranded quantity is in production — usually weeks later, when a job cannot be closed.

Nobody in that chain sees the whole position. Purchasing sees an order that looks received. Stores sees components that left. Production sees a shortfall it cannot explain. The supplier warehouse, which holds the answer, is on nobody's daily report.

The fix is a standing report rather than a permission change. Build a Stock Balance view filtered to your supplier warehouses and put it in front of whoever owns inventory weekly. Any balance sitting there longer than the job worker's normal turnaround is either stranded stock or an unrecorded consumption, and both are cheaper to resolve in week one than in quarter three. Pair it with a rule that issuing above the order quantity requires the same approval as raising the order — because the over-issue is what creates the exposure, not the receipt.

Draft policy for your purchase and production leads to ratify. Components are issued to job workers against the Subcontracting Order quantity. Issuing above that quantity requires the same approval as amending the Purchase Order, and the reason is recorded on the Stock Entry. Supplier warehouse balances are reviewed weekly; any balance older than the job worker's contracted turnaround plus seven days is escalated. Stranded quantity is recovered through a second Subcontracting Order or a component return, never through a write-off. Set the turnaround window and the approval threshold against your own supplier terms, and have your auditor confirm the treatment before it goes into an SOP.

Recover now, or upgrade first

FAQ

+Why has the Create Subcontracting Receipt button disappeared in ERPNext?

Because cumulative received quantity has reached the Subcontracting Order quantity, and on affected versions the receipt action is withdrawn at that point — even when excess components were issued within the configured tolerance and are still with the supplier. It is the behaviour reported in #45824.

+Why does the excess tolerance work when issuing but not when receiving?

The allowance was applied to the issue side of the subcontracting flow but not symmetrically to the receipt side of the same order. The expected behaviour is for the order to stay open until received equals order quantity plus the tolerance allowance.

+How do I receive the remaining subcontracting quantity?

Raise a second Subcontracting Order for the outstanding quantity and receive against that, referencing the original Purchase Order so the trail survives. If the components are coming back unworked instead, use Return of Components, or a Material Transfer Stock Entry from the supplier warehouse where that action is unavailable.

+Which ERPNext version does this apply to?

It was reported against ERPNext v14.78.9 with Frappe v14.90.0, and the issue is closed with PR #51305 linked. Because a closed issue does not tell you which point release carries the change, check your branch's release notes and re-run the reproduction on staging rather than assuming.

+Can I just close the Subcontracting Order and write off the difference?

No. The stock is physically real and sitting at a job worker's premises. A write-off converts a recoverable discrepancy into a permanent one, removes your claim on the material, and leaves the supplier warehouse balance wrong for every subsequent order.

+What happens if we leave the stranded quantity alone?

It stays in the supplier warehouse as an unexplained balance, and it compounds. The second time it happens nobody can attribute the quantity to an order, so the only remaining resolution is a physical count at the job worker followed by a reconciliation — considerably more work than resolving it in the week it occurred.

+How do I stop this happening again?

Issue to the order quantity rather than the tolerance ceiling. Where over-issue is genuinely required for minimum batch sizes or setup scrap, raise the Purchase Order for the real quantity — an order that matches physical reality never reaches this ceiling. Then review supplier warehouse balances weekly.

Closing

The tolerance behaviour is a genuine defect and it has been addressed upstream, but the stock it stranded does not come back on its own. Quantify what is at the supplier, pick the recovery route the physical position dictates, and reconcile the supplier warehouse afterwards. Then fix the habit that created the exposure: over-issuing to a tolerance ceiling is a decision, and it deserves the same approval as the order it exceeds.

Stock sitting at job workers that nobody can account for?

We reconcile every supplier warehouse against the physical position, recover stranded quantity through the route your auditor will accept, and set the issue-approval rules that stop it recurring.

Free · By email

Get practical ERPNext & automation guides

New implementation guides, cost breakdowns and open-source tips for Indian businesses — occasionally, straight to your inbox. No spam.

M

Written by

Manoj

Founder of Mith Tech, an open-source ERP & automation studio. Hands-on ERPNext/Frappe implementation across multi-branch, multi-warehouse Indian operations — GST/TDS/PT compliance, branch-level permissions, and custom Frappe apps that give management real-time visibility.

Keep reading

See what this looks like for your business

Book a free 30-minute audit. We'll map your workflows, find where time and money leak, and design an open-source stack you actually own — no per-user licence fees.

Book a consultation
0 0
Published on 29 July 2026

Manoj

Comments

No comments yet. Start a new discussion.

Ctrl+Enter to add comment