Press hall: five Duplex bays and four Classic positions (balanced at 60 % specials)
Deploy test site / deploy (push) Successful in 44s

User (October 2026): "change the hall layout" after the finding that the
60/40 floor split leaves the Classics about half loaded at 60 %+
specials (specials run only on the Duplex systems).

- Press hall now keeps five Duplex bays (four along the visitor
  corridor, the fifth at the head of the second row) and four Classic
  positions: 550 + 200 = ~750 m2 of ~870 m2, ~73/27 by floor, 10 to 4 by
  presses; launch plant fills one of each, growth adds Duplex first.
- Full hall: ~2.9 to 4.4M records a year at 60 % specials, Classics ~80
  to 100 % loaded (60/40 gave ~2.3 to 3.6M); ~3.2 to 4.4M at ~20 %;
  fourteen presses as before: ~2.1 to 2.5 t/h steam, up to ~1.8 MW
  cooling, a utility phase of its own.
- pressing-line.md, scale.md, site-candidates.md, crane-workshop-tours.md,
  roadmap.md, README (FreeCAD model still the earlier layout, not
  redrawn); calculator preset "Full hall (5 D + 4 C)" and ladder; plant
  view reserves 5 Duplex bays and 4 Classic positions; business plan
  draft 0.2 rebuilt.

Checks: renderer 720 checks and functional checks pass, calculator
regression 0 fails, level checks clean; PDF 47 pages, TOC filled.
This commit is contained in:
grabowski committed 2026-10-16 20:57:51 +07:00
1 parent b3e8e4272b
commit 3f1e4452b8
11 files changed
+69 -66

No files matched your search

+11 -11
View File
@@ -612,7 +612,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
<button type="button" data-p="levers">Investor levers (216M)</button>
<button type="button" data-p="lean">Lean: bought stampers, outsourced cutting</button>
<button type="button" data-p="five">Five-press fleet (second Duplex)</button>
<button type="button" data-p="full">Full hall 60/40 (4 D + 6 C)</button>
<button type="button" data-p="full">Full hall (5 D + 4 C)</button>
</div>
</header>
@@ -814,8 +814,8 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
<section class="card">
<h2>From small to fully equipped</h2>
<p class="note" style="margin-top:0">Fleets from the launch plant to a full Payap press hall (about 870 m²,
laid out 60/40 by floor for Duplex systems because the plant focuses on special pressings: four
Duplex bays and six Classic positions, ~740 m²), then the same floor filled Classic-led or with
laid out for Duplex systems because the plant focuses on special pressings: five Duplex bays
and four Classic positions, ~750 m², balanced by output at 60 % specials), then the same floor filled Classic-led or with
Duplex systems only, for comparison, at the current settings and plant configuration. Click a row to load it.</p>
<div class="tscroll"><table id="ladT"></table></div>
</section>
@@ -1239,9 +1239,9 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
function X(fx) { return FX + fx; }
function Y(fy) { return FY + fy; }
// Press hall: 2 rows, 8 m deep. Slot lengths follow the calculator's floor
// figures (110 m2 per Duplex bay, 50 m2 per Classic, 870 m2 hall). Laid out 60/40 by floor
// for Duplex systems (special pressings first, October 2026): 4 Duplex bays + 6 Classic positions.
var HALL_D = 4, HALL_C = 6;
// figures (110 m2 per Duplex bay, 50 m2 per Classic, 870 m2 hall). Laid out for Duplex
// systems (60 %+ specials, October 2026): 5 Duplex bays + 4 Classic positions, ~73/27 by floor.
var HALL_D = 5, HALL_C = 4;
var HALL = { cap: 870, aD: 110, aC: 50 };
var HROWS = [{ x: X(40), y0: Y(3.6), y1: Y(11.6), len: 52 }, { x: X(47.8), y0: Y(12.4), y1: Y(20.4), len: 44.2 }];
var LTOT = 52 + 44.2, WD = HALL.aD / HALL.cap * LTOT, WC = HALL.aC / HALL.cap * LTOT;
@@ -1565,7 +1565,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
sc.inf("factory", "Factory, 128 x 25 m",
"Production floor only (Payap scenario model): workshop, galvanics, stamper prep, PVC lab, colour store, press hall, finishing block; warehouse and dispatch behind the fire wall. Monopitch roof, low eave 7.0 m, high side 11.4 m.");
sc.inf("presshall", "Press hall, ~870 m2",
al.Dh + " Duplex system" + (al.Dh === 1 ? "" : "s") + " and " + al.Ch + " Classic" + (al.Ch === 1 ? "" : "s") + " in the hall; laid out 60/40 by floor for special pressings: 4 Duplex bays and 6 Classic positions, ~740 m2 (pressing-line.md)" +
al.Dh + " Duplex system" + (al.Dh === 1 ? "" : "s") + " and " + al.Ch + " Classic" + (al.Ch === 1 ? "" : "s") + " in the hall; laid out for special pressings: 5 Duplex bays and 4 Classic positions, ~750 m2, balanced by output at 60 % specials (pressing-line.md)" +
(al.p2need ? "; " + (al.ovD + al.ovC) + " more in the phase 2 building" : ""));
sc.inf("galvanics", cfg.galvanics ? "Galvanics clean room (Pheenix Alpha line)" : "Galvanics room: stampers bought in",
cfg.galvanics ? "PASU, PPPU, PDPU, PMPB; one PDPU covers full-capacity demand, a second is redundancy (galvanics.md). Room-in-room under the crane, open to stamper prep." :
@@ -1683,7 +1683,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
fl.flat(pts, z + 0.015, "iso-slot iso-empty", id);
sc.inf(id, sl.t === "D" ? "Duplex bay (room reserved)" : "Classic position (reserved)",
sl.t === "D" ? "Growth option: room, utility modules and ring-main tees reserved, not in the investment (pressing-line.md)" :
"Classic position kept for growth (option, not in the investment); the hall is laid out 60/40 for Duplex systems (pressing-line.md)");
"Classic position kept for growth (option, not in the investment); the hall is laid out mainly for Duplex systems (pressing-line.md)");
} else fl.flat(pts, z + 0.015, "iso-slot", sl.t === "D" ? "duplex-" + sl.n : "classic-" + sl.n);
if (!sl.e && sl.t === "D") {
var cx = (sl.x0 + sl.x1) / 2, cy = (sl.y0 + sl.y1) / 2;
@@ -3080,9 +3080,9 @@ function caseNow() {
return "";
}
const LADDER = [
// Duplex systems first: the hall is laid out 60/40 by floor for them (special pressings, October 2026)
// Duplex systems first: the hall is laid out for 5 Duplex + 4 Classics (60 %+ specials, October 2026)
["Launch plant", 1, 1], ["Second Duplex", 2, 1], ["Step 1", 3, 2], ["Step 2", 4, 3],
["Full hall 60/40", 4, 6], ["Same floor, Classic-led", 2, 11], ["Same floor, Duplex only", 7, 0],
["Full hall", 5, 4], ["Same floor, Classic-led", 2, 11], ["Same floor, Duplex only", 7, 0],
];
// presets: fleet plus plant configuration; prices, case and assumptions stay as they are
const CFG0 = Object.fromEntries(CFGK.map(k => [k, S0[k]]));
@@ -3092,7 +3092,7 @@ const PRESETS = {
levers: { ...LAUNCH, solar: "ppa", metro: "launch", galvPrice: "oms", corridor: "later" },
lean: { ...LAUNCH, galv: "bought", cut: "out" },
five: { mode: "fleet", dFleet: 2, cFleet: 1, ...CFG0 },
full: { mode: "fleet", dFleet: 4, cFleet: 6, ...CFG0 },
full: { mode: "fleet", dFleet: 5, cFleet: 4, ...CFG0 },
};
let S = { ...S0 }, A = { ...A0 };