SoPoly Pricing Review v. 2.8
Window Trailing 60 Days
Loading…

Workstation Hourly Rates

Real $/hr rate per work center type · drives MRP Planned Cost's Overhead figure, plus a flat rate for Planned Direct Labor, on the Pricing Review tab

Type Code Title Hourly Rate ($)
— DL Planned Rate
Flat rate × Planned Cycle Time = Planned Direct Labor, for every SKU (replaces each Routing operation's own Fixed/Variable cost)
Loading data…

One row per real work center type (sopoly-static-cache.json's workCenterTypes[]) — a rate here applies to every physical work center of that type, and drives Planned Overhead. The pinned DL Planned Rate row above is a single flat $/hr rate applied to Planned Cycle Time to produce Planned Direct Labor for every SKU, regardless of work center type. Saving writes directly to the same Azure Blob container the Pricing Review tab reads from (workstation-rates.json), plus a timestamped snapshot under workstation-rates-history/ as an audit trail. Reload the Pricing Review tab afterward to see the change reflected in Planned Cost. Until the first save ever happens (or for any type_id this file doesn't cover), the Pricing Review tab falls back to a hand-transcribed snapshot baked into costing.js — see the Methodology tab.

Getting the real rate from MRPeasy

MRPeasy's public API doesn't return this field (it's write-only there - see BUILD_CONTEXT.md). The real rate is visible on MRPeasy's own Production Planning → Workstations settings page. To pull every rate at once instead of reading them off the page by eye:

  1. Open that page in MRPeasy, logged in normally.
  2. Open DevTools (F12) → Console tab.
  3. Paste this and press Enter - it copies the result straight to your clipboard:

copy(JSON.stringify(Object.fromEntries( [...document.querySelectorAll('select[name="type_id"] option[data-hourly_rate]')] .map(o => [o.value, parseFloat(o.dataset.hourlyRate)]) )))

  1. Come back here, click "Paste Rates JSON…" above, paste, and click Apply.
  2. Review the grid, then click Save.

Extrusion Data

Real $/lb ingredient rates, blend/weight splits, and line speed · drives Planned Cost's lumber Materials figure (replaces MRP's own avg_cost for board colors/sizes)

Ingredient Rates

Regrind Resin (% of Resin blend) —
Resin (% of board weight, derived) —

Colorant % and Foam % are this app's own entered assumptions, not read off any Item's real BOM — per explicit instruction, MRPeasy's own per-color Colorant/Foam quantities are disregarded in favor of these two rates, applied uniformly to every color of a given size.

Per-Profile Weight & Line Speed

Profile Length (ft) Weight (lbs) Speed (FPM) Cycle Time (min)
Loading data…

Length is derived from each profile's own base code (not editable). Cycle Time = Length ÷ Speed, and drives both Direct Labor (Cycle Time × the DL Planned Rate above) and Overhead (Cycle Time × the Extrusion work center's own Hourly Rate in the table above) for every color of that profile. All 7 Ingredient Rates fields plus a profile's own Weight and Speed must be filled in before Planned Cost uses this formula for that profile; until then, that profile's lumber colors keep using the previous usage-weighted avg_cost average. Use the Save button at the top of the page — it saves this section together with the Workstation Hourly Rates above in one write.

PermaEdge Data

Real $/lb ingredient rates, blend split, weight/ft, and line speed for PermaEdge lumber · a separate recipe from the Extrusion Data above (Mix Color Regrind + Pellets, no Colorant/Foam) · drives lumber-for-sale pricing on Customer Pricelists only, never a furniture product's own Planned Cost

Ingredient Rates

Pellets (% of blend, derived) —

Regrind %/Pellets % are this app's own entered assumptions, applied uniformly to every PermaEdge profile below — not read off any Item's real BOM (those BOMs' quantities were confirmed not to scale with board length at all, so they aren't trusted for pricing here - see the Methodology tab).

Grinding & Pelletizing Throughput

PermaEdge is three real processes, not one: CNC Router trimmings go through a grinder to make Regrind (3/8" chips); CNC Router shavings (too light/small to sell or use as-is) get pressed into Pellets on a pelletizer; the two are then combined at the Regrind %/Pellets % split above on a Gravimetric Blender and extruded into the board. Each profile's own Regrind lbs/ft and Pellets lbs/ft (from its Weight below, split by that same %) divided by these two throughput rates drives a real Direct Labor + Overhead charge for each process, on top of Extrusion's own (below) - all three reuse the DL Planned Rate and the Extrusion work center's Hourly Rate above, since Grinding/Pelletizing are different equipment and operators but the same department, without their own separate rate (yet).

Per-Profile Weight & Line Speed

Profile Weight (lbs/ft) Speed (FPM) Cost ($/ft, preview)
Loading data…

Weight is entered PER LINEAR FOOT (not per whole board) since PermaEdge is sold custom-cut to any length a customer orders, unlike the fixed-length HDPE profiles above. The Cost preview is the FULL landed cost/ft - Materials plus all three processes' Direct Labor + Overhead (Grinding, Pelletizing, Extrusion) - live off everything currently on this page, before Save. Both Ingredient Rates fields, both Throughput fields, and a profile's own Weight and Speed must all be filled in before this formula is used for real (see the Ingredient Rates footnote above); until then, that profile is simply left off Customer Pricelists' lumber catalog rather than showing a bogus price. Use the Save button at the top of the page — it saves this section together with everything else on this page in one write.

Boards per Pallet

How many boards of each width fit on one pallet · shared by both HDPE and PermaEdge lumber of that width, regardless of length · used to round a lumber quote up to a full pallet on Create Quote

Width Boards per Pallet
Loading data…

One row per board width (3/4", 5/4", 2"x4") — independent of length or recipe, per explicit instruction. Use the Save button at the top of the page.

Firepit Burner Data

Real $ price per burner option for the two firepit tables · this app's own entered assumption — neither burner has its own real MRPeasy item/cost, so this was silently missing from Planned Cost until now

Planned Cost uses the PLAIN AVERAGE of a firepit's own LP/NG price, not a specific order's actual chosen burner — Planned Cost is one figure per SKU across every real order pooled under it, the same as every other parametric choice (color, etc.) on this app, and LP/NG have no real per-article cost to weight an average from the way a real item's avg_cost does. Each firepit's own LP/NG pair works independently — the 60" table can start pricing correctly before the 48" Round's own two fields are filled in, or vice versa. Use the Save button at the top of the page.