Mailbox catches it
Bots Mail Bot labels BOL | Receiving | Shipping, stores copies under mailbox attachments, and pings the matching lane bot.
Zoho email templates + attachments replace Monday board updates for Heartland and Quaker dock docs. Paperwork lands in mailbox storage, OCR locks critical fields, then NetSuite writes the item receipt. Fulfill stays held until the ship RESTlet is live.
Dock and office humans stop updating Monday boards for Heartland/Quaker receiving paperwork.
Instead they fire a Zoho email template with the signed BOL and packing list attached.
That email is the arrival event. Studio OCR extracts fields; after an agree-lock on critical
values, NetSuite creates the item receipt. Fulfillment remains held until
shipItemFulfillment is deployed.
Receiving, Shipping, or BOL template — pick the lane that matches the paperwork.
Action, Site, PO/SO, BOL#, When ET, Carrier, Trailer, Lots, Temp. Attach signed BOL and packing list.
receiving@ / shipping@ / bol@ @globalfoodsolutions.co — Zoho keeps the thread searchable forever.
Labels BOL | Receiving | Shipping. One lane ping with label + action. SMTP Done from matching alias. Slack OFF.
pdf-inspector classifies → digital or scan trio → ≥2/3 agree on critical fields → audit → lock under locks/.
MCP transform PO → Item Receipt. Lots, FS body fields, BOL attach, BOL# in memo. Locs Heartland=4, Quaker=18.
Blocked until shipItemFulfillment RESTlet is deployed. Draft lives on Studio at lanes/rl_ship_item_fulfillment.js.
Zoho mailbox keeps the thread + attachments searchable forever — system of record for paperwork arrival. Studio also keeps immutable copies under Documents/GFS-bots-mailbox/attachments/.
≥2/3 OCR engines must agree on critical fields. Audit writes, then agree lock under locks/. Only then does NetSuite get a write.
Item receipt path is the active target. Fulfill waits on RESTlet deploy — draft on Studio lanes, not live.
You send one email with the paperwork. Here’s the backside walkthrough — what the bots check, what gets locked, and what you hear back. No NetSuite login required.
Four short steps. That’s the whole human side.
After Send, the bots take the stage. Plain-English walkthrough of each beat.
Bots Mail Bot labels BOL | Receiving | Shipping, stores copies under mailbox attachments, and pings the matching lane bot.
Studio classifies digital vs scan. Three engines read the same PDF so no single reader owns the answer.
≥2/3 must agree on critical fields (PO/SO, item, qty, site, lots). Disagree → needs-you, no write.
Find the PO (Received) or SO (Shipped). Always check related Item Receipt / Item Fulfillment first so we never duplicate.
Build a diff pack vs human NetSuite. No Saves until Michael unlocks prove. Team still does manual NetSuite on real orders.
When the lane finishes cleanly, SMTP Done from the matching alias. Slack is OFF for this lane. Ambiguous or conflict → needs-you to Michael — never a silent invent.
Three outcomes. Holds aren’t random — each one has a reason.
Pilot: compare pack only. You get SMTP Done from the matching alias. No live NetSuite Save yet.
Miss, multi-ref slash, location conflict (e.g. Heartland vs Quaker), related IR already exists with mismatch, or loc 17 Delta Pak legacy.
Ship / fulfill stays held until shipItemFulfillment RESTlet is deployed. Draft lives on Studio lanes — not live.
26150979329.monday_ahead_of_ns flag in the compare pack.Point: this is exactly why the backside show-and-tell exists — so the team understands holds aren’t random. The bots stopped because the paperwork and the SO disagreed on site.
2540.Shadow compare is ON. Live NetSuite Saves stay off until Michael unlocks prove. Dock and office still post real receives / ships manually in NetSuite for now.
Click the template, fill the blanks, attach signed paperwork, send. That is the whole human step.
Send to the matching alias. Copy buttons for the dock/office team:
Delta Pak Monday ship forwards are needs-you — they are not Heartland/Quaker receive-template traffic. Do not route those forwards through this receive intake lane. Escalate to Michael; keep them off the Zoho receive template path.
Dock Scheduler appointments (script 2540) belong to the Scheduling bot.
Appointment booking is a separate flow — do not mix with BOL / receiving intake.
pdf-inspector classifies the attachment. Digital PDFs and scans take different engine trios. Critical fields need ≥2/3 agreement before anything touches NetSuite.
≥2/3 engines agree on critical fields → audit trail written → agree lock under
locks/.
Only after the lock does NetSuite receive a transform. No lock, no write.
After agree lock, MCP transforms the PO into an Item Receipt. Same IR fields as the Dock Fulfillment Suitelet.
| Topic | Rule |
|---|---|
| Transform | MCP: PO → Item Receipt |
| Lots | custcol_gfs_lot_code / expiry |
| Body fields | FS (food-safety) body fields on the IR |
| BOL attach | Signed BOL file attached to the IR; BOL# written in memo |
| Heartland loc | 4 |
| Quaker loc | 18 |
| Loc 17 | Legacy — needs Michael; do not auto-route |
| Drop ship | Not loc 4 or 18 — do not force Heartland/Quaker |
shipItemFulfillment RESTlet is deployedlanes/rl_ship_item_fulfillment.jscustomscript_gfs_dock_inspectionClimb in order. No skipping. No live Saves until the watched receive Save step clears.
Contract, field map, and OCR design locked 2026-09-10. Prove ladder is open. No live NetSuite Saves until watched receive Save clears.