Biomass steam in both plans, PV on the factory roof only
Deploy test site / deploy (push) Successful in 49s

User, 17 Oct 2026: "only put solar on the factory, prepare the other
buildings for solar, option a and b should operate on biomass".

- Steam: two 500 kg/h biomass modules (Getabec class, 6M to 10M THB) plus
  a fuel store and handling block (1M to 2M, estimate) in both plans; the
  electric bank becomes the alternative. ~0.67M THB of fuel a year against
  ~4.9M for electric steam; grid demand ~264 kW instead of ~980 kW.
- Solar: ~520 kWp on the factory roof (the biomass-case optimum is ~500 to
  550 kWp, hourly sketch in sustainability.md "PV size with biomass
  steam"); office roof and parking canopies built PV-ready (~120 kWp
  later). ~87 % used on site, ~61 % of the plant's electricity.
- Calculator: biomass default, bFuel row, pvKWp 520, pvSelf 87, iso fills
  the factory roof first and shows the other roofs as PV-ready.
- Numbers: launch plant ~168M / 232M / 296M with contingency; Plan A
  ~182M (~2M above 180M: the Chinese-route lever priced only electric
  boilers; a Chinese biomass quote is the way back), Plan B ~217M (label
  ~215M), ~35M more. Calculator EBITDA A 2.17M, B 2.23M USD.
- CSV, total-investment, revenue-model, sustainability, scale, biomass,
  site-candidates, boi, steam-cooling, construction RFQ (canopies
  PV-ready), README, roadmap; business plan draft 0.3 rebuilt (A and B
  63 pages) with new renders.
This commit is contained in:
grabowski committed 2026-10-17 20:24:55 +07:00
1 parent 9ff5feef11
commit 984ced2485
35 files changed
+849 -665

No files matched your search

+198 -157
View File
@@ -279,23 +279,20 @@ def blocks():
"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."),
"the biomass boilers' 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 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 boilers and the compressor come from Thai "
"suppliers, with local service (below). ") +
"position. The machines that make steam and cold water come in identical modules: at launch "
"two 500 kg/h biomass boilers (B-1, B-2) for the 450 to 540 kg/h peak (one ~1 t/h package is "
"the alternative) 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. Both plans make their steam "
"from biomass (below); " + pick(
"the boilers come from a Thai maker and the compressor from a Chinese brand's Thai office. ",
"the boilers and the compressor come from Thai suppliers, with local service. ") +
"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 "
@@ -305,7 +302,7 @@ def blocks():
"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)",
"first measure to investigate on the biomass 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",
@@ -344,14 +341,15 @@ def blocks():
"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. For the five-press fleet the backbone is built for" +
", 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:"),
"charge. For the five-press fleet the backbone is built for, on biomass steam with no electric "
"boiler on the grid, that is roughly 4.5M to 6.8M THB a year before solar, 0.7M to 1.1M of it "
"demand charge, on an 800 to 1,000 kVA connection; the launch plant's peak demand is ~264 kW, "
"against ~980 kW had its steam been electric (estimates). 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.",
"**Every roof gets PV, not solar thermal.** Self-consumed PV is worth ~3.7 THB/kWh" + pick(
"**Steam comes from biomass in both plans,** because biomass heat is far cheaper than "
"electric steam (below): an electric boiler's full-power draw would set the demand charge, and "
"the peak window covers 13 of the 16 production hours.",
"**The factory 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)", "") +
"; surplus earns nothing, because a factory on PEA's grid runs zero export (below); and PV "
"cannot lower the demand charge, because the peak window runs to 22:00, long after sunset.",
@@ -361,37 +359,47 @@ def blocks():
]),
H3("Renewable energy"),
KV([
["PV on every roof and canopy", "~640 kWp (decided October 2026: as much roof as possible). In "
"the Payap scenario model the calculator draws the factory roof "
"at ~523 kWp (901 modules of a generic 580 W placeholder; no "
"module chosen yet), the car and scooter canopies at ~54 kWp and "
"the office roof at ~65 kWp; the covered link and the utility "
"yard are left out. ~900 MWh a year at 1,400 to 1,500 kWh/kWp, "
"~85% of it used on site (~760 MWh: two shifts on 300 days, a "
"~60 kW base load off-shift and the battery), about 38% of the "
"launch plant's ~2,000 MWh a year with electric steam "
"(estimates). " + pick(
["PV on the factory roof", "~520 kWp (decided October 2026: PV on the factory only, the other "
"roofs PV-ready). In the Payap scenario model the calculator draws "
"the factory roof at ~523 kWp (901 modules of a generic 580 W "
"placeholder; no module chosen yet). ~730 to 780 MWh a year at "
"1,400 to 1,500 kWh/kWp, ~87% of it used on site (~633 MWh: two "
"shifts on 300 days, a ~60 kW base load off-shift and the "
"battery), about 61% of the launch plant's ~1,036 MWh a year of "
"electricity with biomass steam (estimates). " + 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 ~2.8M to 3.0M THB a year at ~3.7 THB/kWh self-consumed and pays back in ~4.2 to 5.9 "
"years at 20 to 26 THB/W installed; the last ~340 kWp beyond the first ~300 pay back in "
"~4.9 to 6.3 years, because more of their yield is curtailed on Sundays (estimates)")],
["Zero export", "The ~15% the plant cannot use, mostly on Sundays and holidays, is curtailed, not "
"Saves ~2.3M to 2.5M THB a year at ~3.7 THB/kWh self-consumed and pays back in ~4.1 to 5.8 "
"years at 20 to 26 THB/W installed (estimates)")],
["Why ~520 kWp", "With biomass steam the running load is ~230 kW, with no electric boilers. An "
"hourly sketch (two shifts on 300 days, ~60 kW off-shift base load, the 271 kWh "
"battery, PEA's time-of-use tariff with Ft, 23,000 THB/kWp, 25 years at 8%) "
"puts the best array at ~500 to 550 kWp: the net present value peaks there, and "
"the kWp above ~550 lose money because more of their yield is curtailed. The "
"factory roof's ~520 kWp sits at that optimum (estimates)"],
["PV-ready: office roof and canopies", "The office roof (~65 kWp) and the car and scooter canopies "
"(~54 kWp: car ~42, scooter ~13) are built ready for panels: structure rated for them (~20 kg/m² "
"plus wind uplift), conduit and a cable route to the main board, and a spare way for a later "
"inverter. Panels go on when the load rises with the second Duplex system: ~120 kWp for ~2.4M "
"to 3.1M THB at 20 to 26 THB/W (estimate). The preparation is small (estimate) and sits in the "
"building and site works; the construction RFQ already specifies canopy steel carrying PV"],
["Zero export", "The ~13% the plant cannot use, mostly on Sundays and holidays, is curtailed, not "
"sold: a factory on PEA's grid runs zero export, with no payment for surplus and "
"a zero-export controller (reverse-power relay) as part of the interconnection "
"(CapSolar and Sahawatthanakit, 2026)"],
["On the Mueang Chi hall", "The 60 × 25 m hall of section 6.2 takes only ~300 kWp: ~247 kWp on "
"the 1,523 m² monopitch roof (425 modules) and ~40 to 54 kWp on the "
"parking canopies. The rest would need ground mount on the ~70 m of "
"plot behind the building (not covered by the rooftop exemption, so "
"it may still need a factory permit) or the phase 2 roof (~251 "
"kWp)"],
["On the Mueang Chi hall", "The factory roof of the 60 × 25 m hall of section 6.2 takes only "
"~247 kWp (425 modules on the 1,523 m² monopitch roof), about half "
"the optimum; its parking canopies are PV-ready too (~40 to 54 kWp). "
"More would need ground mount on the ~70 m of plot behind the "
"building (not covered by the rooftop exemption, so it may still "
"need a factory permit) or the phase 2 roof (~251 kWp)"],
["Battery", "271 kWh Gobel Power LiFePO4 rack (15 stacked 18 kWh packs, 8,000+ cycles), USD "
"39,900 to 58,000 listed (battery only; ~2.0M to 3.5M THB installed with enclosure, fire protection and "
"controls, estimate), 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), ~500 kVA in all (estimate); "
["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), ~430 kVA in all (about nine 50 kW "
"units, estimate); "
"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% "
@@ -400,7 +408,7 @@ def blocks():
"burning-season dust"],
["Permits", "Since Ministerial Regulation No. 3 B.E. 2567 (in force 28 December 2024) rooftop "
"solar outside industrial estates is not a factory, so it needs no Ror.Ngor. 4 "
"licence at any size. At ~500 kVA of inverters, under the 1,000 kVA line of the "
"licence at any size. At ~430 kVA of inverters, under the 1,000 kVA line of the "
"Energy Regulatory Commission (ERC), an ERC exemption notification replaces a "
"generation licence. PEA approves the interconnection with zero-export control in 3 "
"to 6 months, filed in parallel with procurement (CapSolar, 2026); the roof load is "
@@ -410,12 +418,13 @@ def blocks():
"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 PPA covers the full ~640 kWp; the "
"calculator carries 3.0 THB/kWh (estimate) for the ~760 MWh used on site, ~2.3M THB or "
"~0.07M USD a year on the energy line. That keeps the PV EPC (USD 388k to 504k, 12.8M to "
"16.6M THB at 20 to 26 THB/W) and the battery (USD 61k to 106k) out of the capital round: "
"~17.5M THB less at the midpoint, one of the six levers in section 8. The launch plant's "
"power bill (~0.75M THB a month before solar, estimate) is well above the 100,000 THB a "
"plant buys the power at a price still to quote. The PPA covers the ~520 kWp factory "
"roof; the calculator carries 3.0 THB/kWh (estimate) for the ~633 MWh used on site, ~1.9M "
"THB or ~0.06M USD a year on the energy line. That keeps the PV EPC (USD 315k to 410k, "
"10.4M to 13.5M THB at 20 to 26 THB/W) and the battery (USD 61k to 106k) out of the capital "
"round: ~14.7M THB less at the midpoint, one of the six levers in section 8. The launch "
"plant's power bill (~0.36M THB a month before solar with biomass steam: ~1,036 MWh at the "
"blended ~3.81 THB/kWh plus the demand charge, estimate) is well above the 100,000 THB a "
"month CapSolar asks of a PPA site; PPA discounts run 10 to 15 % off the tariff at MEAei "
"and 10 to 30 % at CapSolar, so the calculator's ~21 % is to be quoted. Leasing gives up no BOI benefit on the array: BOI stopped promoting solar "
"installations on 1 July 2025 (Announcement 3/2568, section 7.1). A PPA developer selling "
@@ -424,77 +433,94 @@ def blocks():
"above and, if the PPA includes the battery, the battery's possible BOI eligibility as "
"storage (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: PV EPC USD 388k to 504k "
"(12.8M to 16.6M THB for ~640 kWp, 20 to 26 THB/W installed with inverters at Thai 2026 "
"market prices; the canopy steel is in the building and site works) and the battery, "
"installed, USD 61k to 106k (2.0M to 3.5M THB): ~17.5M THB together at the midpoint, "
"estimates, section 8. Owning them saves the power bill a PPA would carry: at the "
"calculator's 3.0 THB/kWh (estimate, to quote) for the ~760 MWh used on site, ~2.3M THB "
"or ~0.07M USD a year. A solar PPA (an installer owns and finances them, the plant buys "
"the power at a price still to quote) would take ~17.5M THB out of the capital round at "
"the midpoint at the cost of that bill. The array itself carries no BOI benefit: BOI "
["Owned (this plan)", "The plant buys the array and the battery: PV EPC USD 315k to 410k "
"(10.4M to 13.5M THB for ~520 kWp on the factory roof, 20 to 26 THB/W installed with "
"inverters at Thai 2026 market prices; the PV-ready canopy steel and conduit are in the "
"building and site works) and the battery, installed, USD 61k to 106k (2.0M to 3.5M THB): "
"~14.7M THB together at the midpoint, estimates, section 8. Owning them saves the power bill "
"a PPA would carry: at the calculator's 3.0 THB/kWh (estimate, to quote) for the ~633 MWh "
"used on site, ~1.9M THB or ~0.06M USD a year. A solar PPA (an installer owns and finances "
"them, the plant buys the power at a price still to quote) would take ~14.7M THB out of the "
"capital round at the midpoint at the cost of that bill. The array itself carries no BOI benefit: BOI "
"stopped promoting solar installations on 1 July 2025 (Announcement 3/2568, section "
"7.1); the owned battery may still qualify as storage (to confirm with the BOI "
"consultant)"]),
]),
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, the top of the plant's 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),
H3("Steam: biomass in both plans"),
P("Both plans make their steam from biomass (decided October 2026): two 500 kg/h biomass modules "
"(B-1, B-2) or one ~1 t/h package, Getabec class, 6M to 10M THB installed with the fuel feed, "
"grate and dust control, plus a fuel store and handling block of 1.0M to 2.0M THB (a covered "
"store, a chip bay, ash bins and a compact loader; utilities CSV, estimates). The electric boiler "
"bank (4.5M to 7M THB from Thai suppliers, 2.8M to 5.5M through the Chinese route) is now the "
"alternative, not the plan. There is no natural gas pipeline in Northern Thailand, so gas would "
"mean a bulk LPG tank on site with hazardous-storage separation and licensing, and diesel a fuel "
"tank with price exposure. The two routes without a fossil tank, compared for the launch plant "
"at ~850k records a year (~1,403 t of steam, ~954 MWh of heat; estimates):"),
T(["", "Biomass boiler bank (~80%): the plan", "Electric boiler bank (~98%): the alternative"], [
["Price of heat", "~0.5 to 0.9 THB/kWh at 1.35 to 2 THB/kg delivered (reported market prices, "
"October 2026; no supplier quote yet), ~0.7 planned", "~3.9 THB/kWh, plus the demand charge"],
["Running cost, launch plant", "~0.67M THB a year of fuel at ~0.7 THB/kWh: about 300 t of "
"air-dry wood or ~460 t of fresh chips, plus handling and ash", "~4.9M THB a year: ~973 MWh at "
"the blended ~3.81 THB/kWh plus the demand charge on 2 × 360 kW of boilers"],
["Boiler package, 2 × 500 kg/h", "~6M to 10M THB installed, plus 1.0M to 2.0M for the fuel "
"store and handling", "4.5M to 7M THB from Thai suppliers, ~2.8M to 5.5M through the Chinese "
"route"],
["Grid", "Launch plant peak demand ~264 kW; 800 to 1,000 kVA for the five-press backbone",
"~980 kW at launch; the five presses ~950 to 1,330 kW, PEA Schedule 4, 1,250 to 1,600 kVA"],
["Also", "Fuel contracts and a monsoon stock, ash handling, a 14 m flue stack with a dust "
"collector, more maintenance, a certified boiler attendant, emission limits in the permit",
"Cleanest permitting, no fuel logistics, no stack"],
], widths_mm=[32, 70, 68], 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). 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."),
"heat. At launch biomass saves **~4.2M THB (~0.13M USD) a year** against electric steam, so it "
"repays its higher price and the fuel store (~3.8M to 5.4M THB more at the midpoints than a Thai "
"or a Chinese electric bank) in about a year (estimates). Without electric boilers the plant's "
"demand stays at ~264 kW instead of ~980 kW, which also means a smaller transformer and PEA "
"deposit (not re-priced; an upside). The earlier staged path (start electric, add biomass later) "
"is dropped: each year on electric steam would cost about that ~4.2M THB more. The site still "
"matters: next to the pharmaceutical facility on Payap land a biomass stack is a hard sell, so "
"the GMP-neighbour check (section 6.1) asks about it before any design work, and the electric "
"bank is the fall-back there."),
P("**What biomass brings with it.** Fuel contracts and a dry stock for the monsoon: the 42 m² store "
"drawn in the utility yard holds ~6 to 7 weeks of fresh chips, and a 3-month monsoon stock needs "
"~80 m² (estimates). Ash to handle and dispose of. The 14 m flue stack and the dust collector, "
"already drawn in the utility yard. More maintenance than an electric bank, and a certified boiler "
"attendant from the maintenance team as the licensed boiler controller (section 7.2). Boiler "
"registration and the air-emission limits for a solid-fuel boiler in the permit work (to confirm, "
"section 7.2). And a visible point source in Chiang Mai's burning season (February to April): dust "
"control matters for the story as much as for the permit, and buying farm residues that would "
"otherwise be burned in the fields is the other half of that story."),
P("**Fuel.** The launch plant burns about 300 t of air-dry wood or ~460 t of fresh chips a year at "
"~850k records; the five-press fleet at about 1.0 million records would burn 350 to 400 t air-dry "
"(~540 to 620 t as fresh chips; estimates). 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, an upside "
"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 order."),
P("**Where the boilers come from.** Both plans price the biomass modules from a Thai maker with "
"Thai fabrication and service (Getabec class, 6M to 10M THB installed; utilities CSV, estimate). "
"Chinese makers build biomass boilers too (ZOZEN DZL, Sitong DZL and SZL, Taiguo, Yongxing), but "
"none is priced yet: the Chinese route checked so far priced only electric boilers. " + pick(
"That makes a Chinese biomass quote a decision point for this plan: one ~2M THB or more below "
"the Thai package would bring Plan A back under 180M THB at the midpoint. What this plan takes "
"through the Chinese route is the compressor, a Chinese brand bought through its Thai office "
"(Kaishan and Denair have one) so service stays local, ~0.25M THB less at the midpoint "
"(estimate from listings, not a quote). ",
"A Chinese biomass quote is a step if quotes land high, and so is a Chinese compressor brand "
"bought through its Thai office (Kaishan and Denair have one), ~0.25M THB less at the midpoint "
"(estimate from listings, not a quote); this plan buys the compressor from a Thai supplier. ") +
"Any module, Thai or imported, is specified as 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 for an imported "
"boiler a Thai boiler contractor and the certification body would be the service layer. 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 "
@@ -522,12 +548,13 @@ def blocks():
"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; every roof and "
"canopy carries PV" + pick(" through a solar PPA", "") + " (~640 kWp, over a third of the "
"launch plant's electricity even with electric steam, estimate), 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 "
"flue gas, the condensate and the press returns before more is generated; steam comes from "
"biomass in both plans, at about a seventh of what electric steam would cost (~0.67M against "
"~4.9M THB a year at launch, estimate); the factory roof carries PV" +
pick(" through a solar PPA", "") + " (~520 kWp, ~61% of the launch plant's electricity, "
"estimate), with the office roof and the canopies ready for more panels and a battery for "
"ride-through; no process water is discharged; and a fifth of the plastic is reclaimed. The "
"same choices push the energy line "
"toward its low end and hedge Thai tariff rises; the heat recovery and automation can count "
"toward BOI's Smart and Sustainable Industry measure" + pick(
"", " and the owned battery may qualify as storage") + " (section 7.1; BOI no longer "
@@ -688,7 +715,8 @@ def blocks():
"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 "
"plot has to permit record pressing with a biomass-fired 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 "
@@ -706,11 +734,12 @@ def blocks():
"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).",
"biomass-fired 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 "
"**The GMP neighbour:** a pharmaceutical plant is sensitive to the biomass boiler's 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 "
@@ -743,9 +772,9 @@ def blocks():
"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)."),
"turning, parking, the detached utility yard with truck access for biomass deliveries, a "
"separated battery enclosure, and a medium-voltage connection from PEA (800 to 1,000 kVA for the "
"five-press backbone on biomass steam; electric steam would need 1,250 to 1,600 kVA)."),
H2("6.2 The building"),
P("The main building is a single-storey steel portal frame (pre-engineered) of **60 × 25 m "
@@ -791,12 +820,14 @@ def blocks():
"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: "
"every roof and canopy carries PV, ~640 kWp on the factory, the office and the car and scooter "
"parking" + pick(", supplied through the solar PPA (the battery is drawn too; whether a PPA offer "
"includes it is open)", ", owned with the battery") +
"; the utility yard (boiler hall and chiller compound built for four modules each, pump and "
"heat-exchanger room, transformer, water treatment, PVC silos) and the phase 2 reserve. Schematic render of the Payap scenario model (docs/fleet-calculator.html); "
"positions and envelopes are estimates."),
"PV on the factory roof, ~520 kWp" + pick(", supplied through the solar PPA (the battery is drawn "
"too; whether a PPA offer includes it is open)",
", owned with the battery") +
", with the office roof and the car and scooter canopies PV-ready and without panels; the "
"utility yard (biomass boiler hall and chiller compound built for four modules each, the "
"biomass fuel store, the flue stack and dust collector, pump and heat-exchanger room, "
"transformer, water treatment, PVC silos) 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" +
@@ -810,12 +841,14 @@ def blocks():
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",
"outlines are the free Duplex bays and Classic positions for growth. In the yard, biomass "
"boiler modules B-1 and B-2 with the fuel store, flue stack and dust collector, and chillers "
"CH-1 and CH-2, with B-3, B-4, CH-3 and CH-4 free",
"Duplex system 1 (two HRP 12 presses with their extruders) and the Classic, in a hall laid "
"out for five Duplex bays and four Classic positions; the dashed outlines are the free bays "
"and 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; the 5 t crane over the hall, the visitor corridor "
"and positions for growth. In the yard, biomass boiler modules B-1 and B-2 with the fuel "
"store, flue stack and dust collector, and chillers CH-1 and CH-2, with B-3, B-4, CH-3 and "
"CH-4 free; the 5 t crane over the hall, the visitor corridor "
"and the cassette and CD-R rooms are in place") +
". Schematic, estimates."),
H3("Crane, workshop and visitor corridor"),
@@ -873,17 +906,18 @@ def blocks():
])),
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), "
["Boiler hall, four 500 kg/h biomass module positions (B-1 and B-2 at launch)", "~162 m² (18 × 9 m), "
"6.0 m high"],
["Biomass fuel store", "42 m²"],
["Biomass fuel store (~6 to 7 weeks of fresh chips; ~80 m² would hold a 3-month monsoon "
"stock)", "42 m² drawn"],
["Chiller compound, open and screened, four pads (CH-1 and CH-2"
" at launch)", "~135 m² (12.5 × "
"10.8 m)"],
["Cooling pump and heat-exchanger room", "~40 m² (8 × 5 m)"],
["Flue stack", "14 m"],
["Flue stack, with the dust collector and fans along the boiler hall's back wall", "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 "
caption="The biomass bank of both plans 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."),
@@ -904,8 +938,8 @@ def blocks():
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 with its canopies fully covered in PV (~54 "
"kWp; ~40 kWp in the construction RFQ), a ring foundation "
"general), roofed parking for 10 cars and 30 scooters under PV-ready canopies (steel for ~40 "
"kWp of panels in the construction RFQ; panels later), 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 "
@@ -930,7 +964,9 @@ def blocks():
"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."),
"and asks whether permit drawings for the building permit and the factory licence are included. "
"The PV-ready provisions (the canopy steel it already specifies, roof loads for panels, conduit to "
"the main board and a spare way for a later inverter) belong to the same works."),
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",
@@ -948,7 +984,8 @@ def blocks():
["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"],
"estimate at the building rate; the biomass fuel store and handling (1.0M to 2.0M THB) sit in "
"the utilities block"],
["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 "
@@ -979,8 +1016,8 @@ def blocks():
"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)."),
"stays in the workshop under a permit; the biomass boilers run under a licensed boiler "
"controller, a certified attendant from the maintenance team (section 7.2)."),
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, "
@@ -1060,8 +1097,8 @@ def blocks():
"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)",
"~156M to 275M THB with the ramp-up reserve (~216M at the midpoint)") +
"larger tiers; at " + pick("~132M to 233M THB with the ramp-up reserve (~182M at the midpoint)",
"~156M to 277M THB with the ramp-up reserve (~217M 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 "
@@ -1071,7 +1108,8 @@ def blocks():
"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 "
"registration for the plating chemistry, wastewater permitting, the boiler rules or the air-emission "
"limits for the biomass boiler's stack. **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 "
@@ -1079,7 +1117,7 @@ def blocks():
"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 "
"record-pressing factory with a biomass-fired 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 "
@@ -1100,13 +1138,16 @@ def blocks():
"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. ") +
"testing and a feedwater standard. Both plans price the biomass modules from a Thai maker to the "
"ASME specification of section 5.4. A Chinese biomass boiler" + pick(
" (the open decision point of section 5.4)", "") + " would 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. **Biomass adds to the permit work** (to "
"confirm with the permit engineer before the RFQ): the boiler registered with DIW; the air-emission "
"limits for a solid-fuel boiler met at the 14 m stack, with the dust collector in the boiler "
"package; the fuel store and ash handling in the factory licence drawings; and the licensed "
"boiler controller, a certified attendant from the maintenance team. " +
"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."),