This article walks through adding roll-off containers as products in Inventory, the 10-, 15-, 20-, 30-, and 40-yard sizes that show up as options when you create a rental term or a delivery job. Roll-off products carry a special block of default economics (haul rate, included tons, tonnage overage, day overage, included days) that pre-fill the rental term the first time the container hits the ground.
If you're new to how a rental term bills, read the Roll-Off Swap Cycle Workflow first; this article covers the *catalog* setup that feeds it.
---
RS-1: Why Roll-Off Products Have Their Own Defaults
Rental terms carry their own per-rental economics (`rental_terms.base_rate`, `included_tons`, `overage_per_ton`, `daily_overage_rate`, `included_days`). Before Nov 2026 there was no catalog place to store the defaults, so every term started blank and the office had to enter rates from memory after the fact on the Roll-Off Rentals page. Boxes routinely went out unpriced.
The five `rolloff_*` columns on the product record fix that. Once a "20-yard C&D" product has its defaults set, every future delivery of that container prefills the wizard's Roll-Off Rental Term panel with those numbers. The operator can still override per rental.
---
RS-2: Create a Roll-Off Product
Step 1: Open the Add Inventory modal: Sidebar → Inventory → + Add Item → Product tab.
Step 2: Fill in the base fields
Step 3: Fill in the Roll-Off Rental Defaults block
When you pick a roll-off product type, an amber-outlined card appears with five inputs:
| Field | What it prefills on the term | Example |
|---|---|---|
| Haul rate ($ per pull) | `base_rate`, charged once per delivery, once per swap, once per pickup | 450 |
| Included tons | `included_tons`, tonnage included in each haul before overage kicks in | 2 |
| Overage $/ton | `overage_per_ton`, dollars per ton above included | 95 |
| Overage $/day | `daily_overage_rate`, dollars per day past included days | 15 |
| Included days | Suggested rental-term length; the wizard's Step 2 schedule still wins | 14 |
Blank means "no default." A blank field just means the wizard shows its "Rates not set" nudge for that field, nothing is enforced, nothing breaks, the office can enter the rate at term creation or later.
Step 4: Save. Every future delivery job whose product picker lands on this container will prefill its Roll-Off Rental Term panel with these five defaults.
---
RS-3: Edit Defaults on an Existing Product
Same story from the other direction: Inventory → open the product → the Roll-Off Rental Defaults card appears at the bottom of the edit form for any roll-off product. Changing a default only affects future deliveries, it doesn't rewrite the terms already out on the ground. To retro-fix already-active terms, use the Edit Term dialog on the Roll-Off Rentals page.
---
RS-4: Individual Unit Tracking (Item Codes)
Roll-off containers are typically tracked individually, each 20-yard box on the yard has its own item code (like `#1019`). That identity is stored on `product_items`, not the product. To track a specific box:
When a driver confirms a delivery, the driver's Roll-Off Delivery Card stamps the specific unit onto the rental term (`rental_terms.product_item_id`). The item code then shows up on the term row's Container column and on the placement pin at the customer site.
Serialized tracking is optional but strongly recommended for roll-off, it's how you answer "where's box #1019?" and how weight-ticket disputes get resolved.
---
RS-5: Vehicle Skill and Yardage Capacity
Two orthogonal truck rules gate which vehicle can haul which container:
You need both. A shop truck with a hitch but no hooklift shouldn't have the `roll_off` skill; a single-axle hooklift that tops out at 20-yard shouldn't have `max_container_yards` set to 40.
---
RS-6: Troubleshooting
"The Roll-Off Rental Defaults card didn't appear on the product form."
The product type isn't a roll-off type. Check the product's `product_type`, it must be one of `roll_off_10yd`, `roll_off_15yd`, `roll_off_20yd`, `roll_off_30yd`, `roll_off_40yd`. Changing the type re-renders the form and the card appears.
"The wizard shows a $0 haul rate even though the product has defaults."
Two causes: the wizard was opened before the product's defaults were saved (reopen it), or the defaults were blank on the product. Blank on the product does not equal zero, it means "no default," the wizard shows its "Rates not set" nudge. Enter a value on the product record.
"I set new defaults but the terms on the ground still show the old rates."
Product defaults only prefill NEW terms at delivery time. To fix terms already out, edit them on the Roll-Off Rentals page (pencil icon on the row).
"There's no roll-off product type option in the dropdown."
The product type list is fixed by the product_type enum. If none of the roll-off sizes appear in the dropdown, the migration hasn't been applied on this database. Reach out to support.
---
