diff --git a/docs/crane-workshop-tours.md b/docs/crane-workshop-tours.md index b70678d..0a9581e 100644 --- a/docs/crane-workshop-tours.md +++ b/docs/crane-workshop-tours.md @@ -290,7 +290,7 @@ to run along the corridor: 3. Stamper prep 4. Material lab and PVC handling 5. **Press hall**, the long glazed stretch and the centre of the tour -6. Trimming and 100% optical inspection +6. 100% optical inspection (the presses trim inline) 7. QC and listening, with a headphone listening point 8. Finishing and packaging, where the records leave production diff --git a/docs/fleet-calculator.html b/docs/fleet-calculator.html index 9d55642..f655b62 100644 --- a/docs/fleet-calculator.html +++ b/docs/fleet-calculator.html @@ -390,7 +390,7 @@ html[data-theme=light] .iso-wrap { .iso-forklift { --b: #e3a400; } .iso-pump { --b: #3f78c0; } .iso-motor { --b: #59606b; } .iso-accu { --b: #c9473a; } .iso-comp { --b: #4f8d58; } .iso-oil { --b: #b88a2a; } .iso-belt { --b: #2b313b; } .iso-hx { --b: #8aa0b8; } .iso-lathe { --b: #3c4658; } .iso-stair { --b: #9aa0aa; } .iso-lift { --b: #737b88; } .iso-rail2 { --b: var(--iso-steel); } -.iso-server { --b: #27303f; } .iso-shower { --b: #5f9fd6; } .iso-wc { --b: #8e9aa9; } .iso-sign { --b: var(--iso-signline); } .iso-fanbox { --b: #6b7585; } +.iso-server { --b: #27303f; } .iso-shower { --b: #5f9fd6; } .iso-wc { --b: #8e9aa9; } .iso-sanit { --b: #eef2f5; } .iso-cubicle { --b: #a7b9c9; } .iso-sign { --b: var(--iso-signline); } .iso-fanbox { --b: #6b7585; } .iso-bushing { --b: #c9b8a4; } .iso-pipes { --b: #c9473a; } .iso-pipec { --b: #3f78c0; } .iso-pipec2 { --b: #6aa8ff; } .iso-svg .iso-headc { fill: var(--iso-head); } .iso-svg .iso-fence, .iso-svg .iso-fence.iso-t { fill-opacity: var(--iso-fenceo); --b: var(--iso-fence); } @@ -1245,6 +1245,8 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } var P2 = { x0: 54, y0: 31, x1: 96, y1: 57, eave: 7.0, high: 9.4 }; var P2ROWS = [{ x: 55.5, y0: 34, y1: 42, len: 39 }, { x: 55.5, y0: 43, y1: 51, len: 39 }]; var OFC = { x0: 14, y0: 42, x1: 46, y1: 57, z0: 0.3, z1: 8.3 }; + // covered link office lobby -> factory entrance; doors at both ends are centred on it + var LINK = { x0: 15.5, x1: 18.5 }; function tryPlace(list, rows, f, partial) { var out = [], ri = 0, pos = 0, i, w, it, lost = 0; @@ -1533,11 +1535,12 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } // ------------------------------------------------------------ factory // finishing and print block, 14 x 25 m on two levels at fx 92..106 (site-candidates.md, block floor plans): - // ground floor trim + optical, QC lab, stair + goods lift along the corridor, packaging behind; upper floor at +3.8 m + // ground floor optical inspection, QC lab, stair + goods lift along the corridor, packaging behind; upper floor at +3.8 m var BLK = { fx0: 92, fx1: 106, up: 3.8 }; function zoneList(cfg, up) { var z = [ [0, 0, 8, 10, "iso-z-staff", "staffentry"], + [4.6, 3.6, 8, 5.8, "iso-z-wc", "wc-w"], [4.6, 5.8, 8, 7.9, "iso-z-wc", "wc-w"], [4.6, 7.9, 8, 10, "iso-z-wc", "wc-w"], [0, 10, 16, 25, "iso-z-shop", "workshop"], [8, 2.6, 16, 10, "iso-z-shop2", "workshop"], [16, 2.6, 23, 20.5, "iso-z-galv", "galvanics"], @@ -1552,7 +1555,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } [8, 0, up ? 92 : 106, 2.6, cfg.corridor ? "iso-z-corr" : "iso-z-floor", "corridor"] ]; if (!up) z.push([92, 2.6, 96, 7.9, "iso-z-trim", "trim"], [96, 2.6, 100, 7.9, "iso-z-qc", "qc"], [100, 2.6, 106, 7.9, "iso-z-core", "block-stair"], - [92, 7.9, 106, 20.5, "iso-z-pack", "packaging"]); + [92, 7.9, 106, 20.5, "iso-z-pack", "packaging"], [100, 20.5, 103, 24.7, "iso-z-wc", "wc-e"], [103, 20.5, 106, 24.7, "iso-z-wc", "wc-e"]); return z; } function factoryInfo(sc, cfg, al) { @@ -1569,29 +1572,31 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } sc.inf("pvclab", "PVC lab, regrind and conveying", "Compound lot checks before release, granulator and vacuum conveying (quality-automation.md tiers)"); sc.inf("colourstore", "Colour store, ~180 m2", "About 100 pallet positions on four levels for tens of colours (estimate); weighing, mixing and vacuum conveying"); sc.inf("plantroom", "Central hydraulic and air plant room, ~62 m2", "Pump sets on one manifold with the accumulators, one compressed-air plant; ring mains with a valved tee at every press position (pressing-line.md)"); - sc.inf("aisle", "Crane and forklift aisle, 4.5 m", "Along the back wall from the machine door to the fire wall: heavy moves need a floor-level path"); - sc.inf("trim", "Trimming and 100 % optical inspection", "Edge trimmer and the optical station at the end of the record path (quality-automation.md)"); + sc.inf("aisle", "Crane and forklift aisle, 4.5 m", "Along the back wall from the machine door to the finishing block: heavy moves need a floor-level path"); + sc.inf("trim", "100 % optical inspection", "Optical station at the end of the record path (quality-automation.md). No separate trimmer: every Duplex cell and the Classic trim inline (pressing-line.md)"); sc.inf("qc", "QC and listening", "Sampled audio comparison (about 1 in 50) and the listening point on the tour (quality-automation.md)"); sc.inf("packaging", "Finishing and packaging", "Packing tables, shrink wrap and pallet wrapper, ~170 m2 on the ground floor of the finishing and print block (14 x 25 m on two levels, print room reserved upstairs)"); sc.inf("block-stair", "Stair and goods lift", "Connect the two levels of the finishing and print block. The crane runway ends at the press hall, so loads here move by forklift and goods lift; heavy compound stays on the ground floor (site-candidates.md, crane-workshop-tours.md)"); if (cfg.cassette) sc.inf("cassette", "Cassette duplication", "Bench line, ~40 to 80 m2 (project-timeline.md)"); if (cfg.cdr) sc.inf("cdr", "CD-R duplication, short run", "Tower duplicator and printer bench, ~20 to 40 m2 (project-timeline.md)"); sc.inf("printblock", "Finishing and print block, 14 x 25 m", - "Two levels: trim and optical inspection, the QC lab and packaging (~170 m2) on the ground floor; print room (reserve), print stock and packaging materials on the upper floor at +3.8 m (site-candidates.md)"); + "Two levels: optical inspection, the QC lab and packaging (~170 m2) on the ground floor; print room (reserve), print stock and packaging materials on the upper floor at +3.8 m (site-candidates.md)"); sc.inf("printroom", "Print room (kept in reserve)", "Upper floor at +3.8 m. In-house printing is not decided; jackets come from a print partner today (site-candidates.md, production-timeline.md)"); sc.inf("printstock", "Print stock", "Paper and board, upper floor at +3.8 m (site-candidates.md)"); sc.inf("packmat", "Packaging materials", "Sleeves, inner bags, mailers and cartons, upper floor at +3.8 m (site-candidates.md)"); sc.inf("warehouse", "Warehouse behind the fire wall", "Three racking rows; fire wall EI 60/120; forklift territory, no crane"); sc.inf("dispatch", "Dispatch, two dock doors", "Pallets staged for the trucks on the apron"); sc.inf("workshop", "Workshop and machine bay, ~200 m2", "Service bay, benches, spares, 3D printers, a lathe and a small CNC mill; machine door 4.5 x 5.0 m with the ramp; the crane parks here (crane-workshop-tours.md)"); - sc.inf("staffentry", "Staff entry (PPE, WC)", "Staff change in the office building and enter here"); + sc.inf("staffentry", "Staff entry (PPE)", "Staff change in the office building, cross by the covered link and turn in here from the start of the visitor corridor (site-candidates.md)"); + sc.inf("wc-w", "Toilets at the staff entry", "Women: 2 WC and a basin; men: 1 WC, 1 urinal and a basin; an accessible WC. Thai minimum for a factory, per up to 15 workers of each sex (Ministerial Regulation No. 39, B.E. 2537, table 2); separate toilets for women, men and disabled staff (labour welfare regulation B.E. 2548). Showers are in the office changing rooms."); + sc.inf("wc-e", "Toilets, finishing block", "Second set at the east end of the press hall, so nobody walks ~90 m back to the staff entry: women 2 WC and a basin, men 1 WC, 1 urinal and a basin. Proposed (October 2026), not yet in the parametric floor plans."); sc.inf("corridor", cfg.corridor ? "Visitor corridor, glazed, ~98 m" : "Visitor corridor: later", - cfg.corridor ? "Along the car-park wall in process order: cutting, galvanics, stamper prep, material lab, press hall, trimming and inspection, QC and listening, finishing. No PPE, filtered air." : + cfg.corridor ? "Along the car-park wall in process order: cutting, galvanics, stamper prep, material lab, press hall, optical inspection, QC and listening, finishing. No PPE, filtered air." : "The strip along the car-park wall stays free; the glazed corridor is built later."); sc.inf("crane", cfg.crane === "buy" ? "Overhead crane, 5 t" : "Crane-ready frame (crane rented)", cfg.crane === "buy" ? "EOT crane over the production compartment, runway to the end of the press hall, rail at ~5.6 m; parks over the workshop (crane-workshop-tours.md)" : "Runway brackets and rails in the frame; a crane is rented for installations"); - sc.inf("conveyor", "Records to finishing", "Schematic: pressed records travel from the presses to trimming and optical inspection"); + sc.inf("conveyor", "Records to finishing", "Schematic: trimmed records travel from the presses to optical inspection"); sc.inf("pipebridge", "Pipe bridge", "Steam, condensate and cooling water from the yard to the service trench along the press rows"); } function factoryRoof(sc, cfg, pv) { @@ -1604,12 +1609,13 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } [93, 96.5, 100, 103].forEach(function (u, k) { (k % 2 ? win : lit).push([u, u + 2.4, FFL + 4.4, FFL + 5.6]); }); lit.push([5.8, 7.4, FFL + 1, FFL + 2.2], [123, 126, FFL + 1, FFL + 2.2]); s.open(S.S[0], S.S[1], win, "iso-win").open(S.S[0], S.S[1], lit, "iso-win iso-lit"); - if (cfg.corridor) s.open(S.S[0], S.S[1], [[8.3, 105.7, FFL + 0.4, FFL + 2.7]], "iso-glass", "corridor"); + if (cfg.corridor) s.open(S.S[0], S.S[1], [[10.3, 105.7, FFL + 0.4, FFL + 2.7]], "iso-glass", "corridor"); else { - var cw = []; for (u = 10; u < 104; u += 6) cw.push([u, u + 2, FFL + 1, FFL + 2.2]); + var cw = []; for (u = 11; u < 104; u += 6) cw.push([u, u + 2, FFL + 1, FFL + 2.2]); s.open(S.S[0], S.S[1], cw, "iso-win"); } - s.open(S.S[0], S.S[1], [[3, 5, FFL, FFL + 2.5], [107, 108.2, FFL, FFL + 2.2]], "iso-door"); + // entrance door centred on the covered link (staff turn west to the staff entry, visitors east along the corridor) + s.open(S.S[0], S.S[1], [[LINK.x0 + 0.7 - FX, LINK.x1 - 0.7 - FX, FFL, FFL + 2.5], [107, 108.2, FFL, FFL + 2.2]], "iso-door", "link"); s.open(S.S[0], S.S[1], [[111.25, 114.75, FFL, FFL + 4.0], [117.25, 120.75, FFL, FFL + 4.0]], "iso-dock", "dispatch"); s.open(S.E[0], S.E[1], [[3, 6, FFL + 1, FFL + 2.3], [8, 11, FFL + 1, FFL + 2.3]], "iso-win iso-lit") .open(S.E[0], S.E[1], [[14, 16, FFL, FFL + 2.5]], "iso-door") @@ -1648,7 +1654,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } // pipe bridges and the covered crossing to water treatment are separate sprites } function factoryInside(sc, cfg, al, pv, up) { - var x0 = X(0), y0 = Y(0), x1 = X(FL), y1 = Y(FW), P = sc.P, z = FFL, xe = up ? X(BLK.fx0) : X(105.8); + var x0 = X(0), y0 = Y(0), x1 = X(FL), y1 = Y(FW), P = sc.P, z = FFL, xe = up ? X(BLK.fx0) : X(100); var fl = sc.sprite("factory"); fl.box(x0, y0, x1, y1, 0, FFL, "iso-plinth"); var zones = zoneList(cfg, up); @@ -1791,7 +1797,15 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } sc.sprite("workshop").box(X(12.4), Y(21.2), X(14.3), Y(23.2), z, z + 2.0, "iso-mill"); sc.sprite("workshop").cyl(X(10.2), Y(22.3), 0.3, z, z + 1.7, "iso-steel"); sc.tag(X(6), Y(16), z + 3.4, "Workshop", 6, "workshop"); - sc.tag(X(4), Y(5), z + 2.6, "Staff entry", 2, "staffentry"); + sc.tag(X(2.6), Y(5), z + 2.6, "Staff entry", 2, "staffentry"); + // toilets at the staff entry (fx 4.6..8): accessible WC, women (2 WC), men (WC + urinal); doors to the lobby on the west + sanitary(sc, "wc-w", z, [[7.6, 4.3, 0.28, 0.2], [7.6, 6.3, 0.28, 0.2], [7.6, 7.4, 0.28, 0.2], [7.6, 8.4, 0.28, 0.2]], + [[6.5, 6.82, 8, 6.88], [6.5, 8.92, 8, 8.98]], [[7.78, 9.3, 7.95, 9.66]], + [[7.5, 5.05, 7.95, 5.55], [4.75, 7.2, 5.2, 7.7], [4.75, 9.3, 5.2, 9.8]]); + sc.tag(X(6.3), Y(6.8), z + 2.6, "WC", 2, "wc-w"); + // inner door from the corridor start into the staff entry, and the entrance mat under the covered link + sc.sprite("staffentry").flat(rect(X(7.9), Y(0.5), X(8.1), Y(2.1)), z + 0.02, "iso-door"); + sc.sprite("link").flat(rect(LINK.x0 + 0.7, Y(0.3), LINK.x1 - 0.7, Y(1.1)), z + 0.02, "iso-door"); // galvanics (fx 16..23) if (cfg.galvanics) { var gx = X(16.45); @@ -1855,7 +1869,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } sc.sprite("plantroom").box(X(45.4), Y(17.3), X(47.3), Y(19.0), z, z + 1.5, "iso-comp"); sc.sprite("plantroom").box(X(41), Y(16.0), X(43.6), Y(17.2), z, z + 1.2, "iso-oil"); sc.tag(X(44), Y(16.5), z + 3, "Plant room", 4, "plantroom"); - // finishing and print block, ground floor (block floor plans): along the corridor trim + optical, QC lab, + // finishing and print block, ground floor (block floor plans): along the corridor optical inspection, QC lab, // stair + goods lift; packaging behind with the cassette and CD-R benches; the upper floor is drawn at 1F if (!up) finishingGF(sc, cfg, z); // warehouse: three racking rows; dispatch: staged pallets and a forklift @@ -1867,13 +1881,22 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } sc.tag(X(66), Y(16), z + 3.8, "Press hall", 7, "presshall"); sc.tag(X(19.5), Y(14), z + 3.4, cfg.galvanics ? "Galvanics" : "Galvanics (empty)", 6, "galvanics"); } + // toilets: pans, cubicle partitions, urinals and basins (schematic); fx/fy factory coordinates + function sanitary(sc, id, z, pans, parts, urinals, basins) { + var s = sc.sprite(id), q = []; + pans.forEach(function (p) { q.push([X(p[0]), Y(p[1]), function (r) { r.box(X(p[0] - p[2]), Y(p[1] - p[3]), X(p[0] + p[2]), Y(p[1] + p[3]), z, z + 0.42, "iso-sanit"); }]); }); + parts.forEach(function (p) { q.push([X((p[0] + p[2]) / 2), Y((p[1] + p[3]) / 2), function (r) { r.box(X(p[0]), Y(p[1]), X(p[2]), Y(p[3]), z, z + 2.0, "iso-cubicle"); }]); }); + urinals.forEach(function (p) { q.push([X((p[0] + p[2]) / 2), Y((p[1] + p[3]) / 2), function (r) { r.box(X(p[0]), Y(p[1]), X(p[2]), Y(p[3]), z + 0.45, z + 1.15, "iso-sanit"); }]); }); + basins.forEach(function (p) { q.push([X((p[0] + p[2]) / 2), Y((p[1] + p[3]) / 2), function (r) { r.box(X(p[0]), Y(p[1]), X(p[2]), Y(p[3]), z + 0.75, z + 0.9, "iso-sanit"); }]); }); + s.seq(q); + } // finishing and print block, ground floor (fx 92..106) function finishingGF(sc, cfg, z) { - // trim and optical inspection (fx 92..96): the record path ends at the trimmer - var tr = sc.sprite("trim"); tr.box(X(93.0), Y(3.0), X(94.1), Y(4.1), z, z + 1.1, "iso-steel"); tr.disc(X(93.55), Y(3.55), z + 1.12, 0.26, "iso-vinylc"); - var op = sc.sprite("trim"); op.box(X(94.35), Y(2.95), X(95.75), Y(4.3), z, z + 1.5, "iso-optic"); op.cyl(X(95.05), Y(3.6), 0.35, z + 1.5, z + 1.8, "iso-dome"); op.led(X(95.05), Y(3.6), z + 1.82, "iso-ledg"); - sc.sprite("trim").box(X(94.6), Y(5.0), X(95.5), Y(5.8), z, z + 0.8, "iso-bin"); - sc.tag(X(94), Y(5), z + 2.6, "Trim + optical", 4, "trim"); + // optical inspection (fx 92..96): the record path ends at the optical station; no trimmer here, + // the presses trim inline (user, October 2026) + var op = sc.sprite("trim"); op.box(X(93.0), Y(2.95), X(94.4), Y(4.3), z, z + 1.5, "iso-optic"); op.cyl(X(93.7), Y(3.6), 0.35, z + 1.5, z + 1.8, "iso-dome"); op.led(X(93.7), Y(3.6), z + 1.82, "iso-ledg"); + sc.sprite("trim").box(X(94.8), Y(3.2), X(95.7), Y(4.0), z, z + 0.8, "iso-bin"); + sc.tag(X(94), Y(5), z + 2.6, "Optical inspection", 4, "trim"); // QC lab (fx 96..100): bench on the packaging side var qb = sc.sprite("qc"); qb.box(X(96.3), Y(6.7), X(99.7), Y(7.5), z, z + 0.85, "iso-bench"); qb.seq([[X(97), Y(7.1), function (q) { q.box(X(96.5), Y(6.8), X(97.5), Y(7.4), z + 0.85, z + 1.0, "iso-instr"); q.disc(X(97), Y(7.1), z + 1.02, 0.24, "iso-vinylc"); }], @@ -1883,6 +1906,11 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } // stair and goods lift (fx 100..106), the same footprint on both levels blockCore(sc, z, false); sc.tag(X(103), Y(4.5), z + 3.0, "Stair + goods lift", 2, "block-stair"); + // toilets at the end of the back aisle (fx 100..106, fy 20.5..24.7): women (2 WC), men (WC + urinal); doors to the aisle + sanitary(sc, "wc-e", z, [[100.7, 24.15, 0.2, 0.28], [101.9, 24.15, 0.2, 0.28], [105.2, 24.15, 0.2, 0.28]], + [[101.27, 23.0, 101.33, 24.7], [104.57, 23.0, 104.63, 24.7]], [[103.6, 24.48, 103.96, 24.66]], + [[102.5, 21.1, 102.95, 21.6], [103.1, 21.1, 103.5, 21.6]]); + sc.tag(X(103), Y(22.6), z + 2.6, "WC", 2, "wc-e"); // packaging (~170 m2): packing tables, shrink wrap, pallet wrapper, cartons [[93, 13.9, 96, 15.1], [93, 10.9, 96, 12.1], [97, 10.9, 100, 12.1]].forEach(function (t) { sc.sprite("packaging").box(X(t[0]), Y(t[1]), X(t[2]), Y(t[3]), z, z + 0.9, "iso-bench"); }); var sh = sc.sprite("packaging"); sh.box(X(97), Y(14.8), X(99.8), Y(15.9), z, z + 1.3, "iso-shrink"); sh.open([X(97), Y(14.8)], [X(99.8), Y(14.8)], [[0.6, 2.2, z + 0.3, z + 1.1]], "iso-open"); @@ -2192,7 +2220,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } sc.inf("listening", "Listening room", "Start of the tour with the cutting-room window"); sc.inf("canteen", "Canteen and kitchen", "For about 40"); sc.inf("changing", "Changing rooms", "Women and men, four showers each; staff change here before crossing to the factory"); - sc.inf("link", "Covered link", "Office to the start of the visitor corridor"); + sc.inf("link", "Covered link", "From the office lobby to the door at the start of the visitor corridor, ramping up to the factory floor at +1.2 m (site-candidates.md)"); sc.inf("office-stair", "Stair and lift", "Connect the two storeys of the office building (site-candidates.md)"); sc.inf("office-wc", "Toilets", "Ground floor of the office building"); sc.inf("offices", "Offices, ~150 m2", "First floor of the office building (site-candidates.md)"); @@ -2212,19 +2240,21 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } ["E", "W", "N"].forEach(function (k, j) { var L = k === "N" ? 32 : 15, a = [], b = []; for (u = 1.2, i = 0; u < L - 1.5; u += 3, i++) { - (hash(i + j * 17) > 0.45 ? a : b).push([u, u + 1.8, o.z0 + 0.9, o.z0 + 2.7]); + if (!(k === "N" && u + 1.8 > o.x1 - LINK.x1 && u < o.x1 - LINK.x0)) (hash(i + j * 17) > 0.45 ? a : b).push([u, u + 1.8, o.z0 + 0.9, o.z0 + 2.7]); if (both) (hash(i + j * 29 + 5) > 0.45 ? a : b).push([u, u + 1.8, o.z0 + 4.8, o.z0 + 6.8]); } s.open(S[k][0], S[k][1], b, "iso-win").open(S[k][0], S[k][1], a, "iso-win iso-lit"); }); + s.open(S.N[0], S.N[1], [[o.x1 - LINK.x1 + 0.7, o.x1 - LINK.x0 - 0.7, o.z0, o.z0 + 2.5]], "iso-door", "link"); } function office(sc, cfg, level) { var o = OFC, x0 = o.x0, y0 = o.y0, x1 = o.x1, y1 = o.y1, S = sides(x0, y0, x1, y1); officeInfo(sc, cfg); // covered link (all levels) - var lk = sc.sprite("link"); - lk.seq([[15.7, 57.4], [18.3, 57.4], [15.7, 68.6], [18.3, 68.6]].map(function (p) { return [p[0], p[1], function (q) { q.box(p[0] - 0.1, p[1] - 0.1, p[0] + 0.1, p[1] + 0.1, 0, 3.5, "iso-steel", { noTop: true }); }]; })); - lk.box(15.5, 57, 18.5, 69, 3.5, 3.75, "iso-roof3"); + var lk = sc.sprite("link"), la = LINK.x0, lb = LINK.x1; + lk.prism(rect(la + 0.2, y1, lb - 0.2, FY), 0, [o.z0, o.z0, FFL, FFL], "iso-plinth", { top: "iso-g-path" }); + lk.seq([[la + 0.2, 57.4], [lb - 0.2, 57.4], [la + 0.2, 68.6], [lb - 0.2, 68.6]].map(function (p) { return [p[0], p[1], function (q) { q.box(p[0] - 0.1, p[1] - 0.1, p[0] + 0.1, p[1] + 0.1, 0, 4.0, "iso-steel", { noTop: true }); }]; })); + lk.box(la, y1, lb, FY, 4.0, 4.25, "iso-roof3"); if (level === "roof") { var s = sc.sprite("office"); s.box(x0, y0, x1, y1, 0, o.z0, "iso-plinth"); diff --git a/docs/process-flow.md b/docs/process-flow.md index 448599b..c3d821e 100644 --- a/docs/process-flow.md +++ b/docs/process-flow.md @@ -26,13 +26,13 @@ flowchart TD G2 --> C[3. Lathe cutting
lacquer] C --> D[4. Silvering and
electroforming
father, mother, stampers] D --> E[5. Stamper prep
punch, back-finish, coin] - E --> F[6. Pressing] + E --> F[6. Pressing
trim inline] PVC[PVC compound intake] --> LAB[Material lab gate] --> F REG[Regrind stream] --> LAB LBL[Labels: print inspected,
pre-dried in oven] --> F F --> G3{Artist gate:
test pressing approved} G3 --> F2[Production run] - F2 --> H[7. Finishing
trim, sleeve, shrink] + F2 --> H[7. Finishing
sleeve, shrink] H --> I[8. Packaging
and assembly] CART[Cartons and sleeves
from local partners] --> PQC[Packaging incoming QC] --> I I --> J[9. Fulfillment
warehouse, bulk, dropshipping] diff --git a/docs/site-candidates.md b/docs/site-candidates.md index bbc2de4..96d8fb6 100644 --- a/docs/site-candidates.md +++ b/docs/site-candidates.md @@ -161,7 +161,8 @@ and every equipment envelope is an estimate. - **Factory, production floor only**: 128 × 25 m at floor level +1.2 m, 16 frame bays, in process order along a 98 m glazed visitor corridor. From west to east: - - staff entry (PPE, WC); + - staff entry (PPE and toilets), reached from the start of the visitor + corridor where the covered link from the office lands; - workshop and spares, with the machine door and a 12 m vehicle ramp at the north-west corner; - the galvanics clean room with a chemical day store, open to stamper @@ -191,9 +192,13 @@ and every equipment envelope is an estimate. - **Finishing and print block**, 14 × 25 m on two levels, beyond the end of the crane runway ([plans](cnx_vinyl_parametric_payap-block.png)). - - Ground floor: trim and optical inspection, the QC lab, and - packaging (~170 m²) with packing tables, shrink wrap and a pallet - wrapper next to the fire shutter into the warehouse. + - Ground floor: optical inspection, the QC lab, and packaging + (~170 m²) with packing tables, shrink wrap and a pallet wrapper next + to the fire shutter into the warehouse. There is no separate + trimmer: every Duplex cell and the Classic trim inline + ([pressing line](equipment/pressing-line.md)). Toilets for women + and men close the end of the back aisle in the north-east corner + (proposed October 2026, not yet in the plans). - Upper floor at +3.8 m: a print room kept in reserve (in-house printing is not decided; jackets come from a print partner today, [production timeline](production-timeline.md)), the print stock @@ -205,6 +210,20 @@ and every equipment envelope is an estimate. and a small CNC mill among the tools ([crane, workshop and tours](crane-workshop-tours.md)). - The 5 t crane runs from the west wall to the end of the press hall. + - **Toilets** in two sets, so nobody on the floor is more than about + 50 m from one (layout estimate): at the staff entry (women 2 WC, men + 1 WC and 1 urinal, an accessible WC, basins) and at the east end of + the back aisle in the finishing block (women 2 WC, men 1 WC and 1 + urinal, basins). For a factory, Ministerial Regulation No. 39 + (B.E. 2537) under the Building Control Act, table 2, asks per up to + 15 workers of each sex for: men 1 WC, 1 urinal, 1 bathroom and 1 + basin; women 2 WC, 1 bathroom and 1 basin + ([text](https://www.bsa.or.th/%E0%B8%81%E0%B8%8E%E0%B8%AB%E0%B8%A1%E0%B8%B2%E0%B8%A2/%E0%B8%81%E0%B8%8E%E0%B8%81%E0%B8%A3%E0%B8%B0%E0%B8%97%E0%B8%A3%E0%B8%A7%E0%B8%87-%E0%B8%89%E0%B8%9A%E0%B8%B1%E0%B8%9A%E0%B8%97%E0%B8%B5%E0%B9%88-39-%E0%B8%9E%E0%B8%A8-2537.html)). + The labour welfare regulation (B.E. 2548) asks for separate toilets + for men, women and disabled staff + ([summary](https://thailawyers.com/labour-welfare-in-thailand)). A + shift stays under 15 of each ([scale](scale.md#people)), and the + showers are in the office changing rooms. - **PVC silos** (proposed), outside on the north side of the lane: - two for black, two for standard colours, ~50 m³ each (estimate); - a big-bag filling station; @@ -227,8 +246,8 @@ and every equipment envelope is an estimate. acoustic lining, the listening room and the archive (mobile shelving on the ground slab, [facility security](facility-security.md#archive-room-mobile-shelving)). Staff change here - before crossing to the factory, whose staff entry keeps only PPE and a - WC. + before crossing to the factory, whose staff entry keeps only PPE and + toilets. - First floor: the offices (~150 m²), a meeting and training room (the [Payap programmes](payap-partnership.md)), a meeting room, the IT and server room, toilets, a pantry, and a flexible room for a second