{{ envBadge }}
The shop could not be opened
{{ loadErrMsg }}
Nothing has been changed or saved. Reload to try again; if it keeps happening, send the red line from the browser console to support, or restore a backup from Admin → Backup & restore once the shop opens.
Click the feature you're reporting — Esc cancels
Read-only — another tab is writing
⌘K
Where everyone is
{{ presStaleMsg }}
{{ presEmptyMsg }}
{{ pg.label }} {{ pg.idle }} {{ pv.init }}
{{ pf.init }} {{ pf.name }} · {{ pf.wc }} {{ pf.what }} {{ pf.state }} {{ pf.state }}
Role: {{ roleLabel }}
{{ omTitle }}
{{ storeWarnMsg }}
{{ loadingMsg }}
It is taking longer than usual. Nothing has been saved or changed.

CAM · Fiber laser

Mitsubishi GX-F80 · parts come from items with a laser op
{{ camNote }}
Loading cut files…

Stores

{{ soHead }}
{{ t.k }}
{{ t.v }}{{ t.sub }}
Waiting · {{ soWaitN }}
STOPPED {{ r.item }} {{ r.qty }} via Arthur bin top-up {{ r.expect }} {{ r.age }}
{{ r.who }}· {{ r.pick }} {{ r.drop }} {{ r.no }}
In hand
{{ h.item }}{{ h.qty }}{{ h.runner }} has it · {{ h.since }}
{{ h.drop }}{{ h.no }}
{{ soEmptyTitle }} {{ soEmptySub }}
Where it is going
live
{{ zl.code }}
pick drop stopped
{{ soPlanNote }}
On shift
{{ sh.init }} {{ sh.name }}Stores Runner {{ sh.hand }} in hand
{{ soShiftNote }}
No deliveries yet — the log fills as the runner works.
SDItemQtyForRunnerLegsTotalState
{{ d.no }} {{ d.item }} {{ d.qty }} {{ d.who }} {{ d.runner }} {{ d.legTxt }} {{ d.tot }} {{ d.state }}
Median response, by department
{{ dt.name }} {{ dt.v }}
Request to delivered. This is the figure the operator's card quotes as "usually".
Stopped requests
{{ soStoppedMed }} minmedian · {{ soStoppedSub }}
An operator who has downed tools waits this long. It is the number worth driving down — the rest is convenience.
{{ cs.k }}
{{ cs.v }}{{ cs.sub }}
No count tasks yet — the engine drops them into the runner's quiet time.
Count tasks
CCBinItemsStateVariance
{{ ct.no }} {{ ct.bin }} {{ ct.items }} {{ ct.state }} {{ ct.v }}
Consignment
No vendor owns stock on your shelf yet. Add an agreement — one item and one sheet size at a time — and the vendor appears here with its folders.
Everything under a vendor belongs to that vendor: the stock they own, the counts we take, the statements we send, and the paper between us. Cadences are in working days.
New agreement — one item, one size
{{ csVendor }}{{ csFolderName }}
{{ csVendor }} {{ csVContact }} {{ csVTerms }}
{{ t.k }}{{ t.v }}{{ t.sub }}
Needs attention
Recent Nothing yet — usage, counts, orders and statements land here.
{{ r.when }}{{ r.t }}{{ r.by }}
{{ csVendor }}'s stock on our shelves — one line per item and sheet size. We use it freely; the vendor bills what the statement shows used. A size under its agreed minimum gets a $0 restock order.
Item · sizeOn shelfPlacedUsed · unbilledRestock <Last · next count
{{ ag.size }}{{ ag.id }} {{ ag.onHand }}{{ ag.placed }}{{ ag.used }}{{ ag.min }}{{ ag.last }} · {{ ag.next }}
Every {{ csCadence }} working days by agreement. Count now pins the bins on the runner's board; Count here lets the office post the same blind count in place. Every difference on vendor stock is held until someone approves it.
On the runner's board
{{ ot.id }}{{ ot.line }}{{ ot.state }}
Count · {{ csVendor }}blind — the book figure shows once you have typed yours
{{ cr.number }} {{ cr.size }}{{ cr.where }} {{ cr.delta }} {{ cr.unit }}
Held differences
{{ cv.id }}{{ cv.line }}{{ cv.delta }}{{ cv.when }}
Count history No count on record for this vendor's stock.
{{ h.when }}{{ h.t }}{{ h.by }}
Current period · draft{{ csStPeriod }}
ItemOpeningUsedCountedClosingOwed
{{ sr.number }} {{ sr.size }}{{ sr.byJob }}{{ sr.opening }}{{ sr.used }}{{ sr.counted }}{{ sr.closing }}{{ sr.owed }}
Owed to {{ csVendor }}: {{ csStOwed }}
Issued No statement issued yet.
{{ h.id }}{{ h.line }}{{ h.owed }}
Restock orders to {{ csVendor }} — always $0, always marked CONSIGNED. Receiving one books the stock and grows the agreement; nothing is payable. No restock orders yet. The Stock folder raises one when a size falls under its agreed minimum.
{{ o.st }}{{ o.line }}{{ o.when }}$0.00
The paper between us: the signed agreement, price schedules, certs that came with the stock, correspondence. Files stay with the vendor.
{{ d.sub }}
A read-only page for {{ csVendor }}: their stock on our shelf, what we have used since the last statement, our counts, and every statement with its PDF. Live, keyed by a link only they hold.
Their link {{ csPortalUrl }}

Prototypes

{{ ppDigest }}
Nothing is being prototyped.
Open a STEP in the CAD engine and press Start prototype — every step arrives here with its gate closed.
{{ p.number }} {{ p.job }} {{ p.name }} · {{ p.cust }} · {{ p.qty }} {{ p.age }} {{ p.due }} {{ pt.number }} Spent {{ p.spent }} {{ p.ahead }}
{{ p.need }}
{{ p.soHead }} {{ p.soStateTxt }} {{ p.soHeadSub }}
Against the number they agreed {{ p.soCapTxt }}
at what they pay charging {{ p.soLegKept }} ({{ p.soLegKeptSub }}) undecided {{ p.soLegPend }} ({{ p.soLegPendSub }}) absorbed, not charged ({{ p.soLegDropSub }}) cap {{ p.soCap }}
What the customer sees in their portal {{ p.shareNote }}
Never shared, whatever you switch on: what anything cost you, work-centre rates, your margin, anything you absorbed, who worked on it.
{{ p.soApprTxt }}
Nothing has accrued yet. A line lands the moment a step is finished or its material is drawn.
What has happened so far {{ p.soNote }}
{{ r.label }} {{ r.sub }} {{ r.amt }}
{{ r.what }}new {{ r.detail }} {{ r.why }} {{ r.amt }}
Cost we are charging{{ p.soKeptCost }} Margin% They pay{{ p.soPrice }} We absorbed, at cost{{ p.soDropCost }}
{{ p.soGateTxt }}
Nothing matches that filter.
Clear it to see all {{ ppTotal }} prototypes.

Bend deduction

Coupons in, bend table out — millimetres throughout. The table is the mean of its samples, never typed.
No flat materials in the library yet. Add a sheet under Items first — a coupon is measured against a specific flat.
1Material, coupon & tooling
{{ bnTLinkTxt }} thickness measured mm
Coupon shape
{{ bnShapeNote }}
Tool set — from the library
Method
{{ bnPickNote }}
{{ bnToolLine }}
2After bending, measured
{{ bnWarnTxt }}
3What it works out to
{{ bnNoCalcTxt }}
Bend deduction {{ bnBD }} mm
{{ bnWorking }}
{{ o.k }}
{{ o.v }}{{ o.u }}
{{ bnStoredTxt }}
Material
Angle
{{ bnGradeName }} {{ bnGradeMeta }} tight spread re-measure
No samples yet at this angle on this material. Measure a coupon and it starts the first row — or tick “show every thickness and tool set” to see the empty grid and start from a cell.
Thickness
{{ ct.name }} {{ ct.spec }}
{{ cr.sold }}{{ cr.tmm }} {{ cr.no }}
{{ bnChHiddenTxt }} Amber cells are out of range for that die — the guide is V ≥ 6 × T. Click one anyway if the shop really bends it there.
{{ bnOcTitle }}{{ bnOcSub }}
{{ bnOcUndoTxt }}
Bend deduction{{ bnOcBD }} mm{{ bnOcPinNote }} Bend allowance{{ bnOcBA }} mm Inside radius{{ bnOcIR }} mm K{{ bnOcK }}
{{ bnOcSpread }}
{{ bnOcHistLine }}
{{ h.at }} {{ h.by }} {{ h.lines }} — {{ h.why }} {{ h.mean }} mm
CouponByBlankH1H2V / widthAngleBD
{{ cp.when }} {{ cp.by }} {{ cp.shape }} {{ cp.blank }} {{ cp.H1 }} {{ cp.H2 }} {{ cp.third }} {{ cp.angM }} {{ cp.bd }} {{ cp.dev }} excluded
Each coupon's deduction is recomputed from its own measurements; the cell is their mean. Edit opens the deduction and every coupon in one place — nothing changes until you save, and every save is kept in the history above. An excluded coupon stays on record greyed out — nothing measured is thrown away. Amber deviation: more than 0.15 mm from the mean.
Edit deduction {{ bnEdTitle }} — {{ bnEdSub }}
The deduction comes from {{ bnEdSrcNote }}
{{ fg.k }} {{ fg.v }} {{ fg.prop }} {{ fg.u }}
{{ bnEdSpread }}{{ bnEdMeasuredNote }}
Samples {{ bnEdSamplesNote }}
No coupons in this cell — the pinned figure stands alone.
{{ cp.when }} {{ cp.by }} {{ cp.shape }} excluded {{ cp.bd }} {{ cp.dev }}
deleted at Save
Where was this coupon really bent? Change the material, the tool set, or both — it moves to that cell at Save.
{{ cp.moveNote }}
Each coupon’s deduction is recomputed from its own measurements; the mean is theirs. A changed field keeps its old value underneath until Save. Excluded coupons stay on record greyed out. Amber deviation: more than 0.15 mm from the mean.
{{ bnEdSummary }}
{{ bnEdConfirmTxt }}
Dot: green spread under 0.10 mm, amber to 0.25, red over. Amber thickness means the flat is still on its nominal — mic it and link it before trusting the row. Three samples of one setup is the minimum worth trusting.

Each tool is a real piece of steel with a profile, a length made of segments and a load rating. Drop its DXF or STEP and the profile becomes the tool's face — shown wherever the tool is named — rather than a number typed from a catalogue.

Import a tooling catalog
Reading the supplier catalogs built into the site…
Drop a supplier’s XML here — punches, dies, punch holders, die holders The format a bend simulator loads (FabSupply, Wilson Tool, …). Only European-style records are offered; American and other styles are counted and left out. Nothing is written until you press Import.
{{ cf.name }} built in {{ cf.note }}
{{ cr.no }}in library {{ cr.type }} {{ cr.spec }}
{{ bnCiSummary }}
Tool categories
{{ ct.name }}{{ ct.note }} {{ ct.role }} {{ ct.n }}
New category
Where it sits in a bend
{{ bnCatRoleNote }} Name the category whatever the shop calls it. The three roles are fixed, because the maths only knows three places a piece of steel can be: on the ram, in the bed, or holding something. The role decides which measurements a tool carries and whether it can be the punch or the die of a set.
The library is empty. Add the punches and dies you bend with — a tool set is then two picks from here, and every deduction is keyed to real pieces of steel.
{{ lc.no }} {{ lc.type }} {{ lc.spec }}
{{ lc.mount }} {{ lc.segTxt }} {{ lc.src }}
{{ bnLdNo }}{{ bnLdRole }}{{ bnLdSub }}
Profile — from {{ bnLdSrc }}
{{ dm.t }}
section, mm{{ bnLdScale }}
{{ bnLdFileNote }}
{{ bnLdDerived }}
Measurements
{{ sg.label }}
{{ bnLdSegTotal }} — the Station tab stacks from these, so a bend longer than the shelf is caught at the desk.
Wear & service
{{ bnLdWearNote }}
In a bend
{{ bnLdAccNote }}
Used by
{{ bnLdSetsNone }}
{{ us.name }}{{ us.sub }} {{ us.rows }}

A bend needs tooling as long as the flange, and the load has to be inside what the tool and the press are rated for. Both come from the library: the segments you own, and the ratings on each tool.

The stack
{{ bar.t }} {{ bnStNeedTxt }}
{{ bnStFitTxt }}
{{ bnStSegNote }}
Load
{{ ld.k }}
{{ ld.v }}{{ ld.u }}
{{ ck.t }}
Shut height
ram bed {{ bnStStackTxt }}

A tool set is a punch and a die from the library, on a named machine. In an air bend the die decides the inside radius — about 0.16 × V — so swapping the V is a different row in the bend table even with the same punch.

Tool set{{ bnTeIR }}
Punch — from the library
{{ bnTePLine }}
Die — from the library
{{ bnTeDLine }}
No tool sets yet. Add the punch and die you bend coupons with — every deduction is keyed to one.
{{ t.name }}{{ t.method }}
{{ t.machine }}
Punch {{ t.punch }}
Die {{ t.die }}
{{ t.ir }}·{{ t.n }}

A sheet sold as 1/8″ measures 3.00 to 3.17 mm, and every bend on it is wrong by the difference if you trust the label. Each flat carries the thickness a coupon actually measured; every deduction and every flat pattern reads that figure when it exists.

FlatNameNominalMeasuredΔCoupons
{{ lk.num }}{{ lk.name }} {{ lk.nom }}{{ lk.meas }}{{ lk.delta }}{{ lk.n }} {{ lk.state }}

CAD Engine

{{ qeFileLabel }}
{{ cqStripLabel }}
{{ t.group }}
{{ cw.init }} {{ cqConflictTxt }}
{{ cqCurName }} {{ cqCurSub }} {{ cqCurAge }} {{ cqCurState }}
No CAD yet{{ cqCurNoFileTxt }}
{{ cqCarriedNote }}
What is this cut from?
One pick per thickness — laser times, cost and sheet consumption follow it. Pick a stocked flat, or use Something else for anything the laser does not cut.
Hardware at this file {{ qeMatHwSub }}
{{ hw.name }} {{ hw.qty }} {{ hw.mergedNote }} {{ hw.tag }} {{ hw.linked }}
{{ hw.qCount }}
{{ go.number }} {{ go.name }} {{ go.sub }}
{{ hw.qNote }}
Create as new purchased item…
{{ hw.qNote }}
New purchased item — the CAD name is only a starting point
{{ mg.tLabel }} {{ mg.count }} {{ mg.hwHint }}
{{ mp.name }}
{{ mg.qCount }}
— leave chart-only (no consumption) —
{{ mo2.number }} {{ mo2.name }} {{ mo2.thick }} {{ mo2.sub }}
{{ mg.qNote }}
{{ mg.qNote }}
Operation {{ mg.altOpCount }}
{{ ao.name }} {{ ao.meta }}
{{ mg.altOpsNoneMsg }}
Material {{ mg.altItCount }}
{{ ai.number }} {{ ai.name }}
{{ mg.altItemsNoneMsg }}
{{ mg.altStripMsg }}

Open a STEP file: every part is unfolded and timed from the laser cut chart and press-brake feed, PEM / captive hardware is detected from the product tree, and one click reproduces the file's build tree as items with BOM + routing — then quotes it. Drop a DXF instead and it is read as a finished flat: contours measured and timed, material and thickness picked here.

{{ qeRevModeLabel }} {{ qeRevModeSub }}
{{ qeRevModeNote }}
{{ qeRevGoneMsg }}
{{ qeRevCount }}
Recently worked on
Nothing matches. Only builds this engine made can be revised — a hand-built item has no CAD tree to read against.
Loading {{ qeRevPickLabel }} — then drop the new file Only builds this engine made are listed.
Parts {{ qeCountLabel }}
{{ cqZoneTitle }} Several files, a folder, or a zip — each part becomes a tab you can work in any order. One file on its own opens straight into the engine.
{{ r.name }} {{ r.time }}
×{{ r.qty }}· {{ r.mat }} HW
Job totals
Laser{{ qeTotLaser }}{{ qeTotLaserSetup }}
Brake{{ qeTotBrake }}{{ qeTotBrakeSetup }}
Hardware{{ qeTotHw }}
All-in{{ qeTotAll }}
run = Σ qty × min/pc · setups from op templates
3D preview drag to orbit · click a part · drop a STEP or DXF anywhere here
{{ qeBusy }}
{{ qeError }}
This part
{{ cqCurState }}
{{ cf.title }}{{ cf.sub }}
Select a part to see its flat pattern and times.
Detected hardware detected in CAD as “{{ qeHwCadName }}” · reset part no. in the file: {{ qeSelPartNo }}
{{ qeSelHwFamily }} thread {{ qeSelHwThread }} ×{{ qeSelHwQty }} in file

Recognized from the STEP product tree. On Create items this becomes a BOM line at its parent's hardware-insertion op.

{{ qeHwMatchInfo }}
Link confirmed — this BOM line uses the inventory item above.
Wrong match? Nearest in inventory {{ qeHwLeft }}
{{ qeHwDupMsg }}
Part in STEP file as “{{ qeFabCadName }}” · use CAD name part no. in the file: {{ qeSelPartNo }}
{{ qeThick }}
Flat pattern{{ qeBlank }}
{{ qeDims }} {{ qeBendLabels }}
{{ qeBasisLine }}
{{ br.n }} {{ br.angle }} {{ br.bd }} {{ br.from }} {{ br.sub }}
{{ qeBasisFoot }}
Cut file is stale. {{ qeStaleTxt }}
{{ qeStaleHold }}
{{ qeDxfNote }}
{{ qeFlatBad }}
Hardware in this part {{ qeSelHwLeft }}
{{ h.name }} {{ h.meta }} {{ h.stTag }} {{ h.linkedTxt }}
{{ h.qNote }}
Time estimate
Laser cut{{ qeTLaserDet }}{{ qeTLaser }}
{{ qeContourDet }}
Press brake{{ qeTBrakeDet }}{{ qeTBrake }}
Hardware{{ qeTHwDet }}{{ qeTHw }}
Per piece{{ qeTTotal }}
{{ qeSetupNote }}
Generated build — review & edit
exactly what Create items + BOM will make · {{ qeDraftCount }} · nothing is saved until you create
Parts changed since this was generated

Items

{{ itemCount }} items · {{ attentionCount }} need attention
{{ searchCount }}
New item
{{ niFlatNote }}
ItemHomeCustomerSubAuditNameType On handAvailableCostPrice @1Status
{{ r.number }}ArchivedConsigned {{ r.custName }} {{ r.name }} {{ r.typeLabel }} {{ r.onHand }} {{ r.avail }} {{ r.cost }} {{ r.price }} {{ r.dotLabel }}
Used inside

Flag rules

The colored flag next to every item is decided by the first enabled rule (top to bottom) whose condition matches. Reorder, recolor, or disable rules — changes apply everywhere immediately.

Custom conditions build your own checks — they appear in every rule's condition dropdown
★ {{ cc.label }} {{ cc.summary }}
matches {{ cc.n }}
AND
matches {{ ccDraftN }} items now
matches {{ r.matchCount }} now

Operations & costing

CAD Engine — permanent op links

Every op the CAD Engine generates is hard-linked to the library tool named here, so its metrics drive the cost. Setting a link also adopts every existing unlinked op on that work centre — orphans stop existing.

{{ cl2.label }} {{ cl2.note }}

Work-center rates drive every operation cost in the system; the operation library is the set of reusable, pre-costed steps estimators pull into routings. Rate changes reprice items instantly and mark their pricing stale.

The active shift is the capacity the smart schedule dispatches into — its hours and workdays drive every projected finish, the Gantt, and the overtime advisor. Holidays stay on the shop calendar under Schedule.

{{ sh.summary }}
Work centers
Work centerStationsCrewMachine $/hrLabor $/hrBurdened $/hrUsed by
{{ w.burdened }} {{ w.usedBy }}
Shop labor rate Used for cost and margin metrics wherever a work center carries no labor rate of its own. $/hr
Operation library
Icon Operation Work center Equipment Setup & run · consumables · basis Cost @10
Consumables this operation draws {{ o.consCount }}
{{ cch.label }} {{ cch.name }} {{ cch.uom }}
None chosen yet — pick from the list above.
No consumable items exist yet — add one from Items → New item → Consumable.
CAD default
@10: {{ o.cost10 }} {{ o.cost10Formula }}
{{ o.metricNote }}

Cost @10 = (setup ÷ 10 + run) × burdened rate. These operations become the picker when adding steps to an item's build tree. Work you send out is priced from the services library below.

{{ ipTitle }}
{{ ipSub }}
{{ ig.g }}
Nothing matches — try laser, punch, weld, coat…

Default alloy per CAD material

A CAD model names a family — "Aluminum", "Mild Steel". The rack holds alloys. This is which one a drawing means when it does not say, so a quote can point at real stock instead of a placeholder.

Outside services

Work sent out — coating, plating, heat treat. The library only names the service and ties its vendors, with how long each takes. What a vendor charges — price breaks, lot charge, freight, minimum — is set on the operation in the item's build tree, where the part and its quantities are known.

No outside services yet — add the first one to price work you send out.
{{ os.vendorCount }} {{ os.usedBy }}

Raw Materials

purchased stock — expand a row to manage vendors & pricing

Sheet and plate are bought by weight, so every cost in the system flows from these three numbers: density, price per pound, and the thickness on the stock item. Change a price here and every thickness of that material re-costs.

Material Density lb/in³ Price $/lb48×96 sheet @ .125"
{{ fm.ref }}
New material {{ rmNewCatLabel }}
Unit sheet
Material and thickness
Stock sizes on the rack
Width inLength inSheets
{{ nz.info }}
{{ rmNewFlatNote }}
First vendor (optional)
{{ rmNewHint }}

{{ sec.label }}

{{ sec.desc }}
{{ sec.count }}
Material On handAvailableMin Unit costBest vendor
{{ tg.t }} Consigned
{{ rm.onHand }} {{ rm.avail }} {{ rm.min }} {{ rm.cost }} {{ rm.bestVendor }}
Priced by weight — set the material's $/lb below, or this thickness's override.
Stock sizes {{ rm.flatNote }}
Width inLength inOn handMinWeight lbPer sheet
Consigned{{ sz.weight }} {{ sz.cost }}
Price $/lb override
Thickness in
Cut condition
Category Tags Consumed in operations consumption = CAD blank in² × this value
Vendors & current pricing lowest price becomes the item's unit cost
VendorVendor PNLead (d)MOQCurrent price $ / {{ rm.venPriceUom }}

Powder coat

{{ pcCount }}

Tick the parts that need coating and send one enquiry to as many coaters as you like. You answer in plain words — where it lives, how rough a life it has, what colour — and the enquiry is written for you in the coater's language.

Parts to send out anything we fabricate
Nothing matches that.
There is nothing we fabricate in the system yet — only purchased stock, which nothing coats. Open a STEP file in the CAD Engine and the parts appear here.
{{ pcPickLine }}
Enquiries
Nothing has gone out yet. Tick a part or two on the left and start one.

{{ pcId }}

{{ pcStLabel }}

{{ pcSub }}

Same as last time
Where will it live?
This decides the wash and the powder.
How rough a life?
This decides how thick the coating goes on.
What colour?
How shiny?
Anything that must stay bare?
Coating is paint: it fills threads and stops metal-to-metal contact.
Parts in this enquiry click a row to see its model
PartQtySurface eachTotal
{{ l.number }} {{ l.name }} {{ l.kind }} {{ l.tot }}
{{ pcTotLine }}
{{ pcCadName }} drag to orbit · explode slider bottom right
What the coater will read
Written from your answers. You do not have to know any of it.
{{ pcOutColor }}
Finish{{ pcOutShine }} Pretreat{{ pcOutPre }} Powder{{ pcOutPowder }} Film{{ pcOutFilm }} Masking{{ pcOutMask }}
{{ w.text }}
Who we are asking
Send it
{{ k.name }} {{ k.state }}
{{ k.url }}
What came back price per part · the total is at the quantities in this enquiry
{{ h.name }}
{{ h.tot }}
{{ h.lead }}
{{ row.number }} {{ row.qty }}
{{ cl.per }}
{{ cl.ext }}
Awarding writes the price and the coater onto each part's finishing operation, so it turns into a purchase order with everything else.
{{ pcAwardLine }}
What they would do differently
{{ ad.name }} {{ ad.text }}
This link is no longer active
Ask for a fresh one from whoever sent it.
{{ cqShop }} — powder coat enquiry

{{ cqId }}

for {{ cqVendor }}

{{ cqCount }} · please give a price per part

The parts tap a row to spin its model
{{ l.number }} {{ l.name }} {{ l.kind }} {{ l.qty }} {{ l.area }} {{ l.done }}
{{ cqCadName }} drag to orbit · pull it apart with the slider · measure with the ruler
The specification
{{ cqColor }}
Finish{{ cqShine }} Pretreat{{ cqPre }} Powder{{ cqPowder }} Film{{ cqFilm }} Masking{{ cqMask }}
{{ cqWhat }}
{{ cqNote }}
Areas are geometric surface from our CAD: both faces plus every edge and hole wall.
Your quote
{{ cqSubtotal }}
Quote received
{{ cqDoneLine }}

Outside Process

{{ ospSummary }}

Work sent outside the shop — plating, coating, heat treat. A draft appears when a job with an outside operation is released and goes ready once the ops before it finish. Issuing raises a real PO in Purchasing; the parts then ride the Shipping board (pack → ship on a printed ticket, partials allowed) and come back through Receiving, where booking them completes the operation on the job.

{{ ospCombineMsg }}
{{ ospNoneMsg }}
{{ op.no }} {{ op.stLabel }} {{ op.vendor }} {{ op.svc }} {{ op.value }} due {{ op.due }}
{{ ln.number }} {{ ln.name }} {{ ln.qty }} @ {{ ln.unit }} {{ ln.ext }}
{{ ln.heartline }}
{{ ln.sendInfo }}
{{ ln.prog }}
{{ rc.text }}
{{ op.vendorWarn }}
Enclosures for the vendor:
Parts are out — when they come back, book them in Receiving (good qty, rejects and disposition live there).
{{ op.note }} {{ op.poChip }} {{ op.issuedLine }} {{ op.shipInfo }}

Purchasing Demand

{{ buyCount }} materials need a buy · est. {{ poTotal }} {{ obTodayLabel }}

What to buy to fulfill current sales orders: firm demand exploded down every BOM, netted against available stock and min levels, rounded to vendor MOQs. The shadow column shows the extra exposure if open quotes convert — buy it early or watch it.

Stores requests — the floor asked for these
{{ sr.id }} {{ sr.number }} {{ sr.name }} {{ sr.want }} {{ sr.stock }} {{ sr.by }} {{ sr.binLabel }} {{ sr.noVendorTxt }}
Material Avail Req Shadow Buy Vendor Lead Est cost
Nothing to buy — all demand is covered by stock and open POs.
Order by The last working day a PO can be placed and still reach the operation that needs it — the scheduled start of that operation, less the vendor's quoted lead time, on the shop's own calendar. The ring fills as that runway burns: green while there is room, amber past {{ obYellowPct }}% of it, red on the day, pulsing red once it has gone. One line per job, because two jobs wanting the same material are two deadlines.
{{ pr.name }}
{{ pr.avail }} {{ pr.req }} {{ pr.shadow }} {{ pr.buy }} {{ pr.vendor }} {{ pr.lead }} {{ pr.estCost }} {{ pr.rfqChip }}
Job Operation Qty Needed Order by Lead
{{ ob.job }} {{ ob.op }} {{ ob.qty }} {{ ob.needBy }} {{ ob.obTxt }} {{ ob.lead }}
{{ pr.buyWhy }}
Buy as {{ pr.flatAdvice }}
{{ rfqSelN }} {{ poBatchNote }}
Request for quote

The same lines go to every vendor named here. Print each vendor's copy from the register, key their answers as they land, and award the winner — that raises the PO.

LineQty
{{ rl.number }} {{ rl.uom }}
{{ rl.name }} · {{ rl.note }}
Vendors to ask

Requests For Quote

print per vendor · key answers · award the winner
{{ rq.id }} {{ rq.state }} {{ rq.summary }} {{ rq.date }} → {{ rq.poLink }}
{{ qv.name }}
{{ qv.total }}
{{ ql.number }} {{ ql.qty }}
Scheduler — material short, nothing on order
{{ ma.number }} {{ ma.txt }}

Purchase orders

{{ poShowing }} · {{ poCommit }} committed
Purchase approver
New purchase order
Vendor
No vendor matches that name.
ItemQtyUnit $Line
There are no items yet — a PO line is received against an item. Create the material under Items first.
{{ ln.pickedNumber }}
Nothing purchased matches that.
{{ ln.total }}
Sheet size {{ ln.flatNote }}
No stock sizes are listed on this material yet — add them under Raw Materials before ordering it.
Raised into the Approval list — it goes to the vendor once a purchase approver releases it.
{{ poNewTotal }}
{{ poDelayMsg }}
PO Contents Vendor Outstanding Due Value Approval On order Received
{{ poNoneMsg }}
{{ op.id }} {{ op.summary }} {{ op.partialLabel }} {{ op.summarySub }} {{ op.vendor }} {{ op.units }} {{ op.due }} {{ op.cost }} {{ op.sliderNow }} {{ op.statusLabel }}
{{ ln.name }} Consigned {{ ln.qty }} {{ ln.got }} {{ ln.left }} {{ ln.price }} {{ ln.ext }} {{ ln.bin }}
{{ op.approver }}
Cancelled — {{ op.cancelNote }}
Ring
time in hand {{ poRingYellowTxt }} {{ poRingRedTxt }}
On an order already placed the ring is the vendor’s lead time running down — empty the day it was placed, full on the day they promised. It pulses while the clock is live. On Purchasing Demand the same ring counts down to the order-by date instead: the last day a PO can be placed and still reach the operation that needs it. Thresholds are set in Admin → Operations & costing.
Cancel {{ poCancelId }}
The order stays on the record as cancelled, with your reason and name, and drops out of the default view. Anything already received is unaffected.

Vendor performance

on-time percentage from the promised date against the date the goods actually landed
{{ vs.vendor }}
{{ vs.pct }}
{{ vs.delivered }}·{{ vs.liveN }} {{ vs.lateN }}
{{ vs.avg }}

Quotes

{{ qHeadline }}

Live quotes reprice automatically whenever the item's cost, routing or margin changes. Send a quote to lock its price; reopen or revise it if the customer asks for a change.

{{ qt.label }}
{{ qt.value }}
{{ qFilterCount }}
{{ qNoneMsg }}
{{ mq.id }} {{ mq.customer }} {{ mq.date }} · {{ mq.lineCount }}
{{ mq.marginPct }} {{ mq.total }} {{ mq.status }} {{ mq.seenText }}
{{ sv.label }} Superseded {{ sv.detail }}
{{ ml.number }} {{ ml.name }} {{ ml.cost }} {{ ml.unit }} /ea {{ ml.ext }} {{ ml.etaText }}
{{ ml.touchedNote }}
Batch pricing — from this item's own breaks
BatchUnitExtendedGM
{{ mb.qty }} {{ mb.unit }} {{ mb.ext }} {{ mb.gm }} {{ mb.tagLabel }}
{{ mq.addCount }}
{{ mq.addPicked }}
{{ mq.backCount }}
{{ mbk.text }} {{ mbk.kind }}
Off by default — nothing here has happened yet.
New quote for {{ nqCustNoneTxt }}
Quote lines
{{ nl.number }} {{ nl.uom }} · {{ nl.unit }} /ea {{ nl.ext }}
{{ nl.etaText }}
Click items on the left to add lines at the chosen qty.
{{ nqEtaNote }}
Quote total
{{ nqCartTotal }}

Customers

Who buys from you, and what they can do in their portal. Portal access lets a customer log in to see their parts, order status live from job tracking, place POs, and upload CAD for new parts — uploads land here flagged for engineering review before any price is shown.

Portal address — its own door, no way into this system from it {{ portalLink }}
{{ c.initial }} {{ c.inviteChip }} pts
{{ c.items }} items {{ c.openOrders }} open orders {{ c.lifetime }} lifetime {{ c.pendingNote }}
Each person gets their own link. Opening it lets them confirm their details and addresses, accept the terms and choose a 4-digit PIN — that PIN is how they sign in afterwards.
{{ ct.stateLabel }}
{{ ct.name }}
{{ ct.sub }}
{{ ct.when }}
{{ portalGateKicker }}

{{ portalGateTitle }}

{{ portalGateLead }}

Ask us for an invitation link and you can choose a PIN of your own.

{{ portalPinErr }}
{{ portalGateSetupMsg }}

{{ portalGateNote }}

Need this on a different date? {{ dtTitle }} {{ dtSub }}
Your date now {{ dtWas }} {{ dtWasOrig }}
{{ dtDirHint }}
{{ dtHotMsg }}
{{ dtPendMsg }}
{{ dtAnswerText }}
Portal preview — this is what the customer sees after logging in.
jobs
logged in as
No customers have portal access — enable it on the Customers page.
{{ portalInitial }}

{{ portalName }}

{{ portalWho }}
{{ portalWhoSub }}
New part

Something we've never made — we'll review and price it.

Something new

Something we've never made — we'll review it and come back with a price.

Drop the STEP here. Engineering reviews the model, builds the process, and pricing appears once approved — the part shows as Awaiting review & pricing in your parts list until then.

Your quotes {{ pqCount }}
{{ pql.number }} {{ pql.name }} {{ pql.qty }} {{ pql.unit }} {{ pql.ext }}
You accepted this — we will confirm before anything is made
No quotes from us at the moment.
Ask for one on the Place an order tab and it will appear here once we send it.
Blanket agreements
Your standing commitments — each release becomes an order you can track above.
{{ pb.id }} {{ pb.poTxt }} fully released awaiting confirmation {{ pb.relTxt }} {{ pb.pct }} {{ pb.targetTxt }}
{{ pbl.number }} ×{{ pbl.qty }} — due {{ pbl.due }} · {{ pbl.state }}
Will your orders be on time?
{{ pfHeadline }}
{{ pfQCount }}
{{ lg.label }}
{{ pfNoHitsMsg }}
Nothing here — try another group above, or show delivered orders.
{{ rm.refSo }} {{ rm.refPo }} {{ rm.label }}
Hot Prototype {{ rm.number }} {{ rm.name }}
{{ rm.heart }}
Promised {{ rm.date }} {{ rm.dateNote }}
{{ rm.next }}
{{ spm.label }} {{ spm.detail }}
progress — flat is on time · above is early · below is late date
{{ r.refPo }} · {{ r.refSo }}
Prototype Hot {{ r.number }}
{{ r.name }}
{{ r.heart }}
{{ r.date }} {{ r.dateNote }}
{{ r.label }}
{{ r.next }}
{{ sp.label }} {{ sp.detail }}
{{ r.kidsTitle }}
{{ kd.number }} {{ kd.name }} {{ kd.qty }} {{ kd.state }}
What it is made from, and how it is being made
{{ r.ptNote }}
{{ nd.number }} Part {{ nd.name }} {{ nd.qty }} {{ nd.state }}
{{ op.seq }} {{ op.name }}
{{ op.wc }}
{{ op.time }}
{{ op.state }}
{{ r.ptBomNote }}
Agreed with you{{ r.ptCap }} Confirmed so far{{ r.ptConf }} {{ r.ptRoom }}
{{ r.ptMoneyNote }}
{{ ft.k }}
{{ ft.v }}
{{ pfShowing }}
Open orders
{{ ooCount }}
Our SOYour POPartStill owedDueStatus
{{ oo.so }} {{ oo.po }} {{ oo.number }} {{ oo.provLabel }} {{ oo.name }} {{ oo.qty }} {{ oo.dueLabel }} {{ oo.status }}
Nothing matches that. Try part of a PO number, an SO number, or a part number.
Completed orders
{{ coCount }}
Our SOYour POPartDeliveredOn
{{ co.month }}
{{ co.so }} {{ co.po }} {{ co.number }} {{ co.name }} {{ co.qty }} {{ co.whenLabel }} {{ co.onTimeLabel }}
{{ co.shipsLabel }}
{{ ps.id }}{{ ps.when }}{{ ps.linesTxt }} {{ ps.carrierTxt }}{{ ps.tracking }} {{ ps.podTxt }} {{ ps.podNote }}
No shipment record for this delivery yet.
Paperwork
Packing slips and signed copies sit on each shipment above.
Certificates & inspection
No certificates were required on this order. Ask us if you need one issued retrospectively.
Value
{{ co.value }}
Nothing delivered yet — completed orders land here with their packing slip and certificates.
Request a return

Tell us what is wrong and we will send back an authorisation number. Please do not ship anything until you have that number — parts arriving without one cannot be identified.

{{ prProblem }}
Your returns
{{ pr2.id }} {{ pr2.state }}
{{ pr2.date }}
{{ pr2.part }}
{{ pr2.line }}
{{ pr2.note }}
Nothing returned so far.
New purchase order
{{ ppoBusy }}
Upload your PO Drop the PDF here — we read your part numbers, quantities and dates
{{ ppoFile }}
{{ ppoBlNote }}
{{ pr.title }} {{ pr.how }} {{ pr.sub }} {{ pr.ext }} {{ pr.price }} · {{ pr.priceNote }} {{ pr.mismatchNote }}
Estimated total
{{ ppoTotal }}
Highlighted lines aren't parts we've made for you before — we'll quote them and come back to you. They won't be priced on this order.

Prices shown are suggestions from what you've paid before or your quantity-break pricing. We review every uploaded PO and confirm pricing before production starts.

No items match — clear the search or ask us to add the part.
{{ cl.number }} {{ cl.qty }}
{{ cl.wasLabel }} · {{ cl.deltaLabel }} {{ cl.unitPrice }} /ea {{ cl.ext }} price to be quoted
Need by
{{ poTbcMsg }}
PO total
{{ poCartTotal }}
Your PO number is required

Prices are live from your quantity-break pricing and stay provisional until we confirm the order.

Standing order — blanket
Commit to a total quantity at today's price and take delivery in dated releases. The unit price locks at your total-commitment tier; we review and approve the schedule before anything is made.
{{ pb2.number }} {{ pb2.name }} {{ pb2.ext }} {{ pb2.unit }} /ea
{{ pt2.txt }}
Commitment total {{ pblGrand }}
Your PO number is required

Prices lock at the total-commitment tier and stay provisional until we confirm. Once approved, each dated delivery is released to production automatically ahead of its date.

Order received
Thank you — nothing else to do right now.
Our SO{{ poDoneSo }}
Your PO{{ poDoneRef }}

{{ poDoneMsg }}. We'll confirm pricing and dates, then it appears in Order tracking.

Your parts
{{ pPartsCount }}
{{ pi.number }} {{ pi.name }} {{ pi.whoInit }}
{{ pi.extPrice }}
{{ pi.unitPrice }} /ea · {{ pi.qtyLabel }}
Quote required
{{ pi.quoteMsg }}
{{ pi.note }}
{{ pp.number }} {{ pp.name }} Awaiting review & pricing
Nothing matches that. Try part of the number, or the part name.
{{ pPartsMore }}

Vendors

The master vendor list. Attach vendors and pricing to materials on the Raw materials page — this page owns who they are, terms and default lead times.

VendorContactEmailPhoneTermsLead (d)Supplies
{{ v.supplies }}
{{ nrTitle }} {{ nrSub }}
{{ nrDup }}
{{ nrEmptyMsg }}
{{ ns.label }} {{ ns.prog }} {{ ns.size }} · {{ ns.nParts }} {{ ns.time }} cut
PartQty on sheetJob · order
{{ nr2.n }} {{ nr2.q }} {{ nr2.jobs }}
Batch totals — every sheet
{{ nt.n }} {{ nt.q }} {{ nt.jobs }}
{{ egTitle }}

Laser ops can’t reach the floor without a DXF. Raise the engineering flag: the job stays scheduled, engineering gets a resolve-by date, Arthur chases it, and the job releases itself the moment the cut file lands.

{{ er.id }} {{ er.miss }}
Hold {{ holdAskJob }}
{{ holdAskSub }}. The floor sees this reason on every operation until it is resumed.
{{ holdViewJob }} is on hold
{{ holdViewNote }}
{{ holdViewWho }}
{{ npNo }} {{ npSub }}
{{ npMeta }} {{ npSentLabel }}
{{ lb.label }}
On this sheet
{{ nl.n }} {{ nl.q }}
{{ dvName }} {{ dvKind }}
Opening… This file isn't on the shop server, so no terminal can open it. Attach it again on the item it belongs to — it uploads for everyone from there. {{ dvBody }} This file type can't be shown here. Download it to open it in the right application.
{{ pdocTitle }}
{{ pdocSo }}
Your PO {{ pdocPo }}
{{ pdocDateLabel }}
{{ pdocDate }}
{{ pdocNumber }} {{ pdocRev }}
{{ pdocName }}
Ordered
{{ pdocQty }}
In this box
{{ pdocSent }}
{{ pdocLeft }}
Promised ship date {{ pdocDue }}
Line total {{ pdocLineTotal }}
This price came from your purchase order and is still to be confirmed by our team.

{{ pdocFoot }}

Ask about {{ portalAskSo }}
{{ portalAskPart }} — this goes straight to the team working on your order, with the order attached so nobody has to ask which one you mean.

Equipment

Every machine in the shop lives here — lasers, brakes, welders, ovens. Machines with a cut-speed chart drive CAD-based run times; link any machine to an operation on the Operations & costing page.

sort
{{ eqCount }}

No machine matches that. Clear the search to see all {{ eqTotal }}.

work center {{ q.speedSummary }} chart-driven · time costs by
footprint × {{ q.fpUnit }}
{{ q.planTag }} {{ q.linkedOps }}
Costing metrics

What this machine charges work by. Operations linked to it get one quantity field per metric — cost work by hours, distance, bends, hits… your choice.

unit {{ mx.valueLabel }} {{ mx.atOpWhy }}
reads × + {{ mx.cadMinLabel }} {{ mx.cadUnitNote }}
No metrics — operations on this machine cost by setup + run time only.
Consumes Optional — the CAD engine pre-fills each op's metric quantity from the BOM qty of this material family consumed at the op.
{{ q.cadNote }}
{{ q.cadDrawNote }}
Cut-speed chart {{ q.chartSrc }}
Feature-size bands Applies to every material — per-row overrides live in each table
{{ g.material }} {{ g.count }} thicknesses {{ g.condSummary }}
Condition group
Pierce ×
Small ≤ ({{ eqUnitLen }})
Med ≤ ({{ eqUnitLen }})
{{ g.viaNote }}
Timing — measure these on the machine and type them here
Head down (s)
Gas (s)
Head up (s)
Rapid (ipm)
Accel (in/s²)
Worked example {{ g.ltExPart }}
{{ g.ltExTotal }}
{{ g.ltExLine }}
Measured (s)
{{ g.ltGap }}
ThicknessCodeFast ({{ eqUnitSpeed }})Med ({{ eqUnitSpeed }})Slow ({{ eqUnitSpeed }})Etch ({{ eqUnitSpeed }})fp (sec)
{{ sp.thickness }}{{ sp.gauge }} {{ sp.code }}via {{ sp.via }} {{ sp.fastF }} {{ sp.medF }} {{ sp.slowF }} {{ sp.etchF }} {{ sp.pierceSec }}
No chart — this machine costs by time only.
{{ itemPos }}
What it can do
CAD
{{ fp.tag }}
Sheet yield %
{{ fp.yieldNote }}
{{ pr2.init }} {{ presRecMsg }} Prototype Rev {{ itRev }} Consigned
{{ dotLabel }}·{{ dotReason }}
Location {{ fh.label }} · no bin not assigned to a bin — receiver chooses
{{ ajCount }} — flat on the line is on time, above is early, below is late; the dashed tracer is the projection
No active jobs — one appears here the moment an order line or stock build creates a job for this part.
{{ aj.so }} {{ aj.customer }} HOT {{ aj.status }} {{ aj.qty }} due {{ aj.due }}
{{ aj.heart }}
{{ aj.prog }}
{{ protoBanLine }} {{ protoBanSub }}
Make it a standard item{{ protoBanLine }}
No step has been completed yet, so there are no measured times to write. Graduating now just takes the prototype badge off — the routing keeps its estimates.
StepEstimatedActual
{{ g.seq }} {{ g.name }} {{ g.est }} {{ g.act }} {{ g.delta }}
{{ protoGradLeft }}
The prototype job stays on record. The next order for this part is an ordinary job.
{{ f.text }} — {{ f.by }}, {{ f.date }}
Attributes
{{ a.k }}
{{ a.v }}
Visible in the portal to
{{ pv.name }} {{ pv.why }} Nobody — this part does not appear in any portal.
Hidden from
Notes

{{ itNotes }}

Status flag
{{ dotLabel }}

{{ dotReason }}

Departments that draw it same assignment as Admin → Departments — tap to add or remove
No departments exist yet — create them under Admin → Departments.
Used in
{{ usageSummary }}
{{ usageEmptyMsg }}
{{ ur.rev }}
{{ ur.name }}
{{ ur.rollsTo }}
{{ ur.per }}
{{ ur.multi }}
{{ ur.feeds }}
{{ ur.kind }}
{{ ur.jobsLabel }}
Quantity break pricing
Margin % reviewing — nothing written yet
{{ prUndoTxt }}
{{ prHead }}
Qty fromCurrentNewChangeMargin
{{ pr.qty }} + {{ pr.cur }} {{ pr.next }} {{ pr.delta }} {{ pr.mCur }} {{ pr.mNext }}
{{ prOverrideNote }}
What the new price touches
Nothing else carries this item’s price right now — only the breaks change.
{{ prSummary }}
QtyRolled cost /eaMargin %PriceOverrideEffectiveActual margin
{{ b.cost }} {{ b.computed }} $ {{ b.effective }} {{ b.margin }}
{{ staleNote }}

Prices stay frozen until refreshed — cost changes raise the amber warning but never silently move the sell price. ↻ re-freezes a row at today's cost and gross margin; an override pins the row outright.

Cost last changed {{ costUpdatedAt }} · price last set {{ priceUpdatedAt }}. Editing margin or overrides marks pricing current.

Where the cost comes from
per piece · same functions as the table above, opened up
{{ bc.h }}
{{ br2.label }}
{{ br2.label }} {{ br2.sub }} {{ c2.v }}
Rolled cost /ea {{ t2.v }}
Outside work added after margin {{ x2.v }}
{{ bn.t }}
Open quotes on this item
{{ q.id }} {{ q.customer }}
{{ q.statusLabel }}
Qty {{ q.qty }}· {{ q.price }} /ea {{ q.delta }}
No open quotes reference this item.

Live quotes reprice automatically as the item's cost or routing changes, until marked sent — sent quotes freeze at their snapshot.

Order by

The last working day a PO can be placed and still reach the operation that needs it — that operation's scheduled start, less the vendor's quoted lead time, on the shop calendar.

JobOperationQtyNeededOrder byLead
{{ ob.job }} {{ ob.op }} {{ ob.qty }} {{ ob.needBy }} {{ ob.obTxt }} {{ ob.lead }}
Approved vendors
VendorVendor PNLeadMOQLast price
{{ v.vendor }}{{ v.vendorPN }}{{ v.leadDays }} d{{ v.moq }}{{ v.lastPrice }}
No approved vendors yet — unlock to add one.
VendorVendor PNLead dMOQPrice $
{{ v.vendor }}
Pricing edits commit on blur. A new vendor is also created in Admin → Vendors so outside orders can be issued to it.
Purchase orders
POVendorQtyPriceDueStatus
{{ p.po }}{{ p.vendor }}{{ p.qty }}{{ p.price }}{{ p.due }}{{ p.status }}
Sheets on the rack

Counted in sheets, per size, at the bin it lives in — that is what someone walking the aisle can verify. Price flows from weight, so $/sheet and the costing rate can never disagree.

W inL inSheetsMinBin & last countPer sheet
{{ fz.countedLabel }} {{ fz.perSheet }} {{ fz.lb }}
{{ pl.label }}
{{ fz.free }} free of {{ fz.onHand }} — {{ hf.label }}
{{ ifzUnNote }}
Price $/lb override
{{ ifzCostNote }}
{{ ifzTotals }}
Unit cost
$ per {{ itUom }}
Purchase unit
1 {{ puVendorUnit }} =
1 {{ puVendorUnit }} = {{ itUom }}

{{ puSummary }}

Changing cost marks dependent manufactured items' pricing stale and reprices live quotes — watch the status flags.

Reorder
Min stock {{ itUom }} {{ itOnOrder }}
Cost preview at lot qty
Rolled cost /ea {{ rolledCost }}
No sales orders yet — customers appear here once this part ships on an order.
{{ cu.initial }}
{{ cu.customer }}
{{ cu.orderCount }} · last {{ cu.last }}
Total qty
{{ cu.qty }}
Last price
{{ cu.lastPrice }}
Lifetime
{{ cu.rev }}
OrderDateQtyUnit priceExtendedStatus
{{ so.so }} {{ so.date }} {{ so.qty }} {{ so.unitPrice }} {{ so.ext }} {{ so.status }}
Adjust stock {{ adjTitle }} — {{ adjOnHand }}
Sheet size On hand Counted Change
{{ ag.size }} {{ ag.sub }} {{ ag.cur }} {{ ag.rollup }} {{ ag.delta }}
{{ ab.code }} {{ ab.name }} {{ ab.cur }} {{ ab.delta }}
New on-hand {{ adjFlatTotal }}
{{ adjFlatDelta }}
A bin cannot hold less than nothing — correct the negative line before posting.
Location On record Counted Change
{{ al.code }} {{ al.name }} {{ al.cur }} {{ al.delta }}
New on-hand {{ adjTotalTxt }}
{{ adjDeltaTxt }}
A location cannot hold less than nothing — correct the negative line before posting.
{{ adjShortMsg }}
None of this part sits in a location yet, so there is nothing to move. Use Count / correct to file some stock first.
Stocking policy

This is the one setting the whole system reads — it decides where finished parts go, whether stock levels apply, and how a shortage is answered.

{{ itUom }}
Home bins {{ hb.path }}{{ hb.code }}{{ hb.size }} {{ fg.label }} · no bin none — receiver chooses
{{ s.v }}
{{ s.k }}
Where it is stocked
on hand {{ wskOnHand }} {{ itUom }} · one figure, every place

A bin orders only when nothing upstream can fill it. A low float fetches from stores and never buys; stores, and a point-of-use bin with no stores behind it, buy.

{{ wskNeedsBinTxt }}
{{ wskUnplacedTxt }}
Stores {{ wskStoresQty }} {{ itUom }}
{{ wskMinNote }}
{{ wskBinsHead }}
{{ wskPendTxt }}
{{ lb.code }} {{ lb.sub }} {{ lb.qty }} {{ lb.state }}
{{ wskBinAddNote }}
Competing demand
{{ cdSummary }}

{{ cdNote }}

{{ cd.ref }} {{ cd.what }} {{ cd.qty }} {{ cd.due }}
Where it sits
{{ invPlaced }}
Home location {{ invHome }} — deliveries file themselves here
No home location set — receipts land wherever the receiver picks. Set one under Home bins in the Stocking policy card above, or give the item a point-of-use bin under Where it is stocked.
{{ eqs.name }} {{ z.tip }} {{ z.code }} {{ z.qty }} Home location for this part
{{ invPlanNote }}
Nothing of this part is filed in a location yet.
{{ invUnplaced }}
Recent adjustments
{{ ar.date }} {{ ar.text }}
Reserved against jobs
{{ invHoldTotal }}
Nothing is holding this part. Reservations appear here the moment a job is released to the floor.
{{ ih.id }} {{ ih.customer }} {{ ih.status }} {{ ih.due }} {{ ih.qty }}
On its way in
{{ invIncomingTotal }}
Nothing on order.
{{ ii.id }} {{ ii.status }} {{ ii.vendor }} {{ ii.got }} {{ ii.due }} {{ ii.qty }}
Movement history
No location movements recorded for this part yet.
{{ im.date }} {{ im.loc }} {{ im.text }} {{ im.who }}
Build documents
{{ docCount }}

Everything attached here reaches the operator on the floor terminal, where it opens full screen without leaving the job. Scope a document to one operation and only that station sees it.

No routing yet — documents will show at every operation once one exists.
Drop documents here, or click to browse PDF drawings, images, specs — several at once. 12 MB each.
Document Kind Shown at
{{ dr.name }} {{ dr.meta }}
Requirements
{{ c }}
Certificates on file
DocumentKindReferenceDate
{{ c.doc }}{{ c.kind }}{{ c.ref }}{{ c.date }}
{{ qtRuleTxt }}
{{ qtHint }}
{{ qtFsStep }}{{ qtFsOp }} · {{ qtFsHave }}
{{ qtFsHint }}
{{ fr.label }}{{ fr.dupe }}
{{ qtFsHint }}
Drawings and specs live on the Documents tab — a PDF filed as a drawing is what "Read the print" reads.
Arthur read {{ qtDraftFile }}{{ qtDraftN }} to decide
{{ dr.text }} {{ dr.meta }}
Op {{ g.seq }} {{ g.name }} QC op {{ g.pill }}
{{ st.n }} {{ st.text }}CRITICALFAI {{ st.line }} {{ st.src }}
Reads in the operator measures and types in this unit
{{ st.measN }} off the model
{{ mm.label }}{{ mm.kindTxt }} · nominal from the model {{ mm.range }} {{ mm.otherTxt }}
Pointers on the model
No steps — place one on the model, or + for one without an anchor.
Build the routing first — steps hang on operations.
Steps copy onto every job at approval and show on the floor at their op with the model framed on the feature. The FAI sheet is every step marked FAI.
{{ t.k }}{{ t.v }}{{ t.sub }}
{{ icNote }}
WhenBinSize · whyBookCountedResultBy
No count on record for this item. Count it now puts it on the runner's board.
{{ c.when }}{{ c.bin }}{{ c.what }} {{ c.exp }}{{ c.got }}{{ c.result }}{{ c.by }}
{{ h.date }}
{{ h.ref }}
{{ h.text }}
{{ h.meta }}
Nothing in this category yet.
{{ viewerTitle }} {{ viewerHint }}
Bill of materials
{{ vbCount }}
{{ vbHint }}
{{ vbPickedTxt }}
{{ viewerFlatMeta }}
DFM findings
{{ iss.level }}
{{ iss.text }}
{{ lblTitle }} {{ lblSizeNote }}
{{ lblTitle }}
{{ lblPart }}
{{ lblDesc }}
{{ kv.k }}{{ kv.v }}
ROUTING
{{ lo.n }}{{ lo.name }}
{{ lblNote }}
{{ lblBarText }}
{{ lblBarText }}
{{ lblBcLabel }}
Sizes & content are set under Admin → Documents & labels
{{ soConvertedId }} created

The quote is now a sales order. Confirm it on the sales-order board to create its jobs.

{{ fpLabel }}
{{ fpNumber }} · {{ fpName }}

{{ fpCond }}

Open flags
{{ ff.text }}
{{ ff.by }} · {{ ff.date }}
{{ pp.init }}
{{ pcTitle }}
{{ pcSub }}
{{ pq.name }} · {{ pq.state }}
Tell Arthur
Bug Improvement
{{ bugDoneMsg }}
{{ bg.text }}
Arthur is thinking…
{{ bugTgt }}
{{ sh.thumb }}
Arthur asks follow-ups until it’s airtight, then writes the fix prompt for review.
{{ ppTitle }} {{ ppSub }}
{{ ppNote }}
{{ lpTitle }} {{ lpTrail }}
{{ lz.code }}
{{ lc.head }}
Code Name Holds
{{ lpNewErr }}
{{ lpWhyNot }} {{ lpFlatNote }}
{{ shortAskJob }} finished short
{{ shortAskItem }} — {{ shortAskLine }}
{{ shortAskSo }} is still owed the difference. Raise a make-up job now and it lands approved, ready to release when material is there. Dismiss and the order simply ships short.
PO {{ nsoPoWarnPo }} is already on file
{{ nsoPoWarnCust }} sent this PO number before — it came in as {{ nsoPoWarnSo }}. If this is the same order, open it instead of entering it twice.
Adjust completed count
{{ adjTitle }}

{{ adjNote }}

{{ toastMsg }}
Raise flag on {{ itNumber }}
Add sub-item to {{ asOwnerNumber }}'s BOM
Nothing matches “{{ asQ }}”. Create it below — the name is already filled in.
{{ asCount }}
New sub-item {{ asFormCtx }}
{{ nsDupMsg }}
Kind
{{ nsPreview }}
Change operation op {{ opSeq }} · {{ opWc }}
Nothing in the library matches — operations are defined in Admin → Operations & costing
{{ opLibCount }}
Add operation to {{ addOpOwnerNumber }}
{{ addOpSvcNoneMsg }}
{{ addOpCount }}
{{ addOpLibNote }}
{{ blNumber }} {{ blBtTag }} in {{ blOwnerNumber }}
Blank in ×
Vendors & prices
VendorVendor PNLeadMOQPrice $
{{ bv.vendor }} best {{ bv.vendorPN }} {{ bv.lead }} {{ bv.moq }}
No vendors on this material yet — attach one above and set their price.

Inventory

Live stock across the shop — fed by receiving (POs in), job completions (finished parts in, materials consumed) and shipping (goods out). Type a counted quantity to record a cycle-count adjustment.

{{ tl.label }}
{{ tl.val }}
{{ tl.sub }}
{{ invCountOffText }}
{{ invCountCfgLine }}
{{ kp.label }}
{{ kp.val }}
{{ kp.sub }}
On the runner’s board · {{ invOpenN }}{{ invRunnerLine }}
{{ ot.bin }} {{ ot.name }} {{ ot.audit }}{{ ot.lines }} {{ ot.why }} {{ ot.age }}
{{ invOpenEmptyText }}
Audits asked for
{{ ab.id }}{{ ab.line }}{{ ab.st }}
{{ ab.prog }}
{{ bb.code }}
Ask for a count
{{ invAskNote }}
Consigned counts due
{{ cd.vendor }} {{ cd.line }} {{ cd.due }} on the board
Every consignor’s count is inside its cadence
Awaiting a manager’s OK
{{ cp.bin }} {{ cp.line }} · {{ cp.val }}{{ cp.by }}
Nothing waiting
Counted · last 30 days · {{ invCountLogN }}
{{ cl.bin }}{{ cl.line }}{{ cl.tail }}
No counts yet — they appear here as the runner closes them
Item On hand Alloc Avail On PO Min Bin tag Location Unit cost Value Status
No items match this filter.
Sub {{ iv.name }}
{{ iv.typeTag }} {{ iv.uom }} {{ iv.allocated }} {{ iv.avail }} {{ iv.onOrder }} {{ iv.min }} {{ iv.loc }} {{ iv.unit }} {{ iv.val }} {{ iv.state }}
{{ btTitle }}
{{ btSub }}
Customer price {{ pxTitle }} {{ pxSub }}
On this order
{{ pxNow }}
{{ pxLockNote }}
Item price today
{{ pxCur }}
{{ pxCurNote }}
{{ pxDriftMsg }}

Sales orders

Every order in one list. Confirm creates the jobs, Ship deducts stock and closes the order; orders whose job finishes on the floor turn Ready automatically. Click a row for lines, PO documents and partial shipments.

Blanket orders total commitments released in chunks — every release ships at the price locked when the blanket was created
{{ bl.createdTxt }} {{ bl.valueTxt }} past its target date — the balance stays open nothing fires and no work starts until it's approved master job {{ bl.masterTxt }} runs this blanket's release engine on the Jobs page
LineItemQtyDueEst. pushRunwayLocked priceStatusSub-job
{{ bll.n }}
{{ bll.name }}
{{ bll.qty }} {{ bll.relDueTxt }} {{ bll.pushTxt }} {{ bll.runwayTxt }} {{ bll.price }} {{ bll.stTxt }} {{ bll.subNoTxt }} locked released
a line = one delivery: it fires ahead of its due date as one child order → one sub-job
Releases
{{ br.date }} · {{ br.how }} {{ br.sum }}
Order analytics
{{ at.label }}
{{ at.val }}
{{ at.sub }}
Monthly sales booked shipped
{{ mo.label }}
Jobs per month completed open
{{ mo.label }}
Sales by customer (booked)
{{ ac.name }}
{{ ac.val }}
No orders booked in this window.
{{ qrCount }} — parts a customer ordered through the portal that aren't in the catalogue yet
{{ qr.id }} {{ qr.part }} {{ qr.desc }} {{ qr.qty }} {{ qr.customer }} {{ qr.so }}
{{ soCountLabel }}
{{ drTitle }}
{{ dr.customer }} — {{ dr.so }} · {{ dr.part }} {{ dr.was }} → {{ dr.want }} {{ dr.movedNote }} “{{ dr.note }}” {{ dr.headline }} {{ dr.cost }}
{{ soUnknownMsg }}
Order Customer PO # Progress Promised Est. ready Value Stage
No orders here — create one or scan a customer PO.
{{ sc.so }} {{ sc.date }} · {{ sc.nItems }} {{ sc.customer }} {{ sc.po }} {{ sc.progText }} {{ sc.dueTxt }} {{ sc.estReady }} {{ sc.value }} {{ sc.stage }} {{ sc.provLabel }} no date {{ sc.backLabel }} {{ sc.openJobsWarn }} short {{ sc.engFlagN }} {{ sc.famNote }} {{ sc.gateNote }}
{{ sc.heart }}
Schedule {{ sc.heartBigNote }}
{{ sc.heartBig }}
{{ sc.srcNote }}
{{ sc.quoteNote }}
{{ sc.promiseNote }}
Drop the PO document here, or click to browse
Part Qty Ship by Unit Value Stage
{{ ln.name }} {{ ln.qty }} {{ ln.lnDue }} {{ ln.unit }} {{ ln.ext }} {{ ln.stage }}
{{ ln.availNote }}
added after confirmation — no job yet
{{ sc.addNote }}
{{ soRestLabel }}
New sales order

Orders land in New — needs confirmation. Jobs are only created when you drag the order to In production.

{{ nsoScanBusy }}
line quantities are the total commitment · prices lock today · release chunks later from the blanket card
Drop the customer's PO PDF — I'll fill this in Reads PO number, due date, customer and line items · attaches the PDF to the order {{ nsoScanDone }}
New customer
Lines on this order
{{ nl.number }} {{ nl.qty }} due {{ nl.due }} {{ nl.how }} {{ nl.desc }} {{ nl.priceWarn }} {{ nl.price }}
Order total
{{ nsoTotal }}
Schedule splitter — pick the part above, then split its total into dated lines (e.g. 1000 pcs, 200 every 2 weeks)
Release buffer {{ nsoBufTxt }}
Each dated line fires exactly at due date − runway, never earlier. Runway = live build time from the schedule engine (floor load included) + this buffer — a busier floor fires earlier, a quiet one waits longer. Already past that day → fires immediately, HOT.

Documents & labels

Everything the shop puts on paper. Documents are the PDFs customers and vendors receive; labels are what goes on the parts and the racks. The preview beside each is the real renderer — what you see is what prints.

On this document
Return handling
Company identity shared by every document
A PNG with transparency prints best. The same logo is used on documents and labels.
Size on paper {{ daLogoScale }}%
Placement
Page setup shared
Paper
Header
Accent
{{ daKindLabel }} live preview, sample data

Set the size in inches, pick what appears, and choose where it prints from — shipping labels print from Shipping and sales orders, travelers from job tracking, item and QC labels from the item page, receiving labels at check-in.

{{ lb.sizeNote }}
Content on the label
Orientation
Type size
Barcode

Receiving

Incoming material checked in against its purchase order. Receiving a line adds the quantity to stock, records the put-away location, and moves the PO to Received on the purchasing board automatically.

{{ rcvCount }}
Customer returns expected {{ rcvRmaCount }}
{{ rr2.id }} {{ rr2.part }} {{ rr2.sub }} {{ rr2.customer }} {{ rr2.due }}
Repair-and-return parts only. Booking them in puts them into the location shown and moves the RMA to Parts received — it does not touch the sales order or the customer's stock.
{{ noRcvMsg }}
{{ rp.id }} {{ rp.vendor }} {{ rp.status }} part received due {{ rp.due }} {{ rp.outstanding }}
Delivery documents Packing slip required to complete
{{ rl.btTag }} {{ rl.name }} {{ rl.ordered }} ordered {{ rl.already }} {{ rl.left }}
{{ rl.outsideNote }}
{{ rl.polTxt }}
{{ rwz.code }}
Recently received
{{ rd.id }} {{ rd.number }} {{ rd.vendor }} short-closed late {{ rd.qty }} {{ rd.loc }} {{ rd.date }}

Shipping

Showing {{ shipFocusSo }} only — sent here from Orders

Open sales-order lines, staged in two steps: Pack pulls finished parts from stock onto the dock (inventory drops immediately), Ship sends whatever is packed. Pack less than the full order for a partial shipment — the line stays open for the remainder, and unpacking returns parts to stock.

{{ noShipMsg }}
Outside process — parts going out
{{ so2.id }} {{ so2.vendor }} {{ so2.svc }} due back {{ so2.due }}
Ship to: {{ so2.shipTo }}
{{ so2.waitWhy }}
{{ sl.number }} {{ sl.name }} {{ sl.job }} {{ sl.qty }} {{ sl.staged }}
{{ shipCountLabel }}
{{ sg.so }} {{ sg.customer }} {{ sg.po }} {{ sg.promise }} {{ sg.progress }} {{ sg.openLabel }} partially shipped
{{ sr.name }}
{{ sr.qty }}
{{ sr.onHand }} {{ sr.shadow }} {{ sr.jobLabel }} {{ sr.loc }}
{{ sr.freshLabel }} {{ sr.partialLabel }} {{ sr.packedLabel }}
{{ sr.afterShip }}
{{ shipRestLabel }}
Staged on the dock
{{ packedPopMsg }}
Packing slip
{{ slipSo }} · {{ slipCust }}
{{ slipPo }}
{{ slipDate }}
{{ slipCount }}
Part Ordered In this box
{{ ps.number }} {{ ps.rev }} {{ ps.name }} {{ ps.prior }} {{ ps.ordered }} {{ ps.sending }} {{ ps.backLabel }}
This shipment is partial. The balance stays on the order and follows in a later shipment.
Outside process despatches
{{ sd.id }} {{ sd.vendor }} {{ sd.qty }} {{ sd.when }} {{ sd.carrier }} {{ sd.st }}
Nothing has shipped yet — every Ship makes one shipment record here, the number on the packing slip.
ShipmentShippedOrder · customerLines · pcsCarrier · trackingSigned packing listInvoice
{{ r.id }} {{ r.atTxt }} {{ r.so }} {{ r.cust }} PO {{ r.po }} · {{ r.parts }} {{ r.linesTxt }} {{ r.carrierTxt }} {{ r.tracking }} {{ r.stTxt }} {{ r.invTxt }}{{ r.invSub }}
No shipments match.
{{ shpCountLabel }}
Packing list{{ sgnSo }} · {{ sgnCust }} {{ sgnId }}
{{ sgnShop }}Packing slip {{ sgnId }}{{ sgnSo }} · Your PO {{ sgnPo }}{{ sgnDate }}
Deliver to{{ sgnCust }}
PartOrderedIn this box
{{ l.number }} {{ l.rev }}{{ l.name }}{{ l.before }}{{ l.ordered }}{{ l.qty }}{{ l.toFollow }}
{{ sgnPcs }}
Signed by
×
Date
Check the counts against the pallet, then hand the device to whoever is taking the parts. Nothing has shipped yet — the shipment is created when they sign, or when you tap Ship.
{{ sgnShop }} · dockapp locked
{{ sgnHeadline }} {{ sgnSo }} · {{ sgnCust }} · {{ sgnPcs }}
{{ l.qtyN }} ×{{ l.number }}{{ l.name }}
Who is signing
Condition
Sign here
Sign with your finger ×
By signing you confirm you have {{ sgnVerb }} the pieces listed above in the condition stated. A copy goes to {{ sgnCust }}.
{{ sgnDoneTitle }}{{ sgnSo }} · {{ sgnCust }}
{{ sgnDoneHead }}{{ sgnSummary }}
{{ sgnSlipLine }}
{{ sgnInvLine }}
{{ sgnPortalLine }}
Proof of collection is on file. The delivery copy — signed at {{ sgnCustShort }}'s dock — is still expected; the chase timer starts today.

Invoicing

Every despatch raises an invoice against its sales order the moment it ships — one invoice per order per ship day, numbered from the shipment records. QBO sync hooks in here once the ERP is live.

{{ invBackLabel }}
{{ noInvMsg }}
{{ iv.so }} {{ iv.customer }} {{ iv.po }} {{ iv.dateTxt }} due {{ iv.dueTxt }} {{ iv.nLines }} {{ iv.totalTxt }} {{ iv.statusTag }}
PartShippedUnitAmount
{{ il.number }} {{ il.name }} {{ il.qtyTxt }} {{ il.unitTxt }} {{ il.extTxt }}

Jobs

New stock job

Builds parts for inventory with no sales order behind it. The job goes through the same approve → release flow, and finished parts land in stock.

Every open sales-order line becomes a job. Approve it, schedule the due date, then release it to the floor — held jobs vanish from the operators' Ready list instantly.

Department performance — points this week
running total from 10 days ago · dashed = 2-day pace · points reset monthly
{{ dgChart }}
{{ dbd.boardLabel }}
No jobs yet — convert a quote to a sales order and the job appears here for approval.
{{ engHead }} {{ engSub }}
{{ en.job }} {{ en.number }} {{ en.meta }} {{ en.frozen }} {{ en.who }}
{{ jobCountLabel }}
{{ cb.number }} {{ cb.name }} — {{ cb.msg }}
Master jobs — blanket orders one per part · sub-jobs appear as releases confirm; planned chunks wait as ghosts with their computed fire day
{{ mj.autoBadge }}
{{ pp.number }} {{ pp.txt }} {{ pp.due }} {{ pp.ovTxt }}
{{ sj.id }} {{ sj.so }} {{ sj.item }} {{ sj.ops }} due {{ sj.due }} {{ sj.label }}
{{ pr.qty }} released {{ pr.date }} — waiting in New, confirm to create its sub-jobs
due {{ ms.due }} {{ ms.qty }} {{ ms.fireTxt }}
{{ j.number }}{{ j.btTag }}
{{ j.name }}
{{ j.customer }} · {{ j.so }} · {{ j.qty }} {{ lk.so }} · {{ lk.qty }} {{ j.loc }} {{ j.statusLabel }} Late Custom build Engineering {{ j.flagTxt }} Material late Sub-assembly {{ j.famKidDue }} {{ j.famBottleneck }}
{{ j.revSummary }}
{{ j.revRunMsg }}
Materials
{{ r.tag }} {{ r.number }} {{ r.name }} {{ r.opTxt }} {{ r.qtyTxt }}
Routing
{{ r.tag }} {{ r.label }} {{ r.qtyTxt }}
Drawings
{{ r.tag }} {{ r.label }} {{ r.qtyTxt }}
{{ j.revOthersLabel }}
{{ j.revNote }}
{{ j.heart }}
{{ j.runningNow }}
QC Strict {{ j.shortAtTxt }} {{ j.shortAtMkLabel }} {{ j.splitTxt }} Admin / Prod Mgr approves
{{ jobRestLabel }}
Job build — {{ jeJob }}
{{ jeNumber }} · {{ jeName }} — changes are stored on this job only; the original item stays untouched
Update the original item too?
The build changes are saved on {{ jeAskJob }} only. Apply the same routing and BOM to {{ jeAskItem }} so future jobs and quotes use them?
{{ jdId }} is no longer here
It may have shipped and been archived, or the demo data was reset.

{{ jdId }}

{{ jdName }} · {{ jdQty }} · {{ jdCustomer }}
{{ jdStatusLabel }} {{ jdRiskLabel }}
Layout
Run time {{ jdCmpNow }} {{ jdCmpChip }}
Clocked {{ jdCmpNow }} Est {{ jdCmpEst }} Typical {{ jdCmpAvg }}
QC Strict
Job family — subs build the parts, the main job carries the clock
{{ jdParentLabel }}
{{ jdStaleMsg }}
{{ jdBlockerMsg }} — the floor is waiting on an answer.
{{ t.label }}
{{ t.value }}
{{ t.sub }}
Operations {{ jdOpsCount }} · {{ jdActTot }} clocked of {{ jdEstTot }} estimated
{{ o.seq }} {{ o.name }}
{{ o.wc }}
{{ o.act }} / {{ o.est }} {{ o.varLabel }}
{{ o.statusLabel }} {{ o.whereLabel }} {{ o.by }}
{{ o.waitLabel }} plan {{ o.schedLabel }} {{ o.scrap }} {{ o.over }} {{ o.overLog }}
{{ o.consumedTip }}
{{ jdMatHead }}
{{ jm.number }} {{ jm.name }} {{ jm.need }} {{ jm.at }} {{ jm.ref }} {{ jm.orderBy }}
Operations {{ jdOpsCount }} · {{ jdActTot }} clocked of {{ jdEstTot }} estimated
OperationWork centerActual / estOperatorQueueStatus
{{ o.seq }} · {{ o.name }}
{{ o.note }}
{{ o.wc }}
{{ o.act }} / {{ o.est }} {{ o.varLabel }}
{{ o.by }} {{ o.waitLabel }} {{ o.statusLabel }}
{{ o.moveLabel }}
{{ jdOrdersTitle }}
{{ so.so }} {{ so.customer }} PO {{ so.po }} {{ so.qty }} need {{ so.due }} {{ so.status }} {{ so.shippedLabel }}
What the customer sees on the portal
{{ st.name }}
{{ jdKidsTitle }} must land before the op that consumes them
{{ k.number }} · {{ k.name }} feeds {{ k.forOp }} {{ k.qty }} {{ k.prog }} due {{ k.due }} {{ k.status }}
Material still to consume
{{ jdMatShortMsg }}
{{ mt.number }} {{ mt.name }} need {{ mt.need }} {{ mt.allocLabel }} {{ mt.gap }} {{ mt.cover }}
Job thread
{{ mg.byI }}
{{ mg.by }} {{ mg.wc }} {{ mg.when }} {{ mg.toName }} Blocker
{{ mg.text }}
{{ jp.text }}
{{ r.head }}
Documents
No drawings or work instructions attached to this part yet — the floor is running on the routing alone.
History who changed what on this job
{{ au.when }} {{ au.by }}
{{ au.action }}
{{ au.detail }}

Operator metrics

This page is owner and admin only.

Operator metrics

{{ omNote }}

No operations were completed in {{ omDaysLabel }}, so there is nothing to measure yet.
Most operations completed {{ omMost }}
Consumables — use against pace
same part, same operation
{{ omCsNone }}
{{ cd.tip }}
quicker than peersslower than peers →
up = more consumable per piece than peers on the same part and operation
{{ cf.name }} {{ cf.msg }}
{{ omCsHeld }}
{{ od.name }}
Best pace · {{ od.bestPace }} Best QC · {{ od.bestQc }}
{{ omInit }}
{{ omName }}
{{ omSummary }}
{{ omScore }}
{{ omThin }}
{{ ob3.label }} {{ ob3.val }}
Kiosk record
{{ omFixes }}
Stations run
{{ os.name }} {{ os.qc }} {{ os.ops }} {{ os.hours }} {{ os.rel }}
Consumables against peers
{{ omConsHead }}
{{ cr2.part }} {{ cr2.name }} {{ cr2.rel }}
Qualified for
{{ oq.name }}
{{ omLegacy }}

Departments

yellow at % · red wd early

Group work centers into departments. Each earns points against the smart schedule — on-time and early ops score, behind-schedule ops cost, zero scrap pays a bonus. Points reset monthly; hit an achievement threshold and the reward is on the house.

Points this week, cumulative
running total from 10 days ago · dashed = recent pace, 2 working days out
{{ dgChart }}
no location added {{ dp.rank }} {{ dp.mtdLabel }} {{ dp.life }}
{{ dp.next }} {{ dp.won }}
Work centers:
Consumables: {{ dcc.label }}

Point metrics — how ops score against the schedule

{{ pr.unit }} {{ pr.label }} {{ pr.hint }}
Applied when an op is completed, measured against that op's due time in the smart schedule. Changes affect future completions only.

Achievements — points thresholds & rewards

pts → {{ ac.winners }}

Points log

{{ lg.date }} {{ lg.dept }} {{ lg.pts }} {{ lg.text }}

Arthur

His Monday briefing, what the shop looks like right now, and a place to ask about it. Arthur reads the live numbers on this page — he never changes anything.

ARTHUR Monday briefing {{ adBriefMeta }} Arthur is writing…
{{ adBriefText }}
{{ bt.t }}
{{ adBriefReadTxt }}·{{ adBriefUnreadTxt }}
No briefing yet — Regenerate now writes one from the live numbers.
Ask Arthur about the shop
{{ cm.text }}
{{ cm.chartTitle }}
{{ cb.lb }}
{{ cb.v }}
Arthur is reading the shop…
{{ advErr }}

This week's numbers

the same figures Arthur answers from
{{ pc.label }}
{{ pc.val }} {{ pc.trend }}
history builds daily
{{ pc.sub }}
Bottleneck — queued hours at the next op
nothing queued — no released work waiting
{{ ht.op }}
{{ ht.val }}
Backlog vs 2-week capacity
no open work on any work center
{{ cp.op }}
{{ cp.pct }}
line = machine hours available over 10 workdays
At-risk jobs — heartlines
nothing at risk — every open job has slack
{{ fl.no }} {{ fl.cust }}
{{ fl.heart }}
{{ fl.label }}
Arthur noticed
nothing unusual this week
{{ an.text }}

Admin — bug reports & ideas

{{ brOpenN }}
Nothing reported yet — the bug button in the sidebar, Messages, and the floor all file here.
{{ br2.tgt }}
{{ br2.kindLabel }} {{ br2.title }} {{ br2.meta }}
{{ bc.who }}: {{ bc.text }}
Prompt for Claude — review before sending
{{ br2.prompt }}
Arthur is reading the build files…
Diagnosis — read from the running build’s own source
{{ br2.diag }}
{{ advDigestText }}
{{ dcapPct }} shop capacity
{{ dcapSub }}
{{ dcapWorst }}
{{ dcapOt }}

Dashboard

{{ ft.label }} {{ ft.val }} {{ ft.sub }} {{ ft.trend }}
Revenue by month booked shipped
{{ fm.label }}
Gross margin by month
{{ fr.label }}
{{ fr.val }} {{ fr.money }}

Jobs running over estimated cost

Every active job is tracking at or under its estimated cost.
{{ fo.id }}
{{ fo.number }}
{{ fo.customer }}
est {{ fo.est }} actual {{ fo.act }} {{ fo.over }}

Quoted vs actual — finished jobs

No finished jobs with logged run time yet — estimate accuracy appears once the floor completes ops.
{{ fj.id }} {{ fj.number }}{{ fj.customer }} est {{ fj.est }} actual {{ fj.act }} {{ fj.variance }}
{{ pt.label }} {{ pt.val }} {{ pt.sub }}
Utilization by work center — {{ dashMoLabel }}
{{ pw.name }}
{{ pw.pct }} {{ pw.hrs }}
Operations completed per day — last two weeks
No completions logged yet — this fills in as the floor closes ops.
{{ pd.n }}
{{ pd.label }}
Where parts wait — average dwell between ops, by receiving station
{{ perfBufSet }}
Nothing measured yet — dwell is timed from the moment an op is closed to the moment the next one is started, so this fills in as the floor works through jobs.
{{ pb.name }}
{{ pb.avg }} {{ pb.sub }}
{{ perfBufOver }}
Buffer utilisation by week — 100% means parts wait exactly as long as planned
{{ bw.val }}
{{ bw.label }}
Over 100% and the shop is slower between stations than the plan assumes — raise the buffer or fix the handoff. Well under, and dates are being padded.
{{ dt.label }} {{ dt.val }} {{ dt.sub }}
Stock audit {{ dauHead }}
{{ t.k }}{{ t.v }}{{ t.sub }}
Most value on the least trusted counts
{{ w.sub }}{{ w.value }}
Consumables cover {{ dcvHead }}
{{ cv.num }} {{ cv.days }}
On-hand ÷ the last 30 days' draw.
Department performance — points this week
running total this week · dashed = 2-day pace
{{ dgChart }}
{{ dbd.boardLabel }}

Late-risk alerts

Every active job is projected to finish on time.
{{ dr.id }}
{{ dr.number }}
{{ dr.name }} · {{ dr.customer }}
{{ dr.heart }}
{{ dr.due }} {{ dr.finish }} {{ dr.miss }} {{ dr.matMsg }}

Schedule

{{ schedSummary }}

A plan rebuilt from the floor as things change: remaining op time is dispatched to each work center — hot jobs first, then your drag order, then earliest due — on the shop calendar. Drag cards to re-prioritize; edit due dates and hot flags right here.

{{ drTitle }}
{{ dr.customer }} — {{ dr.so }} · {{ dr.part }} {{ dr.was }} → {{ dr.want }} {{ dr.movedNote }} “{{ dr.note }}” {{ dr.headline }} {{ dr.cost }}
What-if mode — due dates, hot flags and drag order below are staged ({{ wifCount }} changed). Nothing is saved until you apply.
{{ wifBufMsg }}
Change anything on this page — drag jobs to re-prioritize, edit a due date, toggle Hot. Every edit is held here instead of hitting the live plan.
The schedule, projected finishes, Gantt and overtime advisor all recalculate against your staged version, so you see the knock-on effects immediately.
The floor keeps running the real plan. Staged jobs are marked staged; nobody else sees these numbers.
Apply changes commits every staged edit at once; Discard throws them away and snaps back to the live schedule.
WIP buffer between operations

Parts do not arrive at the next station the moment an op ends — they are moved, counted and queued. The scheduler leaves this gap after every operation, and every promised date, quote lead time and pull-in answer is built on it.

{{ bufHotNote }}
{{ bufPrevHead }} {{ bufPrevLate }}
{{ bufPrevAvg }} {{ bufPrevWait }}
{{ bufNewLateMsg }}
{{ bl.id }} {{ bl.who }} {{ bl.miss }}
Changing this is written to the audit log.
Read-only — admin or a role with scheduling permission sets the buffer.
Shop calendar
Smart-schedule re-plan times

The run order re-plans and re-freezes at each time below. No times = shift end. It always also re-plans at first open of the day, on HOT arrivals and material receipts, or by hand with Recompute.

{{ rp.label }} none set — re-plans at shift end
Holidays {{ ch.h }}
Lunch & breaks {{ calBrkNote }}
{{ cb.range }}
No breaks — the shift is treated as producing straight through.
{{ otHeadline }}
{{ ot.label }}
Moving someone would help last resort — their own department is clear and the station is short
{{ cm.who }} {{ cm.what }} {{ cm.gain }} {{ cm.cost }}
{{ ganttTitle }} {{ ganttPlanNote }}
Running Ready Pending Paused / behind plan Past due date In flow state Flagged item
{{ gd.label }}
{{ gh.label }}
{{ gl.idleNote }}
{{ gb.job }}
{{ gb.op }}
{{ gr.job }} op {{ gr.seq }} · {{ gr.op }} {{ gr.number }} {{ gr.itemName }} {{ gr.whenTxt }} {{ gr.dur }} {{ gr.stTxt }}
Click a bar for full op detail, or a work-center name to list its ops with times. A hatched band before a bar is time the machine is free but the material is not in yet.
Nothing to schedule — approve or release a job and it appears here with planned times.
{{ sj.id }} {{ sj.number }} {{ sj.name }} staged Not released
{{ sj.customer }} · {{ sj.qty }}
{{ sj.finish }} {{ sj.slackLabel }} material, not capacity {{ sj.remain }}
{{ sj.matMsg }} {{ sj.matOrderBy }}
{{ so.seq }} {{ so.name }} {{ so.wc }} {{ so.dur }} {{ so.when }} {{ so.state }}
{{ schedRestLabel }}
{{ goJob }} · op {{ goSeq }} {{ goWc }} {{ goState }}
{{ goNumber }}
{{ goItemName }}
{{ goName }}
{{ goQty }} {{ goCustomer }}{{ goDue }}
{{ goWhen }}
{{ goRemain }}
{{ goSetup }}
{{ goThru }}
In flow state! — parts moving to the next op
{{ goLateNote }}
{{ goMatMsg }} {{ goMatOrder }}
Cut file — {{ goDxf }}
{{ goNote }}
Open flags on this item
{{ gf.text }}
{{ gf.by }} · {{ gf.date }}

Work-center queues

{{ sw.name }}
{{ sw.load }}
{{ sq.label }} {{ sq.when }}
Several people are clocked in here — tap your name above so your work and your messages go out under the right name.
{{ fSdItem }} {{ fSdQty }} {{ fSdNo }}
{{ sg.label }} {{ sg.at }}
{{ fSdNote }}
Floor Ops
{{ fThreadTitle }} Signed in on this terminal as {{ fMsgWho }}
{{ fMsgNoWhoMsg }}
{{ tm.text }}
{{ tm.by }} blocker
{{ tm.actLine }}
{{ tm.actLine }} — sent
Arthur is looking it up…
{{ r.head }}
{{ fMsgNoneMsg }}
{{ fDeptName }} {{ fDeptPts }}
{{ fDeptNext }}
cumulative · this week
{{ dgChart }}
{{ fb.label }}
cumulative · this week
{{ dgChart }}
{{ fEnvLabel }}
Did you work later than the shift?
{{ acCount }}
{{ acJob }} · op {{ acSeq }} — {{ acOpName }}
{{ acWc }} · {{ acWho }}
Left running past {{ acShiftEnd }}. We have banked {{ acBanked }} up to shift end and are holding {{ acHeld }} until you say.
If you stayed on, what time did you finish?
{{ acErr }}
Latest it could have run to is {{ acLatest }}. This does not count against you — the shop stopped, not you.
{{ dpInit }}
{{ dpName }}
{{ dpWhat }}
Your PIN signs off the quantity, the material it draws and the time on this op
{{ dpErr }}
{{ mxGateInit }}
{{ mxGateName }}
Your PIN, so nobody else on this kiosk can open your numbers
{{ mxErr }}
{{ mxInit }}
{{ mxName }}
{{ mxToday }}
No finished operations on record in the last 30 days, so there is nothing to show yet.
{{ mxScore }} 100 is the usual pace
with nothing gone wrong
{{ mxPace }}
{{ mxQc }}
{{ mxOps }}
{{ mxOnTime }}
{{ mxKiosk }}
{{ mxTColor }}
{{ mxTIcon }}
{{ mxTPhoto }}
{{ mxTPin }}
{{ mxTPinNote }}
{{ mxTPrefNote }}
{{ engHead }} Don't run these — engineering is working on them. The ops come back on their own when it's cleared.
{{ en.number }} {{ en.job }} {{ en.frozen }}
{{ en.noteShown }}
{{ en.who }}

{{ fEmptyMsg }}
Consumables {{ rbWho }} {{ rbAvg }} {{ rbQueueN }}waiting
Queue · stopped first, then oldest
STOPPED didn’t arrive — again {{ rq.item }} × {{ rq.qty }} {{ rq.age }}
{{ rq.name }} · {{ rq.onHand }}
{{ rq.eats }}
{{ rq.init }}{{ rq.who }} · {{ rq.where }} · {{ rq.job }}
pick · {{ rq.shelf }} bring to · {{ rq.where }}
Queue clear — nobody is waiting
In hand · walking
{{ rc.item }}× {{ rc.qty }}{{ rc.age }}
{{ rc.who }} · {{ rc.where }}
pick · {{ rc.shelf }} bring to · {{ rc.where }}
Nothing in hand
Restock · shelves below min
{{ rs.line }} {{ rs.sub }}{{ rs.note }}
Every shelf is above its min
Counts · {{ cycN }} open{{ cycQuietNote }}
{{ tk.bin }} {{ tk.binName }} Audit {{ tk.why }}
{{ tk.lines }}
count at · {{ tk.bin }} · {{ tk.zone }}
Second count — two matching counts post the difference.
Blind count — type what you see; the record shows after.
{{ cr.number }}{{ cr.name }} {{ cr.uom }} {{ cr.delta }}
No bins to count right now
Counted today · {{ cycDoneN }}
{{ cd.bin }}{{ cd.result }}{{ cd.at }}
Delivered today · {{ rbDoneN }}
{{ rd.line }}{{ rd.at }} · {{ rd.took }}
Nothing delivered yet today

Every timer on the clock right now, grouped by job. {{ fLiveEditNote }}.

Who can see the Live floor

Tick the roles allowed to open this board. Everyone else loses the Live floor button. Changes are logged.

{{ lr.name }} {{ lr.note }} {{ lr.who }}

Nothing on the clock — start an op from the Ready tab and it appears here.
hot {{ lg.number }} {{ lg.name }} · {{ lg.customer }} due {{ lg.due }}
{{ lo.stateChip }}
{{ lo.name }}
{{ lo.wc }} · op {{ lo.seq }}
{{ lo.byAv }} {{ lo.by }}
{{ lo.timer }}
{{ lo.overNote }}
Op audit
{{ audSubtitle }}
days
{{ as2.k }}
{{ as2.v }}

{{ audEmptyMsg }}
{{ ar.number }} suspect
op {{ ar.seq }} {{ ar.opName }} · {{ ar.wc }}
{{ ar.by }}
{{ ar.doneAt }}
{{ ar.est }} {{ ar.act }}
total on the clock
{{ ar.perPc }}
{{ ar.qtyNote }}
{{ ar.miss }}
{{ ar.dollar }}
{{ ar.rateNote }}
Clocked time was {{ ar.act }} — correct it to
{{ nb.no }} {{ nb.mat }} {{ nb.thick }} {{ nb.nOps }} · batch locked, new jobs stay out {{ nb.bubbleLabel }} {{ nb.bubbleLabel }} {{ nb.bubbleLabel }} {{ nb.bubbleLabel }}
{{ nb.waitLabel }} {{ nb.masterElapsed }} {{ nb.holdLabel }}
Nested as {{ nb.no }} {{ nb.nestLine }} {{ nb.sentLabel }}
{{ nb.reopenWarn }}
Editing — remove parts below, add any listed underneath, then re-lock. It stays {{ nb.no }}.
{{ nb.fitsLabel }}
Material consumed — full sheets only
Estimated: {{ er.label }}
{{ sh.name }} {{ sh.onHand }} {{ sh.estHint }}
{{ sh.name }} {{ sh.onHand }} {{ sh.estHint }} sheets
Used remnant
{{ bo.number }}{{ bo.job }} · op {{ bo.seq }}
{{ bo.name }}
{{ bo.qty }} {{ bo.stLabel }}
Move — shop plan {{ mvHint }}
{{ mvArmHint }}
This item has no home bin yet — set one on the item page, or in a location's "Stored here" list.
{{ ms.name }}
{{ mz.code }} {{ mz.n }}
{{ mp.short }} {{ mp.chip }}
{{ mvCadLabel }}
{{ mvSpotLabel }} outside the expected department
drag again to nudge
Drag a marker to where you actually left the pallet, nudge it as often as you like, then Confirm. Wheel or pinch zooms, dragging the floor pans, double-tap fits.
Move ops — WIP waiting for a lift
Nothing waiting — a move card appears the moment an op completes.
{{ mt.number }}{{ mt.job }}HOTCALLED
{{ mt.qty }} · after {{ mt.opName }}{{ mt.slackTxt }}
{{ mt.fromName }} {{ mt.toName }} on the forks — {{ mt.runBy }}
In {{ mvSelCode }} — drag onto the plan to move
Nothing in this zone.
{{ mc.number }}WIP{{ mc.refTxt }}
{{ mc.binCode }} · {{ mc.name }}
{{ mc.qty }} {{ mc.uom }}
Internal stores {{ fStoresWho }}

Take what you use — stock drops and the draw is recorded against your name. Dip below min and a purchase request goes to purchasing on its own.

{{ fStoresFallbackNote }}
{{ fStoresRunnerNote }} — request and it comes to you
My requests
{{ sm.line }}{{ sm.status }}
{{ sm.sub }}
{{ fStoresEmptyMsg }}
Nothing matches that search on the shelves you can see.
{{ ss.label }}
{{ si.label }} {{ si.n }}
{{ si.number }} {{ si.name }} {{ si.onHand }}
{{ si.number }} {{ si.name }} {{ si.onHand }}

Open laser operations grouped by material and thickness. Tick the parts to run together, then download the batch — one set of cut files, ready to nest on a single sheet program.

{{ fNestDropLabel }}

No open laser operations to nest — release a job with a laser op.
{{ g.mat }} {{ g.thick }} {{ g.nOps }} · {{ g.totalQty }} {{ g.bubbleLabel }} {{ g.missingNote }}
{{ no.number }}{{ no.job }} · op {{ no.seq }}Running
{{ no.name }}
{{ no.qty }} {{ no.dlName }} no cut file
General WIP — parked work {{ fGwN }}
Nothing routes work out of here — call what you need
{{ gw.number }} {{ gw.job }} HOT
{{ gw.qty }} · next {{ gw.nextTxt }} · {{ gw.wc }}
{{ gw.callTxt }}
Ordered by the smart schedule — run top to bottom to hit due dates
{{ c.job }} · op {{ c.seq }} {{ c.opName }} Hot {{ c.waitTxt }}
{{ c.wc }}
{{ c.job }} · op {{ c.seq }} Hot Late On hold Engineering Material late Sub-ASM Waiting on {{ c.blockedBy }} {{ c.askText }} {{ c.msgN }}
{{ c.ptsTxt }} {{ c.wc }}
Held by engineering. {{ c.protoHeldWhy }} Stop your clock and put it down — it comes back when they release it.
{{ c.number }}
{{ c.opName }}
{{ c.qty }} {{ c.est }} {{ c.customer }} {{ c.loc }}
{{ c.schedTileTop }}
{{ c.schedTileDay }}
{{ c.schedTileMon }}
{{ c.schedTimes }}
{{ c.schedNote }}
{{ c.schedRisk }}
In flow state! — parts moving to the next op
{{ c.trackTxt }}
{{ c.recNote }}
{{ c.callMsg }}
{{ c.blocked }}
{{ c.advWarn }}
Parts collected from op {{ c.prevOp }}
{{ c.advHint }}
{{ c.elapsed }} {{ c.remain }}
{{ c.eta }}
Paused at {{ c.elapsed }} — time is kept
Done in {{ c.doneIn }}
{{ cf.mini }}
{{ c.job }} · op {{ c.seq }} · {{ c.opName }} {{ c.waitTxt }} Hot {{ c.wc }}
{{ c.job }} · op {{ c.seq }} Hot Late On hold Engineering Material late Sub-ASM Waiting on {{ c.blockedBy }} {{ c.msgN }}
{{ c.ptsTxt }} {{ c.wc }}
Held by engineering. {{ c.protoHeldWhy }} Stop your clock and put it down — it comes back when they release it.
{{ c.number }}
{{ c.opName }}
{{ c.qty }} {{ c.est }} {{ c.customer }} {{ c.loc }}
{{ c.schedTileTop }}
{{ c.schedTileDay }}
{{ c.schedTileMon }}
{{ c.schedTimes }}
{{ c.schedNote }}
{{ c.schedRisk }}
In flow state — parts moving to the next op
{{ c.trackTxt }}
{{ c.recNote }}
{{ c.callMsg }}
{{ c.blocked }}
{{ c.advWarn }}
Parts collected from op {{ c.prevOp }}
{{ c.advHint }}
{{ c.elapsed }} {{ c.remain }}
{{ c.eta }}
Paused at {{ c.elapsed }} — time is kept
Done in {{ c.doneIn }}
{{ fRestLabel }}
{{ foJob }} · op {{ foSeq }} {{ foWc }} In flow state!
{{ foNumber }}
{{ foItemName }}
{{ foName }}
{{ foQty }} {{ foEst }} {{ foCustomer }}{{ foDue }}
{{ foSetup }}
Points at stake {{ foPtsStake }} {{ foPtsDrop }}
Ahead {{ foPtsV1 }} On time {{ foPtsV2 }} Behind {{ foPtsV3 }}
{{ foNeedBy }}
{{ foThru }}
CAD model — tap to enlarge
{{ foNumber }} {{ foCadFullHint }}
Measurements to take
{{ foQcFullCount }}
{{ qs.i }}. {{ qs.text }} critical
{{ qs.meta }}
{{ qm.dotNum }} {{ qm.what }} · {{ qm.label }} {{ qm.nom }} {{ qm.tol }} {{ qm.pillTxt }}
{{ qm.lo }}
{{ qm.hi }}
{{ qm.verdictTxt }}
{{ qv3.t }}
Tap a measurement to open it — the model frames that dimension and the tolerance decides the result.
Op image
Cut on nest {{ foNestNo }}
{{ foNestMeta }}
Cut file — {{ foDxfName }}
{{ foDxfMeta }}
Build documents
{{ foDocCount }}
Open flags on this item
{{ ff.text }}
{{ ff.by }} · {{ ff.date }}
Complete this operation
{{ foRecLine }}
{{ wz.code }}
This job's parts & materials
{{ wl.code }} — {{ wl.lines }}
Nothing placed yet — parts land on the plan as ops complete and materials are received.
{{ foSpotNote }}
View only — moves happen on the Move terminal.
Consumables used on this run
Enter what you actually used. Leave 0 if you used none — it comes off stock and onto the job.
{{ fc2.number }} {{ fc2.onHand }} {{ fc2.uom }}
Sheets used — pick by hand, full sheets only
Laser ops never auto-consume material. Only what you enter here is deducted.
No matching sheets in stock — use the remnant option or receive material.
{{ fsh.name }} {{ fsh.onHand }} {{ fsh.estHint }}
{{ fsh.name }} {{ fsh.onHand }} Consigned sheets
Used remnant
Completing consumes — check the counts
{{ fc.number }}
{{ fc.name }} · {{ fc.per }} · {{ fc.have }}
{{ fc.uom }}
{{ fc.pullTxt }}
{{ foDeliveredLine }}
{{ foFinalNote }}
{{ foMoveWarn }}
{{ foShortWarn }}
Counts logged so far
{{ fp.line }}
{{ fp.meta }}
{{ foElapsed }} {{ foRemain }}
{{ foEta }}
{{ foProtoShutWhy }} — Start and Complete are off. Stop your clock and put it down; it comes back when engineering releases it.
Paused at {{ foElapsed }}
Complete — {{ foElapsed }}
{{ foNote }}
Operation notes
{{ foOpNotes }}
Materials at this step
No materials tied to this operation.
{{ fm.number }}
{{ fm.name }}
{{ fm.need }}
{{ fm.used }}
{{ fm.have }} — short
Op flow {{ ff.mini }}
{{ ff.seq }} {{ ff.name }}
{{ ff.statTxt }} {{ ff.wc }}
QC Strict — {{ foStrictCust }}. {{ foStrictNote }}
{{ foQIssueTitle }}
{{ foQIssueSub }}
parts held
Quality issue open upstream — op {{ foUpstreamSeq }}
{{ foUpstreamSub }}
First article required on this job — run one piece, get it inspected and signed off before the rest of the lot.
QC checkpoints
{{ foQcCadHint }}
{{ qs.i }}. {{ qs.text }} critical
{{ qs.meta }}
{{ qm.dotNum }} {{ qm.what }} · {{ qm.label }} {{ qm.nom }} {{ qm.tol }} {{ qm.pillTxt }}
{{ qm.lo }}
{{ qm.hi }}
{{ qm.verdictTxt }}
{{ qv2.t }}
{{ qs.verdictTxt }}
{{ qv.t }}
the tolerance decides — record the measurement {{ qs.stampTxt }} {{ qs.ncrRef }}
Job conversation {{ foJtCount }}
{{ foJtBlockMsg }}
No one has posted on this job yet. Anything written here is shared by every station on {{ foJob }} and visible to the office.
{{ jm.text }}
{{ jm.by }} {{ jm.toName }} blocker {{ jm.seen }}
{{ pw.text }}
{{ r.head }}
In flow state!
On the clock {{ fc.init }}{{ fc.name }} {{ fc.dur }}
{{ foLabor }}
{{ foSeqWhy }}
Something's wrong
{{ qrCtx }}
What is it about
How bad
saving the picture…
No QC hold location exists yet. Add one in Inventory → Locations with the QC hold kind and the pieces can be booked there instead of left at the machine.
And the op

{{ qrHoldNote }}

Quality gate — {{ qgSo }}
{{ qgCust }} · QC Required
{{ ck.t }} {{ ck.note }}
{{ qgBlockNote }}

Quality

{{ qStd }}
{{ qt.label }}
{{ qt.val }}
{{ qt.sub }}

Raised from the floor by whoever was holding the part. A flag is not a nonconformance yet — decide whether it becomes one. Closing it releases anything held and lets the operator finish the op.

Nothing flagged. Anything the floor raises with “Something's wrong” arrives here.
{{ qf.id }} {{ qf.sev }} {{ qf.scope }} op stopped · {{ qf.heldQty }} {{ qf.who }} {{ qf.stateLabel }}
{{ qf.desc }}
{{ qf.ctx }}
{{ qf.closeNote }}
Became

Every nonconformance, from checkpoint failures on the floor to customer returns and bad vendor material. Records carry containment, root cause, corrective and preventive action, disposition and the cost of the failure.

NCR Source Part Nonconformance Qty Disposition Cost State
No nonconformances on record. Failures raised from the floor, receiving or a customer return land here.
{{ nr.id }}{{ nr.date }} {{ nr.src }} {{ nr.part }}{{ nr.partName }} {{ nr.desc }} {{ nr.qty }} {{ nr.dispo }} {{ nr.cost }} {{ nr.state }}
{{ nd.id }}
{{ nd.date }} · raised by {{ nd.by }} · {{ nd.srcLabel }}
State
{{ nd.closedNote }}
{{ nd.dispoNote }}
Cost of failure
{{ nd.costTotal }}
Photograph the nonconformance — it travels with this record and prints on the NCR. Objective evidence like this is what an AS9100 audit asks for.

A customer sending parts back, authorised against the order line they came from. Every RMA raises an NCR, so root cause and corrective action are recorded where an audit expects to find them.

You can see returns but not authorise them. Ask an admin for the Issue RMA permission.
New return authorisation
{{ rmaNewCap }}
What happens to them
{{ rmaOutcomeNote }}
{{ rmaNewProblem }}
RMA Part / order Customer Qty Outcome State
{{ rr.part }} {{ rr.sub }} {{ rr.customer }} {{ rr.qty }} {{ rr.outcome }} {{ rr.state }}
{{ rf.label }}
{{ rf.val }}
{{ rr.detail }}
{{ rr.receiveMsg }}
No returns on record. Raise one against a shipped order line, or approve a request from the customer portal.
{{ drBusy }}
Drop the drawing PDF to review it Reads dimensions & tolerances, GD&T, material, finish, hardware, welds and notes — then suggests ops and inspection checkpoints
{{ drFile }} reviewed {{ drWhen }}
Drawing disagrees with the item record
{{ mm.field }}drawing says {{ mm.drawing }} · item says {{ mm.item }}
Print header
{{ dh.k }}{{ dh.v }}
GD&T callouts
{{ g2 }}
Hardware callouts
{{ hw2.callout }} {{ hw2.qty }}
Welding callouts
{{ wd.label }} {{ wd.note }}
General notes
{{ n3 }}
Toleranced dimensions
No toleranced dimensions found in the text layer.
{{ dd2.i }} {{ dd2.feature }} {{ dd2.nominal }} {{ dd2.tol }} critical
Suggested operations
{{ do3.name }} · {{ do3.wc }} {{ do3.haveNote }} {{ do3.why }}
Suggested QC checkpoints
{{ dq.text }} critical {{ dq.opName }} · {{ dq.method }} · {{ dq.spec }}
Manufacturability concerns
{{ c3 }}
QC Required customers Set per customer in Admin → Customers. These are the defaults a newly marked customer starts from. Added margin points of margin on new quotes Inspection op {{ qCfgInspNote }}
Inspector sign-off on critical checkpoints Operators self-check every checkpoint at op completion; checkpoints marked critical additionally need a QC-role signature.
First article by default Pre-checks "First article required" when a job is approved for a part with no FAI on record, or whose rev changed. Always overridable per job.

Settings

Shop-wide switches. These change how the whole system behaves, not one page of it.

Stores
How consumables reach the floor
Simple: operators walk to the shelf and take what they use. Advanced: they request from their station and a Stores Runner brings it — stock drops on delivery, against the requester, with the runner named. Mins and purchase requests work the same in both.
Runnersanyone whose role carries “Stores runner” — set under Users & roles
{{ sr.init }}{{ sr.name }} Nobody has the permission yet — requests would fall back to Simple
Delivery targetminutes — late requests turn red on the board
How often, by family
{{ cf.label }}{{ cf.sub }}everydays
{{ ccLoadNote }}
Pace
{{ cn.label }}{{ cn.sub }}{{ cn.unit }}
When the count disagrees
This terminal
Appearance
Theme for this terminal only — every station keeps its own. Status red, amber and green stay fixed in all of them.
This installation
{{ dbEnvName }}
{{ dbEnvNote }}
{{ dbBuild }}
{{ lockTitle }}
{{ lockNote }}
Schema
{{ migSummary }}
{{ mg.name }} {{ mg.why }} {{ mg.state }}
{{ migNote }}
Modules
Move
WIP tracked by location, a move op after every operation, and a forklift terminal on the shop plan. Built for facilities large enough that moving work is someone's job.
{{ mvModState }}
{{ mvModStat }}
{{ cntkNote }}

Locations

{{ locTotal }}

Every place stock can sit, nested as deep as your building needs. Zones are drawn on the shop plan; everything below them is racks, shelves, carts and bins. Receiving, job completion and shipping all write to these locations.

{{ locMvNote }}

{{ locResultN }}
Stored here
{{ hi.number }} nothing assigned to this bin yet
Which size lives here? A bin holds one
{{ locItemNoneMsg }}
{{ locItemMore }}
Bins under {{ locSelCode }}
{{ locBulkPreview }}
{{ locSelCode }} {{ locSelKind }} {{ locSelName }} {{ st.v }}{{ st.k }} {{ locSelSize }}
Class colour
completes here:
Inside here
Stock at {{ locSelCode }}
{{ h.when }} {{ h.dir }} {{ h.at }} {{ h.detail }} {{ h.who }}
Nothing has moved in or out of here yet.
Class Part Description Reference Qty
{{ r.cls }} {{ r.desc }} {{ r.ref }} {{ r.qty }}
{{ locStockEmptyMsg }}
Shop plan
{{ eq.tip }} {{ eq.tip }} {{ p.tip }} Drag to resize {{ locDrawBox }} {{ locPlanText }} {{ locTickBtn }}
{{ locPlanNote }}
Equipment shadows
{{ locEqSelName }} {{ locEqSelSize }}
rotate move
Distance to wall ({{ locEqDimUnit }})
{{ locEqHint }}
{{ locZoneCode }} {{ locZoneName }}
Size ({{ locZoneUnit }})
Distance to wall ({{ locZoneUnit }})
Shop floor
×
{{ locFpUnitLabel }}
{{ locScaleNote }}
{{ locFpUnitLabel }}
{{ lg.label }}

Messages

{{ msgUnreadN }} unread

Channels and direct messages for talk, tickets for issues. Anything the floor flags, engineering freezes, quality raises or purchasing shorts lands here as a ticket you can pass to a person and walk through open, acknowledged, in progress and resolved.

{{ msgSupHint }} — every private thread you open is written to the audit log.
To
{{ r.head }}
Nobody matches that.
With a title this becomes a tracked issue — it gets a reference, a state and an owner.
{{ msgEmptyMsg }}
Arthur
Bug Improvement
files on the Arthur tab under Admin
Describe a new feature or report a bug. I'll ask questions until the logic is airtight, then draft the dev prompt for review.
{{ bugDoneMsg }}
{{ bg.text }}
Arthur is thinking…
{{ bugTgt }}
{{ sh.thumb }}
One question at a time until it's airtight, then the drafted prompt lands under Admin on the Arthur tab.
{{ msgRef }} Urgent {{ msgSrcLabel }}

{{ msgTitle }}

{{ msgSub }}
{{ msgJobBlockMsg }}
{{ msgPrivMsg }}
{{ msgMakeUpNote }}
{{ msgFreezeMsg }} unfreezes on resolve
{{ msgOwnerInit }}
{{ mm.init }}
{{ mm.name }} {{ mm.station }} {{ mm.dept }} {{ mm.toName }} blocker
{{ mm.t }}
{{ mm.b }}
{{ mm.drWas }} → {{ mm.drWant }} {{ mm.drHead }}
{{ mm.drCost }}
answering closes this issue and replies to them
{{ mm.drWait }}
{{ mm.seen }}
{{ mm.photoName }}
{{ mp.text }}
{{ r.head }}

Backup & restore

A complete copy of the system in one file. Take one before every update, and keep it somewhere other than this computer — a backup that lives on the machine it is protecting is not a backup.

Parts, orders, jobs, purchasing, quotes, messages, customers, users, settings and the photographs.

{{ bkLastNote }}

{{ stStorage }} {{ stWarn }}
{{ bkBusy }}
{{ bkErr }}
{{ bkPrev.file }}
{{ bkPrev.when }} · {{ bkPrev.by }} · {{ bkPrev.size }}
What changes Now After {{ bl.label }} {{ bl.from }} {{ bl.to }}
Logic check
{{ imgRowsNote }}

Checks the logic, not the database: every number the money depends on, computed by the same functions the app uses, plus the corrections a person makes — change the yield, the consumption, a work-centre rate, the margin, the material price, the cut time — and whether each one reaches the price. Then it opens all 35 screens and proves each one painted, which is why the full run takes about half a minute; Numbers only skips that and finishes instantly. Runs on a copy of the shop, so nothing it does is saved.

{{ wfHead }} {{ wfSub }}
{{ w.step }} {{ w.detail }}

{{ wfNote }}

Write test — {{ wrEnv }}
off on live

{{ wrNote }}

{{ wrHead }} {{ wrSub }}
{{ wr.step }} {{ wr.detail }}
Write audit

The database check below proves the connection. This proves the app's own path: it creates a record, edits it two ways, deletes it, and re-reads the shop from the server after each step. Captured is the shape that breaks quietly — a handler that grabbed the record before saving — and it is how a renamed user reverts or a deleted order comes back.

{{ waHead }}
CollectionCreateEditCapturedDelete
{{ wa.label }} {{ wa.ins }} {{ wa.db2 }} {{ wa.cap }} {{ wa.del }}
Shared database check

Run this after every update. It writes a test record to each table, changes one field, reads it back, confirms the change stuck, and deletes it — retrying once if the connection drops mid-request. Nothing it writes appears anywhere in the system.

{{ stNote }}
{{ stHead }} {{ stSub }}
{{ r.table }} {{ r.detail }}

{{ stFailNote }}

{{ stLiveNote }}

Restore points

Kept inside the system, without being asked: one before the app changes under you, one at the start of each working day. The last six are held; older ones drop off. They carry everything except CAD files — the download above is still what protects you against losing this computer.

None yet — the first is taken once there is real data to keep.
{{ sn.when }} {{ sn.why }}
{{ sn.what }} · {{ sn.size }}

Users & roles

{{ uCount }}

You can add and manage floor operators. Full user & role administration needs the "Manage users & roles" permission.

{{ siNote }}
{{ u.init }}
Departments, in priority order:
{{ u.runsLabel }}
{{ u.siLabel }}
Pay grades

What a person costs, without individual wages in the app. Standard cost always uses the work center's labour rate, so quotes stay stable; actual cost uses the grade of whoever did the work, which is what makes a welder on the brake show up as a labour variance instead of a saving.

$ /hr {{ pg.usedBy }}

Preset roles ship with sensible permissions — adjust any of them, or duplicate one as a custom role. The Admin role is locked so you can't lock yourself out.

{{ rc.count }} locked
Filter: latest 200 entries
Nothing logged yet — sign-ins, floor activity and admin changes land here.
{{ ar.t }} {{ ar.by }} {{ ar.action }} {{ ar.detail }}
Floor kiosk address

Open this on a shop tablet and it lands on the floor sign-in every time — no office door, and no way back to one. Bookmark it, or add it to the home screen.

{{ kioskLink }}
Kiosk auto clock-out

Clock the floor crew out after this many minutes without activity on the kiosk — walk-away protection. Office and admin sessions are never signed out; you sign in once. 0 turns it off.

minutes
After-hours clock stop

An operation left running is closed at the end of the shift it was started on — but only after this long with no sign of life on it. The window lets people stay late without being cut off mid-job: anything logged on the op restarts the countdown. The shift-end figure is what stands, and the extra time is held for the operator to confirm. 0 turns it off.

minutes of quiet {{ quietLabel }}
{{ cpVendor }} · consignment at {{ cpShop }}
Read-only. Your stock on our shelves, what we have used, our counts and the statements. Updated live.
{{ t.k }}{{ t.v }}{{ t.sub }}
Your stock on our shelf
Item · sizeOn shelfUsed · unbilledLast countNext count
{{ r.number }} {{ r.name }} {{ r.size }}{{ r.onHand }}{{ r.used }}{{ r.last }}{{ r.next }}
Usage this period
Nothing drawn since the last statement.
{{ u.when }}{{ u.number }}{{ u.line }}{{ u.qty }}
Statements
No statement issued yet.
{{ rp.id }}{{ rp.line }}{{ rp.owed }}
Questions about a count or a statement: reply to the buyer who sent you this link. Figures on this page are the shop's live records and can move until a statement is issued.
{{ hvTitle }} {{ hvSub }}
{{ hvHeart }}
Flat on the line = on time · above = early · below = late · dashed tracer = projection

{{ stubName }}

This module is scoped but not built yet — we started with Items, the core the rest hangs off. Quoting, jobs, the floor kiosk and user roles come next.

This invitation is no longer valid

It may have been revoked, or replaced by a newer one. Ask your contact at the shop to send a fresh link.

You're all set

From now on, open the same link and enter your 4-digit PIN. You can see your parts and orders, track where they are on the floor, ask us to move a date, and send us a purchase order.

You're already set up

This is your personal link for the {{ setupCust }} portal — keep it. Sign in with your usual 4-digit PIN.

No rush

Your link stays good — open it again whenever suits and pick up where you left off.

{{ setupShop }} — customer portal

Set up your access

{{ setupGreeting }} — you've been invited to the portal for {{ setupCust }}. Check we have you right, then pick a PIN. It takes a minute.

Your details
Addresses
Choose a PIN

Four digits. This is how you sign in from now on — keep it to yourself.

{{ setupPinNote }}
ARTHUR Monday briefing {{ bgWeekLbl }}
{{ bgWho }} — read this before starting the week. {{ bgScopeLbl }} {{ bgMeta }}
{{ bgHeadline }}
{{ bs.label }} {{ bs.val }} {{ bs.sub }}
{{ bgStatsDesc }}
The week· {{ bgWeekN }}
{{ bd.lbl }} {{ bd.n }}
{{ bgWeekDesc }}
Jobs to watch Each line is the job’s pulse against its plan — flat on the baseline is on time, sinking is late. Tap one to enlarge. nothing at risk — every job has slack
{{ bh.no }}
{{ bh.heart }}
{{ bh.label }}
{{ bgLoadTitle }} no open work
{{ bl.name }}
{{ bl.hrs }}
Hours already booked on each station — a bar past the dashed line is more work than two weeks of shift time can hold.
{{ bgHint }}
Laminar
{{ signinTitle }}
{{ signinSub }}
New operators — pick your name
Nobody is waiting to be set up. Ask the office to add you — they assign 0000 and your name appears here.
{{ padInit }} {{ padName }}
{{ padSub }}
{{ padSub }}
{{ pinErrMsg }}
{{ padNewHint }}
Move your clock?
{{ opSwitchMsg }}
On the clock now: {{ opSwitchFrom }}
{{ opPickTitle }}
{{ opPickSub }}
{{ omPhotoTitle }}
Every screen
{{ orow.label }}
{{ meShInit }}
{{ meShName }}
{{ meShRole }}
Colour
Icon
Photo
Change PIN
4 digits, unique to you — it signs you in at the office door and the kiosk. The change is audit-logged.
Site password
Signed in on this device as {{ meShEmail }}
Account
Role{{ meShRole }}
Departments{{ meShDepts }}
{{ meShAdminNote }}
{{ arNudgeText }}
Arthur{{ arScope }} {{ arWho }}
What he can see{{ arPackLines }}
{{ asc.t }}
{{ arBlind }}
{{ arTipText }}
Ask about what is on this screen, or how to use it — "how do I raise a PO", "where do counts get approved". He answers from the context above, cites where each figure came from, says so plainly when it is not there, and can open the right screen for you.
{{ atn.text }}
Where those numbers came from · {{ aci.t }}
{{ atn.actKind }}
{{ atn.actSummary }}
{{ aar.k }}{{ aar.v }}
Nothing is written until you send it. It goes through the same path as the button on the screen, under your name.
{{ atn.doneTxt }}
reading {{ arShort }}…
{{ apm.t }}