Overview
The planner thinks in days of cover. It takes each SKU’s daily rate, walks forward week by week (sell 7 days, add what arrives), and each shipping lane applies its own rule to that curve.
- Plan all is the only planning click. Emergency SP takes warehouse stock first, AWD fills from what is left at PA / CA / JX, LTL takes the rest.
- Each lane is still saved as its own run, with its own manifest and files.
- Numbers here are the defaults. Settings can change them; every run records the values it used.
1. Daily rate (TDR)
Every quantity starts from how many units a SKU sells on Amazon per day. The rate comes from Odoo’s FBA inbound forecast, pulled every Monday. No trend, no seasonality.
Odoo’s 30-day rate only counts days the SKU was in stock, so 20 units sold on a single in-stock day reads as 20 / day. The planner blends it toward the calendar rate when there are few in-stock days:
= out-of-stock days in the last 30; = Odoo’s 30-day rate. With 14+ in-stock days and the rate is Odoo’s figure unchanged.
If the 30-day rate is missing or zero, the first non-zero of these is used as is:
Never used as a rate: Amazon’s restock “recommended days”, or a B2B rate inferred from Amazon sales (B2B comes from Odoo warehouse pickings).
2. Coverage (days of inventory)
How long current stock lasts at the daily rate:
Then it walks 14 weeks forward (8 on an AWD run). Each week burns 7 days and adds whatever arrives that week, also converted to days:
means a projected stock-out by the end of week .
3. Stock already on the way
Stock already on a truck is credited, otherwise the planner would re-order it.
- Odoo inbound shipments (pulled daily): arrival = .
- No shipping type: treated as arriving now, unless it is more than 60 days late — then it is dropped.
- Units to AWD come from Amazon’s AWD report and land in week 2.
- Forecast stage buckets, for units with no shipment row:
| Stage | Meaning | Counts in |
|---|---|---|
| Receiving | At the fulfilment centre, being checked in | week 1 |
| Shipped | Left our warehouse, in transit | week 2 |
| Working | Planned, not shipped — may never leave | week 4 |
Late beats early: crediting too soon under-orders. Stages past the horizon are dropped, not squeezed into the last week.
4. Three lanes, three jobs
One click plans all three, in this order, so they never count the same coverage or the same shelf twice.
| SP small parcel | AWD Amazon Warehousing | LTL freight to FBA | |
|---|---|---|---|
| Job | Bridge to the next cheaper restock | Keep AWD stocked | Refill FBA |
| Looks at | FBA cover, day 18 → next restock | AWD’s own stock, trigger week | FBA cover at W14 |
| Fires when | Cover drops below 7 days in that window | ||
| Sends | Just enough to stay ≥ 7 days | days | days |
| Horizon | ~45 days | 8 weeks | 14 weeks |
| AWD-eligible SKUs | Own emergency rule (§5) | Only these | Closed |
LTL — freight to FBA
- Trigger on week 14, size from week 13: that is how the spreadsheet works. Turning off legacy compat in Settings sizes from week 14 instead.
- A 120-day ceiling trims the order if current cover + new days would overshoot. An empty SKU is not affected.
SP — small parcel to FBA
SP is the expensive, fast lane. It is a bridge, not a refill: it keeps Amazon in stock until cheaper freight (or stock already on a truck) lands.
- Can SP get there in time? SP is fully received in 18 days. A stock-out before day 18 can’t be saved, so it doesn’t create SP units.
- Until when? Until the next restock that can hold the SKU: an inbound already coming, or a new LTL created today (received day 45).
- How much? Just enough that cover never drops below 7 days inside that window.
With inbound landing inside the window, the engine walks the curve day by day and credits each arrival on its day — a partial inbound shortens the gap.
- SP units then count as inbound on their arrival day, and LTL is sized on the updated curve.
- Warehouse stock is applied later, at allocation: a short shelf limits what ships, it doesn’t change the need.
- AWD-eligible SKUs use a different emergency SP (§5).
AWD — warehouse to Amazon Warehousing
AWD looks at AWD’s own stock (on hand + inbound to AWD), never FBA. It checks the week a new shipment would actually land:
- Only SKUs on the AWD eligibility list; the rest are skipped on an AWD run.
- No placement-fee bump (AWD isn’t charged it), but still a whole carton.
5. AWD-eligible SKUs
Eligibility comes from the awd_data upload. Once a SKU is eligible, AWD replenishes FBA — so sending freight to FBA as well would supply the same demand twice.
| Rule | What it means |
|---|---|
| LTL is closed | Freight skips eligible SKUs; the AWD run replenishes them. |
| AWD isn’t instant FBA | AWD on hand counts at FBA in week ; inbound to AWD in week 4. A lag of 0 restores the old “AWD is FBA now” shortcut. |
| Already primed | AWD on hand + inbound ≥ 25 days → no more AWD this run while migrating. |
| Fat FBA | FBA cover (or FBA + receiving / shipped) > 80 days now → don’t park more in AWD. |
| Pallet cap (optional) | Keeps the SKUs with the most potential revenue (rate × price or margin). Unmeasured SKUs don’t use the cap. |
| Origins | PA, CA, JX. Kansas is never an AWD origin but holds B2B stock. Caves only if ticked in Settings. |
Migrating vs. settled
A newly eligible SKU has finished migrating only when both hold:
- AWD on hand + inbound sits in the reorder band (34 – 60 days) and covers at least one inbound flight.
- FBA cover, with AWD and inbound counted on their real arrival dates, never stocks out across the 50-day cycle.
Until then it is priming; after that, the normal 34 → 60 AWD rule applies.
Emergency SP for AWD SKUs
Not the 18 / 45 rule. It asks: counting FBA now, inbound that has actually left (never “working”), and AWD that can reach FBA in time, does cover fall too low in the ~20-day SP transit + 7-day buffer?
| State | Fires when | Sends |
|---|---|---|
| Still migrating | Cover would drop below 7 days | The shortfall up to 7 days |
| Migration complete | Projected stock-out only | Up to the 7-day buffer |
B2B stock stays in the warehouse
AWD and FBA must not empty a building that also sells wholesale:
- comes from the Monday Odoo pull — never from Amazon TDR.
- Kansas stock counts toward the reserve first; only the rest is held at PA / CA / JX.
- No B2B sales → no reserve.
6. From days to shippable units
- Always rounded up — a short carton can’t ship. No carton spec → whole units.
- FBA (SP, LTL): Amazon waives the placement fee at 5+ identical cartons. The planner may send a little extra to reach that, budgeted in days — default 0 (never over-send). AWD never bumps.
- The SKU is then split across warehouses in legs: FBA legs aim for 5 cartons, AWD legs follow stock.
7. Ad-hoc requests
A listing manager can ask for units the forecast can’t know about — a promotion, a launch, a wholesale order. Their brief: How to raise an inbound request.
- Always a floor: ship at least this many; a bigger forecast is kept.
- Whole master cartons only; the form offers to round up.
- A reason from a fixed list is required; the note is optional except for Other.
- Ships SP only for the urgent part — the SKU’s own SP bridge, rounded up to whole cartons. The rest goes LTL, or AWD for an AWD SKU. A new launch, a test or Vine ask, a liquidation, or a SKU with no forecast ships no SP.
- Nothing moves until a planner approves. A rejection always has a note.
- Can override FBM Hold and Don’t Send after the LM confirms a warning. Can’t override Seller Central.
- In the run and the weekly review, a SKU a request put on the plan is tagged LM request.
- Partially planned: stock covered only part of it (at least one closed carton); the note says how many units went. Cartons held by the B2B reserve aren’t counted.
- Archiving the run puts planned requests back to approved, so the next plan picks them up.
- A planner can leave a note without changing the status; the LM sees it on their request.
8. What never ships
Before any lane rule, a SKU can be blocked outright. Checked in this order:
| # | Gate | Why | Request can override? |
|---|---|---|---|
| 1 | FBM Hold | FBM-only SKU; sending it to FBA is an error | Yes, after a warning |
| 2 | Seller Central restock | Amazon doesn’t list it (only when that file is present) | No |
| 3 | Don’t Send | ASIN flagged — new launch, low stock, … | Yes, after a warning |
FBM Hold and Don’t Send are edited by listing managers and admins on Listing review; planners can look up any SKU there read-only.
Then the lane gates:
- Not AWD-eligible → skipped on an AWD run.
- AWD-eligible → skipped on an LTL run.
- Fat FBA / already primed → no AWD.
- FBA already covered → no emergency SP.
Daily inventory drops archived products, non-stock categories and zero or negative stock. Master cartons come from Odoo and decide every box count; specs are keyed by PO, and the oldest lot that covers the need boxes at that PO’s carton.
Default numbers
Built-in values. Settings can change any of them; each run records what it used.
| What | Default | Role |
|---|---|---|
| LTL trigger / target | 45 → 75 days | Fire at week 14; top up from week 13 |
| SP bridge | 18 d → 45 d, 7 d floor | Cover from SP received until the next cheaper restock |
| AWD trigger / target | 34 → 60 days | Checked at the inbound-arrival week (40 d → W6) |
| AWD horizon | 8 weeks | Inbound plus the AWD → FBA transfer |
| AWD inbound lead | 40 days | Warehouse → AWD |
| AWD → FBA lag | 10 days | When AWD stock counts as FBA cover |
| Fat-FBA cap | 80 days | Don't prime AWD while FBA is already fat |
| AWD priming floor | 25 days | No more AWD until migration completes |
| AWD emergency SP | 20 d lead, 7 d buffer | Bridge only; not the normal SP rule |
| B2B reserve | 14 days | From Odoo, never from TDR. No rate = no reserve |
| Coverage ceiling | 120 days | Trims an order that would overshoot |
| Carton bump | 0 days | Never over-send to chase the $0 fee |
| Rate floor | 0.02 / day | Guess for a SKU with no usable history |
| Inbound timing | W1 / W2 / W4 | Receiving / shipped / working |
