BOL / dock receiving

Locked 2026-09-29: for Heartland and Quaker, the team front door is a NetSuite Suitelet side tab (drop BOL + short note → bol@ lane behind the screen → result into NetSuite). Email to bol@ / receiving@ / shipping@ is backup, not the daily path. Drop ship keeps its own door. Suitelet is not built — Mike recodes. OCR locks critical fields; gold tags + holdout score accuracy (public scores today are engine-agree only); zero NetSuite Saves until prove unlock. Fulfill stays held until the ship RESTlet is live.

Suitelet front door locked 2026-09-29 No live Saves until prove Live docks: Heartland · Quaker

Delta Pak closed / moved (2026-09-10)

GFS Delta Pak is closed/moved. NetSuite loc 17 is legacy-only — not a live dock. Live docks are Heartland (loc 4) and Quaker (loc 18) only. Any loc-17 / Delta Pak paperwork → needs-Michael; do not auto-route.

1 The job

Dock and office humans stop updating Monday boards for Heartland/Quaker receiving paperwork. Locked target: own-facility team uses a NetSuite Suitelet side tab (drop BOL + short note); behind the screen it posts into the bol@ lane; result returns into NetSuite. Email is backup. Drop ship keeps its own door. Suitelet not built — Mike recodes. Studio OCR extracts fields; after an agree-lock on critical values, NetSuite can create the item receipt (zero Saves until prove). Fulfillment remains held until shipItemFulfillment is deployed.

Suitelet drop (own facilities) / email backup → bol@ lane + Studio copies → OCR agree-lock → Result into NetSuite → Fulfill (held)

Seven steps, dock to NetSuite

1

Human opens Zoho template

Receiving, Shipping, or BOL template — pick the lane that matches the paperwork.

Stage 1 · Human
2

Fill blanks + attach signed docs

Action, Site, PO/SO, BOL#, When ET, Carrier, Trailer, Lots, Temp. Attach signed BOL and packing list.

Stage 1 · Human
3

Send to lane mailbox

receiving@ / shipping@ / bol@ @globalfoodsolutions.co — Zoho keeps the thread searchable forever.

Email = backup storage
4

Bots Mail Bot labels + pings

Labels BOL | Receiving | Shipping. One lane ping with label + action. SMTP Done from matching alias. Slack OFF.

Stage 1b · Bots
5

Studio OCR trio + agree lock

pdf-inspector classifies → digital or scan trio → ≥2/3 agree on critical fields → audit → lock under locks/.

Stage 2 · Hard gate
6

NetSuite Item Receipt

MCP transform PO → Item Receipt. Lots, FS body fields, BOL attach, BOL# in memo. Locs Heartland=4, Quaker=18.

Receive path
7

Fulfill — held

Blocked until shipItemFulfillment RESTlet is deployed. Draft lives on Studio at lanes/rl_ship_item_fulfillment.js.

Held

⬡ Agree lock hard gate

≥2/3 OCR engines must agree on critical fields. Audit writes, then agree lock under locks/. Only then does NetSuite get a write.

⏸ Fulfill held

Item receipt path is the active target. Fulfill waits on RESTlet deploy — draft on Studio lanes, not live.

What happens after you hit Send

Locked target: own-facility dock uses the Suitelet side tab (not built — Mike recodes); email to bol@ / receiving@ / shipping@ is backup. Here’s the backside walkthrough — what the bots check, what gets locked, and what you hear back.

Pilot shadow ON No live Saves Heartland loc 4 Quaker loc 18

A Front of house — you

Backup path today (email). Own-facility Suitelet side tab is the locked daily door — not built yet.

  1. Open the Zoho template Receiving, Shipping, or BOL — pick the lane that matches the paperwork.
  2. One order ref per email No slash multi-line refs. Locked preference — multi-ref stays needs-you.
  3. Attach signed BOL + packing list PDF preferred. Temp / lot supplements if you filled them.
  4. Send to the lane mailbox receiving@ / shipping@ / bol@ @globalfoodsolutions.co

B Backside theater

After Send, the bots take the stage. Plain-English walkthrough of each beat.

1

Mailbox catches it

Bots Mail Bot labels BOL | Receiving | Shipping, stores copies under mailbox attachments, and pings the matching lane bot.

Stage 1b · Bots
2

OCR reads the pages

Studio classifies digital vs scan. Three engines read the same PDF so no single reader owns the answer.

Stage 2 · Studio
3

Agree lock

≥2/3 must agree on critical fields (PO/SO, item, qty, site, lots). Disagree → needs-you, no write.

Hard gate
4

Match NetSuite

Find the PO (Received) or SO (Shipped). Always check related Item Receipt / Item Fulfillment first so we never duplicate.

Lookup only
5

Shadow compare (pilot now)

Build a diff pack vs human NetSuite. No Saves until Michael unlocks prove. Team still does manual NetSuite on real orders.

Shadow · no Save
6

Done bounce

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.

SMTP Done

C What you’ll see / hear

Three outcomes. Holds aren’t random — each one has a reason.

Done

Lane processed cleanly

Pilot: compare pack only. You get SMTP Done from the matching alias. No live NetSuite Save yet.

Needs you

Human judgment required

Miss, multi-ref slash, location conflict (e.g. Heartland vs Quaker), related IR already exists with mismatch, or loc 17 Delta Pak (CLOSED/MOVED — legacy-only, not a live dock).

Held

Fulfill path waiting

Ship / fulfill stays held until shipItemFulfillment RESTlet is deployed. Draft lives on Studio lanes — not live.

D Mini example story

Shadow sample · sanitized No live Save claimed

Shipped email → SO match → hold on location conflict

  1. Shipped email arrives with order ref like 26150979329.
  2. Backside matches SO14109 · Reinhart · Coal Township.
  3. OCR agrees on PO/SO, item, and qty.
  4. Related Item Fulfillment is empty in NetSuite while Monday said shipped → monday_ahead_of_ns flag in the compare pack.
  5. Location conflict: Heartland on the BOL vs Quaker on the SO → needs-you, hold Save.

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.

E Quick FAQ

Is Monday going away for Heartland/Quaker paperwork?
Yes for this intake — Suitelet side tab is the own-facility front door (not built yet); email is backup storage and the backup path. Drop ship keeps its own door.
Does this book Dock Scheduler appointments?
No — that’s a different bot / script 2540.
Can the bot invent an order?
Never. No Done without a verified Save — and Saves are off in pilot.
One email, one order ref?
Yes. Multi-ref stays needs-you until the habit shifts.

⬡ Pilot reminder

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.

Intake — Zoho template

Click the template, fill the blanks, attach signed paperwork, send. That is the whole human step.

Template blanks

Action
receive | fulfill | log
Site
heartland | quaker
PO / SO
document number
BOL#
bill of lading
When ET
arrival / event time
Carrier
carrier name
Trailer
trailer ID
Lots
lot codes + expiry
Temp
temperature reading

Lane mailboxes

Send to the matching alias. Copy buttons for the dock/office team:

Stage 1b — Bots Mail Bot

  • Labels: BOL | Receiving | Shipping
  • One lane ping with label + action
  • SMTP Done from the matching alias
  • Slack is OFF for this lane

Attachments required

  • Signed BOL (PDF preferred)
  • Packing list
  • Any temp / lot supplements the human filled

Delta Pak closed / moved — not a live dock

Michael confirmed 2026-09-10: GFS Delta Pak is closed/moved. Loc 17 is legacy-only (historical corpus). Live docks = Heartland 4 + Quaker 18 only. Delta Pak Monday ship forwards and any loc-17 paperwork are needs-you / needs-Michael — not Heartland/Quaker receive-template traffic. Do not auto-route or silent-rewrite 17→4/18.

Not this lane — Dock Scheduler

Dock Scheduler appointments (script 2540) belong to the Scheduling bot. Appointment booking is a separate flow — do not mix with BOL / receiving intake.

OCR → agree lock

pdf-inspector classifies the attachment. Digital PDFs and scans take different engine trios. Critical fields need ≥2/3 agreement before anything touches NetSuite.

Digital Digital trio

  1. pdf-inspector
  2. liteparse
  3. opendataloader

Scan Scan trio

  1. Docling
  2. MinerU
  3. pdf-inspector PP-OCRv6
⬡

Agree lock — hard gate

≥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.

End-to-end flow

Human · Zoho template Fill blanks · attach BOL / packing · send
Action · Site · PO/SO · BOL# · When ET · Carrier · Trailer · Lots · Temp → receiving@ / shipping@ / bol@
EMAIL BACKUP
Bots Mail Bot Label BOL | Receiving | Shipping · lane ping · SMTP Done
Slack OFF. Immutable copies also land under Documents/GFS-bots-mailbox/attachments/.
CLASSIFY
pdf-inspector classifies Routes to digital trio or scan trio
Digital: pdf-inspector · liteparse · opendataloader. Scan: Docling · MinerU · pdf-inspector PP-OCRv6.
≥2/3 AGREE
Agree lock under locks/ Audit → lock → only then NetSuite
Hard gate. Critical fields must agree. No lock means no MCP transform.
MCP TRANSFORM
Item Receipt PO → IR · lots · BOL · locs 4 / 18
custcol_gfs_lot_code / expiry · FS body · BOL# memo · Live: Heartland=4 · Quaker=18 · loc 17 Delta Pak CLOSED/MOVED = Michael only
Fulfill (held) shipItemFulfillment RESTlet
Draft: lanes/rl_ship_item_fulfillment.js — not deployed.

NetSuite receive

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 (Delta Pak) CLOSED/MOVED — legacy-only, not a live dock; needs Michael; never auto-route
Drop ship Not loc 4 or 18 — do not force Heartland/Quaker

Fulfill — held

  • Held until shipItemFulfillment RESTlet is deployed
  • Draft on Studio: lanes/rl_ship_item_fulfillment.js
  • Do not invent a fulfill path around the RESTlet

Parallel human UI

  • Dock Fulfillment Suitelet still works
  • Script: customscript_gfs_dock_inspection
  • PIN on the floor
  • Writes the same IR fields as this lane

Prove ladder

Climb in order. No skipping. No live Saves until the watched receive Save step clears.

  1. Zoho templates Receiving / Shipping / BOL templates live and used by dock/office
  2. OCR-only test Classify + trio extract + agree lock — no NetSuite write
  3. Watched receive Save Single watched IR Save under supervision — prove field map
  4. RESTlet deploy shipItemFulfillment from Studio draft → account
  5. Fulfill Only after RESTlet is live and proved

Locked design · no live Saves

Contract, field map, and OCR design locked 2026-09-10. Prove ladder is open. No live NetSuite Saves until watched receive Save clears.

Contract
Locked · 2026-09-10
Field map
Locked
OCR design
Locked
Live Saves
Blocked until prove
Fulfill
RESTlet not deployed