Use inventory position to assess your coffee inventory reorder point: usable stock plus confirmed inbound, less outstanding customer commitments. A physical stock count alone can prompt a duplicate purchase or conceal a shortage.
Start with:
ReorderPoint = AverageDailyDemand × FullLeadTimeDays + SafetyStock
Review replenishment when InventoryPosition <= ReorderPoint. Before approving a purchase, check that receipts arrive before stock runs out and that the proposed quantity can sell within the channel’s remaining-shelf-life requirements.
The reorder point determines when to buy. A separate stock target determines how much, subject to case pack, minimum order quantity (MOQ), and shelf life. Reaching the trigger is a reason to review an order, not automatic approval to place it.
This worksheet is for packaged coffee distribution, including Vietnamese coffee sold through retail channels. Use your demand and stock records, confirmed purchase orders, and verified supplier specifications. The worked example uses explicitly illustrative assumptions.
Plan in individual retail packs. Convert case quantities into packs before calculating demand, stock, or purchase quantities. Keep a separate row for each SKU and location unless stock can move between locations within the required time.
Copy the table below into a spreadsheet. The variable names can serve as named cells; replace period and review placeholders with actual dates.
| Field | Variable | Unit | Input or formula | Source | Observation period | Last review |
|---|---|---|---|---|---|---|
| SKU and location | SKU, Location | Identifier | Enter both | Item master | Current | Date |
| Case pack | CasePack | Packs/case | Verified input | Supplier specification | Current | Date |
| Minimum order | MOQUnits | Packs | Convert case MOQ | Supplier terms | Current | Date |
| Residual demand | DemandUnits | Packs | Excludes deducted commitments | Adjusted forecast | Start–end | Date |
| Demand period | CalendarDays | Days | Days in period | Forecast calendar | Start–end | Date |
| Daily demand | AverageDailyDemand | Packs/day | =DemandUnits/CalendarDays | Above inputs | Start–end | Date |
| Full lead time | LeadTimeDays | Days | Order release to usable stock | Receipt history | Cycle dates | Date |
| Buffer | BufferDays | Days | Declared assumption | Buyer policy | Current | Date |
| Cycle coverage | CycleDays | Days | Coverage beyond lead time | Buyer policy | Current | Date |
| Physical stock | PhysicalOnHand | Packs | Counted quantity | Stock count | Count date | Date |
| Blocked/ineligible | BlockedStock | Packs | Unavailable quantity | Lot/quality records | As of date | Date |
| Confirmed inbound | OpenInbound | Packs | Unreceived confirmed balance | Open PO ledger | As of date | Date |
| Commitments | Commitments | Packs | Outstanding allocated demand | Order ledger | As of date | Date |
Shipment history needs interpretation before it becomes a demand input. Shipments during a stockout understate demand; a promotion may overstate the demand expected after it ends. Annotate those periods, along with returns and forecast adjustments.
Keep purchase-order and lot details in two supporting tables. Their dates establish whether the quantities in the main worksheet will be usable when needed.
| Record | Required fields |
|---|---|
| Purchase order | PO ID, SKU, location, open quantity, expected usable-arrival date, confirmation status |
| Lot | Lot ID, SKU, eligible quantity, best-before date, storage status, customer-required remaining life, downstream transit days |
Mark assumptions explicitly, especially for new SKUs without reliable history. An assumed lead time or demand rate should remain identifiable when the worksheet is reviewed.
Two calculations establish the balance used for the reorder trigger:
UsableOnHand = PhysicalOnHand − BlockedStock
InventoryPosition = UsableOnHand + OpenInbound − Commitments
Exclude quality-held, damaged, and otherwise ineligible units from usable stock. For inbound, count only the confirmed, unreceived purchase-order balance. When a receipt becomes usable, move its quantity from inbound to on-hand. Counting it in both fields overstates inventory position and can delay replenishment.
Apply one consistent convention to customer commitments. This worksheet subtracts outstanding commitments from inventory position and excludes those same orders from the residual demand forecast. Subtracting a reservation while retaining it in forecast demand counts the requirement twice.
A total-demand forecast can also work, but it requires different allocation treatment. Do not combine the two conventions.
The aggregate balance answers whether replenishment needs review. It does not establish whether stock will be available on every dispatch date. Check that separately:
ClosingAvailable = OpeningAvailable + UsableReceipts − CommitmentsDue − ResidualDemand
Run the calculation across receipt and dispatch dates, applying demand for each interval. A receipt that arrives after a shortage cannot prevent it. Inventory position can therefore sit above the reorder point while a near-term customer order remains uncovered.
Use the coffee supply chain planning resource alongside the worksheet to review the handoffs behind these records.
Full replenishment lead time ends when coffee is available for dispatch. Measure it from order release, using calendar days throughout the worksheet.
Depending on the route, the interval can include preparation, documentation, freight booking, transport, clearance, receiving, and warehouse release. A vessel arrival date does not capture the full interval. Measure elapsed time rather than adding stages that overlap.
Where history is limited, a declared buffer keeps the calculation transparent:
SafetyStock = AverageDailyDemand × BufferDays
Buffer days are a planning assumption, not a guaranteed service level. Increasing them adds stock protection, but also ties up cash and leaves more coffee aging in storage.
With reliable, matched replenishment cycles, consider a buffer based on observed lead-time demand:
SafetyStock = MAX(0, SelectedPercentileLeadTimeDemand − AverageLeadTimeDemand)
Measure demand during each actual lead-time interval and document the selected percentile. Keep the lead-time-demand baseline in the reorder point consistent with that cycle history. Sparse or unrepresentative observations cannot support precise protection claims.
The basic reorder-point formula assumes continuous monitoring. If stock is reviewed every seven days, expected demand must cover lead time plus the seven-day review interval, with a buffer suited to that longer protection period.
All figures below are illustrative planning assumptions, not supplier specifications or partner performance data.
| Input | Illustrative value |
|---|---|
| Residual demand, excluding deducted commitments | 20 packs/day |
| Full lead time | 40 days |
| Buffer | 10 days |
| Additional cycle coverage | 20 days |
| Physical stock | 900 packs |
| Blocked stock | 100 packs |
| Confirmed open inbound | 240 packs |
| Outstanding commitments | 120 packs |
| Case pack | 24 packs |
| MOQ | 240 packs |
First, calculate usable stock, the buffer, and the trigger:
| Decision | Calculation | Result |
|---|---|---|
| Usable on-hand | 900 − 100 | 800 packs |
| Safety stock | 20 × 10 | 200 packs |
| Reorder point | 20 × 40 + 200 | 1,000 packs |
| Inventory position | 800 + 240 − 120 | 920 packs |
Inventory position is 920 packs, below the 1,000-pack reorder point, so replenishment needs review. The existing 240-pack inbound order is already included in that balance.
To calculate quantity, set an order-up-to target:
TargetStock = AverageDailyDemand × (LeadTimeDays + CycleDays) + SafetyStock
For this SKU:
20 × (40 + 20) + 200 = 1,400 packs
Subtract inventory position from the target:
RawQuantity = MAX(0, TargetStock − InventoryPosition)
1,400 − 920 = 480 packs
For a triggered, positive order, apply MOQ and round up to full cases:
OrderQuantity = CEILING(MAX(RawQuantity, MOQUnits), CasePack)
The result is 480 packs, or 20 cases. It meets the 240-pack MOQ and is already a multiple of the 24-pack case size. If no order is triggered, or raw quantity is zero, return zero before applying MOQ.
The 1,400-pack target represents inventory position immediately after adding the new purchase order. It is not the expected physical stock at arrival: demand continues during the 40-day lead time.
The 480-pack calculation needs two further checks: whether stock lasts until arrival and whether the new lot can sell within its channel window.
For the example, assume the 120 committed packs leave on day 0 and the existing inbound order becomes usable on day 20.
After the commitments leave, uncommitted on-hand is 680 packs. Residual demand consumes 400 packs by day 20, leaving 280. The 240-pack receipt raises availability to 520. Another 400 packs sell before day 40, leaving 120 when the proposed 480-pack order arrives.
That schedule avoids a shortage under the stated assumptions. Recalculate it if a receipt is delayed.
For each lot, calculate:
RemainingLifeAtReceipt = BestBeforeDate − ExpectedUsableReceiptDate
ChannelSellingWindow = RemainingLifeAtReceipt − RequiredLifeAtCustomerReceipt − DownstreamTransitDays
Assume the proposed lot has 180 days remaining at receipt, customers require 60 days of remaining life, and downstream transit is zero. The selling window is 120 days. At 20 packs per day, gross demand over that window is 2,400 packs. That figure alone does not establish how much to buy: existing lots will satisfy part of the same demand.
Allocate eligible stock by FEFO: first expired, first out. Use the earliest best-before dates, rather than receipt order, to determine picking priority.
The following table uses the same example, with day numbers measured from day 0. All four lots use the illustrative 60-day customer requirement and zero downstream transit.
| Illustrative lot | Available day | Uncommitted packs | Best-before day | Latest customer receipt day |
|---|---|---|---|---|
| Existing A | 0 | 380 | 100 | 40 |
| Existing B | 0 | 300 | 150 | 90 |
| Existing inbound | 20 | 240 | 200 | 140 |
| Proposed order | 40 | 480 | 220 | 160 |
At constant residual demand, FEFO clears lot A by day 19, lot B by day 34, existing inbound by day 46, and the proposed order by day 70. Each clears before its latest customer receipt day. The 480-pack purchase therefore fits this illustrative schedule.
Customer freshness requirements, storage eligibility, and legal eligibility require separate checks. Use verified lot records and the best-before planning resource for imports when documenting assumptions.
If case rounding or MOQ pushes the quantity beyond feasible sell-through, flag an exception. Seek smaller quantities, staggered deliveries, or revised terms before approving stock the channel cannot absorb within its required window.
Reconcile counts, receipts, commitments, and lot dates on a documented schedule. Review demand, lead time, and buffers after material changes. Track shortages, late usable receipts, forecast error, and aging stock so the next adjustment addresses the assumption behind the problem.
If your team is considering MR.VIET branded products for retail distribution, share your target market, retail channel, product format, and expected volume through the wholesale page. Those details provide a practical starting point for a purchasing discussion.