Deducting material from inventory after a job is a manual screen at Inventory → Deduct (`/app/inventory/deduct`, titled "Deduct materials") that logs what a finished tint, PPF, ceramic, wrap, flat-glass, or consumable-only job actually used, and writes that against your shop's real on-hand counts — film inches off a specific roll, or units off a consumable item. It's for whoever reconciles jobs against inventory, typically a manager or admin, since actually applying a deduction needs the shop's inventory-management permission (see Things to know).
There is a per-shop "auto-deduct on job completion" setting, but as of this writing the automatic side of it doesn't build real deduction lines when you mark a job Completed — it's wired up and safe to leave on, but it currently writes nothing. Until that's finished, this screen is the only way your on-hand inventory reflects what a job actually consumed.
Start with the job key
Paste the appointment ID so the usage rows link back to that appointment and show up in its usage log — or type any other text to use as a one-off key for a job that isn't a tracked appointment (a walk-in, for example).
The job key is also the idempotency key: applying a deduction against the same key a second time writes nothing (more on this below). One catch worth knowing up front — if what you type happens to look like a real appointment ID, it has to actually belong to one of this shop's appointments, or the request fails; anything else should be a plain descriptive key instead.
Add one line per service
Each line is one of six kinds, and the fields you fill in depend on which you pick:
- Window tint — choose the vehicle class and film product, then toggle which windows were actually filmed (windshield, front/rear doors, back glass, quarter windows, sunroof, and a few others). The square footage is modeled from that selection.
- Paint protection film — choose the vehicle class and film product, then either pick a coverage package (Partial Front, Full Front, Track Pak, Full Body) or switch to picking individual panels — hood, fenders, bumpers, mirrors, A-pillars, headlights, rockers, door cups, doors, roof, trunk, and more.
- Ceramic coating, Vinyl wrap, and Flat glass film share one editor: enter the square footage covered, then choose whether it comes off a film/vinyl roll or a consumable item (a "sq ft per unit" field appears if you pick a consumable, to convert area into units).
- Consumable / part skips area math entirely — pick the item and enter how many units the job used.
Every kind except Consumable/part also has an optional "Actual sq ft" field: leave it blank to use the modeled estimate, or fill it in to correct one. Doing so flags that line's result as a manual actual in the preview, and whatever you type in the line's Note field is carried into the write's audit trail. Lines that resolve to the same underlying film product or item get summed into a single deduction rather than written as separate movements.
Choose what happens if stock falls short
A "Deduct what's available when stock falls short" switch, on by default, controls how a shortage is handled:
- On (the recommended setting): the job got done, so on-hand should reflect it even if the count was already off — the deduction goes through for whatever quantity is actually available, and the shortfall is reported back to you.
- Off: the whole deduction is rejected if any single film product or item can't cover its full share. You'd need to receive stock, correct the count, or flip the switch back on before Apply will go through.
Preview before you apply
Preview is read-only — it resolves your lines against current on-hand and flags any product or item that can't fully cover its share, without writing anything.
Apply stays locked until you've run a preview for the *exact* payload you're about to send. The page fingerprints the job key, every line, and the shortfall switch together; change any of them after previewing and the preview is marked stale, disarming Apply until you re-run it. There's no path where you preview one plan and apply a different one.
Once the preview is current, clicking Apply opens a confirmation dialog spelling out exactly how many film and item deductions it's about to write against the job key you entered, and warns that it changes real on-hand counts and can't be undone from that screen.
The already-applied guard
Because the job key doubles as an idempotency key, previewing also checks whether that job has already been deducted. If it has, the confirm step is replaced with a notice that applying again would write nothing, and Apply is blocked outright — you'd need a different job key if it's genuinely a separate job. The same check runs again inside the write itself, so even two people racing to apply the same job key at once can't produce two deductions.
Things to know
- Applying a deduction requires the shop's manage-inventory permission. Owner, Admin, and Manager roles have it by default; Technician, Front Desk, and Service Writer roles don't unless it's granted to them individually. Previewing has no such gate — anyone whose plan includes the Inventory feature can preview; an unauthorized Apply attempt comes back as a clear permission error rather than failing silently.
- Inventory (and this page) is a paid-tier feature — a plan without it shows an upgrade prompt at this page instead of the deduct screen.
- Film is drawn off your shop's oldest active rolls first, spilling across more than one roll of the same product if one alone can't cover the deduction; consumable items come off on-hand units.
- A deduction can't be undone from this screen — there's no reverse or void action here, so treat Apply as final and double-check the preview first.
- The automatic "deduct on complete" path exists as a setting but doesn't do anything today: the piece that would compute a completed job's material lines currently returns nothing to deduct, so turning that setting on doesn't write to inventory. This manual screen is the only path that moves on-hand right now.
Frequently asked questions
Q: What happens if I click Apply without previewing first?
A: You can't — Apply stays disabled until you've run a preview for the exact job key, lines, and shortfall setting you're about to send. Change anything afterward and Apply disarms again until you preview it fresh.
Q: I applied a deduction and then realized I missed a line — can I run it again under the same job key?
A: No. The job key is also the idempotency key, so applying again against the same key writes nothing — preview will show the job as already deducted before you even reach the confirm step. You'd need to log the missed material under a different key.
Q: What's the actual difference between the shortfall switch being on vs. off?
A: On, a short deduction still goes through for whatever's available and reports the shortfall to you. Off, the entire deduction is rejected if any single product or item can't cover its full share — nothing gets written until you fix the count, receive stock, or switch it back on.
Q: Do I have to use the appointment ID as the job key?
A: No — any text up to 100 characters works as a one-off key. But if what you type happens to look like a real appointment ID, it has to actually belong to one of this shop's appointments, or the request fails; use a plain descriptive key (like a bay number and date) for anything that isn't a tracked appointment.
Q: Why does a line show "Manual actual" in the preview?
A: Because you filled in that line's optional "Actual sq ft" field to override the modeled estimate. The preview flags it so you can see at a glance which deductions used your correction instead of the modeled number, and any note on that line rides along into the audit trail.
Q: Will completing an appointment ever deduct materials for me automatically?
A: There's a per-shop setting for that, but as of this writing it doesn't write anything when it runs — the piece that would build a completed job's material lines isn't finished yet. Until it is, this manual screen is the only way a job's materials actually get deducted from on-hand.