- Cover and section 6.2 now use the isometric plant view of the plant and business plan calculator, drawn with each version's own preset: the cover (roofs, no labels), Figure 8 the site from above, Figure 9 the ground floor cut open, Figure 10 the press hall close up. The FreeCAD aerial render, the Mueang Chi site plan and the hall layout sketch are no longer in the plan; the captions say the calculator draws the Payap scenario model while the 6.2 text and zone table are the Mueang Chi hall. - New section 5.5 "The software: plant overview, factory console and artist platform" with six screenshots of the demos: the plant overview (simulated SCADA), the factory console press floor and its ERPNext link, the artist ordering offer, fan funding and the record passport. Simulated data is marked as such; the platform name stays undecided. - Figures renumbered (budget card 11, cash 12) and named in the section 15 source table. Renders in docs/renders/calculator/ and docs/renders/demos/; README bullet updated.
1055 lines
95 KiB
Python
1055 lines
95 KiB
Python
"""Part B: what makes it top-notch (traceability, metrology, QC, efficiency); site and building;
|
||
regulatory (BOI and licences). Draft 0.3, October 2026: one text for both versions, Plan A (~180M
|
||
THB, the launch plant with six cost levers) and Plan B (~225M THB, five presses, everything in); the
|
||
plan-specific passages switch with plan_variant.pick(), called inside blocks()."""
|
||
from plan_lib import H1, H2, H3, P, B, N, T, KV, IMG, CALL, PB
|
||
from plan_variant import pick, is_a, is_b, label, name
|
||
|
||
|
||
def blocks():
|
||
return [
|
||
# ------------------------------------------------- 5 top-notch
|
||
H1("5. What makes it top-notch: traceability, metrology, QC and efficiency"),
|
||
P("A pressing plant makes records. A top-notch plant knows, for every record it has ever made, "
|
||
"exactly how it was made, can prove it to the customer, and wastes as little energy, water and "
|
||
"material as the physics allows. This section is the heart of the plan, because these four "
|
||
"capabilities are what a regional customer cannot buy today and what justifies export-grade "
|
||
"pricing. None of it is exotic: the instruments exist, the data interfaces exist, and the "
|
||
"engineering is well understood. What is unusual is putting all of it in one plant from the "
|
||
"start rather than bolting it on later. The plan makes that possible: with the cutting "
|
||
"room and galvanics in-house from the first release, the whole chain from lacquer to box runs "
|
||
"through our own floor, with no bought-in stamper whose history we cannot see."),
|
||
|
||
H2("5.1 Traceability: every record knows its history"),
|
||
P("Every step of production is logged continuously, so that every record is traceable end to end "
|
||
"for the customer. This is a fixed requirement and the core specification for the plant's "
|
||
"software. The identity of a record is **stamper + press + cycle timestamp + side**, and "
|
||
"everything else hangs off that key."),
|
||
P("**It is also the part of the plan the industry responds to.** At Making Vinyl Europe 2026 in "
|
||
"Haarlem most people the team talked to were strongly interested in full traceability. For "
|
||
"Sibert's representative it was one of the reasons to talk to a newcomer at all: without it he "
|
||
"would have advised strongly against the plan, and seeing buildfor.life's software and data "
|
||
"work told him the project comes from the right direction. That is supplier feedback, not buyer "
|
||
"price validation, which is still open; but it shows where a newcomer's credibility comes from, "
|
||
"and why the data side leads in every supplier and investor conversation."),
|
||
T(["Stage", "What is recorded"], [
|
||
["Audio intake", "File received, checksums, versions, who handled it, approval trail; the files "
|
||
"themselves sit in an encrypted, access-logged client vault"],
|
||
["Mastering", "Session log, engineer, settings, the artist's approvals at the master-plan and "
|
||
"master gates"],
|
||
["Cutting", "Lacquer serial, lathe parameters and the Sillitoe lathe's own session files (cue "
|
||
"sheet, groove export, stylus hours), microscope check, dead-wax scribe"],
|
||
["Galvanics", "Silvering and plating bath IDs, rectifier current and ampere-hours, bath "
|
||
"chemistry, father/mother/stamper genealogy (which stamper came from which mother "
|
||
"from which father); all in-house from launch"],
|
||
["Stamper preparation", "Back-finish, punch and coin as station check-ins (the Sibert machines "
|
||
"have no data interface); the punched centre slug kept as the stamper's "
|
||
"test coupon"],
|
||
["Pressing", "Press, operator, shift, stamper serials, per-cycle temperatures, pressures and "
|
||
"cycle time, PVC compound lot and virgin/regrind mix, label lot"],
|
||
["Quality control", "Optical result for every record, audio score for every sampled record, "
|
||
"test-pressing approval, reject counts and reasons"],
|
||
["Finishing and packaging", "Trimming, sleeving, carton and sleeve lots; every unit's dead-wax "
|
||
"code checked against its jacket barcode"],
|
||
["Fulfilment", "Warehouse location, shipment or dropshipping consignment, carrier tracking per "
|
||
"end customer"],
|
||
["Archive", "Father and mother of every side, with box and shelf position"],
|
||
], widths_mm=[38, 132]),
|
||
H3("How it is built: one system of record, machine data beside it"),
|
||
P("**ERPNext is the plant's only system of record** (decided October 2026). ERPNext is an "
|
||
"open-source ERP with no licence fee. Every record of the business and of production lives in "
|
||
"it: customers, prices, orders and the three artist approval gates, invoices and payments, stock "
|
||
"and compound lots, work orders and job cards, quality inspections, and the serial number of "
|
||
"every lacquer, father, mother and stamper with its parent. What the project builds are tools "
|
||
"and interfaces that read and write ERPNext: station kiosks, the customer portal, the artist "
|
||
"platform, instrument adapters and reports. None of them keeps business records of its own, so "
|
||
"a trace and an invoice always point at the same order."),
|
||
P("**Machine data stays beside it, keyed to it.** What machines produce at machine speed "
|
||
"(per-cycle press rows, the optical result of every record, audio captures, instrument raw files, "
|
||
"1 Hz time series of temperatures, energy and water) is too much for an ERP. It lives in a "
|
||
"machine-data store on the plant's core server, every row carrying the ERPNext job card, batch "
|
||
"and serial number it belongs to; ERPNext receives totals and verdicts per run, lot and shipment. "
|
||
"Rows are written once and never changed (append-only, each event carrying the hash of the one "
|
||
"before), and corrections are new entries that reference the old, so the record a customer sees "
|
||
"can be trusted."),
|
||
P("**It runs on a fleet B4L already operates.** Every plant server is a NixOS machine declared in "
|
||
"B4L's existing fleet repository (its clan), so a failed machine is rebuilt from the repository "
|
||
"instead of by hand, and the plant reuses the fleet's mesh network, DNS, monitoring and backups "
|
||
"instead of building them again. The factory application (cnx-factory, its own repository) uses "
|
||
"the Rust web stack B4L already runs for its other tools. Vendor instrument PCs stay appliances "
|
||
"that export into this estate and host nothing of ours. The plant runs without the internet: a "
|
||
"WAN outage stops only the customer portal, off-site backup and remote support, which catch up "
|
||
"when it returns."),
|
||
P("**Machine data access is a purchasing condition.** Every equipment RFQ carries a data clause: "
|
||
"for the presses, OPC UA (or Siemens S7) read access licensed and enabled, the full tag list "
|
||
"with the cycle counter as a tag, and no vendor cloud agent as a warranty condition; for the "
|
||
"boilers, chillers and compressor, Modbus with the register map delivered; for the air "
|
||
"conditioning, BACnet or Modbus read access to the building management system. The question is "
|
||
"free before a purchase order and expensive after it."),
|
||
B([
|
||
"**Log at the source.** Machine data comes from the machine, never from transcription; manual "
|
||
"steps get a badge tap and a scan at a station kiosk, not paperwork.",
|
||
"**Counters, not clocks.** Every press cycle carries the press's own cycle counter and every "
|
||
"measurement the serial of the part it was read from; wall-clock time is recorded, but two "
|
||
"systems are never joined on it.",
|
||
"**Environment attached.** Temperature, humidity and particulates of every zone are logged on "
|
||
"the same timeline, and each press cycle carries a snapshot of them.",
|
||
"**Operators see it first.** Every live value is shown at the station where it can change the "
|
||
"next cycle before it becomes a report. Sibert's advice after Haarlem was exactly this: "
|
||
"feedback loops the staff use to improve production decide whether a plant succeeds.",
|
||
"**Kept as long as it matters.** Logs for the life of the customer relationship; genealogy for "
|
||
"as long as the archive holds the metal.",
|
||
]),
|
||
P("**Identity travels with the product.** The matrix code scribed into the lacquer's dead wax "
|
||
"propagates through father, mother and stamper to every pressed record. A small angular fiducial "
|
||
"scribed beside it makes each part's rotation camera-readable at any stage, and lets the packing "
|
||
"station read the code on a finished record and match it to the jacket barcode. Nickel parts "
|
||
"additionally get a laser-marked serial on the back, as the optical-disc industry marked its "
|
||
"stampers; lacquers are never lasered (nitrocellulose is flammable) and records are never lasered "
|
||
"(burning PVC releases hydrochloric acid)."),
|
||
P("**The metal archive.** Decided in October 2026: the father **and** the mother of every side are "
|
||
"archived. As a rule of thumb a mother yields about ten stamper sets and a father five to ten "
|
||
"mothers, so a worn mother is regrown from the father without recutting the lacquer, and a "
|
||
"repress years later starts from metal the plant already holds. The archive room gets mobile "
|
||
"shelving (section 6.2); every box and shelf position has an address, and each part's serial "
|
||
"number in ERPNext carries its location, so a repress order says which box to pull."),
|
||
CALL("Why this is a product feature, not an internal file", [
|
||
"**Customers see their order.** A per-order portal reads the customer's own records and machine "
|
||
"data, without exposing anyone else's: progress through the three gates, copies pressed so far, "
|
||
"the compound lot's lab certificate, the listening checks. The investor demo shows the per-copy "
|
||
"version, a 'record passport' reached from the code on the sleeve (IDs simulated). Labels ask "
|
||
"about pre-release security and provenance before they send masters; this answers both.",
|
||
"**A complaint resolves backwards.** One noisy record resolves to its stamper, press, cycle, "
|
||
"operator, compound lot and packaging lot, and from the stamper back through mother and father "
|
||
"to the lacquer and the approved master. Root cause takes minutes, not a week of guessing.",
|
||
"**Stampers retire on data.** Audio scores trending down against a stamper's play count become "
|
||
"an automatic retirement signal instead of a customer complaint.",
|
||
"**Represses start from the shelf.** The archive location of every father and mother sits on its "
|
||
"serial number, so a repress is a regrow, not a recut.",
|
||
]),
|
||
P("**Cost and build.** The factory software is estimated at USD 60k to 170k, the ERPNext "
|
||
"implementation (configuration with Thai tax through Ecosoft's Thai localisation, the "
|
||
"integration, packaging for NixOS) at USD 15k to 50k, and the artist platform's public side at "
|
||
"USD 40k to 90k: the 115k to 310k software block in section 8 (estimates). No vendor sells a "
|
||
"turnkey version; it is a development project. Version 1 (intake, gates, genealogy, press runs "
|
||
"and cycles, the compound lot gate, packaging scan, shipments) goes live during commissioning, "
|
||
"and the network, servers and edge collectors go in before the machinery arrives, so vendor "
|
||
"engineers plug into a finished network and the first test pressings are already in the system. "
|
||
"Running it needs one automation and IT engineer from the build onward. Open design work: whether "
|
||
"the semi-automatic HRP 12 presses expose PLC data or need the priced sensor fallback (asked in "
|
||
"the Newbilt re-quote); how a press hands its cycle counter to the vision system; reading the "
|
||
"scribed dead-wax code with a camera on black and coloured vinyl (tested with samples first); "
|
||
"retention and PDPA handling for operator-linked records; Thai payroll and BOI raw-material "
|
||
"reporting in ERPNext."),
|
||
|
||
H2("5.2 Metrology: measuring the metal before it presses a single record"),
|
||
P("A stamper is a 0.2 to 0.3 mm nickel disc carrying a spiral ridge 40 to 80 microns wide and about "
|
||
"28 microns high, 200 to 350 turns per inch. Industry practice, even at respected stamper houses, "
|
||
"is to check its thickness with a hand micrometer at ten points on sacrificial blanks, with "
|
||
"nothing logged. A top-notch plant measures the metal without contact, per serial, and makes an "
|
||
"accept or reject decision on data before the next plating generation or the press mounting."),
|
||
T(["Instrument", "What it measures", "How it is used", "When"], [
|
||
["XRF thickness gauge (Fischer or Bowman class)", "Nickel deposit thickness, non-destructive",
|
||
"Per serial, read on the outer land zones; replaces the ten-point micrometer. Target total "
|
||
"thickness variation 10 to 20 microns", "At launch"],
|
||
["Inline machine vision", "Cosmetic defects", "100% of parts, fast", "At launch"],
|
||
["3D laser confocal microscope (Keyence VK-X class)", "Groove cross-section, wall roughness, "
|
||
"micro-defects; 20 nm vertical, ~120 nm lateral resolution, non-contact", "Sampled radial "
|
||
"zones (lead-in, outer, mid, inner) on fathers, mothers and stampers; the full spiral is not "
|
||
"feasible and not needed. The optical-disc industry verified its nickel stampers with this "
|
||
"instrument class", pick("From revenue", "At launch")],
|
||
["Wide-area optical profiler (Keyence VR-6000 class)", "Form, flatness, gross defects; 0.1 "
|
||
"micron height resolution, ~1 s per field, HDR mode for mirror-bright nickel",
|
||
"Fast whole-part mapping", pick("From revenue", "At launch")],
|
||
["Stylus profilometer", "Traceable reference", "Calibrates the optical instruments",
|
||
"With the optical instruments"],
|
||
], widths_mm=[38, 46, 56, 30], font_pt=8.5),
|
||
P("**Hardness comes free with the punch.** The Sibert punch leaves one centre slug per stamper. "
|
||
"Marked with the part serial, it is a per-stamper coupon for hardness and thickness, logged "
|
||
"against the plating bath, as the optical-disc industry measured stamper hardness on the punched "
|
||
"centre rather than on the part. A fresh nickel bath plates soft at first, which changes how "
|
||
"stampers punch and finish, so this is the cheapest bath check the plant has. The structure of "
|
||
"that industry's stamper specification (thickness, flatness, hardness, back roughness, centre "
|
||
"hole, eccentricity, burr, visual defects) is the model for the acceptance specification this "
|
||
"plant still has to write."),
|
||
P("Integration is real but not turnkey: the instruments export CSV and raw 3D data and support "
|
||
"scripting, but there is no off-the-shelf connector to a factory system. A small watcher at the "
|
||
"metrology bench stamps each result with the part serial scanned from its back, writes the "
|
||
"verdict to the part's quality inspection in ERPNext and the raw file to the machine-data store."),
|
||
CALL(f"Metrology in {name()}: " + pick("the launch tier", "the full stack at launch"), pick([
|
||
"**At launch: XRF, inline vision and the audio station**, USD 170k to 460k (5.6M to 15.2M THB, "
|
||
"estimate, section 8). Every father, mother and stamper still gets its nickel thickness "
|
||
"measured per serial by XRF and its surface screened by vision, and every record is still "
|
||
"inspected optically on the three presses, logged per cycle and sampled by the audio station "
|
||
"(section 5.3).",
|
||
"**From revenue: the laser confocal and the wide-area profiler**, USD 180k to 350k (estimate). "
|
||
"Buying them later takes ~8.8M THB out of the capital round at the midpoint, one of the six "
|
||
"levers that bring the plan to ~180M THB. Until they arrive, groove geometry and form on the "
|
||
"metal are judged indirectly, through the test pressing and the audio station, as most plants "
|
||
"do today.",
|
||
"The data path is the same from the first day, so the later instruments plug in without "
|
||
"rework. Distributor quotes for the metrology stack are one of the four requests that settle "
|
||
"the budget.",
|
||
], [
|
||
"**At launch: the full stack.** The metrology and QC block is USD 350k to 810k (11.6M to 26.7M "
|
||
"THB, estimate, section 8): XRF, laser confocal, wide-area profiler, inline vision on the presses "
|
||
"and the audio station. Every father, mother and stamper is measured before the next plating "
|
||
"generation or the press. The block was priced with inline vision on three presses, so the "
|
||
"cameras for the second Duplex system are to quote.",
|
||
"**If quotes land high,** the laser confocal and the wide-area profiler (USD 180k to 350k, "
|
||
"estimate) are the part that can wait and be bought from revenue: thickness and cosmetics "
|
||
"would still be measured on every part, and groove geometry judged through the test pressing "
|
||
"and the audio station meanwhile, as most plants do today.",
|
||
"Either way the data path is the same, so later instruments plug in without rework. "
|
||
"Distributor quotes for the metrology stack are one of the four requests that settle the "
|
||
"budget.",
|
||
])),
|
||
|
||
H2("5.3 Quality control: three layers for every record, one gate for every material"),
|
||
P("Full automated audio checking of every record is physically impossible: a 12-inch record plays "
|
||
"for about 40 minutes and a press makes a new one every 25 to 30 seconds, so one press outruns "
|
||
"roughly 80 to 95 full-time listening stations. No playback-QC robot exists anywhere. The credible "
|
||
"maximum-automation design is layered, and it is described to customers exactly as it is: 100% "
|
||
"optical plus per-cycle telemetry plus sampled audio, with human ears approving every test "
|
||
"pressing."),
|
||
T(["Layer", "What", "Catches", "Status"], [
|
||
["1. 100% inline optical inspection", "Darkfield line-scan cameras at the press unloader "
|
||
"inspect every record at line speed", "Non-fill (dull patches where PVC did not fill the "
|
||
"stamper), stitching and flow lines, warp, off-centre spindle holes, surface debris, wrong or "
|
||
"off-centre labels. Non-fill and stitching correlate with audible defects, so this is a strong "
|
||
"proxy for audio quality", "Custom integration of general machine vision (Keyence or Cognex "
|
||
"class) on all " + pick("three", "five") + " presses; no vinyl-specific "
|
||
"product exists"],
|
||
["2. Press telemetry, every cycle", "Mould temperatures, pressures, cycle time, extruder values, "
|
||
"yields and drift alerts from the press PLC", "Process drift before it becomes a defect; the "
|
||
"record-level context for every other check", "Proven in the industry (Viryl's ADAPT model). "
|
||
"The Classic's Siemens PLC offers OPC UA (vendor "
|
||
"statement); for the HRP 12 the re-quote asks, "
|
||
"with a sensor fallback priced"],
|
||
["3. Automated audio comparison, sampled", "Needle-drop capture with automated analysis: "
|
||
"spectral-envelope comparison against the source master, click and pop counting, noise floor "
|
||
"from lead-in silence, channel balance; score and pass/fail to the record", "Wrong master cut "
|
||
"into good-looking grooves, EQ and mastering errors, speed and pitch problems; what no camera "
|
||
"can see", "Buildable from proven parts (Stamper Discs' Fonograph approach, iZotope-class "
|
||
"algorithms); first of its kind as a whole; " + pick("in the launch tier",
|
||
"at launch")],
|
||
], widths_mm=[30, 46, 54, 40], font_pt=8.5),
|
||
P("**Sampling rule for layer 3:** every test pressing and first-off per stamper, plus pulled "
|
||
"samples densifying as the stamper ages (a stamper lasts roughly 1,000 to 2,000 records; the "
|
||
"industry rule of thumb is a spot-play around every 50th)."),
|
||
H3("The materials lab"),
|
||
P("Every incoming compound lot passes a gate before it reaches a press, and its lot ID follows every "
|
||
"record pressed from it. Per lot, in-house from day one, on benchtop instruments with data "
|
||
"export: certificate of analysis against the agreed specification, moisture (the most common "
|
||
"cause of noisy surfaces), heat stability (PVC degradation releases hydrochloric acid and shows "
|
||
"as discoloration and noise), density, colour and gloss, granulate size and dust, specks on "
|
||
"pressed test plaques. In a climate of 60 to 90% ambient humidity a moisture result is only "
|
||
"comparable if the sample is taken sealed and conditioned the same way every time, so sample "
|
||
"conditioning is part of the method. New lots, and especially new suppliers, are released only by "
|
||
"a test pressing on a production press. This day-one tier is estimated at USD 55k to 150k and is "
|
||
"in the launch investment. The mature tier (torque rheometry, DSC, FTIR, ~USD 120k to 240k) is "
|
||
"deferred: Payap University's Faculty of Pharmacy and Chiang Mai University's science faculties "
|
||
"are the places to ask for contract testing in between (which instruments they hold is "
|
||
"unconfirmed). Supplier qualification uses an external lab for K-value, stabiliser "
|
||
"identification (legacy lead rejected) and heavy metals for export. The in-house regrind stream "
|
||
"has its own contamination gate. This protocol is how Thai and regional compounds are qualified "
|
||
"against the European references."),
|
||
H3("Packaging QC"),
|
||
P("Incoming cartons and sleeves are checked per delivery: dimensions (records must fit without "
|
||
"force; spine width per title), board grammage, print quality against the customer-approved "
|
||
"proof (spectrophotometer Delta E for colour-critical jobs), lamination and seam strength, inner "
|
||
"sleeve scuff risk. At assembly a camera reads the scribed dead-wax code (a handheld scanner "
|
||
"cannot read it reliably on black vinyl) and checks it against the jacket barcode, so a record "
|
||
"in the wrong jacket is caught systematically rather than being unlikely, and every unit's "
|
||
"barcode is verified. Results go back to Ploy Printing per packaging lot."),
|
||
|
||
H2("5.4 Efficiency: recover before you generate"),
|
||
P("The pressing machinery is a modest electrical load: 32 kVA connected for a full Duplex line. The "
|
||
"real demand sits in the utilities around it. " + pick(
|
||
"At launch the three presses need 450 to 540 kg/h of saturated steam at 10 bar / 180 °C and "
|
||
"~391.5 kW of cooling at a hot-afternoon peak; the utility backbone is built for the "
|
||
"five-press fleet (750 to 900 kg/h of steam, up to ~650 kW of cooling). ",
|
||
"At launch the five presses need 750 to 900 kg/h of saturated steam at 10 bar / 180 °C and "
|
||
"~652.5 kW of cooling at a hot-afternoon peak, on a utility backbone with rooms for four "
|
||
"boiler and four chiller modules. ") +
|
||
"On top comes whole-plant air conditioning in a tropical climate. Newbilt excludes "
|
||
"steam and cooling from its scope, so these systems are ours to design, and the design rests on "
|
||
"one observation: the steam's job is to heat the moulds and the cooling water's job is to remove "
|
||
"that same heat again. Roughly 98% of the press cooling load is heat the steam put into the "
|
||
"moulds, and the press cooling return leaves at about 60 °C. That warm return, the condensate and "
|
||
"a fired boiler's flue gas are heat the plant reuses before it generates anything new."),
|
||
H3("Utilities: backbone once, modules with the presses"),
|
||
P("Everything that is cheap to oversize now and costly to change in a running plant is built once, "
|
||
"for the five-press fleet: the boiler hall and the chiller compound with room for four modules "
|
||
"each, the steam main and condensate return, the cooling mains, the heat-exchanger frame and "
|
||
"tanks, and hydraulic and compressed-air ring mains with a valved, capped tee at every press "
|
||
"position. The machines that make steam and cold water come in identical modules: " + pick(
|
||
"at launch two 500 kg/h boilers (B-1, B-2) for the 450 to 540 kg/h peak and two 250 kW "
|
||
"air-cooled chillers rated at 40 °C ambient (CH-1, CH-2) for ~391.5 kW, sequenced lead and "
|
||
"lag by one controller. Either boiler alone carries 93 to 111% of the steam demand; one "
|
||
"chiller out leaves ~64% of the cooling peak. The boiler bodies come through the Chinese "
|
||
"route and the compressor from a Chinese brand's Thai office (below). ",
|
||
"at launch two 500 kg/h boilers (B-1, B-2) for the 750 to 900 kg/h peak and three 250 kW "
|
||
"air-cooled chillers rated at 40 °C ambient (CH-1 to CH-3) for ~652.5 kW, sequenced lead "
|
||
"and lag by one controller; the boilers and the compressor come from Thai suppliers "
|
||
"(below). Five presses on two boilers leave no spare: a third module (B-3) is an RFQ option "
|
||
"outside the plan price, and without it a boiler fault costs about two presses until it is "
|
||
"fixed; one chiller out leaves ~77% of the cooling peak. ") +
|
||
"Identical modules mean one set of spares "
|
||
"and one service routine, N+1 later is one more module rather than a redesign, and the plant "
|
||
"never runs one oversized boiler at poor part load. Four boilers carry about eight presses with "
|
||
"one in reserve; four 250 kW chillers carry the five-press fleet with the fourth in reserve, and "
|
||
"pads for the next chiller frame up (about 350 kW, estimate) are a priced option in the chiller "
|
||
"RFQ. The central hydraulic plant around the Newbilt aggregates (standby pump set, accumulator "
|
||
"station, ring main) is not costed yet; a Thai hydraulic power unit builder quotes it."),
|
||
T(["Measure", "What it does", "Effect"], [
|
||
["1. Flue-gas economizer (fired boilers)", "Recovers stack heat into the boiler feedwater; the "
|
||
"first measure to investigate on a biomass or LPG bank (an electric boiler has no flue gas)",
|
||
"Outlet and stack temperatures are vendor figures; rice-husk ash is abrasive, so the RFQ asks "
|
||
"for cleaning, wear protection and a bypass"],
|
||
["2. Condensate return", "As much clean, hot condensate back to the feed tank as possible",
|
||
"Less water, treatment and fuel. Steam and cooling water share the mould channels, so the "
|
||
"condensate is only as clean as the cooling loop: a conductivity sensor diverts off-spec "
|
||
"condensate"],
|
||
["3. Feedwater heat pump, if it pays", "Lifts the ~60 °C press return into feedwater at 90 to "
|
||
"95 °C, cutting the boiler's work and the chiller's load at once", "With condensate return, "
|
||
"roughly 10 to 15% of steam energy. With most condensate returned the remaining feed-tank load "
|
||
"is small, so it may not pay; the press return profile Newbilt is asked for decides"],
|
||
["Waste heat for low-grade loads", "The label dry oven and the air conditioning's "
|
||
"dehumidification reheat run on recovered press heat", "Displaces fresh electricity in two "
|
||
"continuous loads"],
|
||
["Steam accumulator", "Presses draw steam in bursts; an accumulator (a Newbilt option) lets the "
|
||
"boilers ride the peaks", "Steadier firing; whether a modular bank needs it is a re-quote "
|
||
"question"],
|
||
["Closed loop, air-cooled chillers", "The press returns drain open into a vented warm tank and "
|
||
"go back through a plate heat exchanger to the chillers; no open 'dirty water' loop as in the "
|
||
"reference schematic, and no cooling tower", "No process water discharged; the largest water "
|
||
"draw of the earlier water-cooled concept (tower "
|
||
"evaporation) is gone"],
|
||
["Regrind loop", "In-house grinder returns trimmings and rejects to the extruder at 20% of "
|
||
"the feed", "Scrap is feedstock, not landfill; ~20% less virgin compound"],
|
||
], widths_mm=[38, 66, 66], font_pt=8.5),
|
||
P("Three things were checked and ruled out. Heat pumps cannot make the final 10 bar / 180 °C steam "
|
||
"(commercial units top out around 120 to 165 °C, and core utility reliability is the wrong place "
|
||
"to pioneer). Ground-source heat exchange does not work in Thailand (the ground sits at 28 to "
|
||
"30 °C, too cold for process heat and warmer than the cooling loop wants). Solar-thermal "
|
||
"feedwater preheat only reaches the 60 to 90 °C the heat recovery already gives for free, "
|
||
"concentrating collectors need strong direct sun that northern haze does not give, and the roof "
|
||
"earns more as PV. The boiler only does the final lift, from already-hot feedwater."),
|
||
H3("The grid tariff, and what it decides"),
|
||
P("The plant is on PEA's time-of-use tariff 3.2.2 (medium general service at 22 kV; the flat rate "
|
||
"is closed to new customers), never a flat kWh price: a demand charge of 132.93 THB per kW of the "
|
||
"highest 15-minute demand in peak hours, 4.1839 THB/kWh in the peak window (09:00 to 22:00 on "
|
||
"weekdays) and 2.6037 THB/kWh off-peak, plus the Ft fuel adjustment (+0.1623 THB/kWh for "
|
||
"September to December 2026; it resets every four months) and reclaimable VAT. Two shifts put "
|
||
"about two thirds of process energy into peak hours: a blended ~3.81 THB/kWh before the demand "
|
||
"charge. " + pick("For the five-press fleet the backbone is built for", "For the five presses") +
|
||
", without electric steam, that is "
|
||
"roughly 4.5M to 6.8M THB a year before solar, 0.7M to 1.1M of it demand charge (estimates), on "
|
||
"an 800 to 1,000 kVA connection. Three design consequences:"),
|
||
B([
|
||
"**Biomass heat is far cheaper than electric steam** (below): the demand charge follows the "
|
||
"boiler's full-power draw, and the peak window covers 13 of the 16 production hours.",
|
||
"**The roof gets PV, not solar thermal.** Self-consumed PV is worth ~3.7 THB/kWh" + pick(
|
||
" of grid power displaced, less the PPA price the plant pays for it (below)", "") +
|
||
"; it cannot lower the demand charge, because the peak window runs to 22:00, long after "
|
||
"sunset.",
|
||
"**The battery is for ride-through, not peak shaving.** Charging off-peak and discharging at "
|
||
"peak earns ~70k THB a year for the 271 kWh stack, and it can hold demand down by only ~20 kW "
|
||
"(~30k THB a year; estimates). Its case is riding through grid dips and outages.",
|
||
]),
|
||
H3("Renewable energy"),
|
||
KV([
|
||
["Rooftop PV", "~247 kWp on the 1,523 m² monopitch roof (425 modules of a generic 580 W "
|
||
"placeholder; no module chosen yet), ~335 to 360 MWh a year, ~25 to 35% of mature "
|
||
"two-shift use (1,000 to 1,500 MWh). " + pick(
|
||
"Taken through a solar PPA (below): the plant pays the PPA price for this "
|
||
"power instead of buying the array, so its saving is the gap between that "
|
||
"price and the ~3.7 THB/kWh of grid power it displaces",
|
||
"Saves ~1.2M to 1.3M THB a year and pays back in ~4.5 to 7 years at 25,000 "
|
||
"to 35,000 THB/kWp (estimates)")],
|
||
["Canopies and the second building", "~40 kWp on the parking canopies (construction RFQ; ~54 "
|
||
"kWp if fully covered). A phase 2 building's roof adds "
|
||
"~251 kWp, ~498 kWp across both roofs"],
|
||
["Battery", "271 kWh Gobel Power LiFePO4 rack (15 stacked 18 kWh packs, 8,000+ cycles), USD "
|
||
"39,900 to 58,000 listed, 50 to 60 day lead. Roughly an hour of the chiller bank's "
|
||
"peak draw: ride-through, not off-grid autonomy"],
|
||
["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), Thai distribution via Solar "
|
||
"Nicolo; Deye is a supported protocol on the Gobel battery management"],
|
||
["Roof design", "Monopitch at 10° falling toward ESE puts the whole roof on one plane at ~98% "
|
||
"of ideal yield; at this latitude orientation barely matters (under 2% across a "
|
||
"wide azimuth swing). 10° rather than shallower so the rains self-clean "
|
||
"burning-season dust"],
|
||
["Open checks", "Battery rack voltage against the chosen Deye model's window; Gobel safety "
|
||
"certifications (not published); EPC warranty on a mixed-vendor DC bus; yield "
|
||
"against PVGIS before committing" + pick("; the PPA offer itself, price and "
|
||
"terms", "")],
|
||
pick(["Solar PPA (this plan)", "An installer owns and finances the PV and the battery, and the "
|
||
"plant buys the power at a price still to quote (the calculator carries 3.0 THB/kWh, an "
|
||
"estimate, ~0.03M USD a year on the energy line). That keeps the PV EPC (USD 227k to "
|
||
"318k) and the battery (USD 42k to 62k) out of the capital round: ~10.7M THB less at the "
|
||
"midpoint, one of the six levers in section 8. The BOI solar measure (section 7) rewards "
|
||
"the plant's own solar investment, so its tax value very likely goes with the array (to "
|
||
"confirm with the BOI consultant). The PPA offer is asked against the specification "
|
||
"above"],
|
||
["Owned (this plan)", "The plant buys the array and the battery: rooftop PV EPC USD 227k "
|
||
"to 318k (7.5M to 10.5M THB) and the battery USD 42k to 62k (1.4M to 2.0M THB), "
|
||
"estimates, section 8. Owning them is what the BOI solar measure rewards (section 7). A "
|
||
"solar PPA (an installer owns and finances them, the plant buys the power at a price "
|
||
"still to quote) would take ~10.7M THB out of the capital round at the midpoint, but "
|
||
"very likely gives up that measure"]),
|
||
]),
|
||
H3("Steam: the open engineering choice"),
|
||
P("The boilers' fuel is still open; the modular bank works with either. There is no natural gas "
|
||
"pipeline in Northern Thailand, so gas means a bulk LPG tank on site with hazardous-storage "
|
||
"separation and licensing, and diesel means a fuel tank with price exposure. The two routes "
|
||
"without a fossil tank, compared for the same heat (~1,120 to 1,280 MWh a year at about 1.0 "
|
||
"million records, " + pick("the top of the plant's range", "the low end of the five presses' "
|
||
"range") + "; estimates):"),
|
||
T(["", "Electric boiler bank (~98%)", "Biomass boiler bank (~80%)"], [
|
||
["Price of heat", "~3.9 THB/kWh, plus the demand charge", "~0.5 to 0.9 THB/kWh at 1.35 to 2 "
|
||
"THB/kg delivered (reported market prices, October 2026; no supplier quote yet)"],
|
||
["Running cost, mature two shifts", "~5.2M to 6.0M THB a year, including 0.8M to 1.0M of extra "
|
||
"demand charge for the five-press bank", "~0.6M to 1.2M THB a year of fuel, plus handling "
|
||
"and ash"],
|
||
["Boiler package, 2 × 500 kg/h", pick("~2.8M to 5.5M THB through the Chinese route, the "
|
||
"plan's price (4.5M to 7M from Thai suppliers)",
|
||
"4.5M to 7M THB (Thai suppliers); the plan's price"),
|
||
"~6M to 10M THB, plus the fuel store"],
|
||
["Grid", "Peak ~950 to 1,330 kW: PEA Schedule 4, 1,250 to 1,600 kVA", "Unchanged, ~800 to "
|
||
"1,000 kVA"],
|
||
["Also", "Cleanest permitting, no fuel logistics, no stack", "Fuel contracts, a dry store sized "
|
||
"for the monsoon, ash handling, a 14 m stack and its emissions"],
|
||
], widths_mm=[36, 64, 70], font_pt=8.5),
|
||
P("**Reading it.** The electric boiler is the more efficient machine; biomass is by far the cheaper "
|
||
"heat. At maturity the fuel saving of ~4.0M to 5.4M THB a year repays the biomass premium in "
|
||
"under a year (estimate), so the earlier staged path (start electric, add biomass later) is a "
|
||
"permitting and fuel-logistics choice, not a cost one: every year on electric steam costs roughly "
|
||
"1.4M to 5.4M THB more. The site can decide it too: next to the pharmaceutical facility on Payap "
|
||
"land a biomass stack would be a hard sell, which favours electric or LPG there (section 6.1)."),
|
||
P("**Fuel.** A biomass bank burns roughly 350 to 400 tonnes of air-dry wood a year at about 1.0 "
|
||
"million records (~540 to 620 t as fresh chips, which is what the store and the monsoon stock are "
|
||
"sized for)" + pick("", ", up to ~550 t air-dry at 1.5 million (fuel follows records pressed, "
|
||
"not presses)") +
|
||
". Lamphun alone produces more than 900,000 t of farm residues a year (Maejo "
|
||
"University), so supply is not the constraint; price is. Reported prices follow diesel, so the "
|
||
"fuel contract gets a diesel clause and sources within ~50 km. The local price-setter is Ratch "
|
||
"Pathana's biomass buying centre at Pa Sak, Mueang Lamphun, which feeds a 9.6 MW cogeneration "
|
||
"plant and competes for the same fuel. The team's own 60 rai of forestry-classified land could "
|
||
"supply 80 to 135 t a year as short-rotation coppice once its title is checked; at market prices "
|
||
"that is worth only ~0.1M to 0.25M THB a year, so its value is supply security and the story "
|
||
"('records pressed with steam from our own trees'), not the fuel bill. Next step: written quotes "
|
||
"from Pa Sak and two or three chip suppliers, priced by moisture, before the boiler decision."),
|
||
P("**Where the boilers come from.** " + pick(
|
||
"The plan buys the two modules through the Chinese route: boiler bodies from a Chinese maker "
|
||
"with Thai references (ZOZEN, Sitong, Fangkuai, Taiguo), installed with the feed tank, pumps, "
|
||
"header, controls and piping by a Thai boiler contractor, for roughly 2.8M to 5.5M THB "
|
||
"installed against 4.5M to 7M from Thai suppliers, about 1.6M THB less at the midpoint. The "
|
||
"compressor is a Chinese brand bought through its Thai office (Kaishan and Denair have one), "
|
||
"so service stays local; with it the route saves ~1.9M THB at the midpoint (estimates from "
|
||
"listings, not quotes). ",
|
||
"The plan buys the two modules and the compressor from Thai suppliers (4.5M to 7M THB "
|
||
"installed for the boilers). Chinese makers with Thai references (ZOZEN, Sitong, Fangkuai, "
|
||
"Taiguo) could supply the boilers for roughly 2.8M to 5.5M THB installed, about 1.6M THB "
|
||
"less at the midpoint, and with a Chinese compressor brand bought through its Thai office "
|
||
"~1.9M less (estimates from listings, not quotes): a step if quotes land high. ") +
|
||
"The specification is a 1.25 MPa design to ASME Section I with the S stamp; most Chinese packaged "
|
||
"electric units are rated 0.4 to 0.8 MPa and cannot deliver 10 bar. An imported boiler must meet "
|
||
"TIS, ASME, JIS, EN or an equivalent standard and be verified by a certification body registered "
|
||
"with the Department of Industrial Works (DIW), engaged before the order (section 7). No mainland "
|
||
"maker has a verified Thai service partner, so a Thai boiler contractor and the certification "
|
||
"body are the service layer either way. Chillers and air conditioning, the larger blocks, have "
|
||
"not been checked for a Chinese route yet."),
|
||
H3("Water"),
|
||
P("Water arriving is still open: no source is confirmed for the candidate site (PWA mains, a "
|
||
"licensed deep well, or both), and a water analysis comes before the boiler and chiller RFQs "
|
||
"because it decides softener or RO. The earlier demand estimate of ~15 m³ a day (~20 with "
|
||
"margin) was over half cooling-tower evaporation and blowdown; the air-cooled chiller bank has "
|
||
"no tower, so that figure is now on the safe side until the water balance is redone with the "
|
||
"site. Storage is a dedicated ~200 m³ fire reserve plus a ~50 m³ raw-water tank. **No process "
|
||
"water is discharged:** cooling is a closed loop, condensate is returned, galvanics rinse water "
|
||
"goes through a zero-discharge evaporator with metal recovery and the DI water plant (USD 97k to "
|
||
"258k, in the launch investment) in a water-treatment building of its own next to galvanics, "
|
||
"the stamper back-finisher's spent water and filters take the same route, the workshop has no "
|
||
"floor drain, and solvents leave as controlled waste. This is a fixed design requirement, not an "
|
||
"aspiration to be traded away during engineering."),
|
||
H3("Climate control as a product"),
|
||
P("The whole plant runs under continuous control: 20 to 26 °C, 35 to 60% relative humidity, and "
|
||
"particulate filtration (F7 to F9 general, HEPA with positive pressure in the cutting room and "
|
||
"galvanics clean room), with sensors logging in every zone. Moisture in PVC compound causes "
|
||
"bubbles, non-fill and surface defects and drives cooling rate, hence flatness and warp; airborne "
|
||
"particulate embeds in the record surface and is the classic source of clicks and pops. Northern "
|
||
"Thailand's burning season (February to April) brings some of the world's worst PM2.5 episodes, "
|
||
"so a plant without filtration would press different records in March than in September. This "
|
||
"is the plant's largest utility line (THB 7.5M to 15M for ~1,500 m², plus THB 1.2M to 3.4M for "
|
||
"the two clean zones, estimates) and it is treated as part of the product, not as overhead. The "
|
||
"35% humidity floor is aggressive for the tropics and drives desiccant cost; if 45% proves "
|
||
"acceptable the cost drops materially, and that question is on the RFQ list."),
|
||
CALL("Efficiency in one paragraph, for the investor", "Steam and cooling are built once as a "
|
||
"backbone and filled with identical modules as presses arrive; heat is recovered from the "
|
||
"flue gas, the condensate and the press returns before more is generated; the roof carries PV "
|
||
"worth a quarter to a third of mature electricity use" + pick(" (through a solar PPA)", "") +
|
||
", with a battery for ride-through; no "
|
||
"process water is discharged; a fifth of the plastic is reclaimed; and biomass steam, if "
|
||
"chosen, costs a quarter to a tenth of electric steam. The same choices push the energy line "
|
||
"toward its low end, hedge Thai tariff rises, and convert into BOI tax value" + pick(
|
||
" through the Smart and Sustainable Industry measure", "") + " (section 7). They "
|
||
"also make the plant's sustainability story true rather than claimed, which matters to the "
|
||
"labels it sells to."),
|
||
|
||
H2("5.5 The software: plant overview, factory console and artist platform"),
|
||
P("Three pieces of software carry the traceability and the customer promise of this plan into daily "
|
||
"work. All three exist today as working demos on the project's test site, run on simulated data: "
|
||
"orders, customers, IDs and measurements are invented, while the stages, checks, cycle times and "
|
||
"shifts follow the plan. They show investors, vendors and future staff what is being built. The "
|
||
"production versions are the development project of section 5.1 (software block USD 115k to 310k, "
|
||
"estimate), built on ERPNext as the plant's only system of record."),
|
||
H3("Plant overview (SCADA)"),
|
||
P("One screen for the whole plant: the metal path from audio intake through mastering, lathe cutting, "
|
||
"the Pheenix Alpha galvanics line and Sibert stamper prep to the stamper rack; the press hall with "
|
||
"its presses, extruders, material lab and compound silos; inspection, packaging and fulfilment; and "
|
||
"underneath them the utilities (steam, process cooling, compressed air, hydraulics, water treatment, "
|
||
"energy and PV, HVAC). The demo animates the launch plant at real cycle times, from real time up "
|
||
"to 3600× (a day in 24 seconds); every station opens with its figures and the source of each, and "
|
||
"the three artist gates show how many titles wait at each. In the plant the same screen is fed "
|
||
"from the machine-data store instead of the simulation: the presses over OPC UA, boilers, chillers "
|
||
"and compressor over Modbus (the data clause in every equipment RFQ). Alarms go to the shift's "
|
||
"phones and keep working with the internet down."),
|
||
IMG("renders/demos/scada.png", 170,
|
||
"Figure 2. Plant overview (simulated SCADA) of the launch plant, running at 60×: header with shift, "
|
||
"presses running, cycles an hour, good records and rejects, metal in work, steam pressure, plant "
|
||
"load and solar; metal path on top, press hall and finishing in the middle, utilities below. "
|
||
+ pick("", "The demo draws the launch plant (Duplex system 1 and the Classic); Plan B adds the "
|
||
"second Duplex system to the same screen. ") +
|
||
"Demo (docs/plant-operation.html), simulated values."),
|
||
H3("Back office: the factory console on ERPNext"),
|
||
P("The factory application (working name cnx-factory) is the plant's working interface. It shows the "
|
||
"press floor with live counters per press, stamper life and the optical result of every record; "
|
||
"work orders per station in kiosk form (badge in, scan what the step asks for, confirm); the "
|
||
"material lab gate with lots on hold; stamper metrology and the lacquer, father, mother and stamper "
|
||
"genealogy; the hash-chained event log; and the customer portal of the same orders. It keeps no "
|
||
"business records of its own: orders, job cards, batches, inspections, metal parts, deliveries and "
|
||
"invoices are posted to ERPNext through an outbox, so no press waits for the ERP, and the office "
|
||
"works in ERPNext's own desk for purchasing, accounts, stock and planning."),
|
||
IMG("renders/demos/factory-floor.png", 165,
|
||
"Figure 3. Factory console, press floor: good and rejected records today, presses running, orders "
|
||
"in production and waiting at an artist gate, compound on hold; one card per press with its order, "
|
||
"progress, stamper set and play count, cycle time and steam temperature; the optical inspection "
|
||
"stream keyed by stamper, press and cycle time; what needs attention. Demo "
|
||
"(docs/factory-console.html), simulated orders and values; the demo runs one Duplex system and "
|
||
"one Classic."),
|
||
IMG("renders/demos/factory-erp.png", 165,
|
||
"Figure 4. The ERPNext link: every posting the floor makes (job cards, serial numbers of lacquers, "
|
||
"fathers, mothers and stampers, quality inspections, artist gates, downtime entries, purchase "
|
||
"receipts), its document name in ERPNext and its outbox status. Demo, simulated documents."),
|
||
H3("Artist platform: order, fund and follow a record"),
|
||
P("The artist platform is the plant's front door for every customer. The customer configures the "
|
||
"record against a to-scale mock-up; uploads music and artwork, which are checked in the browser "
|
||
"and never uploaded in the demo (format, sample rate and bit depth, clipping, side length; artwork "
|
||
"size, spine, bleed, resolution and colour against downloadable templates); approves the master "
|
||
"plan, the first of the three artist gates; and receives an itemised offer with its lead time. In "
|
||
"the demo's example a 12-inch black LP with a printed jacket costs 37,836 THB once per title and "
|
||
"343 THB a copy all in at 300 copies (indicative prices, estimates)."),
|
||
IMG("renders/demos/artist-offer.png", 160,
|
||
"Figure 5. Artist ordering: the itemised offer, per title (mastering, lacquers, cutting, "
|
||
"electroforming with the father and mother kept for represses, press setup, test pressings) and "
|
||
"per copy (pressing, sleeve, assembly, printed jacket, shrink wrap), with the mock-up and the "
|
||
"lead time. Demo (docs/artist-order.html), price list demo-0.1, indicative."),
|
||
P("The artist then orders directly or runs a fan-funded campaign: fans pre-order at the artist's price "
|
||
"into a ring-fenced account, the plant presses from 100 copies, and if the goal is missed every fan "
|
||
"is refunded. At a fan price of 1,200 THB the artist needs 100 fans, breaks even at 41 and keeps "
|
||
"~548 THB a copy at the goal. After delivery each copy has a record passport, reached from the code "
|
||
"on its sleeve: the traceability record of that one copy, from the approved master through lacquer, "
|
||
"father, mother and stamper to the press cycle and the packing scan. Campaigns go live only after "
|
||
"the first paying releases have shipped and lead times are measured. The public side is costed at "
|
||
"USD 40k to 90k within the software block (estimate). The platform's name is undecided."),
|
||
IMG("renders/demos/fan-funding.png", 160,
|
||
"Figure 6. Fan funding in the investor demo of the platform: the artist sets the fan price and "
|
||
"the deadline; the fans needed follow from the 100-copy minimum and the break-even, with what the "
|
||
"artist keeps. Demo (docs/make-a-record.html), indicative prices."),
|
||
IMG("renders/demos/record-passport.png", 160,
|
||
"Figure 7. Record passport of one copy: the record key (stamper, press, cycle time, side) and the "
|
||
"chain from master to shipment, with the repress path from the archived father and mother. IDs "
|
||
"and times are simulated."),
|
||
|
||
# -------------------------------------------- 6 site and building
|
||
H1("6. Site and building"),
|
||
H2("6.1 Land: a long lease, three candidates"),
|
||
P("The site strategy is a **long-term lease of raw land**, on which the purpose-built plant is "
|
||
"constructed. Compared with buying 6 to 8 rai this keeps ~12M to 32M THB (~0.36M to 0.97M USD, "
|
||
"at the 2 to 4 million THB per rai the plan carried for a purchase) out of the capital round, "
|
||
"removes land from the balance sheet, and matches how most foreign-invested manufacturing in "
|
||
"Thailand holds its site. Three candidates are on file; nothing is signed."),
|
||
T(["", "Mueang Chi, Lamphun", "Northern Region Industrial Estate, Lamphun",
|
||
"Payap University land, Chiang Mai"], [
|
||
["Status", "Working candidate: the massing model, PV roof study and construction RFQ are sited "
|
||
"here", "Fallback", "New lead (October 2026): the university is interested in "
|
||
"leasing land to us. The point it gave fails zoning; its other "
|
||
"land is not checked yet"],
|
||
["Plot", "5-0-66.5 rai on the deed, narrow and skewed", "Leased estate plots", "Not known yet: "
|
||
"boundary, size and title to come"],
|
||
["To Chiang Mai old city", "~35 km", "Lamphun valley", "~5 km, on the Chiang Mai to Lampang "
|
||
"superhighway"],
|
||
["Zoning", "Unverified (agricultural land): the first check", "Industrial estate; licensing "
|
||
"through the estate", "At the point given: zone ย.7-1, very high density residential; record "
|
||
"pressing not permitted (Chiang Mai city plan in force from 25 May 2026)"],
|
||
["Galvanics effluent", "Ours to permit; zero discharge", "Shared central effluent treatment",
|
||
"Lessor's written consent on top of the permit"],
|
||
["Neighbours", "Agricultural", "Industrial", "A pharmaceutical facility under construction on "
|
||
"the same land"],
|
||
], widths_mm=[28, 44, 44, 54], font_pt=8.5),
|
||
P("**Galvanics now raises the bar for every site.** With the electroplating line in the plan, a "
|
||
"plot has to permit record pressing with a steam boiler **and** electroplating from day "
|
||
"one, not in a later phase. That favours the industrial estate (licensing through the estate, "
|
||
"shared effluent treatment) and makes zoning the first check everywhere else."),
|
||
P("**Payap University** approached the project and is interested in leasing land next to a "
|
||
"pharmaceutical facility under construction. The point it gave was checked on the land-use map "
|
||
"of the Department of Public Works and Town and Country Planning on 14 October 2026: zone ย.7-1, "
|
||
"very high density residential, where factory type 107 (whose definition names gramophone "
|
||
"records) is not permitted and type 72 is allowed only for repair, so a record plant cannot get "
|
||
"a factory licence there. The same city plan permits type 107 in its low density residential "
|
||
"and rural and agricultural zones, so Payap's other land is worth checking before the lead is "
|
||
"dropped (the map data is preliminary; the provincial town planning office confirms). Why it is "
|
||
"worth the checks: it is ~5 km from the old city, 25 to 30 km nearer the team, customers and the "
|
||
"airport than Mueang Chi, which helps tours, the artist platform and hiring; and Payap is a "
|
||
"partner, not only a landlord: it wants joint student programmes with us in mastering, lathe "
|
||
"cutting, IT and business administration, and its Faculty of Pharmacy has analytical labs that "
|
||
"could back the PVC lab. Any Payap plot is checked in this order, before any design work:"),
|
||
N([
|
||
"**Zoning:** the plot's zone in the Chiang Mai city plan allows a record-pressing factory with a "
|
||
"steam boiler and electroplating (the neighbour's pharmaceutical permit proves little).",
|
||
"**Lease-ability:** Chanote title, university council approval, and whether campus land of a "
|
||
"private university can be leased commercially; with Thai counsel, together with the lease "
|
||
"terms below.",
|
||
"**The GMP neighbour:** a pharmaceutical plant is sensitive to the boiler stack, galvanics "
|
||
"extraction, extrusion fumes, noise and trucks; emission and buffer rules go into the lease, "
|
||
"not after the first complaint.",
|
||
"**Flooding:** Payap describes the land as low-lying when bought; check the plot against the "
|
||
"2024 flood extents.",
|
||
"**Plot fit:** the building, the detached utility yard and a second building need 6 to 8 rai; "
|
||
"the Payap scenario model draws a 150 m square (14.1 rai) with room for the full press hall.",
|
||
"**Galvanics on a campus:** the lessor's written consent; zero discharge becomes a lease "
|
||
"condition, not only a commitment.",
|
||
]),
|
||
P("Nothing is re-sited until a Payap plot passes zoning and lease-ability: the model, the PV study, "
|
||
"the RFQ and the plant's network site code stay on Mueang Chi. The lease itself must meet these "
|
||
"conditions, which Thai counsel resolves before signature:"),
|
||
B([
|
||
"**Term and registration.** A lease over three years must be registered at the Land Office to "
|
||
"be enforceable; the ordinary maximum is 30 years, and for industrial and commercial use the "
|
||
"Hire of Immovable Property for Commerce and Industry Act allows up to 50 years for qualifying "
|
||
"projects. The plan assumes a registered 30-year lease with a contractual renewal option, and "
|
||
"will test the 50-year route with counsel.",
|
||
"**Building ownership.** The lease states that the buildings, foundations, tanks and fixed "
|
||
"plant belong to the company for the term, what happens to them at expiry, and that the company "
|
||
"may mortgage or assign them. Without this, financing the building is difficult.",
|
||
"**Lessor's title and encumbrances.** A clean Chanote title, no mortgage that could foreclose "
|
||
"over the tenant, consent from any co-owners. A lease of Sor Por Kor or forestry-classified land "
|
||
"is not acceptable.",
|
||
"**BOI.** BOI's land-ownership privilege for foreign-held promoted companies is simply not "
|
||
"used; leasing does not affect the promotion.",
|
||
"**Rent.** Not negotiated. The plan carries THB 0.3M to 1.0M a year (USD 9k to 30k) as an "
|
||
"estimate for 5 to 8 rai of agricultural land in the Lamphun valley, with the lease deposit and "
|
||
"first-year rent in the working-capital block; IEAT plots run higher, and Payap has named no "
|
||
"figure.",
|
||
]),
|
||
P("Land requirements: ~4 rai minimum, 6 to 8 rai comfortable with expansion; truck access and "
|
||
"turning, parking, the detached utility yard, a separated battery enclosure, and a medium-voltage "
|
||
"connection from PEA (800 to 1,000 kVA for the five-press backbone without electric steam, 1,250 "
|
||
"to 1,600 kVA with it)."),
|
||
|
||
H2("6.2 The building"),
|
||
P("The main building is a single-storey steel portal frame (pre-engineered) of **60 × 25 m "
|
||
"(1,500 m²)**, designed from day one for an overhead crane, with a 10° monopitch roof carrying the "
|
||
"PV array, low eave 7.0 m, high side ~11.4 m. The floor is a 200 mm slab rated 30 kN/m² (3 t/m², "
|
||
"the standard industrial class the presses and racking need) raised 1.2 m above ground, so that "
|
||
"two sealed loading docks work at trailer height and the docked trailer acts as the airlock. The "
|
||
"envelope is insulated PIR sandwich panel (100 mm roof, 75 mm walls) on a 2.5 m masonry dado, "
|
||
"taped and gasketed, because the building is air-conditioned and must be airtight against "
|
||
"smoke-season particulate; mineral-wool panels where fire compartmentation (EI 60 or 120) or "
|
||
"acoustics require them."),
|
||
T(["Zone", "Area"], [
|
||
["Semi-automatic press hall (Newbilt Duplex specification)", "~200 m²"],
|
||
["Automatic press zone", "~100 to 150 m²"],
|
||
["Galvanics clean room, water treatment, chemical storage", "~80 to 150 m²"],
|
||
["Mastering and cutting room", "~40 to 60 m²"],
|
||
["Stamper preparation", "~30 m²"],
|
||
["Packaging and finished-goods warehouse", "~300 to 500 m²"],
|
||
["Utility rooms (boiler, compressor, chiller, electrical)", "~100 to 150 m²"],
|
||
["Offices, QC and listening room, archive, IT, entrance", "~150 to 200 m²"],
|
||
["Maintenance workshop and machine bay (" + pick("crane-ready", "crane-served") + ")",
|
||
"~100 to 150 m²"],
|
||
[pick("Visitor corridor (glazed, ground level; built later, its strip kept free)",
|
||
"Visitor corridor (glazed, ground level)"), "~110 to 130 m²"],
|
||
["Circulation, walls, miscellaneous", "~150 to 250 m²"],
|
||
["**Total under roof**", "**~1,400 to 2,000 m²**, against 1,500 m² built"],
|
||
], widths_mm=[110, 60],
|
||
caption="Estimates. The boiler and chillers have since moved to the detached utility yard, which "
|
||
"frees floor the workshop and corridor take; water treatment is proposed in its own "
|
||
"building next to galvanics; cassette and CD-R duplication (~40 to 80 m² and ~20 to "
|
||
"40 m²" + pick(", a later step in this plan", "") + ") are not in the table yet. " + pick(
|
||
"", "The press rows size one Duplex system and the Classic; the second Duplex "
|
||
"system needs its own bay on top (~110 m² at the calculator's floor figure, "
|
||
"estimate). ") +
|
||
"At the lower half of the table everything fits in "
|
||
"1,500 m²; at the upper half, finished goods move to a second building."),
|
||
P("Figures 8 to 10 show the plant as the plant and business plan calculator draws it for " + label() +
|
||
". The calculator draws the Payap scenario model (section 6.1): a 128 × 25 m production floor in "
|
||
"process order along the glazed visitor corridor, a two-storey office, the detached utility yard "
|
||
"and a press hall of ~870 m² laid out for five Duplex bays and four Classic positions, on a "
|
||
"150 × 150 m placeholder plot. The building described above and the zone table are the 60 × 25 m "
|
||
"hall for Mueang Chi; which layout is built is decided once a plot passes zoning and lease-ability. "
|
||
"The calculator itself is interactive: rotate, zoom, switch floors and tap any object for its "
|
||
"figures and their source."),
|
||
IMG(pick("renders/calculator/plan-a-iso-roof.png", "renders/calculator/plan-b-iso-roof.png"), 170,
|
||
"Figure 8. The site from above, " + label() + " preset of the plant and business plan calculator: "
|
||
"the factory with roof PV" + pick(" supplied through the solar PPA (the battery is drawn too; "
|
||
"whether a PPA offer includes it is open)",
|
||
" and battery, owned") +
|
||
", the office, the utility yard (boiler hall and chiller compound built for four modules each, "
|
||
"pump and heat-exchanger room, transformer, water treatment, PVC silos), parking with PV canopies "
|
||
"and the phase 2 reserve. Schematic render of the Payap scenario model (docs/fleet-calculator.html); "
|
||
"positions and envelopes are estimates."),
|
||
IMG(pick("renders/calculator/plan-a-iso-gf.png", "renders/calculator/plan-b-iso-gf.png"), 170,
|
||
"Figure 9. Ground floor with the roofs cut away, " + label() + " preset: from the west end the "
|
||
"staff entry, workshop, galvanics (PASU, PPPU, PDPU, PMPB), Sibert stamper prep, metrology" +
|
||
pick(" (launch tier)", "") + ", PVC lab and colour store, then the press hall, optical inspection, "
|
||
"finishing and packaging, the warehouse and dispatch; the office with reception, lathe and cutting "
|
||
"room, listening room and archive. " + pick(
|
||
"The frame is crane-ready with the crane rented; the visitor corridor, cassette and CD-R come "
|
||
"later. ",
|
||
"With the 5 t crane, the visitor corridor and the cassette and CD-R rooms. ") +
|
||
"Schematic, estimates."),
|
||
IMG(pick("renders/calculator/plan-a-iso-hall.png", "renders/calculator/plan-b-iso-hall.png"), 170,
|
||
"Figure 10. The press hall close up, " + label() + " preset: " + pick(
|
||
"Duplex system 1 (two HRP 12 presses with their extruders) and the Classic; the dashed "
|
||
"outlines are the free Duplex bays and Classic positions for growth. In the yard, boiler "
|
||
"modules B-1 and B-2 and chillers CH-1 and CH-2, with B-3, B-4, CH-3 and CH-4 free",
|
||
"Duplex systems 1 and 2 (four HRP 12 presses with their extruders) and the Classic; the "
|
||
"dashed outlines are the free Duplex bays and Classic positions. In the yard, boiler modules "
|
||
"B-1 and B-2 (B-3 and B-4 free) and chillers CH-1 to CH-3 (CH-4 free)") +
|
||
". Schematic, estimates."),
|
||
H3("Crane, workshop and visitor corridor"),
|
||
B(pick([
|
||
"**A crane-ready frame, with the crane rented at first.** The frame, the runway and the machine "
|
||
"door are built for a 5 t overhead crane (single-girder, ~24 m span, inverter drives, radio "
|
||
"remote) over the whole production compartment, roughly 40 to 48 m of the 60 m, stopping at "
|
||
"the fire wall to the finished-goods warehouse. For the installations a mobile crane is hired, "
|
||
"and the crane itself is bought later if machine moves and maintenance lifts make it worth it. "
|
||
"The building is shaped for it from the start: a frame designed for crane loads, no "
|
||
"full-height cross walls in the crane zone (rooms there are lidded boxes, with removable "
|
||
"hatches where heavy kit goes in), and the cutting room kept outside it, away from the frame's "
|
||
"vibration. 5 t covers the heaviest known lift (a Newbilt HRP 12 press, 1,350 kg) with margin "
|
||
"until Newbilt states the Classic's weight; 3.2 t is the alternative price.",
|
||
"**A machine door** of ~4.5 × 5.0 m at the ramp end, opened a few times a year. Until a crane "
|
||
"is bought, the hired crane sets each machine on skates at the door threshold; with the crane, "
|
||
"a truck reverses up the ramp into the machine bay and the crane lifts the machine off the bed "
|
||
"inside.",
|
||
"**A maintenance workshop** of ~100 to 150 m² beside it, where a bought crane would park: a "
|
||
"service bay for one press-sized machine, benches, a hydraulic hose crimper, a spares store "
|
||
"tracked in ERPNext, and a hot-work corner, held at negative pressure so its dust never "
|
||
"reaches the presses. Newbilt service comes from Germany and Pheenix from Sweden; spares on "
|
||
"the shelf are the uptime lever.",
|
||
"**A glazed visitor corridor, built later.** The plan runs without public tours at first, but "
|
||
"the route is designed in: the strip along the car-park wall stays free and the stations "
|
||
"follow the process order, from the cutting-room window to packaging. Built, it is ~45 to 55 m "
|
||
"long and ~2.4 m clear, with its own filtered air at slight positive pressure and acoustic "
|
||
"glazing that brings the 80 to 90 dB(A) near the presses down to roughly 40 to 50 dB(A) "
|
||
"(estimates), so a guide talks without a headset and visitors need no PPE; a 1:12 accessible "
|
||
"ramp serves the entrance. Until it is built there are no public tours, and the tour route and "
|
||
"the Payap programmes start later.",
|
||
], [
|
||
"**A 5 t overhead crane** (single-girder, ~24 m span, inverter drives, radio remote) runs over "
|
||
"the whole production compartment, roughly 40 to 48 m of the 60 m, and stops at the fire wall "
|
||
"to the finished-goods warehouse. Machines are moved in, out and around without hiring a mobile "
|
||
"crane. It shapes the building: a frame designed for crane loads, no full-height cross walls in "
|
||
"the crane zone (rooms there are lidded boxes, with removable hatches where heavy kit goes in), "
|
||
"and the cutting room kept outside it, away from the frame's vibration. 5 t covers the heaviest "
|
||
"known lift (a Newbilt HRP 12 press, 1,350 kg) with margin until Newbilt states the Classic's "
|
||
"weight; 3.2 t is the alternative price.",
|
||
"**A machine door** of ~4.5 × 5.0 m at the ramp end, opened a few times a year: a truck reverses "
|
||
"up the ramp into the machine bay and the crane lifts the machine off the bed inside.",
|
||
"**A maintenance workshop** of ~100 to 150 m² beside it, where the crane parks: a service bay "
|
||
"for one press-sized machine, benches, a hydraulic hose crimper, a spares store tracked in "
|
||
"ERPNext, and a hot-work corner, held at negative pressure so its dust never reaches the "
|
||
"presses. Newbilt service comes from Germany and Pheenix from Sweden; spares on the shelf are "
|
||
"the uptime lever.",
|
||
"**A glazed visitor corridor** at ground level along the car-park wall (~45 to 55 m, ~2.4 m "
|
||
"clear), with stations in process order from the cutting-room window to packaging. It has its "
|
||
"own filtered air at slight positive pressure and acoustic glazing that brings the 80 to 90 "
|
||
"dB(A) near the presses down to roughly 40 to 50 dB(A) (estimates), so a guide talks without a "
|
||
"headset and visitors need no PPE; a 1:12 accessible ramp serves the entrance. Tours for "
|
||
"artists, labels, investors and schools can run several times a day without stopping "
|
||
"production.",
|
||
])),
|
||
H3("Utility yard and water-treatment building"),
|
||
T(["Detached utility yard (decided October 2026)", "Size (estimate)"], [
|
||
["Boiler hall, four 500 kg/h module positions (B-1 and B-2 at launch)", "~162 m² (18 × 9 m), "
|
||
"6.0 m high"],
|
||
["Biomass fuel store", "42 m²"],
|
||
["Chiller compound, open and screened, four pads (" + pick("CH-1 and CH-2", "CH-1 to CH-3") +
|
||
" at launch)", "~135 m² (12.5 × "
|
||
"10.8 m)"],
|
||
["Cooling pump and heat-exchanger room", "~40 m² (8 × 5 m)"],
|
||
["Flue stack", "14 m"],
|
||
["**Yard in all**", "**~379 m²**, against 178 m² before the four-module decision"],
|
||
], widths_mm=[110, 60],
|
||
caption="The fired case sets the boiler hall (an electric bank would need about half). No "
|
||
"cooling tower: the chillers are air-cooled. The rooms are built once for four modules "
|
||
"and the plant goes in one module at a time; the yard sits outside the main building "
|
||
"because the boiler must have its own room and biomass deliveries need yard access."),
|
||
P("**Water treatment gets its own building** (proposed, October 2026): ~12 × 10 m directly behind "
|
||
"galvanics, holding the zero-discharge effluent treatment, the DI water plant and the chemical "
|
||
"store. A buried duct carries the effluent by gravity from the galvanics floor at +1.2 m and "
|
||
"brings DI water back, and a covered crossing joins the two doors; the galvanics room keeps only "
|
||
"a chemical day store."),
|
||
P("**The archive room** holds the father and mother of every side, about 1,200 to 2,400 parts a "
|
||
"year at full capacity, on mobile archive shelving (A-Z Solutions of Vienna as the reference "
|
||
"specification, LPI Rack Range in Thailand to quote against it). In the Payap scenario's office "
|
||
"a room of about 4 × 5.75 m with four mobile carriages holds ~150 shelf metres, roughly 50,000 "
|
||
"parts or 20 years and more of output (estimates). It asks things of the building early: ~11 "
|
||
"kN/m² under the shelving block, so the archive stays on the ground slab at the full rating; "
|
||
"rails set into the floor screed at fit-out; clean-agent gas suppression; a water-leak sensor "
|
||
"along the rails. One open point: with fathers and mothers in one room, one event takes both, so "
|
||
"keeping the rarely pulled fathers in a second fire compartment or off site is on the list."),
|
||
H3("Site works and the second building"),
|
||
P("On the Mueang Chi parcel the site works are a ~444 m perimeter wall, one 10 m sliding gate with "
|
||
"a guard house, 4,387 m² of paving in two classes (1,608 m² heavy-duty for trucks, 2,779 m² "
|
||
"general), roofed parking for 10 cars and 30 scooters carrying ~40 kWp of PV, a ring foundation "
|
||
"for a 9 m fire-water tank with its pump house and one for a 5 m raw-water tank, a fire ring main "
|
||
"and hydrants, stormwater drainage and domestic sanitation. With the buildings, ~6,549 m² or 68% "
|
||
"of the modelled plot is sealed, so stormwater attenuation, quite possibly a detention pond, may "
|
||
"be a permit condition."),
|
||
P("**A second building is expansion, not a gap.** A 45 × 38 m (1,710 m²) phase 2 building fits the "
|
||
"plot's narrowing southern end with a two-bay sawtooth roof carrying ~251 kWp and a 20 m yard "
|
||
"between the two for fire separation and shared loading; coverage stays at 39% of the deed area. "
|
||
"It is where finished goods move to free production floor, where pressing capacity can double, "
|
||
"or where a CD replication line would go if that option is chosen (section 4.10). **The press "
|
||
"hall** is planned for Duplex systems, because the plant focuses on special pressings and "
|
||
"specials run only on the Duplex: five Duplex bays and four Classic positions (~73/27 by floor, "
|
||
"estimate). " + pick(
|
||
"This plan installs one Duplex system and one Classic; growth adds Duplex systems first, into "
|
||
"bays whose floor, utility positions and ring-main tees are kept from the start. Where the "
|
||
"second Duplex system would stand on the Mueang Chi footprint is not drawn yet; ",
|
||
"This plan installs two Duplex systems and one Classic at launch; growth adds Duplex systems "
|
||
"first. Where the second Duplex system stands on the Mueang Chi footprint is not drawn yet; ") +
|
||
"the Payap scenario model draws the five-press fleet."),
|
||
H3("What the construction RFQ asks"),
|
||
P("The budget-level construction RFQ, with quantities from the parametric model, asks contractors "
|
||
"for: the shell rate per m² at the insulated-panel specification (not a bare shed); heavy-duty "
|
||
"and general paving separately; a separate rate for mineral-wool panels at fire-compartment and "
|
||
"acoustic walls; the crane package separately (runway and frame premium, machine door, the crane, "
|
||
"and the hook height achieved under the 7.0 m eave, with +1.0 m on the eave as an option); the "
|
||
"utility yard with floors, pads and plinths for all four positions; a lump sum for the rest of "
|
||
"the site works; and the foundation assumption behind all of it. It excludes process machinery, "
|
||
"PV, air conditioning, boilers, chillers and tanks, sprinklers, fit-out and the PEA transformer, "
|
||
"and asks whether permit drawings for the building permit and the factory licence are included."),
|
||
H3("What the building costs, and what is not known"),
|
||
T(["Block", "USD", "THB", "Basis"], [
|
||
["Building ~1,500 m² plus civil and site works", "650k to 1,100k", "21.4M to 36.3M",
|
||
"estimate at 12,000 to 20,000 THB/m² for Thai pre-engineered steel to the insulated-panel "
|
||
"specification, plus ~20% site works"],
|
||
pick(["Crane-ready frame, runway and machine door; mobile crane rented for the installations",
|
||
"39k to 91k", "1.3M to 3.0M", "estimate: 40% of the crane block (USD 97k to 227k); the "
|
||
"crane is bought later if needed"],
|
||
["Overhead crane, runway, frame premium, machine door", "97k to 227k", "3.2M to 7.5M",
|
||
"estimate"]),
|
||
["Maintenance workshop and machine bay fit-out", "30k to 76k", "1.0M to 2.5M", "estimate; a "
|
||
"workshop lathe and CNC mill not priced"],
|
||
pick(["Visitor corridor and accessible entrance", "built later", "built later", "USD 67k to "
|
||
"148k (2.2M to 4.9M THB) when built, estimate; not in the plan price"],
|
||
["Visitor corridor and accessible entrance", "67k to 148k", "2.2M to 4.9M", "estimate; "
|
||
"building it later would take ~3.6M THB out at the midpoint"]),
|
||
["Utility yard for four boiler and four chiller modules", "73k to 122k", "2.4M to 4.0M",
|
||
"estimate at the building rate"],
|
||
["Water-treatment building next to galvanics", "52k to 87k", "1.7M to 2.9M", "estimate at the "
|
||
"building rate"],
|
||
pick(["**Together**", "**~0.84M to 1.48M**", "**~28M to 49M**", "sum of the blocks; the plan "
|
||
"carries no contingency (section 8)"],
|
||
["**Together**", "**~0.97M to 1.76M**", "**~32M to 58M**", "sum of the blocks; the plan "
|
||
"carries no contingency (section 8)"]),
|
||
], widths_mm=[50, 26, 26, 68], font_pt=8.5),
|
||
P("The single largest unknown is the ground. The Mueang Chi parcel is likely soft former paddy, and "
|
||
"a piled slab can add several hundred to 1,000+ THB/m² across the building, 4,387 m² of paving "
|
||
"and a 1,711 m³ fill platform. A soil boring test (THB 30k to 50k, in the phase 0 budget) comes "
|
||
"before any real number, and the building RFQ with a soil test is one of the four requests that "
|
||
"settle the budget. Also open: the crane's hook height under the 7.0 m eave; the archive's "
|
||
"mobile shelving (to quote); the valved branches and feeders for the empty utility positions; "
|
||
"and the fire-water volume, which the hydraulic design and the warehouse racking height set. " +
|
||
pick("Renting a crane for the installations while the frame, runway and machine door stay "
|
||
"crane-ready takes ~3.2M THB out at the midpoint, one of the six levers; the 5 t crane itself "
|
||
"is USD 30k to 76k supplied and installed (estimate) when it is bought.",
|
||
"Renting a mobile crane for the installations while the frame, runway and machine door stay "
|
||
"crane-ready would take ~3.2M THB out at the midpoint (estimate): a step if quotes land "
|
||
"high, not part of the plan.")),
|
||
|
||
H2("6.3 Safety, security and the irreplaceable"),
|
||
P("Worker safety is a founding priority on equal footing with the environmental commitments. The "
|
||
"press floor combines hydraulics at ~180 bar, saturated steam at 10 bar / 180 °C and hot PVC; "
|
||
"the galvanics room handles silver nitrate, nickel salts and acids. The plan provides "
|
||
"vendor-led commissioning training extending into an in-house programme, mandatory PPE per area, "
|
||
"and galvanics as a clean room with controlled access, extraction on every plating unit, "
|
||
"decontamination procedures, eyewash and emergency shower at the line, and a hard-wired "
|
||
"interlock (no extraction, no plating). A machine is lifted only after lockout (power isolated, "
|
||
"steam vented, hydraulics depressurised including the accumulator) and with a lift plan; hot work "
|
||
"stays in the workshop under a permit; the boilers run under a licensed boiler controller "
|
||
"(section 7)."),
|
||
P("Decided in October 2026: every member of staff, office included, gets group health insurance "
|
||
"(inpatient and outpatient) and a yearly check-up on top of social security, plus the "
|
||
"occupational checks Thai law requires for risk-factor work (press-floor heat and noise, "
|
||
"galvanics chemistry, maintenance) within 30 days of starting and yearly after. Everyone wears "
|
||
"the same company workwear (Strauss), with process PPE on top. Planning costs, estimates: ~15,000 "
|
||
"THB a head a year for insurance, ~2,500 for the check-up plus ~1,500 for risk-factor tests, and "
|
||
"workwear ~USD 9k a year at ~20 staff."),
|
||
P("Physical security is zoned: production, galvanics, chemical storage, the metal archive, IT, "
|
||
"shipping and " + pick("(once built) ", "") + "the visitor corridor each get badge or biometric "
|
||
"access with logs; CCTV at "
|
||
"entrances, perimeter, dock, production, chemicals and archive under a PDPA-compliant retention "
|
||
"policy. Two things are irreplaceable and get their own protection: **the metal archive** (a "
|
||
"destroyed father means recutting and re-plating a release; fire-rated room, climate control in "
|
||
"the tightest monitoring tier, access logging, clean-agent gas suppression because sprinkler "
|
||
"water would destroy paper records and corrode the metal) and **client audio** (pre-release "
|
||
"music is a leak target; an isolated, encrypted, access-logged vault, need-to-know access, and a "
|
||
"written policy the sales team can show labels)."),
|
||
P("Fire suppression is zoned, not full-building gas: clean agent only in small sealed high-value "
|
||
"rooms (archive, IT, switchrooms, control cabinets), water mist or sprinklers in production and "
|
||
"the carton-heavy warehouse, and detection and containment rather than suppression for the "
|
||
"battery enclosure. The site carries its own ~200 m³ fire reserve and pump set (electric duty, "
|
||
"diesel standby, jockey) because mains flow cannot be assumed; warehouse racking above about "
|
||
"3.7 m changes the sprinkler design and raises that volume, so the racking height is fixed "
|
||
"before the fire design. The property insurer is involved before the design is fixed."),
|
||
|
||
# ----------------------------------------------- 7 regulatory
|
||
H1("7. Regulatory: BOI promotion and licences"),
|
||
H2("7.1 BOI promotion"),
|
||
P("The project will apply for promotion by the Thailand Board of Investment. In BOI terms vinyl "
|
||
"pressing is basic plastic consumer-goods manufacturing (incentive Group B): no corporate income "
|
||
"tax holiday on the core activity, but the full non-tax package and machinery duty exemption. "
|
||
"The tax value is engineered on top through measures where this project happens to be strong, so "
|
||
"the application is pitched on " + pick("automation, technology content and energy efficiency",
|
||
"solar, automation and technology content") +
|
||
", not on pressing plastic "
|
||
"discs. The research behind this dates from July 2026, BOI revises its measures roughly every "
|
||
"year, and the exact activity sub-code needs confirmation by a BOI-registered consultant before "
|
||
"filing."),
|
||
T(["What BOI gives", "Why it matters here"], [
|
||
["Machinery import duty exemption", "Almost the entire launch equipment list is imported "
|
||
"(Germany, Sweden, the UK, Australia, Japan, China). Machinery imported duty-free is also "
|
||
"exempt from VAT at import (Revenue Department answer on BOI's FAQ, checked October 2026). The "
|
||
"investment blocks assume promotion: without it, ~5% duty on ~2.3M USD of imported machinery "
|
||
"(~0.11M USD) plus ~0.17M USD of import VAT, reclaimed only later (estimates for the " +
|
||
pick("full equipment list; this plan imports less at first",
|
||
"three-press equipment list; the second Duplex system adds to both") + ")."],
|
||
["100% foreign ownership and land privileges", "Overrides Foreign Business Act restrictions "
|
||
"for the promoted activity. The land-ownership privilege is unused under the lease strategy."],
|
||
["Visas and work permits via the One Stop Service", "Foreign commissioning engineers and the "
|
||
"technical consultant, without the four-Thai-employees-per-permit rule."],
|
||
["Raw material duty relief", "Exemption for export production; up to 90% reduction for "
|
||
"domestic sales. Relevant for imported PVC compound until a Thai source is qualified."],
|
||
["Solar and battery measure (Announcement 2/2568, April 2025)", "CIT exemption based on the "
|
||
"solar investment; PV modules, inverters, battery and battery inverters, and mounting are "
|
||
"eligible, capped at THB 12M, 30M or 40M of investment per MW depending on investment type. "
|
||
"It rewards a plant-owned array. " + pick(
|
||
"This plan takes the PV and the battery through a solar PPA, so the installer owns them "
|
||
"and the plant very likely gives up this measure (to confirm with the BOI consultant; "
|
||
"section 5.4).",
|
||
"This plan buys the ~247 kWp array and the 271 kWh battery, so their cost is the base of "
|
||
"the exemption (section 5.4).")],
|
||
["Smart and Sustainable Industry measure (Announcement 15/2565, refreshed July 2025)",
|
||
"Rewards automation, smart machinery and energy efficiency, typically 3 years of CIT exemption "
|
||
"capped around 50% of the qualifying upgrade spend. The automatic Classic, inline inspection, "
|
||
"metrology and heat recovery are the natural fit."],
|
||
["R&D merit", "At least 1% of revenue in Thai R&D adds 1 to 3 exemption years and can lift the "
|
||
"cap. Galvanics process development, recycled-PVC work and the audio-QC system could qualify; "
|
||
"whether R&D with Payap University and the joint student programmes count is to be checked."],
|
||
], widths_mm=[58, 112]),
|
||
P("**Requirements:** minimum THB 1M investment excluding land and working capital (cleared many "
|
||
"times over); debt-to-equity no higher than 3:1 for the life of the privileges, which shapes "
|
||
"the financing mix; modern machinery and process; progress reports, annual reports and machinery "
|
||
"lists. The plant's asset register and stock ledger in ERPNext are where the record of promoted "
|
||
"machinery and raw materials lives, from the first capex invoice."),
|
||
P("**Process:** file via the e-Investment system and present at an analyst meeting. BOI quotes "
|
||
"about 40 working days to a decision for projects under THB 200M and 60 to 90 working days for "
|
||
"larger tiers; at " + pick("~127M to 226M THB with the ramp-up reserve (~177M at the midpoint)",
|
||
"~162M to 286M THB with the ramp-up reserve (~224M at the midpoint)") +
|
||
" the plan sits around that line, so the consultant "
|
||
"confirms which applies. In practice it is roughly 4 to 6 months end to end to the certificate; "
|
||
"the company is incorporated under it; machinery is imported within a window commonly 30 months "
|
||
"from issuance; full operation is due by about 36 months. The Northern Economic Corridor "
|
||
"(Chiang Mai, Lamphun, Lampang) is promoted as a creative-economy base, which a music "
|
||
"manufacturing story fits; the current area add-ons for Lamphun must be confirmed with BOI "
|
||
"directly."),
|
||
H2("7.2 Factory licence, galvanics and boilers"),
|
||
P("BOI promotion does not replace the factory licence (Ror.Ngor. 4), hazardous-substance "
|
||
"registration for the plating chemistry, wastewater permitting or the boiler rules. **Galvanics "
|
||
"is in the plant from launch, so the electroplating line, its chemistry and its zero-discharge "
|
||
"effluent system are in the first factory licence application**, not a later amendment. The "
|
||
"earlier plan to keep galvanics out of the first licence to protect the schedule no longer "
|
||
"applies. Effluent is the most likely regulatory friction point regardless of BOI, and it now "
|
||
"sits on the path to the first paying release:"),
|
||
B([
|
||
"**The site must permit plating from day one** (section 6.1): zoning has to allow a "
|
||
"record-pressing factory with a steam boiler and an electroplating line. The industrial "
|
||
"estate's licensing and shared effluent treatment are the easiest path; on Mueang Chi the "
|
||
"permit is ours; on Payap land the lessor's written consent comes on top.",
|
||
"**Zero discharge is the design, and the application says so:** rinse water through the ZLD "
|
||
"evaporator with metal recovery, the back-finisher's spent water and filters by the same route, "
|
||
"solvents as controlled waste, no process water to the environment. It is the strongest answer "
|
||
"the plant can give to the effluent question.",
|
||
"**Permit drawings** for the building permit and the factory licence come from a licensed "
|
||
"engineer; the construction RFQ asks whether contractors include them (shell prices usually do "
|
||
"not), and stormwater attenuation may be a permit condition.",
|
||
]),
|
||
P("**Boilers (DIW rules).** The Ministerial Regulation on boilers B.E. 2549 and the Ministry of "
|
||
"Industry notification on boiler safety of the same year apply to every module, Thai or "
|
||
"imported: a design "
|
||
"to TIS or an international standard (ASME, JIS, EN or equivalent) checked and certified by a "
|
||
"DIW-registered certification body or licensed engineer; for an imported boiler, verification by "
|
||
"a registered certification body and the manufacturer's data report, design and inspection "
|
||
"reports filed with DIW; installation drawings checked and an inspection before first use "
|
||
"reported to DIW within 30 days; **a licensed boiler controller on site**; and **inspection at "
|
||
"least once a year**. The relief for small once-through units does not apply at ~10.5 bar (our "
|
||
"reading), and the labour-side regulation of 2021 adds licensed-engineer installation and "
|
||
"testing and a feedwater standard. " + pick(
|
||
"**This plan's two boiler bodies come from a Chinese maker, so they take the imported-boiler "
|
||
"route of the notification:** verification by a registered certification body with the full "
|
||
"dossier, and an ASME Section I design at 1.25 MPa with the S stamp, because a boiler built "
|
||
"to the Chinese GB code would rest on 'or equivalent' with no precedent found. ",
|
||
"The plan's modules come from Thai suppliers to the same ASME specification; a Chinese "
|
||
"boiler built to the Chinese GB code would rest on 'or equivalent' with no precedent found. ") +
|
||
"DIW has announced a "
|
||
"revision of the boiler, pressure-vessel and refrigeration rules, so they are rechecked before "
|
||
"the RFQ, and a certification body is engaged before any boiler order."),
|
||
P("**Other permits and duties:** the same 2021 labour regulation covers the overhead crane" +
|
||
pick(" once one is bought", "") + " (a "
|
||
"crane-industry summary puts cranes above 3 t on an engineer inspection every three months; to "
|
||
"confirm against the text before the capacity is chosen); hazardous-substance registration and "
|
||
"locked, inventoried storage for silver nitrate and nickel salts; the occupational health "
|
||
"check-ups (section 6.3); PDPA for CCTV, personnel and operator-linked production data; local "
|
||
"fire codes and the building permit during construction; and DIW manifests for used oil and "
|
||
"other controlled waste."),
|
||
CALL("Three things to settle before filing", [
|
||
"**Zoning before filing.** The BOI clocks (the import window and the deadline for full "
|
||
"operation) start at the certificate, and the margin on them is consumed by one scenario: "
|
||
"filing early and then finding the site does not work. Verify the chosen plot's zoning, "
|
||
"including plating, first.",
|
||
"**Scope.** " + pick(
|
||
"Cassette and CD-R duplication come later in this plan; whether they still go into the "
|
||
"first application (their machines then due inside its import window) or into a later "
|
||
"amendment is a question for the consultant. ",
|
||
"Cassette and CD-R duplication go into the application from the start. ") +
|
||
"CD replication would need new activity codes, which cannot be added casually afterwards, so the "
|
||
"investor's decision on CD (section 4.10) is needed before the filing date.",
|
||
"**Sequencing.** The plan's rule is that no machinery purchase order precedes the certificate, "
|
||
"because duty exemption is not retroactive. But the exemption attaches at importation, not at "
|
||
"contract signature. If equipment can be ordered with a deposit while the application is in "
|
||
"review, provided it clears customs after issuance and is on the approved machinery list, the "
|
||
"launch pulls forward by six to nine months. With the lathe, galvanics and Sibert line now on "
|
||
"the critical path alongside the presses, this is the first question for the BOI consultant and "
|
||
"the only item in the plan worth half a year.",
|
||
]),
|
||
P("Keep any future label, content or retail arm in a separate entity: media and service activities "
|
||
"carry different, sometimes Thai-ownership, conditions and would muddy a clean manufacturing "
|
||
"application. Poy Records as a label brand is therefore a separate question from the plant."),
|
||
]
|