⚠ LOCAL-ONLY MODE — Cloud Sync is not configured. Anything you enter here stays on this device and will not reach your team. Configure Cloud Sync →
Dashboard
Lines Running
—
Today's Output
—
Active Downtime
—
Open Alerts
—
Alerts
Shelf-life risk · OT risk · Active downtime · Behind target
Lines – Today
Order Completion Forecast
FIFO by oldest production date · uses live running speed when available
Week at a Glance
Backward view of actual production. Green = met target. Yellow = under target. Today's cell adds an italic pred end-of-day projection when partial check-ins exist. Future days are not shown — use Order Completion Forecast for forward planning.
Orders
Orders are auto-created from the Receiving tab when raw poultry arrives. Use + Schedule Receipt to enter expected future arrivals so the Workload Advisory can plan ahead.
PO No
Lot No
Customer
Product / Line
Qty
Received
Ship Due (+72h)
Auto Planned Prod.
Oldest Prod.
Shelf Life @ Ship
Status
Order Reconciliation — Received vs Produced
Quantity received from customer order vs cumulative net weight from L1 combo bin verification. Difference = received − produced.
Production – Real-Time Tracking
Packing – Finished Pallets
Shipping
Move finished pallets out of the plant and generate a Bill of Lading. Packed pallets stay in inventory until they're added to a shipment here.
QA Dashboard
Real-time quality and food-safety alerts. CCP temperature deviations are raised automatically when a cook cycle is finished.
QA Holds
Lots on hold awaiting lab results, plus any pallets QA placed on hold manually. Held pallets can't be added to shipments until QA releases the hold.
Purchasing
Purchase orders for ingredients and food-contact packaging. Raw poultry is bought through Orders → 📅 Schedule Receipt, which also creates the production order.
Receiving
Incoming raw poultry, ingredients, and food-contact packaging. One record per delivery (USDA one-back traceability).
Employee Schedule
Working Days for This Week
Override the default schedule on a per-date basis. Use this for holidays (no work) or partial days (work until a chosen time). The default for each day comes from the Operating Days/Week setting in Settings → Operation.
Week Summary
Workload Advisory (forecasted shift duration based on queued production)
Crew Assignment by Day & Shift
Hours Report (this week)
Printable Employee Schedule
Grouped by line and shift. Each cell shows the employee's start–end time for that day, or "OFF". Hand a printout to each supervisor — they'll see only their crew's rows at a glance.
Integra Foods – Weekly Schedule
📈 Planning
📊 Production Plan
Planned green lbs per working day — the raw weight going onto the line, on every line.
Cases, brine and packaging are all derived from it, so this is the only figure to keep current.
A blank week means no production planned, not "same as last week".
📋 Inventory Reconciliation
Generate a dated blank count sheet for every ingredient and packaging item the app tracks,
print it, walk the plant, then type what was found. The app works out the difference and
charges it to the right lots — a short off the oldest lots first, an overage onto the
newest — and shows you the whole allocation before anything is written.
📒 Inventory Usage & Receipts
A running account for every ingredient and packaging item: what came in, what was used,
what a count corrected, and the quantity on hand after each one.
Beginning balance + receipts − usage = ending balance, and the ending balance can be
negative — a negative here means stock was used that no receipt ever put on the books.
Only receipts carry cost. It opens fully expanded — click any item to fold
it down to its total, or use Collapse all items above.
Printing always includes every transaction, folded or not.
Workforce Planning
Plan Inputs
Per-Line Analysis
Line
Crew / Shift
Shifts
Hrs / Shift
Person-Shifts / Wk
Man-Hrs / Wk
Current HC
Hrs / Emp Now
OT / Emp Now
HC Needed
Hires Needed
OT Eliminated / Wk
Lines marked "borrows" run by pulling crew from another line and don't require their own dedicated hires. QA + Maintenance are counted separately below.
Shared Support (QA Tech, Maintenance Tech)
Hours Distribution (with tiered scheduling)
With dedicated-first scheduling, each dedicated employee maxes out their shifts before any floater gets work. This is what determines hours per person.
Line / Shift
Hours/Wk Dedicated
Hours/Wk Floater (avg)
Floater Hours Range
Floater Headcount
Summary
Reports
Available reports
Per-order production summary — receipt + combos + waste + rejections, printable and exportable.
Filter mode
All injection combos with brine details and every rack record resulting from them.
Compliance & Floor Visibility
Given a supplier lot, our production lot, an RC#, or a pallet ID, walk FORWARD to every downstream pallet and shipment. FSIS expects this trace in < 2 hrs.
Given a pallet / SSCC / shipment / BOL #, walk BACKWARD to the source supplier lot and receipt.
All finished goods currently in inventory — at plant or at 3rd-party warehouses. Groups by Product Code → Lot → Pallet.
Pallets sitting at the plant — packed but not yet on a BOL. Sorts by age so the oldest move first (FIFO). Highlights pallets approaching the 6-day shelf-life mark.
The master pallet register — every pallet ever produced, searchable by any field. The reference report for QA investigations.
Production Health
Yield % (produced ÷ received) per order across the selected window. Helps spot trends and operator/line issues.
Lbs / hr, run time, combo count, average speed — by line and operator over the window.
Finished pallets — pallet ID, product code, lot, pack date/time, cases, net and gross weight.
Product Codes
hold Ctrl/⌘ to pick multiple
Full traceability record for every condemned combo: customer, supplier, P-number, lot, product code, receipt details, and production dates.
Every waste entry, with type, weight, order link, and time. Roll-up by type and as % of total produced.
Unified audit list of every voided record across the app: combos, pallets, receipts, shipments, and holds.
Every Order Release issued — truck and container. Filter, drill into individual releases, void if cancelled.
Pallets currently held in our account at a 3rd-party warehouse. Sent vs received vs remaining quantities, adjustments, and held-pallet flag.
Every confirmed warehouse receipt for shipments to our own account, grouped by delivery (BOL). Sent vs good-received vs damaged, rejections, and discrepancy flags. Permanent record — includes fully released pallets.
Cross-hold event timeline. Every place / sample / result / release / condemn / void action across every hold, sorted newest-first. FSIS audit-friendly.
Each sequence defines a 7-digit Start ID and the date/time it becomes active. Pack Pallet uses the sequence active at the pallet's Packed At timestamp. Add a sequence to begin a new numbering range — past pallet IDs stay valid.
Plant Info (Ship From for Bills of Lading)
Auto-fills the "Ship From" box on every Bill of Lading. Required when generating BOLs.
Invoice Settings
Invoice Logo (shown top-left on printed invoices)
No logo
PNG or SVG recommended · max ~500 KB
🔍 Persistence diagnostic — click to inspect what's actually saved
Click each button to see what's in memory vs. what's persisted to localStorage. Helps diagnose "I saved but the value disappeared" issues.
— click a button above —
Staff Names Library
Names listed here appear in the CCP Completed By dropdown when finishing a cook cycle. Add one name per entry.
Production Lines
Pick a line on the left to open it. Edits save instantly.
Employees (0 · 0 active)
#
Name
Line
Role
Shift
Start
Hrs
Max/Wk
Floater
Hired
Term'd
Role is selected from the line's role library (Settings → Lines → Roles).
Start / Hrs are per-employee overrides — leave blank to use the line default.
Hired / Term'd dates track employment span; terminated employees are skipped by auto-scheduler and workforce math.
QuickBooks Online export
Invoices are exported as CSV files you import in QBO (Settings → Import data → Invoices).
Each PO becomes a job under its customer, written as Customer:PO.
The Product/Service column must match the QBO item Name exactly — a mismatch does not fail,
QBO silently posts it to a generic "sales" item, so the export refuses to run on an unmapped code.
QBO item for freight / extra charges
Default QBO item for credit memo lines
— exactly as the item Name reads in QBODeposit accounts
— one per line, exactly as each reads in the QBO Chart of Accounts. The first is preselected on a new receipt.Default payment method
Payment grouping
— one QBO payment per remittance, or one per invoice paidApply payments at
— jobs billed with parent have no AR of their ownExport invoices dated on or after
Notifications (Email + SMS)
▸ Setup instructions for the Firebase email extension (read first)
You'll install Firebase's pre-built "Trigger Email" extension. No code, no command line — all done through the Firebase Console.
Upgrade to the Blaze plan (required for extensions). In Firebase Console → ⚙ → Usage and Billing. Click Modify plan → choose Blaze. You'll add a credit card but the free tier covers your volume — emails are free up to ~100/day, then ~$0.40 per 1000 sent. Set a budget alert at $5/month for safety.
Create a SendGrid free account (handles email delivery). Go to signup.sendgrid.com. Sign up with your email. Verify your email address when prompted. Free tier: 100 emails/day forever.
In SendGrid, click Settings → API Keys → Create API Key. Name it "production-planner". Pick Restricted Access → Mail Send: Full Access. Click Create & View. Copy the key now — SendGrid won't show it again.
In SendGrid, also go to Settings → Sender Authentication → Single Sender Verification. Click Create New Sender. Enter your name, your email (e.g., vladimir@integrafoods.net), company info. Click Create. Check your email and click the verification link SendGrid sends.
Back in Firebase Console, in the left sidebar click Build → Extensions (or use the URL console.firebase.google.com/project/YOUR-PROJECT/extensions).
Click Explore extensions hub. Search "Trigger Email". Click the result by Firebase ("Trigger Email from Firestore"). Click Install in console.
Pick your Firebase project. Click through. When you reach Configure extension:
SMTP connection URI: smtps://apikey:YOUR_SENDGRID_KEY@smtp.sendgrid.net:465 (replace YOUR_SENDGRID_KEY with the API key from step 3)
Email documents collection: mail
Default FROM address: the SendGrid-verified sender from step 4 (e.g., vladimir@integrafoods.net)
Leave other fields at defaults
Click Install Extension. Wait ~3 minutes for provisioning. Done.
To add SMS later, install the "Send Messages with Twilio" extension following a similar process. Twilio account required — ~$1/month for a phone number plus per-SMS cost.
Email recipients (comma-separated)
From address
EmailJS credentials — sign up free at emailjs.com to enable invoice emails
EmailJS Service ID
EmailJS Template ID
EmailJS Public Key
SMS recipients (E.164 format, comma-separated)
The default list, used by any alert whose own Text recipients box is blank. Needs Text message sending (below) set up on this device. Leave blank if not using SMS.
Our logistics department
Logistics email (internal copy)
Copied on every Order Release emailed to a cold storage. Leave blank to send to the warehouse only.
Which alerts go where
Alert
Email
SMS
Email recipients (blank = the list above)
Text recipients (blank = the list above)
Shelf-life risk on open orders
Production lagging behind target
Downtime logged on any line
Reminder: missing 2-hour check-in
Purchase order overdue
One email per late PO, at most once a day, with a link that opens the new-expected-date box. Stops as soon as a future date is entered.
Who gets what. Each row decides its own recipients, per channel. Leave a box
blank and that alert falls back to the general lists at the top of this card — so
the general lists are the default, and a filled box is an exception for that one
alert. Text numbers need the country code (+1…), and a
number on the opt-out list is dropped even if it is typed here.
The SMS tick-box is available only on a device where Text message sending (below) has been set up. On any other device it stays switched off, because an enabled box is a promise.
Reminders trigger 30 minutes after an expected 2-hour check-in is missed. Only works while at least one device has the app open (the timer runs in-browser).
Text messages — opt-outs
Anyone who replies STOP must never be texted again. Twilio refuses the
message at its end, but this app cannot see a STOP reply — there is no
inbound webhook — so the number has to be recorded here by hand, from the Twilio
console or when somebody says so at the plant. A number on this list is dropped
from every SMS alert.
Mobile number
Recorded by
Note
What an overdue text looks like
Link address used in alerts
The address the app puts in the links inside emails and texts \u2014 not
necessarily the address this machine is using. Every device sends this one, so a
text sent from a laptop carries the same domain as one sent from the office Mac.
Use a domain you own. Mobile carriers score the whole domain, and a link on
a shared free-hosting root such as web.app is judged by
what strangers send from it \u2014 that is what produced error 30007 here on
28 Sep 2026.
Address
Text message sending
Texts go through a small Twilio Function — a script hosted by Twilio that
holds your Auth Token, so the token never reaches a browser.
Never put your Twilio Account SID or Auth Token in this app; anyone with
them could send messages billed to you and read every message you have sent.
Setup instructions are in TWILIO_FUNCTION_send-sms.js.
Twilio Function URL
Shared secret
Stored on this device only and never synced, the same way the Firebase
config and the owner password are. Each device is set up once.
Send a test to
Cloud Sync (Firebase)
▸ One-time Firebase setup instructions (read these first)
You're going to create a free Firebase project that holds the shared data. ~7 minutes.
Click Create a project. Name it anything (e.g., "integra-production"). Disable Google Analytics — you don't need it. Click Create project and wait ~30 seconds.
In the left sidebar, click Build → Firestore Database. Click Create database. Choose Start in production mode. Pick a region close to you (e.g., us-east1 or us-central1). Click Enable.
Once Firestore is created, click the Rules tab at the top. Replace the existing rules with the block below, then click Publish:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /app/{document=**} {
allow read, write: if true;
}
match /archive/{document=**} {
allow read, write: if true;
}
}
}
Note: these rules allow anyone with your config to read/write. The shared passcode below is your application-level auth. For higher security later, you can add Firebase Auth.
In Firebase Console, click the ⚙ Project settings icon (top of left sidebar).
Scroll down to Your apps. Click the </> Web icon to register a web app. Give it any nickname. Click Register app.
Firebase will show you a JavaScript config object like const firebaseConfig = {...}. Copy just the inner JSON (the part between the curly braces, including the braces themselves) and paste it into the field below.
Firebase Config (paste the {...} object)
App Passcode (everyone uses this to open the app)
Owner Password (needed to access Settings/Schedule/Workforce)
After connecting, share the same HTML file with your supervisors (email or shared folder). They paste the same Firebase config + App Passcode on their devices and start entering production data — all changes sync automatically. Owner Password is required on each device to access Settings/Schedule/Workforce.
Device Role
Three roles: Owner (full access), Admin (all except Accounting; limited Settings), Supervisor (production only). Set per-device.
Current role on this device: Owner
Admin Password
Required to switch any device to Admin mode. Admin sees all tabs except Accounting, and in Settings sees only: Operation, Production Lines, and Employees.
Floor Mode
A kiosk-style lockdown for production-floor tablets. When enabled on a device: the tab bar is hidden, the app shows only the Production tab, and exiting requires the Owner password. Use this on shared shop-floor tablets so operators can't drift into other screens.
Floor Mode on this device: Off
Floor Mode – No Scanner (Packing Tablet)
For a plain handheld tablet at the packing table — no barcode scanner attached. When enabled on a device the side menu shrinks to exactly two items, Production and Packing, and nothing else is reachable. Production is the full production screen. Packing is trimmed to what a packer needs: a line tab per production line, a + Add Pallet button, and today's packed pallets with edit, label and delete — no date picker and no previous-day history. Exiting requires the Owner password. Per-device, and mutually exclusive with Floor Mode and Scan Mode.
No-Scanner Floor Mode on this device: Off
Scan Mode (Handheld Scanners)
A big-button layout for handheld scanner computers like the Zebra MC9400/MC9401. When enabled on a device: the sidebar and desktop screens are replaced by a simple home menu with oversized buttons for Receive Delivery (scan bins), Inject Combo (scan bin label), and Finish Combo. Forms open full-screen in a single column with large touch targets and auto-focused scan boxes. All data flows through the same records and Cloud Sync as the full app. Exiting requires the Owner password. Per-device — enabling it here does not affect other devices.
▸ One-time Zebra scanner setup (DataWedge)
1. On the scanner, open the DataWedge app → tap Profile0 (default).
2. Make sure Barcode input and Keystroke output are both enabled (they are by default).
3. Under Keystroke output → Key event options, enable Send ENTER key (or add a "\n" suffix under Basic data formatting). Each trigger pull then types the barcode and presses Enter — exactly what the scan boxes expect.
4. Open this app in Chrome on the scanner, enable Scan Mode below, tap a task, aim, and pull the trigger.
Scan Mode on this device: Off
Camera Scanning (iPad / phone)
Turns the device camera into a barcode scanner. A 📷 Scan with Camera button appears at the bottom of the screen whenever a scan box is open — receiving, Add Combo, Reject Combo, Inject Combo. Point the camera so the barcode sits inside the box; it reads the label and fills the scan box exactly as the Zebra handheld would, so every check (GS1 parsing, wrong-PO guard, duplicate guard) works the same.
No photo is taken or stored. The camera picture is read straight from the live preview and thrown away frame by frame — nothing is added to the data that syncs to the cloud, so this cannot make saves slower or push the file toward its size limit.
Camera reading is slower and fussier than a real laser scanner, especially on frosty or creased case labels. It is best as a second device or a backup — keep the Zebras for the receiving station. Needs internet the first time it is used on a device (it downloads the decoder once, then works from cache).
The button can be dragged. Press and drag it anywhere on the screen — it stays where you drop it on this device, and every device remembers its own spot. A quick tap still opens the camera; only an actual drag moves it.
Camera Scanning on this device: Off
Device Setup Link
One-tap provisioning for a new iPad, tablet, phone or scanner
Generates a link that carries the Cloud Sync settings inside the link itself. On the target device: open the link once, then add it to the Home Screen (iOS Safari: Share → Add to Home Screen · Android Chrome: ⋮ → Add to Home screen). From then on the icon configures that device automatically on every launch — no API key to paste and no passcode prompt — even after iOS or Android clears the browser's stored data (Safari drops it after about a week without a visit). Also sets the device to Supervisor role. Treat the link like a password: anyone who has it can reach your data. Email it to yourself, use it on the device, then delete the email.
Set that device up as:
📷 Camera scanning
✓ Link generated and copied to the clipboard (where the browser allows). Paste it into an email to yourself, open it on the device, and add it to the Home Screen.
Suppliers (USDA Traceability)
Combo Weight Repair (one-time)
Purchasing
Customers
Carriers (Trucking Companies)
Shipping Lines (Ocean Carriers)
3rd-Party Warehouses (Cold Storage)
QA — Approved Labs
Materials Library
🧂 Brine Recipe Library
🌀 Tumble Recipe Library
Data Protection
Data Backup & Reset
Clear Test Data: erases orders, production entries, schedules, and floaters. Keeps your line setup, dedicated employees, and config. Reset Everything: nukes all state and restores the original 3 lines + 65 seed employees. Use this for a full fresh start.
All data is saved automatically to your browser's local storage. Use Export to back up before resetting if you want to preserve a snapshot.
Scan Mode — tap a task, then pull the trigger when a scan box is on screen. Exit via the button in the top bar (Owner password required). build 2026-08-01ic
⏳ Processing…
✅
You scanned all bins for this order
Don't forget to save!
Scan
Starting camera…
⛔
NOT RECORDED
Add Combo
Receive Delivery
IF
Integra Foods – Production Planner
Enter app passcode to continue
Remember this device — don't ask again
Owner Access Required
Enter the owner password to switch this device to Owner mode (full access to Settings, Schedule, and Workforce).
Switch Role
Add Production Line
Line Name *Product Description
Unit of Measure
Production Flow
Produce to Order
Customer known at receipt (Chicken Paws style)
Produce to Stock
Customer assigned later via Fulfillment Order
Production Modules (enable the stages this line uses)
Brine LogInjection Log (requires Brine)Tumble Log (requires Brine)RacksCook CyclesChill CyclesLot Pack Pool(tracks lbs available per lot for packing)
New Fulfillment Order
Warehouse release instruction — assigns warehouse pallets to a customer for shipment.
Release Details
Customer *Line *Product Code *Release/FO Number
Notes
Available Warehouse Pallets
Select a line and product code to see available pallets.
New Order
Customer
Pick from the library to enable QuickBooks invoicing + customer reports later. Free-text still works for one-off orders. Manage customers in Settings → Customers.
Line / Product
Plant #
Product Code
Multiple product codes found for this plant — select the one for this order.
Quantity
Received Date
Oldest Production Date in Order *
Required. If this order is filled from multiple batches, enter the date of the OLDEST batch. This is what determines shelf-life remaining at ship.
Planned production date is auto-calculated. The app schedules each order by FIFO (oldest production date first), starting at the line's next available slot after the order is received. View the calculated start in the Orders table and the Order Completion Forecast on the Dashboard.
Production Lifecycle Timestamps
Started At
Use to backdate or correct when production actually began.
Completed At
Only shown after order is complete. Editable.
Notes (optional)
Add Combo
Order *
Bins Click a bin to select — fills Combo ID & recorded weight
Combo ID *Recorded Weight (from receiving)
—
Lot No. *
Auto-filled from the line's lot format when an order and start time are selected.
Scale Weight (lbs) *
No scale reading for this combo — enter the net weight directly
Net Weight (lbs) *Why no scale reading? *
Recorded on the combo so the report can tell this apart from a missing entry.
Net Weight (lbs) (auto: scale − tare)
—
Water Adjusted Net Weight (lbs) (auto: net − water %)
—
Start Run *Stop Run *
Date syncs to Start Run — override only if run spans midnight.
Initials *Notes
Running lot no. check on all pallets…
Log Downtime
Line
—
Start Time
Duration (minutes)
Reason
Notes (optional)
Rejected Combos
Use ✎ Edit to fix a wrong weight/ID/reason. Use × Delete to remove a rejected entry permanently — the order's totals and recon will update.
Reject Combo (spoiled / unusable)
Order *
Pick which L1 order this spoiled combo came from.
Combo ID *
Scanning the label auto-fills Production Date and Weight.
Lot No. *
Auto-filled from the order's lot prefix — override if needed.
Net Weight (lbs) *Production Date *
Date the combo was produced
Condemnation Date *
Defaults to now — edit if product was condemned earlier
Reason for Rejection *Initials *Notes
Mix Brine Batch
BR-YYYYMMDD-NNN assigned on save. Ingredient receipts are sorted oldest first (FIFO) and show remaining on hand. Older lots must be consumed before newer ones — the save will be blocked otherwise.
📋 Load Recipe:
Mixed At *Mixer Initials *
Ingredients *
Total weight: 0 lbs
Notes
❄ Release Racks from Chiller
Operator Initials *
Stamped on every rack you release in this session.
Progress
— / — released
Notes (optional)
❄ In Chiller
✅ Released
✏ Edit Chill Cycle
Start Time *Stop Time (chilled cycles only)
Operator Initials
Notes
🧹 Clean Rack
Cleaned At *Operator Initials *
Notes
🔥 Start Cook Cycle
Fill in cook details, then drag rack badges from the pool into their position in the oven diagram. Close any time — progress is saved.
Smokehouse *Start Time *Operator *Notes
Available Racks — drag into oven ↗
Cook-readyAlready in oven
🧪 Complete CCP & Begin Unloading
Cook Stop Time *Operator *
CCP — record 3 random end-of-cook temperatures *
Sample 3 racks at random; record internal temperature for each. Complete this before unloading begins. Required for the printable CCP Form (USDA audit).
CCP Form Completed By *
📦 Post-cook weights — recorded during unloading
After saving CCP, the cycle enters Unloading status. Each rack gets its own post-cook weight entry directly on the cycle card — no modal required. Close this screen and unload at your own pace.
Corrective-action / notes
✎ Edit Cook Cycle
Smokehouse *Start Time *Operator *Stop Time
Finished By
Notes
New Recipe
Material-level template — at load time, each ingredient FIFO-resolves to the oldest available receipt.
Name *Line *Production Item Name
Finished product made when this brine is used. Stamped on every rack the brine touches.
Target Pump %
Predicted brine pickup as a % of rack weight. Used to subtract brine consumption when racks are saved. Blank = tracking disabled for this recipe.
Date and lot are immutable on a saved record. Edit the rack #, weight, temp, or initials below.
Rack No. *Net Weight (lbs) *Temp (°F) *Initials *
Lot: ·
Combo: ·
Date:
Add Combo
Select Raw Receipt (PO)
Enter Initials
Scan Combo(s)
Scan each bin you're injecting together, then Save.
Order *
Bins Click a bin to select — fills Combo ID & recorded weight
Combo ID *Recorded Weight (from receiving)
—
Lot No. *Scale Weight (lbs) *gross off the Integra scale — bin, pallet, lid includedNet Weight (lbs) *Brine Batch(es) *
Hold Ctrl/Cmd to select multiple batches if more than one was used.
Start Run *Stop Run
Date syncs to Start Run — override only if run spans midnight.
Initials *Notes
Finish Injection
Stop Run *
When did injection finish for this combo?
Schedule Receipt
Enter an expected future raw material arrival. Creates a planned order so workload + worker scheduling can plan ahead.
Expected Arrival *Supplier *
Raw material suppliers (poultry + red meat).
Material *Customer
Who buys the finished product. The supplier above is who it comes FROM.
Product Code
Several product codes match — pick the one for this receipt, or leave it undecided and choose at receiving.
Expected Quantity (lbs) *Internal PO # *
Auto-generated. Must be unique — edit if your accounting system uses a different number.
Notes
New Shipment
BOL # is generated on save. Multi-stop loads get one BOL per consignee.
BOL Details — Whole Truck
Carrier *
Manage in Settings → Carriers
Driver
Trailer #
Seal # *PRO #
Pickup *Delivery Due
Freight Terms
Notes (internal)
📋 Auto-generate Manifest with BOLPrints manifest (one pallet per row) after each BOL.
Pick a customer on the left to see available pallets.
Place Manual Hold
QA puts a single pallet on hold. Requires BOTH the Owner Passcode AND the QA Passcode (your dual-key policy).
Pallet (search by ID)
Reason
Notes (optional)
QA Initials
Owner Passcode
QA Passcode
Send Sample to Lab
Lab
Manage labs in Settings → QA — Approved Labs.
Sent at
Organisms being tested
Listeria Salmonella Staph E. coli
Notes (optional)
Your Initials
Record Sample Result
Received at
Lab document / report reference
Notes (optional)
Your Initials
QA Action
🔬 Confirm Warehouse Receipt
Enter the warehouse-side receipt key + the total quantities that arrived on the truck (pre-filled with what we shipped — adjust only for short/over delivery). If the warehouse disposed of damaged cartons, enter them below: damage is subtracted from cases, net and gross, and the Balance on Account = received − damaged becomes the live inventory. That balance should match the good count printed on the warehouse receipt.
To reject an entire pallet on receipt, tick "Rejected" (no receipt key needed). Receipt keys must be unique within this warehouse. Partial save is allowed — pallets without a receipt key will remain pending and the Confirm Receipt button will stay active until all pallets are confirmed. Already confirmed? Use ✎ Edit Key to fix a key, or ✎ Revise qty if the warehouse revised its receipt — quantities unlock and the change is recorded with a reason.
Your initials
🪛 Adjust Pallet
− Cases
− Net lbs
− Gross lbs
Reason
Notes
Your initials
📤 Release Inventory
Release pallets held in our account at a 3rd-party warehouse to a customer.
👤 Customer 🏭 Return to our plant 🔁 Transfer to another warehouse
Release # *Loading Date/Time *
Leave time at 00:00 if not known.
Your Initials *
Booking Number *Shipping Line *
Warehouse *Customer (release to) *Customer Account # at WH
Transfer TO warehouse *
Available pallets at this warehouse
Notes (internal)
Log Receipt
Receiving ID will be assigned on save (RC-YYYYMMDD-NNN).
Scheduled PO / Purchase Order
Everything already on file — scheduled raw-protein receipts and open purchase-order lines. Picking one fast-fills supplier, material, quantity and PO #. Choose "Fresh entry" if this delivery wasn't ordered.
Received At *
Receipt Method
Enter manually Scan combos (1 combo per pallet) Scan cases (multiple per pallet — coming soon)
Scan modes auto-fill Supplier Lot, Quantity, Bin Count, and Oldest Production Date from the aggregate of scanned bins.
Supplier *Material *
Set by the purchase order line.
Supplier's Lot Code *
If supplier label has a GS1-128 barcode, scan it. Otherwise type the lot exactly as printed.
Internal PO # *
Your internal purchase-order reference. Required for every receipt.
Oldest Production Date
Raw-poultry only — earliest production date across all items in this delivery (drives FIFO + shelf-life calc).
Slaughter Start Date
Slaughter Stop Date
Slaughter window for the birds in this delivery.
Quantity per PO
Recalled from the purchase order line.
Quantity*
What actually came off the truck. Inventory is built from this number, not from the PO.
Packaging Type
Boxes are unpacked loosely into bins — reconciliation can't track 1:1.
Combo Bin Count per BOL *
Raw-poultry only — copy the # of combo bins from the supplier's BOL/packing slip. In combos scan mode, this number gates scanning AND must match the count of scanned bins before save.
UOM
Condition
Temperature at Receipt (°F)
Required for refrigerated / frozen materials.
Inspector Initials *USDA Inspection Seal #
Notes
🔍 Scan Combo Bins / Cases
(0 of — bins · 0 lbs)
Scan the pallet label first — either the SSCC (00)… or the pallet serial (21)…, whichever the supplier prints — then scan each case/combo label. Every bin gets tagged with the current pallet ID. Switch pallets by scanning a new pallet label.
⚠ Enter Combo Bin Count per BOL above before scanning. The expected count gates the scan input and is verified against scans on save.
📦 Current pallet — ID: — · SSCC: —
🌡 Temperature check required
Scanning is paused until this reading is recorded.
The receiving label prints on every save.
Find Combo
Search by combo ID substring (e.g., LLP) or by date (e.g., 2026-05-28). Leave empty to see the 30 most-recent combos. Use the per-row "→ Move" or the bulk "Move all" action to reassign combos to the correct order.
Search
Edit Packaging & Bin Count
Packaging Type
Boxes are unpacked loosely into bins — reconciliation is skipped for boxed receipts.
Combo Bin Count
Number of combo bins counted on the truck. Should match the # of combos produced.
Add Combo Bin (manual)
Combo Bin ID *
The bin/combo serial from the label. Must be unique — not already received or produced.
Net Weight *Production Date *Lot No. (optional)
🧊 Frozen Intake — Turkey Drumsticks (L2)
Held as on-hand frozen raw inventory. Does not enter the production queue until released.
Internal PO *
Pick the PO from your scheduled orders — supplier & material auto-fill. Choose “Manual PO entry” to type one.
Received *Supplier *Material *Supplier Lot (optional)
Add a pallet — Pallet ID auto-generates unless you scan an existing label
Scanned Pallet ID (if labeled)# Cases *Net wt / box (lbs) *Production date *
Pallets on this delivery
🧊 Release Frozen to Production — Thaw
Whole pallets only. Released pallets leave frozen stock and begin thawing; they enter the production queue when you mark the thaw complete.
Frozen stock (PO) *
Select whole pallets — oldest first (FIFO)
Thaw started *Expected ready *
Defaults to +24h — adjust to your thaw cycle.
Released by *
✅ Thaw Complete → Production
Product temp (°F) *Checked by *
This creates the thawed raw-material receipt and its L2 production order. The pallets' weight enters the production queue.
Add Pallet
Order *
Shows orders completed within 7 days.
Show all
Pallet ID *
Auto-generated from the active sequence — edit to override. Must be unique. Manage sequences in Settings → Operation.
Lot No. *
Read-only — auto-filled from the order's lot prefix + latest combo's shift digit.
Product Code
Select from the product code library. Auto-locked when resolved from the order.
# Cases
When the resolved product code has a case net lb value set, Net Weight below auto-calculates as # cases × case net lbs.
Net Weight (lbs) *
Operator can override the auto-calculated value if the actual scale weight differs.
Packed At *
Must be on or after the first combo's Start Run for this order, up to +7 days.
Initials *Notes
Add Pallet ID Sequence
Start ID *
The first 7-digit Pallet ID this sequence will issue. Must be greater than the highest ID used by any earlier sequence.
Effective From *
Date and time this sequence takes over. Any pallet packed at or after this moment uses this sequence's IDs. Must be later than the previous sequence's effective time.
Label (optional)
🗑 Log Production Waste ·
Recorded production waste for this lot
Add a new production waste entry
Reason
Weight (lbs) *Other reason (if not in list)
Initials *Date
Notes
Reasons come from Settings → Lines → Waste Types. Multiple entries add up against the lot.
Log Pack Waste ·
Recorded pack-stage waste for this lot
Add a new pack waste entry
Reason
Weight (lbs) *Other reason (if not in list)
Initials *Date
Notes
Generate Invoice ·
Invoice #
Invoice Date
Payment Terms
⚠ No terms set for this customer — set them in Settings → Customers.