PalmStat ERP · Operations
Palm Stationery Manufacturers (Pty) Ltd · Cape Town
12 Industria Crescent, Epping 2, Cape Town, 7460
Tel +27 21 534 0000 · ops@palmstat.co.za

Tally & Sign-off · Standard Operating Procedure

Step 5 of 8 · the floor count document · operator captures, supervisor confirms
APPROVED
SOP-TS-005
v1.0 · Last reviewed 2026-05-08
← Previous: WIP Report · Index · Next: FGRN →
Lifecycle step
Step 5 of 8
Module owner
Production Floor · Operators
Trigger event
Batch reaches PLANNED or IN_PROGRESS
Approval matrix
Operator → Supervisor

1. Purpose

The Production Tally Sheet bridges WIP Tracking and Finished Goods. The floor team uses it to capture the raw piece-count coming off a machine across a shift — eight hourly slots of good, scrap and rework, plus operator initials. When the supervisor confirms the tally, the document is locked, the recorded net_qty becomes the authoritative quantity entering QC inspection, and the next-step FGRN is unlocked.

This document mirrors the Sage X3 "Production Tracking", Syspro "Operation Time and Quantity Posting", SAP "Production Order Confirmation" (CO11N), and NetSuite "Work Order Completion" partial-confirmation. Where Sage uses a numeric grid in the Operation tracking screen, PalmStat captures the same data on a printable A4 with hourly rows that match the operator's clock-on / clock-off cadence.

The tally sheet is the only document in the lifecycle owned primarily by an operator (not a planner / supervisor). The 4-state lifecycle (DRAFT → SUBMITTED → CONFIRMED → REJECTED) is enforced at the API layer.

2. When to use

3. Data sources

The tally-sheet view (frontend/js/views/tally-sheet.js) calls API.tallySheets against the tally_sheets table introduced in the route's ensureSchema() bootstrap. Every row below is wired into a real column.

Field on documentAPI endpointDB table.columnExample value
Tally Ref No.auto-generatedtally_sheets.tally_refTALLY-260508-4218
Batch refGET /api/production-batchesproduction_batches.batch_ref via FK batch_idBATCH-2026-0481
Batch statusGET /api/tally-sheets (LEFT JOIN)production_batches.statusIN_PROGRESS
ShiftPOST /api/tally-sheetstally_sheets.shiftDAY / NIGHT
Shift datePOST /api/tally-sheetstally_sheets.shift_date2026-05-08
FG product code & nameGET /api/productsproducts.code & products.nameA4_72PG_FM · A4 72-page FM
Machine code & nameGET /api/machinesmachines.code & machines.nameRUL_4 · Ruling 4
Planned qtydenormalisedtally_sheets.planned_qty (mirror of production_batches.planned_qty)5 000
Hourly grid (8 rows)PATCH /api/tally-sheets/:idtally_sheets.hourly_counts (JSON)[{slot, count, scrap, initials} × 8]
Tally total (good)computed on submittally_sheets.tally_total4 980
Scrap totalcomputed on submittally_sheets.scrap_total40
Net qtyderivedtally_sheets.net_qty (= tally_total − scrap_total)4 940
Operator clock no.POST /api/tally-sheetstally_sheets.operator_clock_no1042
Operator namePOST /api/tally-sheetstally_sheets.operator_nameP. Mokoena
Assistant clock & namePOST /api/tally-sheetstally_sheets.assistant_clock_no / assistant_name1108 / S. Ndlovu
Supervisor clock & namePOST /api/tally-sheets/:id/confirmtally_sheets.supervisor_clock_no / supervisor_name0901 / N. Williams
Supervisor signed atauto-stamped on confirmtally_sheets.supervisor_signed_at2026-05-08 14:12
Statusstate machinetally_sheets.statusDRAFT → SUBMITTED → CONFIRMED
Reject reasonPOST /api/tally-sheets/:id/rejecttally_sheets.reject_reason"Hour 3 missing scrap"
Notes (downtime, machine)PATCH /api/tally-sheets/:idtally_sheets.notes"Breakdown 11:00–11:45"
Created byreq.userusers.email via created_byoperator@palmstat.co.za

4. Step-by-step workflow

  1. Operator opens Tally Sheet view/tally-sheet route. View hydrates from API.tallySheets.list() + API.productionBatches.list().
  2. Pick eligible batch — the "Batches awaiting tally" grid lists every batch in PLANNED or IN_PROGRESS with no CONFIRMED tally yet. Operator clicks the tile for their machine.
  3. Tally modal opens — pre-fills batch ref, FG product, machine, shift, planned qty. The 8-row hourly grid is auto-populated based on shift (DAY 06:00→14:00, NIGHT 18:00→02:00).
  4. Capture operator + assistant identities — operator enters their clock no. and name (and assistant if any).
  5. Hourly count — once per hour the operator updates the row for that slot: count (good), scrap, initials. Cumulative total auto-recomputes via the modal's recalc() function.
  6. Save draftPOST /api/tally-sheets on first save (creates the row), PATCH /api/tally-sheets/:id on subsequent updates. Status remains DRAFT; the document is editable.
  7. Submit at end of shift — operator clicks Submit for sign-off. POST /api/tally-sheets/:id/submit validates that at least one count row is > 0 and flips status to SUBMITTED. The document is now read-only for the operator and visible to the supervisor.
  8. Supervisor reviews — supervisor opens the same modal in confirm mode. They cross-check totals against the Job Card hourly grid (which is paper) and machine output history.
  9. Supervisor confirmsPOST /api/tally-sheets/:id/confirm stamps supervisor_clock_no, supervisor_name, supervisor_signed_at. Status → CONFIRMED. The document is locked. QC inspection is now unlocked, and the FGRN can be issued.
  10. Or supervisor rejectsPOST /api/tally-sheets/:id/reject with a reject_reason. Status → REJECTED. Operator must reopen, fix and resubmit.
  11. Print & archive — the printed copy carries operator + supervisor signatures (and stamps). Scanned and uploaded; document_links ties it to the underlying batch.

5. Roles & permissions

ActionAdminOperatorSupervisorPlannerQC
Generate / create tally
Edit hourly counts (DRAFT)
Submit (operator)
Confirm (supervisor sign)
Reject with reason
Reprint after CONFIRMED
Delete / void

Permission gate enforced by requireRole('admin','supervisor','operator','planner') on POST routes; submit/confirm endpoints add stricter role checks.

6. Common scenarios

Scenario A · Standard 8-hour shift

Happy path: Operator captures hourly counts, totals 4 980 good + 40 scrap = 4 940 net. Submit at 14:00, supervisor confirms within 30 min. Tally ref TALLY-260508-4218 is locked.

Scenario B · Mid-shift breakdown

Happy path: Breakdown 11:00–11:45. Operator records 0 count for that hour, adds note "Breakdown 11:00–11:45". Supervisor cross-checks against machine_breakdowns and confirms.

Scenario C · Cross-shift batch

Happy path: Day operator captures rows H+1–H+6 and saves as draft. Night operator opens the same tally, picks up at H+7. Both initials are captured per row. Supervisor confirms after Night shift.

Sad path: Day operator forgets to save before clocking out. Counts are lost. Recovery: planner opens the original Job Card paper trail, manually back-fills the tally rows and supervisor signs with a "back-filled" note.

Scenario D · Numbers don't reconcile

Happy path: Supervisor flags a 200-unit gap between operator tally and an interim machine output reading. Tally is REJECTED with reason "200-unit variance vs machine counter at 12:00". Operator re-counts from the FG pallets, identifies an over-recorded H+5 row, re-submits. Supervisor confirms.

7. Related documents

Upstream  ·  STEP 3: Job Card (paper hourly grid is mirrored here)
Upstream  ·  STEP 4: WIP Report (highlights variance batches)
Upstream  ·  production_batches in PLANNED / IN_PROGRESS
   →  STEP 5: Tally & Sign-off · this document
Downstream  ·  QC Inspection (only unlocks after CONFIRMED tally)
Downstream  ·  STEP 6: FGRN (consumes tally_sheets.net_qty as the source of truth)
Cross-ref  ·  machine_breakdowns (downtime context)

8. Approval signatures

Document Owner
Operator — ____________
Signed: ____ / ____ / ______
Quality Lead
Production Supervisor — ____________
Signed: ____ / ____ / ______
Operations Director
Production Manager — ____________
Signed: ____ / ____ / ______

9. SLA & escalation

Stage Target Owner Escalation
Hourly capture Within 15 min of hour-end Operator Supervisor on hour
End-of-shift submit Within 30 min of clock-out Operator Supervisor
Supervisor confirm Within 60 min of submit Supervisor Production Manager
Reject → resubmit Same shift Operator Supervisor + Quality
QC follow-on Within 2h of CONFIRMED QC Inspector Quality Manager

10. Glossary