Add factory layout concept diagram and fix fire-suppression section structure

- docs/facility-layout.drawio: zoned floor concept (production, galvanics,
  utilities, logistics, support) with material and stamper flow arrows
- PNG and PDF exports alongside the source
- facility-security.md: suppression subsection no longer splits the fire
  safety bullet list; clean agent wording updated to FK-5-1-12
This commit is contained in:
grabowski committed 2026-07-17 13:41:23 +07:00
1 parent 0b79c4fb73
commit 6c1b1e7bbd
4 files changed
+189 -3

No files matched your search

+155
View File
@@ -0,0 +1,155 @@
<mxfile host="app.diagrams.net" modified="2026-07-17T00:00:00.000Z" agent="cnx-vinyl-planning" version="24.0.0" type="device">
<diagram id="cnx-factory-layout" name="Factory Layout Concept">
<mxGraphModel dx="1600" dy="1000" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="building" value="CNX Vinyl Factory Layout (concept, not to scale)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#000000;strokeWidth=2;verticalAlign=top;fontSize=16;fontStyle=1;align=center;spacingTop=4;" vertex="1" parent="1">
<mxGeometry x="60" y="100" width="1280" height="800" as="geometry" />
</mxCell>
<mxCell id="pvroof" value="Solar PV array on the roof (whole building)" style="text;html=1;align=center;fontSize=12;fontStyle=2;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="360" y="55" width="380" height="30" as="geometry" />
</mxCell>
<mxCell id="bess" value="BESS enclosure, 271 kWh LiFePO4 (separated, outside wall)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#D6B656;strokeWidth=3;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="890" y="30" width="200" height="55" as="geometry" />
</mxCell>
<mxCell id="ctower" value="Cooling tower (outside)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1160" y="30" width="150" height="55" as="geometry" />
</mxCell>
<mxCell id="mastering" value="Mastering and Cutting Room (low vibration, far from presses and compressor)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="80" y="140" width="240" height="160" as="geometry" />
</mxCell>
<mxCell id="server" value="Server / IT (clean agent)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#D6B656;strokeWidth=3;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="80" y="320" width="110" height="90" as="geometry" />
</mxCell>
<mxCell id="archive" value="Master and Stamper Archive (fire rated, clean agent)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;strokeWidth=3;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="210" y="320" width="110" height="90" as="geometry" />
</mxCell>
<mxCell id="qc" value="QC and Listening Room (test pressing approval)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="80" y="430" width="240" height="90" as="geometry" />
</mxCell>
<mxCell id="offices" value="Offices" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="80" y="540" width="240" height="140" as="geometry" />
</mxCell>
<mxCell id="entrance" value="Entrance, Reception and Visitor Control (access control, PPE issue)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="80" y="700" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="airlock" value="Decon Airlock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="360" y="200" width="70" height="110" as="geometry" />
</mxCell>
<mxCell id="galvanics" value="Galvanics Clean Room: Silvering, Pre-plate, Electroforming Cells, Electro-clean (positive pressure)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="440" y="140" width="260" height="170" as="geometry" />
</mxCell>
<mxCell id="watertreat" value="Water Treatment and Metal Recovery (zero discharge)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="710" y="140" width="150" height="170" as="geometry" />
</mxCell>
<mxCell id="chemstore" value="Chemical Storage (locked)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#D6B656;strokeWidth=3;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="440" y="320" width="130" height="70" as="geometry" />
</mxCell>
<mxCell id="stamperprep" value="Stamper Prep: Punch, Back-finish, Coining" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="580" y="320" width="170" height="70" as="geometry" />
</mxCell>
<mxCell id="semiauto" value="Semi-Auto Press Area: Newbilt Duplex, 2x HRP 12 press, VEX 50 extruder (splatter, color, small runs)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="360" y="420" width="240" height="220" as="geometry" />
</mxCell>
<mxCell id="autopress" value="Automated Press Area: Pheenix AD12 row (volume production, 1 operator per 4 presses)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="620" y="420" width="240" height="220" as="geometry" />
</mxCell>
<mxCell id="trim" value="Trimming and Label Dry Oven" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="360" y="660" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="hydraulic" value="Hydraulic Aggregate Room (outside pressing room)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="620" y="660" width="150" height="100" as="geometry" />
</mxCell>
<mxCell id="boiler" value="Boiler / Steam Room (outside wall, DIW regs)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#D6B656;strokeWidth=3;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="900" y="140" width="130" height="110" as="geometry" />
</mxCell>
<mxCell id="compressor" value="Compressor Room (far from cutting room)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1050" y="140" width="130" height="110" as="geometry" />
</mxCell>
<mxCell id="chiller" value="Chiller Room (closed loop cooling)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1190" y="140" width="130" height="110" as="geometry" />
</mxCell>
<mxCell id="electrical" value="Electrical Switchroom and Deye Inverters" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="900" y="270" width="200" height="110" as="geometry" />
</mxCell>
<mxCell id="pvcstore" value="PVC Material Storage, Grinder and Recycling (80/20 feed mix)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="900" y="420" width="180" height="160" as="geometry" />
</mxCell>
<mxCell id="packaging" value="Packaging: Cartons and Sleeves (local partners)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="900" y="600" width="180" height="140" as="geometry" />
</mxCell>
<mxCell id="warehouse" value="Finished Goods Warehouse" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="1100" y="420" width="220" height="200" as="geometry" />
</mxCell>
<mxCell id="dropship" value="Dropshipping Fulfillment Corner" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="1100" y="640" width="220" height="100" as="geometry" />
</mxCell>
<mxCell id="dock" value="Loading Dock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=11;horizontal=0;" vertex="1" parent="1">
<mxGeometry x="1350" y="470" width="70" height="200" as="geometry" />
</mxCell>
<mxCell id="legendtitle" value="Legend" style="text;html=1;align=left;fontSize=12;fontStyle=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="370" y="775" width="100" height="20" as="geometry" />
</mxCell>
<mxCell id="leg1" value="Production" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="370" y="800" width="150" height="26" as="geometry" />
</mxCell>
<mxCell id="leg2" value="Galvanics and Chemistry" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="530" y="800" width="150" height="26" as="geometry" />
</mxCell>
<mxCell id="leg3" value="Utilities" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="690" y="800" width="150" height="26" as="geometry" />
</mxCell>
<mxCell id="leg4" value="Storage and Logistics" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="370" y="836" width="150" height="26" as="geometry" />
</mxCell>
<mxCell id="leg5" value="Offices and Support" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="530" y="836" width="150" height="26" as="geometry" />
</mxCell>
<mxCell id="leg6" value="Safety critical (thick border)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;strokeWidth=3;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="690" y="836" width="150" height="26" as="geometry" />
</mxCell>
<mxCell id="f1" value="PVC" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#82B366;fontSize=10;html=1;" edge="1" parent="1" source="pvcstore" target="autopress">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="f2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#6C8EBF;fontSize=10;html=1;" edge="1" parent="1" source="semiauto" target="trim">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="f3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#6C8EBF;fontSize=10;html=1;" edge="1" parent="1" source="autopress" target="trim">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="f4" value="records" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#6C8EBF;fontSize=10;html=1;" edge="1" parent="1" source="trim" target="packaging">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="f5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#82B366;fontSize=10;html=1;" edge="1" parent="1" source="packaging" target="warehouse">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="f6" value="ship" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#82B366;fontSize=10;html=1;" edge="1" parent="1" source="warehouse" target="dock">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="f7" value="scrap regrind" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#82B366;fontSize=10;html=1;" edge="1" parent="1" source="trim" target="pvcstore">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="s1" value="lacquer" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#D79B00;fontSize=10;html=1;" edge="1" parent="1" source="mastering" target="airlock">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="s2" value="nickel shells" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#D79B00;fontSize=10;html=1;" edge="1" parent="1" source="galvanics" target="stamperprep">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="s3" value="stampers" style="edgeStyle=orthogonalEdgeStyle;rounded=0;dashed=1;strokeColor=#D79B00;fontSize=10;html=1;" edge="1" parent="1" source="stamperprep" target="autopress">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

+34 -3
View File
@@ -67,15 +67,46 @@ option per room.
- **Fire detection and alarm** throughout; suppression matched to each zone
(hot PVC and hydraulic oil in pressing, chemistry in galvanics, paper and
cartons in packaging/finished goods, and the boiler room).
- **Boiler room safety**: the steam generator (10 bar, 180 °C) needs its own
room, safety valves and interlocks, and inspection per Thai boiler
regulations (Department of Industrial Works requirements, licensed boiler
operator).
room, safety valves, fuel shutoff interlocks, and inspection per Thai
boiler regulations (Department of Industrial Works requirements, licensed
boiler operator).
- **Emergency equipment in galvanics**: eyewash stations and emergency
shower at the plating line, spill kits, and neutralizing agents.
- **Emergency lighting, marked exits, assembly point**, and first-aid
coverage on every shift.
### Suppression design position: zoned, not full-building gas
A full-building gas suppression system is ruled out: gas agents only work in
sealed volumes that can hold concentration, which a ventilated production
hall with people and loading doors cannot, and CO2 flooding is lethal in
occupied spaces. The design position is zoned suppression:
- **Clean agent gas** (FK-5-1-12, sold as Novec 1230, or inert gas such as
IG-541) only in small, sealed, high-value rooms: the server/IT room,
electrical switchrooms, PLC/control cabinets (in-cabinet micro systems),
and above all the master/stamper archive, where sprinkler water would
destroy lacquers and paper records and corrode the metal parts even in a
minor event.
- **Water** (sprinklers, or water mist where equipment matters) for the
large spaces: production, warehouse, and packaging/finished goods, where
paper cartons are the largest fire load in the building. The press hall's
specific risk is a hydraulic oil spray fire (200 L at 180 bar); water
mist handles oil fires well and is gentler on machines than deluge.
- **Battery stack (BESS)**: gas does not stop lithium thermal runaway. Per
NFPA 855 practice the stack needs off-gas and early-smoke detection,
electrical isolation on alarm, physical separation from production
(ideally its own enclosure), and deflagration venting. Detection and
containment over suppression.
- **Galvanics**: low fire load (aqueous baths); local clean-agent
protection for rectifier cabinets is sufficient.
The property insurer will drive much of the final specification, so involve
them before the design is fixed. The archive gas system and the BESS
detection affect room layout and belong in the site design brief early.
## Plant systems and monitoring
- **Utility monitoring and interlocks**: fume-extraction interlocks on the