Production scheduling for vegetable oil processing requires coordinating multi-seed crush campaigns, directional oil-type changeovers, and parallel machine stages through a shared pipeline. Schantt models this as a hybrid-flowshop production line — flow stages for continuous crushing, refining, and packaging, plus a batch fractionation step — and lets you configure per-class routings, sequence-dependent changeovers, and shift-aware calendars so the schedule reflects your plant's actual constraints.
This guide follows a fictional composite company built from industry research on vegetable oil processing; all names, parameters, and figures are illustrative.
Industry context
Vegetable oil processing transforms oilseeds and crude oils into refined edible oils, fractionated products, and cold-pressed specialties. The production pipeline typically begins with seed cleaning, drying, and dehulling, followed by mechanical pressing to extract the bulk of the oil, then solvent extraction to recover residual oil from the press cake. The crude oil then undergoes refining — degumming, neutralising, bleaching, and deodorising — to produce a shelf-stable, neutral-tasting oil. Some product streams add batch crystallisation (fractionation) to separate higher-value liquid and solid fractions. Finally, the finished oil moves to packaging, which may include bulk load-out, bottling, and drum-fill lines.
Plants in this industry commonly process multiple oilseed types — soybeans, canola, palm fruit — each with different yields, seasonal availability, and changeover requirements. A typical integrated facility runs at approximately 250 tonnes of oilseed per day during harvest campaigns. Mechanical screw presses extract 65 to 70 percent of the oil from the seed; the remaining 15 to 18 percent is recovered in solvent extraction, bringing residual oil in the meal down to 0.5 to 1.5 percent. Soybean yields approximately 18 to 20 percent oil by weight, canola 40 to 45 percent, and palm fruit approximately 50 percent. The meal co-product from a full soybean crush reaches about 200 tonnes per day, with a meal silo capacity of roughly 2,000 tonnes — around 10 days of production.
The planning challenge is compounded by two distinct calendar regimes. During the harvest season — 6 to 8 weeks for soybeans (September through November) and 4 to 5 weeks for canola (July through September) — the plant runs 24 hours per day, 7 days per week. Outside these windows, operating hours reduce to a single day shift, Monday through Friday, 06:00 to 18:00. A 3-person planning team — covering crush, refinery and logistics, and procurement — manages the schedule across these shifting horizons.
Pinnacle Oils & Fats runs approximately 85 people at a single facility, making 3 product classes across 7 production stages, scheduled by a 3-person planning team.
Process overview
flowchart LR
PT["Pre-treatment<br/>Cleaning, drying, dehulling, flaking"]
CK["Cooking<br/>Vertical stack cooker, 90–100 °C"]
MP["Mechanical Pressing<br/>5 screw presses in parallel"]
SE["Solvent Extraction<br/>Single-stream bottleneck"]
RB["RBD Refining<br/>Directional changeovers"]
PF["Palm Fractionation<br/>4 batch crystallisers"]
PK["Packaging<br/>Bulk, bottle, IBC/drum lines"]
PT --> CK --> MP --> SE --> RB --> PF --> PK
The seven-stage production flow for light oils — the full integrated route from seed to finished product. Dark oils enter at RBD Refining, skipping all crush stages. Virgin oils exit after Mechanical Pressing, skipping extraction and refining.
Note: Not every product passes through every stage. Dark oils (palm olein) enter mid-route at RBD Refining, skipping Pre-treatment through Solvent Extraction. Virgin oils (cold-pressed canola) skip Solvent Extraction and RBD Refining, exiting after Mechanical Pressing. This guide models three product classes with divergent routings through the same shared machine pool.
Scheduling challenges and how Schantt handles them
This guide assumes a harvest-driven demand pattern: soybean campaign from September through November, then canola from July through September. The planner's core task is to sequence seed runs within each campaign window, allocate the right number of screw presses, and manage changeover windows between oil types — all while respecting the shared RBD train and the limited crystalliser bank. Plants with year-round global seed access may follow a market-driven switching logic — a fundamentally different scheduling driver not covered here. The optimisation objective is to minimise total production time — the overall completion time across all scheduled jobs — with Schantt scheduling forward from a chosen start date. This guide assumes a practical horizon of 8 to 14 weeks, covering the soybean and canola campaigns together.
Schantt offers two optimisation modes. In Auto mode, the system decides both the job sequence and the machine assignments, exploring the full solution space to find the fastest plan. In Semi-Auto mode, the planner fixes the production order and the system optimises machine assignments within that sequence — a natural fit when campaign order is operationally determined but machine allocation should be automated.
What Schantt handles well
- Multi-stage production with transfer times between steps — the ordered stage sequence is set once, with per-class routing so each product passes through exactly the stages its class requires. Transfer times model the minutes-to-hours needed to move material between stages. The planner confirms manually that the intermediate crude oil tank farm has enough capacity for concurrent campaigns, as Schantt schedules the transfer delay but does not track tank occupancy.
- Multi-machine stages with automatic machine assignment — parallel machines at a single stage (five screw presses, four crystallisers, three packaging lines) are modelled as a pool. In Auto and Semi-Auto modes, the system selects the machine combination that minimises total production time.
- Mixed batch-and-flow pipelines with supply starvation visibility — flow stages (crushing, RBD refining, packaging) and a batch stage (palm fractionation) run in a single path. When a downstream stage outruns its upstream supply, the schedule inserts a wait-material pause visible on the Gantt.
- Multi-product routing with stage skipping — each product class has its own routing through the shared machine pool, with skip bridges and partial-transfer settings at the entry or exit point. Dark oils enter mid-route at RBD Refining; virgin oils exit after Mechanical Pressing.
- Sequence-dependent changeovers with directional times — oil-type transitions on shared machines have different durations depending on direction. Each directional from-to pair is entered per machine. In Auto mode the system favours sequences that cluster similar oils; in Semi-Auto it respects the planner's fixed order.
- Shift-aware availability with calendar exceptions and downtimes — the plant's two calendar regimes (harvest 24/7 and off-season reduced) are assigned to date ranges. Annual maintenance windows and holiday exceptions are entered as downtimes and calendar exceptions, and the schedule respects them automatically.
How Schantt handles each challenge
1. Directional oil-type changeovers on the shared RBD train.
- The RBD train is a single continuous-flow machine shared by light oils (soybean) and dark oils (palm). A dark-to-light transition requires an 8-hour full clean-in-place cycle, while light-to-dark takes 5 to 6 hours — a difference of several hours per switch. Across a campaign with multiple oil-type changes, the wrong sequence can accumulate a half-day or more of unnecessary cleaning time.
- Schantt models changeover time as a directional machine parameter per from-class and to-class pair. With the asymmetric dark→light and light→dark durations configured, the scheduling algorithm can sequence jobs that cluster similar oils together, avoiding repeated heavy-cleaning windows. In Semi-Auto mode, where the planner sets the campaign order, the system still uses the correct directional duration at each transition, so the Gantt reflects the real cleaning time per switch.
2. Balancing multiple screw presses against a single-stream solvent extractor.
- Five screw presses feed a single solvent extractor — a bottleneck that cannot be paralleled. Press throughput varies by seed type (light oils at approximately 1,250 kilograms per hour per press, virgin oils at approximately 1,670 kilograms per hour), and the aggregate must stay within the extractor's capacity of roughly 10,500 kilograms per hour. An unbalanced press assignment can starve the extractor downstream or overload it, losing throughput.
- Schantt models each press as a parallel machine at the Mechanical Pressing stage, with per-product-class throughput rates on each press. In Auto and Semi-Auto modes, the system assigns jobs to presses so the combined rate keeps the extractor steadily fed. The Gantt shows each press as its own lane, and the scheduler can see at a glance whether the press-to-extractor balance is holding. Meal co-product storage and handling are coordinated outside Schantt — meal is a divergent byproduct that Schantt does not model, and the planner must verify that meal silo capacity and loadout are sufficient for the scheduled crush rate.
3. Batch fractionation crystallisers within a continuous-flow refining pipeline.
- Palm fractionation uses four crystalliser tanks, each with a 12-hour batch cycle and a capacity of 35 cubic metres (approximately 32,000 kilograms). Upstream RBD refining runs as a continuous flow, and the handoff between a continuous feed and four batch vessels must be staggered so that no tank is overloaded and downstream packaging never waits.
- Schantt models each crystalliser as a batch-stage machine with its own cycle duration and batch capacity. When the upstream flow stage supplies material faster than the crystallisers can process it, the simulation inserts wait-material pauses that are visible on each operation's Gantt bar. The natural batch-cycle math means the four tanks automatically stagger their finish times approximately 3 hours apart, giving packaging a steady feed without manual interleaving.
4. Divergent routings through a shared machine pool with stage-skipping product classes.
- Three product classes share the same plant but use very different routes: light oils (soybean) pass through all 7 stages; dark oils (palm) skip the 4 crush stages and enter at RBD Refining; virgin oils (canola) skip extraction and refining, exiting after Mechanical Pressing. A single routing structure cannot cover all three paths, and manually tracking which stages each product class should skip invites errors.
- Schantt lets the planner define a separate per-class routing with skip bridges where classes bypass stages. Dark oils use a bridge from Pre-treatment to RBD Refining with a partial-transfer setting of zero quantity — they enter at the refinery as purchased crude palm oil. Virgin oils use a bridge from Mechanical Pressing to Packaging, also with a zero-quantity partial transfer. Each class's route is configured once on the product class detail page, and the schedule respects it automatically.
5. Seasonal calendar transitions and planned maintenance across campaign and off-season periods.
- The plant runs 24/7 during harvest campaigns (soybean September to November, canola July to September) and switches to a single 06:00-to-18:00 day shift Monday through Friday for the rest of the year. A planned year-end shutdown runs from December 24 to January 2, and the solvent extractor has an annual turnaround from October 14 to 21. A schedule that ignores these transitions can assign jobs to dates when the plant is closed or the machine is unavailable.
- Schantt models two named calendars — harvest 24/7 and off-season reduced — and lets the planner assign them to date ranges on the schedule. Calendar exceptions (New Year's Day on January 1, International Workers' Day on May 1) override specific dates across all calendars. Machine downtimes block availability for the extractor turnaround and the factory-wide year-end shutdown. The schedule uses only working minutes when computing durations, so jobs automatically land in available windows.
What to model in Schantt
Building this scenario in Schantt requires creating five first-class entities whose counts match the production environment described in this guide.
| Entity | Count | Notes |
|---|---|---|
| Stage | 7 | Pre-treatment, Cooking, Mechanical Pressing, Solvent Extraction, RBD Refining, Palm Fractionation (batch), and Packaging (flow) |
| Machine | 20 | 5 pre-treatment machines, 1 vertical stack cooker, 5 screw presses, 1 solvent extractor, 1 RBD train, 4 crystalliser tanks, 3 packaging lines |
| Product Class | 3 | Light oils (full integrated route), Dark oils (mid-route entry), Virgin oils (short route with early exit) |
| Product | 3 | One representative product per class — RBD Soybean Oil (bulk), RBD Palm Olein, and Cold-Pressed Canola Oil |
| Calendar | 2 | Harvest 24/7 (default, Mon–Sun all hours) and Off-Season Reduced (Mon–Fri 06:00–18:00) |
Sub-configuration — per-class routings, directional changeovers, transfer times, calendar exceptions, and machine downtimes — is entered on the detail pages of these parent entities.
Step-by-step setup
1. Create the stages in production order, then set transfer times. Add seven stages in the sequence they appear on the plant floor: Pre-treatment (flow), Cooking (flow), Mechanical Pressing (flow), Solvent Extraction (flow), RBD Refining (flow), Palm Fractionation (batch — set the production type to batch), and Packaging (flow). On each stage's detail page, enter the transfer time to the next downstream stage:
- Pre-treatment → Cooking: 30 minutes
- Cooking → Mechanical Pressing: 30 minutes
- Mechanical Pressing → Solvent Extraction: 120 minutes
- Solvent Extraction → RBD Refining: 120 minutes
- RBD Refining → Palm Fractionation: 60 minutes
- RBD Refining → Packaging: 60 minutes
- Palm Fractionation → Packaging: 60 minutes
Also add the skip-bridge transfer times for the two classes that bypass stages:
- Pre-treatment → RBD Refining: 120 minutes (bridge for dark oils entering mid-route)
- Mechanical Pressing → Packaging: 60 minutes (bridge for virgin oils exiting after pressing)
2. Add the machines to each stage. Assign all 20 machines to their respective stages. Each machine inherits the stage's production type. The pre-treatment stage gets five machines (cleaner-destoner, drying drum, disc huller, and two flaking roll stands). Mechanical Pressing gets five screw presses. Palm Fractionation gets four crystalliser tanks. Packaging gets three lines (bulk load-out bay, bottling line, and IBC-drum fill line). The cooking, solvent extraction, and RBD refining stages each have one machine.
3. Create the product classes and define their routings. Add three product classes — Light oils, Dark oils, Virgin oils — each with its own routing through the stages its products require:
- Light oils: Pre-treatment → Cooking → Mechanical Pressing → Solvent Extraction → RBD Refining → Packaging (the full route)
- Dark oils: RBD Refining → Palm Fractionation → Packaging (enter mid-route, skipping all crush stages). On the RBD Refining routing leg, enable partial transfer and set the quantity to zero — this tells Schantt the product class appears at this stage without waiting for upstream material.
- Virgin oils: Pre-treatment → Cooking → Mechanical Pressing → Packaging (skip extraction and refining). On the Packaging routing leg, enable partial transfer and set the quantity to zero — the product exits after pressing and enters packaging directly.
4. Add one product per product class. Create three products, each assigned to its class:
- RBD Soybean Oil (bulk) → Light oils
- RBD Palm Olein → Dark oils
- Cold-Pressed Canola Oil → Virgin oils
5. Set machine capacity parameters and changeovers. On each machine's detail page, configure throughput rates for the product classes it processes. For flow-stage machines, enter the throughput in units per hour. For the crystalliser tanks (batch stage), enter the batch size and cycle duration.
Mechanical Pressing: Each screw press handles light oils at 1,250 kilograms per hour and virgin oils at 1,670 kilograms per hour. Enter both rates on each press.
Solvent Extraction: The single extractor processes light oils at 10,500 kilograms per hour.
RBD Refining: The RBD train processes both light oils and dark oils at 10,000 kilograms per hour.
Palm Fractionation: Each crystalliser has a batch size of 32,000 kilograms and a cycle duration of 720 minutes (12 hours). Enter these four identical configurations on crystalliser tanks 1 through 4.
Packaging: The bulk load-out line runs at 30,000 kilograms per hour across all three classes. The bottling line runs at 550 units per hour. The IBC-drum fill line runs at 1,200 kilograms per hour.
Then add the directional changeovers. On the RBD train, add dark→light (480 minutes) and light→dark (330 minutes). On each of the five screw presses, add light↔virgin changeovers at 60 minutes in both directions. On each of the three packaging lines, add changeovers between every class pair (light↔dark, light↔virgin, dark↔virgin) at 30 minutes each direction.
6. Configure calendars, exceptions, and downtimes. Create the Harvest 24/7 calendar as the default, covering all seven days with a 00:00-to-24:00 working window. Create the Off-Season Reduced calendar (Monday to Friday, 06:00 to 18:00). Add two calendar exceptions: New Year's Day (January 1, non-working) and International Workers' Day (May 1, non-working). Add two machine downtimes: a factory-wide year-end shutdown from December 24 to January 2 and an extractor-specific annual turnaround from October 14 to 21.
For step-by-step instructions on configuring each of these in Schantt, see the Schantt documentation.
Common mistakes
1. Using a single blanket changeover time instead of directional per-pair values. With a single average changeover on the RBD train, the schedule treats every oil-type switch as identical. The 8 to 10 hours needed for a dark→light clean is meaningfully longer than the 5 to 6 hours for light→dark, and the algorithm cannot favour the shorter direction if both are entered as the same value. Fix: Enter both directional pairs — dark→light and light→dark — with their actual durations on the RBD train's changeover list. The scheduler then calculates the correct penalty for each transition.
2. Merging divergent routes into a single product class. If both full-route light oils and mid-route dark oils are grouped under one product class, they share a single routing — so either light oils skip the crush stages they need, or dark oils are forced through them. Fix: Create separate product classes wherever the stage path diverges. Dark oils need their own class with a routing that begins at RBD Refining and a partial-transfer entry set to zero.
3. Omitting zero-quantity partial transfers on skip-bridge legs. Without a partial transfer on the bridge entry point, the schedule waits for material to arrive from the skipped upstream stages before starting the product at its actual entry stage. Virgin oils exiting after Mechanical Pressing would appear to wait for material that will never arrive. Fix: On the virgin oils routing, enable partial transfer on the Mechanical Pressing→Packaging bridge leg and set the quantity to zero — this tells the scheduler the product enters packaging directly from pressing, with no upstream dependency.
4. Assigning incorrect throughput rates to machines shared by multiple product classes. The screw presses handle light oils and virgin oils at different rates (1,250 versus 1,670 kilograms per hour). If the same rate is set for both classes, the schedule overestimates or underestimates press capacity and misaligns the press-to-extractor balance. Fix: On each press, enter the correct throughput for each product class it processes. The scheduler then uses the class-specific rate when assigning jobs.
5. Forgetting to assign different calendar periods for harvest and off-season windows. With a single calendar year-round, the schedule treats off-season hours (06:00 to 18:00 Monday to Friday) the same as 24/7 harvest weeks — leading to jobs scheduled during hours the plant is not staffed. Fix: Create both calendars and assign them to the correct date ranges on the schedule's calendar-period configuration. The year-end shutdown and extractor turnaround should also be entered as machine downtimes so no jobs land in those windows.
What a good schedule looks like
With two calendars, directional changeovers, and per-class routings configured, the semi-automated schedule transforms from a manually tracked spreadsheet into a campaign-aligned production plan that respects every constraint.
Before (manual spreadsheet): The planner sequences campaigns by intuition, tracking press allocations and changeover windows in separate tabs. Dark→light transitions crop up whenever the RBD train finishes a palm run, each time consuming an 8-hour clean that was not explicitly planned for. The fractionation crystallisers are booked ad-hoc, occasionally leaving packaging idle while waiting for the next tank. A change in campaign order or press assignment requires re-entering multiple rows, and the calendar switch from 24/7 to reduced hours is easy to miss.
- Frequent dark→light or light→dark transitions add unplanned cleaning time.
- Press assignments guessed by feel, causing extractor starvation or surge.
- Fractionation tanks scheduled sequentially rather than staggered.
- Calendar-boundary errors after campaign season ends.
After (Schantt Semi-Auto mode): The planner sets the campaign order once — soybean run, then canola run, then palm run — and locks it as the production sequence. Schantt optimises the machine assignments within that order. The RBD train sees one dark→light changeover at the palm-to-soybean boundary instead of multiple switches across the horizon, saving 8 hours per avoided transition. The screw presses are assigned automatically so the combined throughput keeps the extractor fed at its design rate. The four crystallisers naturally stagger their 12-hour cycles roughly 3 hours apart, giving packaging a steady stream of fractionated oil. The calendar-period configuration automatically switches from 24/7 to reduced hours after the last campaign date, and jobs near the year-end shutdown or extractor turnaround are placed in available windows with no manual re-checking.
- One clean-in-place changeover per campaign transition, not one per oil-type switch.
- Press-to-extractor balance maintained automatically.
- Fractionation stagger visible as natural batch timing on the Gantt.
- Calendar boundaries respected without manual verification.
- Total production time minimised because the algorithm explores machine combinations the planner could not manually evaluate.
Ready to schedule your own facility?
Try Schantt free — no credit card required. Go from spreadsheet to optimized Gantt chart in 60 minutes.
Try Schantt Free