Manufacturing Operations
The shop-floor half of the manufacturing module: an operator claims a process instance from a job order, logs each shift against a machine and picks the bins the material came from and went into; a supervisor sets the queue’s priority, approves the work logs and presses FINAL, the only action in the module that moves stock. Read the costing note before trusting a finished-goods value: finalisation carries no cost from inputs to output — the finished item keeps the unit cost it already had at that location, zero if it has never been costed there — nothing is journalled, and there is no void.
Your job, and the screen for it
| The job | Screen or tab | Read |
|---|---|---|
| Log a shift against a process instance — change the Person In Charge when keying for someone else, and write the end diameter reading in Remarks | Operator PMC, open the instance, Worklogs tab › + | Work log (create and edit) |
| Record the bins the material came from and went into — after ADD, compare the Bin No Listing’s quantities with what you asked for before SAVE | Input Items › Bin No Listing for Item … › Select Bin No. › ADD, then SAVE; Output Items › Output Item Edit › Bin Number tab | Select Bin No. (input items); Output Item Edit |
| Set the queue’s priority and approve work logs — when approving, compare the two quantities, not the discrepancy | Supervisor PI (Priority cell, then Update Priority on ticked rows); Worklogs tab › APPROVE / REJECT / REWORK | Work-log approval; Troubleshooting |
| Finalise an instance to move stock — it carries no cost from inputs to output and has no void | Supervisor PI, open the instance, FINAL | What FINAL does |
| Complete the job order — first move every finalised instance to COMPLETED here, then check its Process Instance tab | Supervisor’s Process Status dropdown here; then the Production Planning and Monitoring applet | Job order completion |
| Set up machines and templates, generate the instances, and give supervisors their view | Process Maintenance and Production Planning and Monitoring applets; Client-Side Permission for the supervisor view | Before you can use it |
Overview
Manufacturing Operations is the shop-floor applet of the manufacturing module. A job order raised in the Production Planning and Monitoring Applet is broken into process instances — one per step of the job template, each on a machine. This applet is where those instances are worked: an operator opens one, records work logs (shift, machine, start and end time, quantity produced), picks the bins the input material came from and declares the bins the output went into; a supervisor sets the priority of the queue, approves or rejects each work log, and presses FINAL, which is the only action in the module that moves stock.
It has two menus — Operator PMC and Supervisor PI — and nothing else. The UI does not expand either abbreviation; the operator listing is titled “Operator PMC Listing (Process Instances)” and the supervisor one “Supervisor Process Instances Listing”, so PI is process instance and PMC is the operator’s view of the same rows. “MRP” in the applet’s address is only the platform’s prefix for its manufacturing features; there is no material-requirements-planning engine behind it.
Where it fits
| Direction | Document or applet | Why |
|---|---|---|
| Upstream | Process Maintenance | Machines, process types, process templates and job templates. A process instance is a process template applied to a job order; the machine dropdown on the instance is the machine list from here. |
| Upstream | Production Planning and Monitoring Applet | Creates the job order and generates its process instances. Nothing appears in this applet until that has happened. |
| Upstream | Stock Balance and the bin tables | Input bins are chosen from bin availability; selecting one places a bin lock against the process-instance line. |
| Downstream | Stock (current stock balance) | FINAL on an instance queues the finalisation run, which writes one inventory transaction per input (out) and output (in) line, each costed at its own item’s unit cost (see Lifecycle). |
| Downstream | Job order bin links | When the finalised instance is the last process of the job, the applet posts a link from the job order to every output bin, which is what the Packing Order (Internal) applet later packs from. |
| Downstream | Production Planning and Monitoring Applet | Where the job order is completed. The server’s rule that every instance here must be COMPLETED first is not applied by that applet’s form (see Lifecycle), so check the instances before completing the job order. |
Screens and menus
The applet’s sidebar has two entries; the settings and personalisation screens are reached from the applet menu.
| Menu | Who | What is on it |
|---|---|---|
| Operator PMC | anyone who can open the applet | Listing of process instances — Job Order No., Process Template, Process Type, Sequence, Priority, Status, Machine Code, FG Item Name / Code, Qty, UOM, Created / Updated By and Date. Advanced search by machine, priority and process status. Opening a row gives the five-tab edit screen. |
| Supervisor PI | requires the SHOW_SUPERVISOR_VIEW client-side permission | The same listing with two editable cells — Priority and Machine Code (double-click to reassign the machine; added 2026-05 for a customer request) — and an Update Priority button that saves the ticked rows. Opening a row gives the same five tabs plus FINAL and the work-log approval actions. |
| Settings | applet admin | Application Settings (field toggles — inert, see Configuration), Default Selection, Custom Status, Webhook, Feature Visibility, Client-Side Permission, Permission Wizard / Set / User / Role, Role–Pricing-Scheme link. |
| Personalisation | each user | Personal default selection; sidebar. |
The five-tab edit screen (operator and supervisor share it; the order of the tabs is a setting):
- Main Details — the instance header: job order number and date, process type, machine, FG item, quantity and UOM, instance type (PRODUCTION or PACKING), priority, process status.
- Input Items — one row per planned input line (item, bin numbers chosen, UOM, planned and actual quantity). Opening a row leads to Bin No Listing for Item … and from there to Select Bin No., a grid of available bins with a Desired Quantity to spread across them.
- Output Items — one row per planned output line with planned, actual and Worklog Total quantity (the sum of approved work logs). Opening a row leads to Output Item Edit with a Main Details tab (actual quantity) and a Bin Number tab where output bins are created by code, container measure and quantity, singly, in bulk, or by repetition.
- Initial Check — the files attached to the process template (name, size, uploaded by / date), for the operator to read before starting.
- Worklogs — the list of work logs on this instance (shift type and date, start and end time, approval, time consumed, quantity produced, discrepancy, rate) with + to create one. On the supervisor screen this tab carries Supervisor Actions for Bulk Selection — APPROVE, REJECT, REWORK with a remarks box — and each work log opens with a Cutting dialog.
This page is illustrated in words only: every capture in the repository was taken on a customer tenant and shows its tenant code, staff names and product catalogue, so they were withdrawn (2026-09-15).
Configuration
Before you can use it
| Prerequisite | Where | Why |
|---|---|---|
| Machines, process types, process templates, job templates | Process Maintenance | A process instance carries its process template, process type and machine; the machine dropdown on Main Details reads the machine list. |
| A job order with generated process instances | Production Planning and Monitoring Applet | The listings show process instances; an empty listing almost always means no instances have been generated. |
| Items and bins at the branch / location | Inventory Item Maintenance, Stock Balance | Bin selection reads bin availability; the inventory transaction written at FINAL is keyed on item, branch and location. |
| Default branch, location and company | this applet, Default Selection | Copied on to each inventory line and used as the search default. |
SHOW_SUPERVISOR_VIEW client-side permission | this applet, Client-Side Permission | Without it the Supervisor PI route redirects to 404. |
Applet settings
Settings are saved as a whole; anyone with access to the applet’s settings menu can change them (the applet’s two client-side permission codes, below, gate screens, not settings). Each setting below has a working control and is read by a screen.
| Setting | Screen | What it controls | Default | Effect when changed |
|---|---|---|---|---|
DEFAULT_BRANCH | Default Selection | Branch preselected in searches and written to lines | none | Picking a branch also fills DEFAULT_COMPANY from the branch and DEFAULT_LOCATION from the branch’s main location |
DEFAULT_LOCATION | Default Selection | Location preselected | none (auto-filled from branch) | Bin availability queries and inventory lines use it |
DEFAULT_COMPANY | Default Selection | Company written to lines | none (auto-filled from branch) | — |
MANUFACTURING_OPERATIONS_DETAILS_TAB_ORDER | Default Selection › Details Tab Ordering (drag list) | Order of the five tabs on the edit screen | Main Details, Input Items, Output Items, Initial Check, Worklogs | Both operator and supervisor edit screens reorder; tabs added later in code are appended |
ENABLE_CUSTOM_STATUS_1…5 | Custom Status | Turns a custom status slot on | off | Enabling a slot unlocks its header and line toggles |
ENABLE_CUSTOM_STATUS_HDR_1…5, ENABLE_CUSTOM_STATUS_LINE_1…5 | Custom Status | Whether the slot applies to the header, the line, or both | off | Disabled and reset to off when the slot is off |
LIST_CUSTOM_STATUS_HDR_n, LIST_CUSTOM_STATUS_LINE_n (name, description, default per row) | Custom Status › the grid under each slot | The values a custom status can take | empty | Read by the shared custom-status controls on the header and line |
Settings that are declared but have no working control. The Application Settings screen renders eight slide toggles — Unit Discount, SST/VAT/GST, WHT, Internal Purchase GRN, Segment, G/L Dimension, Profit Center, Project — and a SAVE button, but the toggles are bound to nothing and the button does nothing; the matching INCLUDE_* / ENABLE_* keys are never read by any screen. The same is true of the HIDE_* price and quantity keys and PRINTABLE: no control, no consumer. They are left over from a purchase-document template and are not documented as settings here.
Document behaviour settings
There are none: the process instance is not a generic document, has no status-flow options, no printable, no approval toggle and no e-Invoice flag. Work-log approval is always on and cannot be switched off (see Lifecycle).
Settings in other applets that control this applet
| Setting | Where it is set | Effect here |
|---|---|---|
| Machine Spec files on the process template | Process Maintenance › Process Template › Machine Spec | The Initial Check tab lists these files and no others — not the process type’s attachments, not the template’s QC attachments. It reads them from the template each time the tab opens; the instance keeps no copy, so a file replaced on the template after the job was generated is the one the operator sees today. Uploaded By and Uploaded Date are whoever last changed the file, and when. Nothing records that an operator opened a file. Where a setting must be confirmed before the first shift, the supervisor asks the operator to note the file and its revision in the first work log’s Remarks, and checks that note when approving the log. |
| Planned input and output lines and quantities | Production Planning and Monitoring › job order › Generate Process Instance | Become the Input Items and Output Items rows; Total Quantity Required on a work log defaults to the output line’s planned quantity |
| Branch main location | Organisation Applet | Auto-fills DEFAULT_LOCATION when a default branch is picked |
Feature visibility / permissions
The applet checks two client-side permission codes:
| Code | Gates | Note |
|---|---|---|
SHOW_OPERATOR_VIEW | Operator PMC | Declared but never enforced — every user who can open the applet reaches the operator screens. |
SHOW_SUPERVISOR_VIEW | Supervisor PI | Enforced; a user without it is redirected to 404. Assigned on the applet’s Client-Side Permission screen, typically to a supervisor role. |
Those are the same two codes the Client-Side Permission screen can grant. Server-side, every write checks an API_TNT_DM_MRP_* permission — for example the status update checks API_TNT_DM_MRP_PROCESS_INSTANCE_HDR_UPDATE and returns not authorised without it.
Fields
Main Details (process instance header)
| Field | Meaning | Editable by | Notes |
|---|---|---|---|
| Job Order Number, Job Order Date | The parent job order | nobody | Read-only on both screens |
| Process Type | The process type code on the process template | nobody | Read-only. The same code decides whether the work log shows the extrusion fields (below). |
| FG Item Code / Name, Qty, UOM | The job order’s finished item, and the whole job’s quantity in its UOM | nobody | Read-only, and not about this step. On an intermediate step (drawing the copper for a cable, say) these name the finished cable and the job’s total, not what this step makes. This step’s own target is the planned quantity on Output Items, which is also where a work log’s Total Quantity Required starts. |
| Instance Type | PRODUCTION or PACKING | nobody | Read-only; set when the instance is generated |
| Machine Code | From the Process Maintenance machine list | operator (until FINAL) and supervisor | Supervisor can also change it from the listing cell |
| Priority | Integer sort key for the operator queue | supervisor only | Read-only for the operator; cleared to null at FINAL |
| Process Status | The instance’s status | operator: only IN_PROGRESS and PENDING_APPROVAL are selectable; supervisor: any value | Operator options PLANNED, ON_HOLD, COMPLETED, CANCELLED, READY, FINAL are shown disabled. The operator’s screens lock once the instance is POSTED; the supervisor’s status dropdown stays open, which is how a finalised instance is moved on to COMPLETED |
Work log (create and edit)
| Field | Meaning | Required | Notes / validation |
|---|---|---|---|
| Machine Code | Machine the shift ran on | yes | Backend rejects a missing or unknown machine |
| Job Order Number | Parent job order | yes | Prefilled |
| Shift Date, Shift Type | Date; DAY or NIGHT | yes | Shift Type defaults to DAY |
| Person In Charge (PIC) | The person the shift is recorded against | yes | The list is the users who have this applet, searchable by name. On a new work log it starts on you, if you are in that list. A supervisor or team lead keying a shift on an operator’s behalf has to change it, or the shift is credited to whoever typed it. The server does not check it. |
| Start Time, End Time | Timestamps | no | Start and End buttons stamp the current time; Time Consumed is recomputed as the difference in minutes |
| Time Consumed (minutes) | Minutes worked | yes | Must be ≥ 0 (“Time Consumed cannot be negative”) |
| Item Code / Name, UOM | The output item this shift produced | yes | Starts on the instance’s first output line; the arrow opens Select Output Item, which lists this instance’s output lines only. UOM is the output line’s: read-only on the operator’s form, while the supervisor’s edit form lets it be typed over for as long as the log is editable, and saves what is typed. Picking a different item does not reset Total Quantity Required, which keeps the first line’s planned quantity. That is read from the code, not tried: on an instance with two outputs, switch the item on a new log and look at the target before CREATE, and retype it if it did not change. |
| Heater Temperature, Heater Temperature UOM | Extrusion parameters | no | UOM defaults to Celsius; rendered only when the process type is INSULATION, BEDDING or SHEATHING |
| In Die (mm), Out Die (mm) | Extrusion die sizes | no | Shown, like the heater fields, only when the template’s process type code is exactly INSULATION, BEDDING or SHEATHING. A type coded any other way (another spelling, lower case) never shows the four extrusion fields. Stored with the log; the server checks none of them. |
| OD (mm) Start / Mid / End | Outside diameter samples | Mid, on the operator’s form only | Shown for every process type, and the operator cannot CREATE a log without Mid, even on a step with no diameter to measure; the supervisor decides what is typed there (0, or the nominal size) and says so once, because nothing refuses a made-up figure. On the supervisor’s edit form Mid is not required. As read from the code, End is not saved: both screens save the Start value into it, so the Worklogs grid’s OD End repeats OD Start. Until that is fixed, write the end reading in Remarks. To confirm it on your tenant, save one log with different Start and End and reopen it. |
| Total Quantity Required | Target for the shift | yes | Defaults to the output line’s planned quantity |
| Quantity Produced | Output of the shift | yes | Defaults to 0 |
| Quantity Produced Discrepancy | Target minus output | computed | Worked out on the operator’s form as Total Quantity Required − Quantity Produced: positive is a shortfall, negative is over-production. It is worked out again only when one of the two changes, so it reads 0 until a quantity is typed. The server stores what the form sends and does not recompute it, and the supervisor’s edit form does not recompute it either: a Quantity Produced corrected by the supervisor leaves the old discrepancy on the log (read from the code, not tried; change the quantity on one log, save and reopen). So when approving, compare the two quantities, not the discrepancy. The grid’s Length/Min rate is filled only when a supervisor saves the log (quantity produced ÷ minutes, two decimals); a log only the operator saved has none. |
| Remarks | The operator’s note on the shift | no | The place for a stoppage, a changeover or a scrap reason, which the discrepancy cannot explain on its own. The operator can edit a log only while it is PENDING; the supervisor can edit it while it is PENDING or REWORK. A log sent back for REWORK is therefore corrected on the supervisor screen, or the operator records the shift again as a new log. Once APPROVED or REJECTED it is frozen on both screens. |
| Approval Status, Supervisor Remarks | Set by the supervisor | — | Read-only on the operator form; set by the supervisor’s actions |
| Color, Size, Type | — | — | Not on either form: the boxes are switched off in the applet’s code, so nothing can be typed in them. A value saved before they were withdrawn is loaded with the log and saved back unchanged. |
Select Bin No. (input items)
Each row is one bin line, identified by Bin Hdr Code and Bin Line Code, with its container size (Ctn Measure, Ctn UOM); the grid is sorted by bin line code.
| Column / field | Meaning |
|---|---|
| Desired Quantity | Planned minus actual quantity of the input line, each rounded to a whole number, prefilled; the most you may draw. ADD refuses ticked rows whose Desired Base Qty adds up to more (“Total Remainder Qty should not be positive”) and accepts less, so a part draw is allowed. |
| Base Qty | What can still be drawn from the bin line: its quantity less anything reserved and less every active bin lock, including locks this job’s own lines already hold. A bin with nothing left, or one already packed on a packing order, is not listed. Only bins of this item at the input line’s location appear. |
| Ctn Qty | The bin line’s whole container count. Locks and reservations do not reduce it, so it can show three drums when one drum’s worth is free: go by Base Qty. |
| Desired Base Qty | The only column you type in, whole numbers only. Each ticked row must be above 0 and not above Base Qty (a red border shows when it is above). Desired Ctn Qty is this ÷ Ctn Measure, rounded up. Remainder Qty is Base Qty − this: what stays in the bin, not what is left of your Desired Quantity — that is Total Remainder Qty under the grid (total selected − desired). |
| ADD | Adds the ticked bins to the line’s bin list; SAVE on the Bin No Listing writes the line and creates or updates a bin lock per bin. The line’s actual quantity becomes the total of its bins. A part-drawn bin is recorded as whole containers plus one cut container of Ctn Measure − Remainder Qty. That equals what you asked for only when the bin line holds exactly one container and nothing else locks or reserves part of it. On any other bin the quantity recorded, and so what FINAL takes out of stock, differs from your Desired Base Qty. That is read from the code, not tried: after ADD, compare the Bin No Listing’s quantities with what you asked for before SAVE. If they differ, remove the bin and tell the supervisor, who decides how the draw is recorded before anyone presses FINAL. |
Output Item Edit
| Field | Meaning |
|---|---|
| Planned Qty, Worklog Total Qty, Actual Qty | Planned from the template; work-log total is the sum of Quantity Produced over work logs that are not REJECTED or REWORK; actual is what the operator or supervisor declares |
| Bin Number tab — Bin Code, Container Measure, Container Quantity, Approx OD (mm), UOM, Quantity; ADD / BULK ADD / Repeat / REMOVE | Builds the bin list on the output line; the actual quantity is recomputed from the bins added |
Supervisor: Cutting dialog
Per work log: Job Order No., Item Code, Produced Qty (from the work log), Total Allocated Qty, Total Balance Qty (produced − allocated), Total Disposed Qty, and a bin grid to allocate the produced length across bins; saved on the work log.
Lifecycle and effects
Process instance status
The full list of process statuses is REQUESTED, REJECTED, PLANNED, READY, IN_PROGRESS, COMPLETED, ON_HOLD, CANCELLED, EXPORTED, FINAL, PENDING_APPROVAL. The applet uses eight of them:
stateDiagram-v2
PLANNED --> IN_PROGRESS : operator claims
IN_PROGRESS --> PENDING_APPROVAL : operator submits
PENDING_APPROVAL --> READY : supervisor
PENDING_APPROVAL --> ON_HOLD : supervisor
ON_HOLD --> IN_PROGRESS : supervisor
READY --> FINAL : supervisor presses FINAL
FINAL --> COMPLETED : supervisor (job order completion expects it)
PLANNED --> CANCELLED : supervisor
The arrows are what the two dropdowns allow, not a backend state machine: the operator can pick only IN_PROGRESS and PENDING_APPROVAL, the supervisor can pick anything, and the server does one thing with the status — if it is FINAL it queues the finalisation run. No other transition is checked server-side.
What FINAL does
- The FINAL button is enabled only when every input line and every output line has at least one bin and an actual quantity, and the instance is not already POSTED. This is a screen-side gate; the server itself does not check it.
- The applet re-reads the instance for its current revision, sets the status to FINAL and clears the priority, and saves.
- The server queues the finalisation run, which then: writes stock (below); marks the instance POSTED; if every instance of the same process group on the job is FINAL, sets the next group’s instances to READY; and releases the bin locks the input lines held.
- When the finalised instance is the last process of the job, the applet reads the output bins and records one job-order bin link per output bin line (toast “Job Order Bin Links Created Successfully”).
Posting proof block.
| Item | Value |
|---|---|
| Server document type | none — a process instance is not a financial document. The manufacturing document types that do exist, Job Order (Internal) and Packing Order (Internal), neither move stock nor post. |
| Stock processor | The finalisation run subtracts each INPUT line from inventory and adds each OUTPUT line, one inventory transaction per line, and the current stock balance is updated from those |
| Quantity signum | INPUT −1 (out of stock), OUTPUT +1 (into stock); quantity = the line’s actual quantity |
| Amount signum / amount | positive, an amount of 0 on every line — ignored by costing, because the line carries no amount-bearing document type |
| GL precedence / journal | none — nothing is journalled for manufacturing |
| What VOID reverses | there is no void; the instance’s status can be changed again but the finalisation is not re-run and the stock lines are not reversed |
Work-log approval
Work-log approval is the applet’s own mechanism, not the generic document approval engine (which covers only purchase orders, purchase requests and stock requisitions). A work log’s approval status is PENDING, APPROVED, REJECTED or REWORK. The supervisor’s bulk actions set the status and keep a historical copy of the work log. The applet enables APPROVE only when every selected log is PENDING, REJECT when every one is PENDING or APPROVED, and REWORK when every one is REJECTED. Approval has no effect on stock; only the output line’s Worklog Total excludes REJECTED and REWORK logs.
Bin locks
Adding an input bin places a bin lock (the bin, the locked quantity and the process-instance line it is held for); changing the selection updates or releases it. The locks are released by the finalisation run. An earlier automatic stock reservation on claim was withdrawn; nothing in this applet writes a stock reservation.
Job order completion
The server has a rule that a job order may not move to COMPLETED while any of its process instances is not COMPLETED (“SORRY! NOT ALL PROCESSES ARE COMPLETE, THEREFORE THIS JOB IS NOT READY TO BE COMPLETED…”), but it sits on a separate status route that no screen calls. The job order’s own form in Production Planning and Monitoring saves through the ordinary update, which does not check, so a job order can be set to COMPLETED there with instances still open. Treat the rule as yours to keep: before you complete a job order, open its Process Instance tab and confirm that every instance with Active? ticked shows COMPLETED in the Status column (the server’s rule counts active instances only). Finalising is not enough on its own: after FINAL, the supervisor still has to move each instance to COMPLETED.
Related applets
- Production Planning and Monitoring Applet — creates the job orders and process instances this applet works, and closes the job afterwards.
- Process Maintenance — the machines, process types and templates behind every instance.
- Packing Order (Internal) — packs the output bins this applet links to the job order.
- Stock Balance — where the zero-value stock lines written at FINAL land.
- Stock Reservation Applet — the reservation mechanism this applet does not use; reserve there if you need stock held before the job.
- Stock Conversion — the other route from components to a finished item. It carries no cost from components to kit either, and on 2026-10-01 its posting chain is not connected.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Supervisor PI is missing from the sidebar, or opening its URL lands on 404 | The user lacks the SHOW_SUPERVISOR_VIEW client-side permission | Assign the permission on Client-Side Permission; sign out and in so the permission store reloads |
| Operator PMC is empty | No process instances generated for the job order, or the advanced search still filters by a machine or status | Generate process instances in Production Planning and Monitoring; clear the filters (they are remembered per user) |
| FINAL is greyed out | An input or output line has no bin or no actual quantity, or the instance is already POSTED | Fill bins and actual quantities on every line of both tabs |
| “Time Consumed cannot be negative” / CREATE disabled on a work log | End time before start time, or required fields (machine, shift date, PIC, item, total required, OD mid, quantity produced) empty | Use the Start / End buttons or correct the times; fill the required fields |
| Work-log create rejected by the server with a machine error | Machine missing or deleted | Set the machine on the instance first (Main Details or the supervisor listing cell) |
| APPROVE / REJECT / REWORK disabled with rows ticked | Mixed statuses in the selection | Select logs of one status: PENDING for approve, PENDING or APPROVED for reject, REJECTED for rework |
| A job order reads COMPLETED while instances here are still FINAL or READY | The job order form saves through an update route that does not check the instances (see Lifecycle) | Set each remaining instance to COMPLETED on the supervisor screen, so the record matches the floor |
| Finished item shows a moving-average cost of 0 | It had never been costed at that location. FINAL carries no cost from the inputs: the inputs leave at their running average and the output comes in at the unit cost it already has there (see the costing note under Lifecycle) | Set the finished item’s cost with Reset MA in Stock Adjustment before it is sold |
| Priority typed on the listing but the operator queue did not change | Update Priority was not pressed, or the row was not ticked | Tick the rows and press Update Priority |