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

+324 -259
View File
@@ -48,29 +48,36 @@ def _block_rows():
"station", "350k to 810k", "11.6M to 26.7M", "Estimate; all of it at launch (Plan A buys the laser "
"confocal and the wide-area profiler from revenue)"]),
["PVC lab, day-one tier", "55k to 150k", "1.8M to 5.0M", "Estimate"],
pick(["Steam, cooling and compressed air: two 500 kg/h boiler modules (priced electric), cooling "
"backbone for four modules (plate heat exchanger, tanks, pumps, mains), two 250 kW chiller "
"modules (CH-1, CH-2), screw compressor, dryer and receiver", "239k to 416k", "7.9M to 13.7M",
"Researched: utilities rows; boilers and compressor through the Chinese route (lever 6): "
"ASME-stamped 1.25 MPa boiler bodies installed by a Thai contractor, the compressor from a "
"Chinese brand's Thai office"],
["Steam, cooling and compressed air: two 500 kg/h boiler modules (priced electric), cooling "
"backbone for four modules (plate heat exchanger, tanks, pumps, mains), two 250 kW chiller "
"modules (CH-1, CH-2), screw compressor, dryer and receiver", "296k to 470k", "9.8M to 15.5M",
"Researched: utilities rows; boilers and compressor from Thai suppliers, with local service"]),
["Steam: two 500 kg/h biomass boiler modules (B-1, B-2; Getabec class), installed with fuel feed, "
"grate and dust control", "182k to 303k", "6.0M to 10.0M", "Researched: utilities rows, the biomass "
"package for ~1 t/h (engineering estimate); both plans run on biomass (decided 17 October 2026); the "
"electric bank (Thai 4.5M to 7.0M, Chinese route 2.8M to 5.5M) is the alternative, not the plan"],
["Biomass fuel store and handling: covered fuel store, chip bay, ash bins, a compact loader",
"30k to 61k", "1.0M to 2.0M", "Estimate, utilities rows: 42 m² store drawn (~6 to 7 weeks of fresh "
"chips), ~80 m² for a 3-month monsoon stock"],
pick(["Cooling and compressed air: cooling backbone for four modules (plate heat exchanger, tanks, "
"pumps, mains), two 250 kW chiller modules (CH-1, CH-2), screw compressor, dryer and receiver",
"153k to 248k", "5.05M to 8.2M", "Researched: utilities rows; the compressor through the Chinese "
"route (lever 6), from a Chinese brand's Thai office"],
["Cooling and compressed air: cooling backbone for four modules (plate heat exchanger, tanks, "
"pumps, mains), two 250 kW chiller modules (CH-1, CH-2), screw compressor, dryer and receiver",
"159k to 258k", "5.25M to 8.5M", "Researched: utilities rows; the compressor from a Thai supplier, "
"with local service"]),
["Whole-factory HVAC, clean-room adder for galvanics and the cutting room, softener, loop treatment, "
"racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"],
]
if not a:
rows.append(["Solar PV (EPC) on every roof and canopy, ~640 kWp, and the 271 kWh Gobel battery, owned",
"449k to 610k", "14.8M to 20.1M",
"Researched: utilities rows; PV at 20 to 26 THB/W installed, inverters included (12.8M to "
"16.6M), battery 2.0M to 3.5M; ~85 % of the yield used on site under zero export (estimate); "
rows.append(["Solar PV (EPC) on the factory roof, ~520 kWp, and the 271 kWh Gobel battery, owned (the "
"office roof and the canopies PV-ready, panels later)",
"376k to 516k", "12.4M to 17.0M",
"Researched: utilities rows; PV at 20 to 26 THB/W installed, inverters included (10.4M to "
"13.5M), battery 2.0M to 3.5M; ~87 % of the yield used on site under zero export (estimate); "
"owned, so the plant keeps the whole bill saving (no BOI promotion for solar installations "
"since 1 July 2025, section 8.4)"])
rows += [
["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² plus ~20 % site works; soil is the main variable"],
"12,000 to 20,000 THB/m² plus ~20 % site works; soil is the main variable; includes making the office "
"roof and the canopies PV-ready (structure, conduit; small, estimate)"],
pick(["Crane rented for the installations (mobile crane); frame, runway and machine door stay "
"crane-ready", "39k to 91k", "1.3M to 3.0M", "Estimate: 40 % of the crane block (lever 5)"],
["Overhead crane, runway, frame premium, machine door", "97k to 227k", "3.2M to 7.5M", "Estimate"]),
@@ -95,22 +102,22 @@ def _block_rows():
"4.5M to 9.7M", "Estimate; land is leased, so no land purchase"],
]
if a:
rows.append(["Not bought at launch (levers, section 8.2): solar PV on every roof and canopy (~640 kWp) "
rows.append(["Not bought at launch (levers, section 8.2): solar PV on the factory roof (~520 kWp) "
"and the battery (solar PPA), visitor corridor, cassette and CD-R duplication", "none", "none", "The PPA installer owns and "
"finances the array; the rest are growth steps from revenue"])
rows += [
pick(["**Subtotal, plan investment**", "**~3.56M to 6.25M**", "**~117.4M to 206.1M**",
"**Midpoint ~161.7M THB (~4.90M USD)**"],
["**Subtotal, plan investment**", "**~4.42M to 7.73M**", "**~145.9M to 255.2M**",
"**Midpoint ~200.6M THB (~6.08M USD)**"]),
pick(["**Subtotal, plan investment**", "**~3.68M to 6.44M**", "**~121.6M to 212.6M**",
"**Midpoint ~167.1M THB (~5.06M USD)**"],
["**Subtotal, plan investment**", "**~4.42M to 7.79M**", "**~146.0M to 257.1M**",
"**Midpoint ~201.6M THB (~6.11M USD)**"]),
["Ramp-up reserve: staff hired before first revenue, overheads until volume covers them",
"~0.30M to 0.61M", "10M to 20M", "Estimate; cash the investor puts in, so it is in the plan price"],
pick(["**Plan A price**", "**~3.86M to 6.85M**", "**~127M to 226M**",
"**Midpoint ~177M THB (~5.35M USD): ~180M THB**"],
["**Plan B price**", "**~4.72M to 8.34M**", "**~156M to 275M**",
"**Midpoint ~216M THB (~6.53M USD): ~215M THB**"]),
pick(["**Plan A price**", "**~3.99M to 7.05M**", "**~132M to 233M**",
"**Midpoint ~182M THB (~5.52M USD): ~180M THB, ~2M above 180M**"],
["**Plan B price**", "**~4.73M to 8.40M**", "**~156M to 277M**",
"**Midpoint ~217M THB (~6.56M USD): ~215M THB**"]),
["Contingency: not in the plan price", "", "", pick(
"For information: at 15 %, ~24M THB at the midpoint",
"For information: at 15 %, ~25M THB at the midpoint",
"For information: at 15 %, ~30M THB at the midpoint")],
]
return rows
@@ -119,28 +126,30 @@ def _block_rows():
def _levers_table():
"""Plan A: the six levers from the launch plant with every block, midpoints, no contingency."""
return T(["Step", "Saves", "Subtotal after it", "What it gives up"], [
["Launch plant, every block, no contingency", "", "~200.6M THB (~6.08M USD)", ""],
["1. Solar on every roof and canopy (~640 kWp) and the battery through a solar PPA (the installer owns "
"and finances the array; the plant buys the power)", "~17.5M", "~183.1M", "Owned solar and its whole "
"bill saving: adds the PPA power price to the energy bill, ~0.07M USD (~2.3M THB) a year in the "
"calculator for ~760 MWh used on site at 3.0 THB/kWh (estimate, to quote)"],
["Launch plant, every block, no contingency", "", "~201.6M THB (~6.11M USD)", ""],
["1. Solar on the factory roof (~520 kWp) and the battery through a solar PPA (the installer owns "
"and finances the array; the plant buys the power)", "~14.7M", "~186.9M", "Owned solar and its whole "
"bill saving: adds the PPA power price to the energy bill, ~0.06M USD (~1.9M THB) a year in the "
"calculator for ~633 MWh used on site at 3.0 THB/kWh (estimate, to quote)"],
["2. Metrology launch tier: XRF, inline vision and audio station at launch; laser confocal and "
"wide-area profiler (USD 180k to 350k) bought from revenue", "~8.8M", "~174.4M", "Every stamper and "
"wide-area profiler (USD 180k to 350k) bought from revenue", "~8.8M", "~178.1M", "Every stamper and "
"record is still measured (XRF, inline vision on the presses, audio station); the confocal and the "
"profiler come later"],
["3. Visitor corridor built later", "~3.6M", "~170.8M", "No public tours at first: the tour route and "
["3. Visitor corridor built later", "~3.6M", "~174.5M", "No public tours at first: the tour route and "
"the Payap programmes around it start later"],
["4. Cassette and CD-R duplication later", "~4.0M", "~166.8M", "No cassette or CD-R at launch; a growth "
["4. Cassette and CD-R duplication later", "~4.0M", "~170.5M", "No cassette or CD-R at launch; a growth "
"step"],
["5. Crane rented for the installations (mobile crane)", "~3.2M", "~163.6M", "No overhead crane at "
["5. Crane rented for the installations (mobile crane)", "~3.2M", "~167.3M", "No overhead crane at "
"first; frame, runway and machine door stay crane-ready, so it can be bought later if needed"],
["6. Boilers and compressor through the Chinese route", "~1.9M", "**~161.7M (~4.90M USD)**",
"Imported boilers take the Thai route (Ministry of Industry boiler notification B.E. 2549: design "
"and import rules, a certification body registered with the Department of Industrial Works) with an "
"ASME S stamp at 1.25 MPa"],
["6. Compressor through the Chinese route (a Chinese brand's Thai office)", "~0.25M",
"**~167.1M (~5.06M USD)**", "A Chinese brand's screw compressor (Kaishan or Denair, both with Thai "
"offices) instead of a Thai supplier's. The route priced only electric boilers; Chinese biomass "
"boilers (ZOZEN, Sitong, Taiguo, Yongxing) are not priced yet, and a quote ~2M THB or more below the "
"Thai biomass package would put Plan A back under 180M"],
["Ramp-up reserve", "", "+10M to 20M", ""],
["**Plan A**", "", "**~177M THB (~5.35M USD)**", "~127M to 226M from the low to the high end of every "
"block"],
["**Plan A**", "", "**~182M THB (~5.52M USD)**", "**~2M above 180M at the midpoint** (177M to 187M "
"with the reserve's 10M to 20M); ~132M to 233M from "
"the low to the high end of every block"],
], widths_mm=[56, 16, 32, 66], font_pt=8.5,
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. "
"The levers keep every machine of the launch plant.")
@@ -149,10 +158,11 @@ def _levers_table():
def _keeps_table():
"""Plan B: what it keeps that Plan A's six levers move off the launch budget, midpoints, no contingency."""
return T(["In at launch in Plan B", "What it gives the plant", "THB, midpoint (Plan A's lever)"], [
["Solar PV on every roof and canopy (~640 kWp) and the 271 kWh battery, owned (EPC and Gobel battery)",
"No PPA power bill: the whole saving on the ~760 MWh used on site (~2.8M to 3.0M THB a year) stays "
"with the plant instead of ~2.3M THB (~0.07M USD) a year going to a PPA installer; payback ~4.2 to "
"5.9 years (estimates)", "~17.5M"],
["Solar PV on the factory roof (~520 kWp; the office roof and the canopies PV-ready) and the 271 kWh "
"battery, owned (EPC and Gobel battery)",
"No PPA power bill: the whole saving on the ~633 MWh used on site (~2.3M to 2.5M THB a year) stays "
"with the plant instead of ~1.9M THB (~0.06M USD) a year going to a PPA installer; payback ~4.1 to "
"5.8 years (estimates)", "~14.7M"],
["Metrology, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio station",
"Every stamper measured fully from the first release, the core of the traceability pitch", "~8.8M"],
["Visitor corridor and accessible entrance", "Public tours and the Payap programmes possible from the "
@@ -161,47 +171,44 @@ def _keeps_table():
["5 t overhead crane, runway, frame premium, machine door, bought", "Its own crane over the press "
"hall; no mobile crane to rent for "
"the installations", "~3.2M"],
["Boilers and compressor from Thai suppliers", "Local service; no import route for the boilers",
"~1.9M"],
["**Together**", "", "**~39M (200.6M minus Plan A's 161.7M)**"],
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~200.6M (~6.08M USD)"],
["Screw compressor from a Thai supplier", "Local service", "~0.25M"],
["**Together**", "", "**~34.5M (201.6M minus Plan A's 167.1M)**"],
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~201.6M (~6.11M USD)"],
["Ramp-up reserve", "", "+10M to 20M"],
["**Plan B**", "", "**~216M THB (~6.53M USD)**; ~156M to 275M from the low to the high end"],
["**Plan B**", "", "**~217M THB (~6.56M USD)**; ~156M to 277M from the low to the high end"],
], widths_mm=[62, 70, 38], font_pt=8.5,
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. "
"Each figure is what the matching Plan A lever saves; rounded, the six add to ~39.0M, and the "
"two subtotals differ by ~38.9M.")
"Each figure is what the matching Plan A lever saves; rounded, the six add to ~34.6M, and the "
"two subtotals differ by ~34.5M. Steam is biomass in both plans, so the boilers are not a "
"difference between them.")
def _tranches():
return T(["Tranche", "Trigger", "Covers", "Approx. share, THB"], [
["0", "Now", "Phase 0 work (section 14.1)", "The Phase 0 block, ~1.3M to 2.6M (1 to 2 %)"],
["1", "BOI certificate issued; lease signed; zoning and soil confirmed; pricing validated",
pick("Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt "
"Duplex system and Classic; building design and permit; first boiler and chiller modules "
"(boilers and compressor through the Chinese route)",
"Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt "
"Duplex system and Classic; building design and permit; first boiler and chiller modules "
"(boilers and compressor from Thai suppliers)"),
pick("20 to 30 % (~32M to 49M)", "20 to 30 % (~40M to 60M)")],
"Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt "
"Duplex system and Classic; building design and permit; the two biomass boiler modules and the first "
"two chiller modules",
pick("20 to 30 % (~33M to 50M)", "20 to 30 % (~40M to 60M)")],
["2", "Building permit; vendor build dates confirmed in writing",
"Construction, water-treatment building, utility yard, utilities, balance payments as machines are "
"built",
pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~70M to 90M)")],
pick("35 to 45 % (~58M to 75M)", "35 to 45 % (~71M to 91M)")],
["3", "Building watertight; first machinery shipped",
pick("Fit-out, HVAC and clean zones, ZLD and DI water, the rented crane for the installations, the "
"metrology launch tier, factory software and ERPNext, the launch team",
"Fit-out, HVAC and clean zones, ZLD and DI water, solar PV on every roof and canopy and the "
"Fit-out, HVAC and clean zones, ZLD and DI water, solar PV on the factory roof and the "
"battery, crane, visitor corridor, the full metrology stack, factory software and ERPNext, cassette and CD-R lines, the "
"launch team"),
pick("15 to 20 % (~24M to 32M)", "15 to 20 % (~30M to 40M)")],
pick("15 to 20 % (~25M to 33M)", "15 to 20 % (~30M to 40M)")],
["4", "Cutting room and galvanics commissioned; first stampers made", "Working capital, PVC stock, "
"spares, first-year rent; the ramp-up reserve (10M to 20M THB, in the plan price) is drawn from here "
"on", pick("8 to 12 % (~13M to 19M), plus the reserve", "8 to 12 % (~16M to 24M), plus the reserve")],
"on", pick("8 to 12 % (~13M to 20M), plus the reserve", "8 to 12 % (~16M to 24M), plus the reserve")],
], widths_mm=[14, 46, 78, 32], font_pt=8.5,
caption=pick("Shares of Plan A's investment before the reserve (~161.7M THB at the midpoint); the THB "
caption=pick("Shares of Plan A's investment before the reserve (~167.1M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates).",
"Shares of Plan B's investment before the reserve (~200.6M THB at the midpoint); the THB "
"Shares of Plan B's investment before the reserve (~201.6M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates)."))
@@ -218,11 +225,11 @@ def _operating_table():
["**Total contribution**", "**0.68M**", "**2.06M**", "**3.99M**"],
["Cash overheads", "0.45M", "0.33M", "0.20M"],
["**EBITDA**", "**0.23M**", "**1.73M**", "**3.79M**"],
["Depreciation", "0.62M", "0.39M", "0.24M"],
["**Operating profit**", "**-0.39M**", "**1.34M**", "**3.55M**"],
["Depreciation", "0.64M", "0.40M", "0.25M"],
["**Operating profit**", "**-0.41M**", "**1.33M**", "**3.54M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~30 yr", "~3.1 yr (2.2 to 4.0 on 3.86M to "
"6.85M)", "~1.0 yr"],
["Payback on the plan price (EBITDA, mature year)", "~31 yr", "~3.2 yr (2.3 to 4.1 on 3.99M to "
"7.05M)", "~1.1 yr"],
]
else:
rows = [
@@ -235,11 +242,11 @@ def _operating_table():
["**Total contribution**", "**0.68M**", "**2.06M**", "**3.99M**"],
["Cash overheads", "0.45M", "0.33M", "0.20M"],
["**EBITDA**", "**0.23M**", "**1.73M**", "**3.79M**"],
["Depreciation", "0.77M", "0.49M", "0.29M"],
["**Operating profit**", "**-0.54M**", "**1.24M**", "**3.50M**"],
["Depreciation", "0.78M", "0.49M", "0.29M"],
["**Operating profit**", "**-0.55M**", "**1.24M**", "**3.50M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~36 yr", "~3.8 yr (2.7 to 4.8 on 4.72M to "
"8.34M)", "~1.2 yr"],
["Payback on the plan price (EBITDA, mature year)", "~37 yr", "~3.8 yr (2.7 to 4.9 on 4.73M to "
"8.40M)", "~1.2 yr"],
]
return T(["USD per year, mature", "Adverse", "Central", "Favourable"], rows, widths_mm=[50, 36, 48, 36],
caption="Estimates, docs/finance/revenue-model.md 'Operating pictures of Plan A and Plan B (October "
@@ -257,15 +264,15 @@ def _risk_rows():
]
rows += [
["High", "No contingency in the plan price", pick(
"Quotes landing high are not covered: at 15 % a contingency would be ~24M THB at the midpoint, "
"and the high end of every block comes to ~226M with the reserve",
"Quotes landing high are not covered: at 15 % a contingency would be ~25M THB at the midpoint, "
"and the high end of every block comes to ~233M with the reserve",
"Quotes landing high are not covered: at 15 % a contingency would be ~30M THB at the midpoint, "
"and the high end of every block comes to ~275M with the reserve"),
"and the high end of every block comes to ~277M with the reserve"),
"The requests that settle most of the band come before commitment (section 8.4); tranche release; "
"how overruns are funded (outside the plan price or by scope steps) agreed with the investor up "
"front"],
["High", "Utilisation and price", pick(
"The cost structure is mostly fixed; the adverse case loses money: it needs ~0.9M records to cover "
"The cost structure is mostly fixed; the adverse case loses money: it needs ~1.0M records to cover "
"depreciation and the three presses make 0.58M at that rate; at 60 % specials the Duplex rate and "
"the extra cost of specials decide volume and margin",
"The cost structure is mostly fixed; the adverse case loses money: it needs ~1.1M records to cover "
@@ -298,18 +305,18 @@ def _risk_rows():
]
if a:
rows.append(["Medium", "Solar PPA price", "The PPA gives up owning the bill saving and adds a power "
"price, ~0.07M USD (~2.3M THB) a year in the calculator at 3.0 THB/kWh, an estimate to "
"price, ~0.06M USD (~1.9M THB) a year in the calculator at 3.0 THB/kWh, an estimate to "
"quote. No BOI benefit is lost: the BOI dropped solar installations from its promotion on "
"1 July 2025 (Announcement 3/2568); a PPA developer may itself be promoted (activity 7.1.2, "
"an 8-year corporate income tax exemption), which may or may not show in its price",
"PPA offers next to the purchase quote in phase 0, the developer's BOI promotion raised in "
"the price negotiation; buying the array, as Plan B does, stays the alternative"])
else:
rows.append(["Medium", "The extra ~39M THB earns little in the model", "Plan B's operating picture is "
"Plan A's (same presses, records, revenue and EBITDA; the calculator puts it ~0.07M USD a "
"year ahead, the PPA bill its owned array avoids): the ~39M THB more at launch adds "
"depreciation, so central operating profit is 1.24M against 1.34M USD, payback ~3.8 against "
"~3.1 years and the adverse corner deeper; its case rests on that bill and on what the "
rows.append(["Medium", "The extra ~35M THB earns little in the model", "Plan B's operating picture is "
"Plan A's (same presses, records, revenue and EBITDA; the calculator puts it ~0.06M USD a "
"year ahead, the PPA bill its owned array avoids): the ~35M THB more at launch adds "
"depreciation, so central operating profit is 1.24M against 1.33M USD, payback ~3.8 against "
"~3.2 years and the adverse corner deeper; its case rests on that bill and on what the "
"table leaves out (cassette and CD-R sales, tours and the Payap programmes, full stamper "
"metrology for the traceability pitch)", "Phase 0 prices each item against its lever (PPA "
"offer next to the purchase quote, cassette and CD-R quotes); most items can also come "
@@ -325,18 +332,22 @@ def _risk_rows():
"water-treatment building from the "
"start; industrial estate option; "
"lessor's consent on Payap land"],
["Medium", "Utilities fuel choice open", "Biomass heat costs a quarter to a tenth of electric steam "
"at reported fuel prices; electric steam needs a larger grid connection, biomass a secured fuel "
"supply", "Decide before the boiler request and the grid application; quote electric and fired "
"variants of the same modules"],
["Medium", "Boiler import compliance (DIW)", pick(
"This plan imports its boiler modules from China: an imported boiler must meet ASME, JIS, EN or "
"equivalent and be verified by a DIW-registered certification body; the modules run above the "
"once-through relief",
"An imported boiler must meet ASME, JIS, EN or equivalent and be verified by a DIW-registered "
"certification body; the modules run above the once-through relief"),
"ASME Section I design with the S stamp and the full dossier; certification body engaged before the "
"order; the same for a Thai-bought boiler"],
["Medium", "Biomass steam: fuel, permits and the burning season", "Fuel price and supply set the "
"steam cost (planning price 1.35 to 2 THB/kg delivered; ~460 t of fresh chips a year at ~850k "
"records, ~0.67M THB, estimate); boiler registration and the air-emission limits for a solid-fuel "
"boiler come into the permit work (to confirm); the stack is a visible point source in Chiang Mai's "
"burning season", "Fuel contracts and a 3-month monsoon stock (~80 m² of covered store); the team's "
"60 rai of own fuelwood later, after the land-title check; the dust collector and the 14 m stack "
"drawn from the start, dust control part of the plant's story; a certified boiler attendant from "
"the maintenance team; electric modules stay the fallback" + pick(
"; a Chinese biomass boiler quote ~2M THB or more below the Thai package would bring Plan A back "
"under 180M", "")],
["Medium", "Boiler registration and import rules (DIW)", "Every steam boiler is registered with the "
"Department of Industrial Works and run by a certified attendant; a boiler bought abroad must also "
"meet ASME, JIS, EN or equivalent and be verified by a DIW-registered certification body" + pick(
", which applies if Plan A takes a Chinese biomass boiler", ""),
"A Thai-fabricated biomass package (Getabec class) as the base; for an import, ASME Section I design "
"with the S stamp and the full dossier, the certification body engaged before the order"],
["Medium", "Single press vendor (Newbilt)", "All three presses, the extruders and the hydraulic "
"aggregates come from one small German manufacturer; build time and order book unknown",
"Spares and service terms in the re-quote; the Pheenix automatic press stays the comparison if the "
@@ -368,7 +379,7 @@ def _risk_rows():
"warranty move to the installer, but the plant still depends on the array", "Engineering checks "
"of the installer's design in phase 0; large float"],
["Low", "Solar and battery integration", "Rack voltage vs inverter window; unpublished "
"certifications; mixed-vendor warranty; under PEA's zero export ~15 % of the ~640 kWp array's "
"certifications; mixed-vendor warranty; under PEA's zero export ~13 % of the ~520 kWp array's "
"yield is curtailed (estimate)", "Engineering checks and certificate requests in phase 0; PEA "
"interconnection approval (3 to 6 months) filed alongside procurement; large float"]),
["Low", "Cassette supply chain", pick("Blank tape and shells come from few suppliers, once the lines "
@@ -389,11 +400,13 @@ def blocks():
"This chapter prices **Plan A (~180M THB)**: the launch plant decided in October 2026, one Newbilt "
"Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, "
"in one capital round and commissioned in sequence, brought down with six cost levers that keep "
"every machine. ",
"every machine. At the midpoint that is ~182M THB, **~2M above 180M** (section 8.2). ",
"This chapter prices **Plan B (~215M THB)**: the launch plant decided in October 2026, one Newbilt "
"Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, "
"in one capital round and commissioned in sequence, with everything in: none of Plan A's six cost "
"levers taken. ") +
"In both plans the steam comes from biomass and PV sits on the factory roof only (~520 kWp; the "
"office roof and the canopies are built PV-ready), as decided on 17 October 2026. "
"The plan price carries the ramp-up reserve, because that is cash the investor puts in, and **no "
"contingency**. Blocks marked 'estimate' have no vendor confirmation; the rest trace to quotes, "
"published prices or researched ranges. Treat all figures as budgetary with a wide margin (plus or "
@@ -416,7 +429,7 @@ def blocks():
"The second Duplex system and further Classics are growth options with room reserved (hall "
"floor, utility module positions, ring-main tees), not part of this plan.")),
P("**Not in the plan price:** a contingency (the blocks are budgetary, so the plan carries no buffer "
"for quotes landing high; at 15 % it would be " + pick("~24M", "~30M") + " THB at the midpoint); CD "
"for quotes landing high; at 15 % it would be " + pick("~25M", "~30M") + " THB at the midpoint); CD "
"replication (section 4.10); financing costs; currency moves; the mobile shelving for the father and "
"mother archive (to quote); and the central hydraulic plant around the Newbilt aggregates (standby "
"pump set, accumulator station, ring main), not costed yet, for a Thai hydraulic power unit builder "
@@ -424,37 +437,41 @@ def blocks():
"promotion: without it, ~5 % duty on ~2.3M USD of imported machinery (~0.11M USD, the launch "
"plant's estimate) comes on top, plus ~0.17M USD of import VAT paid at the border and reclaimed "
"later (estimates)" + pick(
". Plan A imports its boiler modules and buys less metrology at launch; the estimate is not "
"re-sized for either.",
". Plan A buys less metrology at launch; the estimate is not re-sized for it.",
". Plan B is the launch plant that estimate was made for.")),
H2("8.2 Two versions of this plan"),
P("The lead investor asked in October 2026 whether the plant can be built for **180M THB (~5.45M USD), "
"possibly up to 20 % more**. The answer is two versions of this plan, built from the same documents, "
"both priced without contingency and with the ramp-up reserve: **Plan A** keeps every machine of "
"the launch plant and brings it to ~180M THB with six cost levers; **Plan B** builds the same "
"launch plant with everything in, none of the levers taken, at ~215M THB, just within 180M plus "
"20 % (216M). "
"the launch plant and brings it to ~180M THB with six cost levers, ~182M at the midpoint, which is "
"**~2M above 180M** (the low end of the reserve, 177M, fits); **Plan B** builds the same launch plant "
"with everything in, none of the levers taken, at ~215M THB: ~217M at the midpoint, ~0.6M above "
"180M plus 20 % (216M) and inside 225M. Both burn biomass for steam and carry PV on the factory roof "
"only. "
"This document is " + label() + ". How the two differ (estimates):"),
T(["Midpoints, estimates", "Plan A" + pick(" (this plan)", ""), "Plan B" + pick("", " (this plan)")], [
["Plan price: ramp-up reserve in, no contingency", "~177M THB (~5.35M USD): ~180M",
"~216M THB (~6.53M USD): ~215M"],
["Low to high end of every block", "~127M to 226M THB", "~156M to 275M THB"],
["Plan price: ramp-up reserve in, no contingency", "~182M THB (~5.52M USD): ~180M, ~2M above "
"180M at the midpoint",
"~217M THB (~6.56M USD): ~215M"],
["Low to high end of every block", "~132M to 233M THB", "~156M to 277M THB"],
["Presses", "3: Duplex system 1 (two HRP 12) and one Classic", "The same 3"],
["Steam and solar", "Biomass steam (two 500 kg/h modules); ~520 kWp on the factory roof through a "
"solar PPA", "Biomass steam, the same; the ~520 kWp array and the battery owned"],
["Records a year at 60 % specials", "~0.58 to 0.90M, central 0.74M (Duplex-limited)", "The same"],
["Revenue, central", "3.65M USD (~120M THB)", "The same (cassette and CD-R not modelled)"],
["EBITDA, central", "1.73M USD", "1.73M USD (calculator: 2.12M against Plan A's 2.05M, no PPA "
["EBITDA, central", "1.73M USD", "1.73M USD (calculator: 2.23M against Plan A's 2.17M, no PPA "
"power bill)"],
["Operating profit, adverse case", "-0.39M USD: loses money", "-0.54M USD: loses more (more "
["Operating profit, adverse case", "-0.41M USD: loses money", "-0.55M USD: loses more (more "
"depreciation on the same EBITDA)"],
["Payback on the plan price, central (EBITDA, mature year)", "~3.1 yr (2.2 to 4.0)",
"~3.8 yr (2.7 to 4.8; calculator: 2.9 yr against Plan A's 2.4)"],
["What it gives up or takes on", "Six levers: solar through a PPA (a power bill of ~0.07M USD a "
["Payback on the plan price, central (EBITDA, mature year)", "~3.2 yr (2.3 to 4.1)",
"~3.8 yr (2.7 to 4.9; calculator: 2.7 yr against Plan A's 2.3)"],
["What it gives up or takes on", "Six levers: solar through a PPA (a power bill of ~0.06M USD a "
"year), confocal and profiler from revenue, no tours at first, cassette and CD-R later, a "
"rented crane, Chinese boilers and compressor; the second Duplex waits for revenue", "No levers: "
"buys at launch what Plan A leases or defers, ~39M THB more (owned solar and battery, ~640 kWp on "
"every roof and canopy with no PPA bill, the full metrology stack, the visitor corridor, cassette "
"and CD-R, a bought crane, Thai boilers and compressor); the second Duplex waits for revenue"],
"rented crane, a Chinese compressor; the second Duplex waits for revenue", "No levers: "
"buys at launch what Plan A leases or defers, ~35M THB (~19 %) more (owned solar and battery, "
"~520 kWp on the factory roof with no PPA bill, the full metrology stack, the visitor corridor, "
"cassette and CD-R, a bought crane, a Thai compressor); the second Duplex waits for revenue"],
], widths_mm=[46, 62, 62], font_pt=8.5,
caption="Estimates: docs/finance/total-investment.md 'Two plans' and docs/finance/revenue-model.md "
"'Operating pictures of Plan A and Plan B'. Section 9 has this plan's operating picture."),
@@ -462,11 +479,11 @@ def blocks():
[P("**Plan A: six levers, every machine kept.** From the launch plant with every block, no "
"contingency, midpoint values:"),
_levers_table(),
P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~39M THB more "
"at the midpoint, so ~200.6M THB before the reserve and ~216M (~215M THB) with it.")]
P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~34.5M THB more "
"at the midpoint, so ~201.6M THB before the reserve and ~217M (~215M THB) with it.")]
if a else
[P("**Plan B: the launch plant with everything in, no levers.** What Plan B keeps that Plan A's six "
"cost levers lease, defer or source abroad, midpoint values:"),
"cost levers lease, defer or buy through the Chinese route, midpoint values:"),
_keeps_table(),
P("The plant itself is Plan A's: the same three presses, the same output and the same operating "
"picture (section 9). The second Duplex system is a growth step from revenue in both plans, on a "
@@ -475,18 +492,21 @@ def blocks():
CALL("What decides between Plan A and Plan B", [
"**No longer demand.** Both plans are the same three presses making the same ~0.58 to 0.90 million "
"records a year (central 0.74 million); market validation (section 14.1, item 1) gates both alike.",
"**~39M THB more at launch, for what Plan A leases or buys from revenue.** Plan B owns its array "
"**~35M THB more at launch, for what Plan A leases or buys from revenue.** Plan B owns its array "
"and keeps the whole bill saving (no PPA bill), measures every stamper fully from the first release "
"(the traceability pitch), opens tours and the Payap programmes from day one, sells cassette and "
"CD-R from the start, owns its crane and buys utilities with local service.",
"CD-R from the start, owns its crane and buys its compressor with local service. Steam is biomass "
"in both.",
"**On the modelled numbers the extra earns little.** The same EBITDA in the revenue model (the "
"calculator puts Plan B ~0.07M USD a year ahead, the PPA bill its owned array avoids), more "
"depreciation, a longer payback (~3.8 against ~3.1 years) and a deeper adverse corner: Plan A has the better modelled "
"calculator puts Plan B ~0.06M USD a year ahead, the PPA bill its owned array avoids), more "
"depreciation, a longer payback (~3.8 against ~3.2 years) and a deeper adverse corner: Plan A has the better modelled "
"return, Plan B the more complete plant. Most of Plan B's items can be added to Plan A later from "
"revenue; the corridor is cheaper to have from the start, and every year the array is leased "
"costs the PPA bill.",
"**The quotes.** The Newbilt re-quote for the Classic and the EX 35, the Pheenix quote against the "
"OMS reference, the building quote with the soil test, and, for Plan A, the solar PPA offer.",
"OMS reference, the building quote with the soil test, and, for Plan A, the solar PPA offer and a "
"Chinese biomass boiler quote: ~2M THB or more below the Thai package would put Plan A back under "
"180M.",
"**Neither price carries a contingency.** Quotes landing high are funded outside the plan price or "
"by scope steps (section 8.4).",
"**The second Duplex stays a growth step.** Its floor, utility module positions and ring-main "
@@ -496,10 +516,11 @@ def blocks():
" preset, contingency kept out of the total as in this plan."),
IMG(pick("renders/calculator/plan-a-budget.png", "renders/calculator/plan-b-budget.png"), 160,
"Figure 11. Budget card of the plant and business plan calculator, " + pick(
"Plan A preset: 161.7M THB at the midpoint without contingency, 171.7M to 181.7M with the "
"ramp-up reserve of 10M to 20M, inside 180M at the midpoint",
"Plan B preset: 200.6M THB at the midpoint without contingency, 210.6M to 220.6M with the "
"ramp-up reserve of 10M to 20M, 9.4M to spare under the 225M mark (180M plus 25 %)") +
"Plan A preset: 167.1M THB at the midpoint without contingency, 177.1M to 187.1M with the "
"ramp-up reserve of 10M to 20M; against 180M it is 2.1M over at the midpoint, and it fits 225M "
"with 42.9M to spare",
"Plan B preset: 201.6M THB at the midpoint without contingency, 211.6M to 221.6M with the "
"ramp-up reserve of 10M to 20M, 8.4M to spare under the 225M mark (180M plus 25 %)") +
". Bars: the investment at the low end, the midpoint and the high end of every block, the reserve "
"hatched, against 180M and 225M THB. Calculator figures (docs/fleet-calculator.html), estimates."),
@@ -514,10 +535,11 @@ def blocks():
H2("8.4 What moves the number"),
B([
"**No contingency in the price.** " + pick(
"Plan A's ~177M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~24M THB, and the high end of every block comes to ~226M. ",
"Plan B's ~216M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~30M THB, and the high end of every block comes to ~275M. ") +
"Plan A's ~182M THB is the midpoint of every block with the ramp-up reserve and no buffer, ~2M "
"above 180M: at 15 % a contingency would add ~25M THB, and the high end of every block comes to "
"~233M. ",
"Plan B's ~217M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~30M THB, and the high end of every block comes to ~277M. ") +
"Quotes landing above the midpoint are funded outside the plan price or by scope steps; how they are "
"funded is a decision for the investor before commitment (section 14.2).",
"**The quotes that decide it.** The Classic has no Newbilt price (its band is a placeholder "
@@ -526,7 +548,8 @@ def blocks():
"the EX 35 is priced only as the expired 2024 quote's second-extruder option; the building "
"depends on the soil; and the solar PPA lever depends on an offer. The Newbilt re-quote, the "
"Pheenix quote, the building request with a soil test, the metrology distributor quotes and "
"the PPA offers settle most of the band.",
"the PPA offers settle most of the band; a Chinese biomass boiler quote decides whether Plan A "
"comes back under 180M.",
"the EX 35 is priced only as the expired 2024 quote's second-extruder option; and the building "
"depends on the soil. The Newbilt re-quote, the Pheenix quote, the building request with a soil "
"test, the metrology distributor quotes and the solar and battery purchase quotes settle most of "
@@ -549,32 +572,56 @@ def blocks():
"**The ground.** Soft paddy soil under the building, paving and fill platform is the single largest "
"cost variable in the building package, and the cheapest to resolve: a soil boring test costs "
"THB 30k to 50k.",
pick("**Chinese suppliers: taken where they pay.** Plan A buys the boiler modules and the "
"compressor through the Chinese route (~1.9M THB at the midpoint, about 1 % of the price); the "
"Newbilt hydraulic aggregates stay Newbilt's. Chillers and HVAC, the larger blocks, are not "
"checked yet; that is the next Chinese lever to test.",
"**Chinese suppliers: ~1 %.** Plan B prices Thai-supplied utilities. The Chinese route for the "
"boiler modules and the compressor would take ~1.9M THB off at the midpoint (Plan A takes "
"it); chillers and HVAC, the larger blocks, are not checked yet."),
pick("**Solar PPA.** The largest single lever (~17.5M THB at the midpoint) moves the array, ~640 kWp "
"on every roof and canopy, and the battery off the capital budget and adds a power price to the "
"energy line instead: ~760 MWh a year used on site at 3.0 THB/kWh, ~2.3M THB or ~0.07M USD a "
"**Biomass steam in both plans.** Steam comes from two 500 kg/h biomass modules (Getabec class, "
"6M to 10M THB installed with fuel feed, grate and dust control) and a fuel store with handling "
"(1.0M to 2.0M THB); the electric bank (Thai 4.5M to 7.0M, Chinese route 2.8M to 5.5M) is the "
"alternative, not the plan. At ~850k records the boilers burn ~460 t of fresh chips (or ~300 t of "
"air-dry wood) a year, ~0.67M THB at ~0.7 THB/kWh of heat, where electric steam would cost ~4.9M "
"THB in power and demand charge: **biomass saves ~4.2M THB (~0.13M USD) a year** (estimates; "
"biomass.md planning price 1.35 to 2 THB/kg delivered). Without electric boilers the grid demand "
"falls from ~980 kW to ~264 kW, so the transformer and the PEA deposit can be smaller (not "
"re-priced, an upside). It brings fuel contracts and a monsoon stock, ash handling, the 14 m flue "
"stack and dust collector, more maintenance and a certified boiler attendant (section 13). The "
"revenue model does not split energy by fuel; the calculator does (section 9.4).",
pick("**Chinese suppliers: the compressor now, a biomass boiler quote next.** Plan A buys the "
"compressor through a Chinese brand's Thai office (~0.25M THB at the midpoint). The Chinese "
"route priced only electric boiler modules; Chinese makers build biomass boilers too (ZOZEN "
"DZL, Sitong DZL/SZL, Taiguo, Yongxing), none priced yet. **A quote ~2M THB or more below the "
"Thai biomass package would put Plan A back under 180M**, so it is the first utilities request "
"(section 14.1, item 10). The Newbilt hydraulic aggregates stay Newbilt's. Chillers and HVAC, "
"the larger blocks, are not checked yet; that is the next Chinese lever to test.",
"**Chinese suppliers: small so far.** Plan B prices Thai-supplied utilities. The Chinese route "
"for the compressor would take ~0.25M THB off at the midpoint (Plan A takes it); Chinese "
"biomass boilers are not priced yet; chillers and HVAC, the larger blocks, are not checked "
"yet."),
pick("**Solar PPA.** The largest single lever (~14.7M THB at the midpoint) moves the array, ~520 kWp "
"on the factory roof, and the battery off the capital budget and adds a power price to the "
"energy line instead: ~633 MWh a year used on site at 3.0 THB/kWh, ~1.9M THB or ~0.06M USD a "
"year in the calculator, an estimate to quote (~21 % off the tariff; MEAei names 10 to 15 % as "
"usual, CapSolar 10 to 30 %). The plant's bill (~0.75M THB a month before solar, estimate) "
"is well above the 100,000 THB a month CapSolar asks of a PPA site.",
"**Solar bought, not leased.** Plan B owns the array, ~640 kWp on every roof and canopy, and "
"the 271 kWh battery: 14.8M to 20.1M THB (PV at 20 to 26 THB/W installed, inverters included; "
"battery 2.0M to 3.5M). Factories on PEA's grid run zero export, so ~85 % of the ~900 MWh a "
"year is used on site and the rest curtailed; the array saves ~2.8M to 3.0M THB a year and "
"pays back in ~4.2 to 5.9 years (estimates). A solar PPA would take ~17.5M THB off the price "
"at the midpoint and add a power price to the energy line instead: owned, the ~760 MWh used on "
"site save the full ~3.8 THB/kWh; through a PPA at ~3.0 THB/kWh (estimate, to quote) only ~0.8 "
"THB/kWh, so the PPA bill is ~2.3M THB (~0.07M USD) a year."),
"**The array follows the site.** ~640 kWp is what every roof and canopy carries on the Payap "
"scenario plot the calculator draws (factory roof ~523 kWp, office roof ~65 kWp, car and scooter "
"canopies ~54 kWp); on the Mueang Chi hall of section 6.2 the roof and canopies take ~300 kWp, and "
"the rest would need ground mount behind the building (which the rooftop permit exemption does not "
"cover) or the phase 2 roof (estimates).",
"usual, CapSolar 10 to 30 %). The plant's bill with biomass steam (~0.36M THB a month before "
"solar: ~1,036 MWh a year and ~264 kW of demand at the PEA tariff, our arithmetic, estimate) is "
"well above the 100,000 THB a month CapSolar asks of a PPA site.",
"**Solar bought, not leased.** Plan B owns the array, ~520 kWp on the factory roof, and the "
"271 kWh battery: 12.4M to 17.0M THB (PV at 20 to 26 THB/W installed, inverters included, 10.4M "
"to 13.5M; battery 2.0M to 3.5M). Factories on PEA's grid run zero export, so ~87 % of the ~730 "
"to 780 MWh a year is used on site (~633 MWh in the calculator) and the rest curtailed; that "
"covers ~61 % of the "
"launch plant's ~1,036 MWh a year of electricity, saves ~2.3M to 2.5M THB a year and pays back "
"in ~4.1 to 5.8 years (estimates). A solar PPA would take ~14.7M THB off the price at the "
"midpoint and add a power price to the energy line instead: owned, the ~633 MWh used on site "
"save the full ~3.7 THB/kWh; through a PPA at ~3.0 THB/kWh (estimate, to quote) only ~0.7 "
"THB/kWh, so the PPA bill is ~1.9M THB (~0.06M USD) a year."),
"**The array is sized to the load, not to the roof area.** With biomass steam the plant's running "
"load is ~230 kW; an hourly sketch (two shifts on 300 days, ~60 kW off-shift base, the 271 kWh battery, the "
"PEA time-of-use tariff with Ft, 23,000 THB/kWp, 25 years at 8 %) puts the best array at **~500 to "
"550 kWp**: above ~550 kWp more of the yield is curtailed under zero export and the extra panels "
"lose money. The factory roof on the Payap scenario plot the calculator draws carries ~520 kWp "
"(~523 kWp in the site model), so PV goes there only. The office roof (~65 kWp) and the car and "
"scooter canopies (~54 kWp) are built PV-ready (structure rated for the panels, conduit to the "
"main board, a spare way for a later inverter), and ~120 kWp go on them when the load rises with "
"the second Duplex system, for ~2.4M to 3.1M THB at 20 to 26 THB/W. On the Mueang Chi hall of "
"section 6.2 the factory roof takes ~247 kWp, its canopies PV-ready too. ~430 kVA of inverters "
"stays under the ERC's 1,000 kVA line (estimates).",
"**Every band narrows only with quotes.** The supplier map in the planning repository lists who to "
"ask, and the re-quotes are phase 0 work (section 14).",
]),
@@ -723,21 +770,21 @@ def blocks():
"the opposite; central takes midpoints. Cash overheads (admin, sales, insurance, facility running, "
"IT, professional fees, marketing, the land lease) are estimated at USD 0.20M to 0.45M a year and "
"paired high-to-adverse. Depreciation is on this plan's blocks: " + pick(
"the high end (6.25M USD) over 10 years (adverse), the midpoint (4.90M USD) over 12.5 years "
"(central) and the low end (3.56M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (3.86M / 5.35M / 6.85M USD from the low to the "
"the high end (6.44M USD) over 10 years (adverse), the midpoint (5.06M USD) over 12.5 years "
"(central) and the low end (3.68M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (3.99M / 5.52M / 7.05M USD from the low to the "
"high end).",
"the high end (7.73M USD) over 10 years (adverse), the midpoint (6.08M USD) over 12.5 years "
"the high end (7.79M USD) over 10 years (adverse), the midpoint (6.11M USD) over 12.5 years "
"(central) and the low end (4.42M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (4.72M / 6.53M / 8.34M USD from the low to the "
"whole plan price including the ramp-up reserve (4.73M / 6.56M / 8.40M USD from the low to the "
"high end).")),
_operating_table(),
CALL("Reading this table honestly", pick([
"**The central case works on ~177M THB.** EBITDA ~1.7M USD (~57M THB) and operating profit ~1.3M "
"**The central case works on ~182M THB.** EBITDA ~1.7M USD (~57M THB) and operating profit ~1.3M "
"USD (~44M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.2 million records a year, about a quarter of its central output**. Against the earlier ~20 % "
"specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.",
"**The adverse case loses money.** It would need ~0.9 million records to cover depreciation, and "
"**The adverse case loses money.** It would need ~1.0 million records to cover depreciation, and "
"the three presses make 0.58 million at that rate. It stacks the low price, the high cost, the high "
"capital and the high overheads at once. At the central cost and volume the price that covers "
"depreciation is ~2.7 USD (~88 THB) a record (arithmetic on the table), below the low price "
@@ -748,18 +795,18 @@ def blocks():
"above the reject allowance, sales commissions and the extra cost of specials. **Treat the adverse "
"column as the honest one until those lines exist.** The plan price carries no contingency either.",
"**This is a sensitivity, not a forecast.** The plant and business plan calculator's Plan A preset, "
"with its own cost build-up (it adds electric steam heat, the cutting engineer and the PPA power "
"price, ~0.07M USD a year, which this table leaves out) and the team's faster Duplex planning rate, "
"at which the three presses are not Duplex-limited, gives at 850k records and 60 % specials: "
"revenue ~4.14M, EBITDA 2.05M USD, payback 2.4 years on the 161.7M THB investment in a mature "
"year; with a ramp of 35, 70 and 90 % in the first three years and the reserve in year 0, cash "
"payback in year ~3.9, ~25 % IRR and an NPV of ~4.9M USD over ten years, pre-tax and "
"pre-financing (estimates). Not modelled here: cassette and CD-R lines (later in Plan A), stamper "
"with its own cost build-up (it adds the biomass fuel for the steam, ~0.67M THB a year, the cutting "
"engineer, and the PPA power price of ~0.06M USD a year, which this table leaves out) and the "
"team's faster Duplex planning rate, at which the three presses are not Duplex-limited, gives at "
"850k records and 60 % specials: revenue ~4.14M, EBITDA 2.17M USD, payback 2.3 years on the "
"167.1M THB investment in a mature year; with a ramp of 35, 70 and 90 % in the first three years "
"and the reserve in year 0, cash payback in year ~3.8, ~26 % IRR and an NPV of ~5.4M USD over ten "
"years, pre-tax and pre-financing (estimates). Not modelled here: cassette and CD-R lines (later in Plan A), stamper "
"supply to other plants, automation services and the open plant stack for other pressing plants "
"(section 5.6), dropshipping fees, and the ramp year. BOI tax exemptions shield part of "
"early-year profits where there are any.",
], [
"**The central case works on ~216M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.24M "
"**The central case works on ~217M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.24M "
"USD (~41M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.24 million records a year, about a third of its central output**. Against the earlier ~20 % "
"specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.",
@@ -769,33 +816,33 @@ def blocks():
"cost and volume the price that covers depreciation is ~2.8 USD (~92 THB) a record (arithmetic on "
"the table), below the low price assumed: price realisation and utilisation decide solvency, not "
"upside.",
"**What the extra ~39M THB buys is not in this table.** Plan B is Plan A's plant with the six levers "
"**What the extra ~35M THB buys is not in this table.** Plan B is Plan A's plant with the six levers "
"not taken, so revenue, direct cost and EBITDA are Plan A's; only the depreciation (0.49M against "
"Plan A's 0.39M USD at the centre) and the payback (~3.8 against ~3.1 years) move. Not modelled: "
"Plan A's 0.40M USD at the centre) and the payback (~3.8 against ~3.2 years) move. Not modelled: "
"cassette and CD-R revenue, tour and Payap revenue, stamper supply to other plants, automation "
"services and the open plant stack for other pressing plants (section 5.6), and the PPA power bill "
"the owned array avoids (~0.07M USD a year in the calculator).",
"the owned array avoids (~0.06M USD a year in the calculator).",
"**The central margin is too good to trust yet.** A central EBITDA margin of ~47 % is far above "
"the 15 to 25 % pressing plants earn. The direct cost table counts only per-record consumables and "
"direct payroll and leaves out indirect labour (supervision, planning, warehouse), freight, scrap "
"above the reject allowance, sales commissions and the extra cost of specials. **Treat the adverse "
"column as the honest one until those lines exist.** The plan price carries no contingency either.",
"**This is a sensitivity, not a forecast.** The plant and business plan calculator's Plan B preset, "
"with its own cost build-up (it adds electric steam heat and the cutting engineer, which this "
"table leaves out) and the team's faster Duplex planning rate, at which the three presses are not "
"Duplex-limited, gives at 850k records and 60 % specials: revenue ~4.14M, EBITDA 2.12M USD, "
"payback 2.9 years on the 200.6M THB investment in a mature year; with a ramp of 35, 70 and 90 % in "
"the first three years and the reserve in year 0, cash payback in year ~4.4, ~21 % IRR and an NPV "
"of ~4.1M USD over ten years, pre-tax and pre-financing (estimates). Its EBITDA is 0.07M above "
"Plan A's 2.05M because the owned array carries no PPA power price. Not modelled here: cassette "
"with its own cost build-up (it adds the biomass fuel for the steam, ~0.67M THB a year, and the "
"cutting engineer, which this table leaves out) and the team's faster Duplex planning rate, at "
"which the three presses are not Duplex-limited, gives at 850k records and 60 % specials: revenue "
"~4.14M, EBITDA 2.23M USD, payback 2.7 years on the 201.6M THB investment in a mature year; with a "
"ramp of 35, 70 and 90 % in the first three years and the reserve in year 0, cash payback in year "
"~4.2, ~22 % IRR and an NPV of ~4.7M USD over ten years, pre-tax and pre-financing (estimates). Its "
"EBITDA is 0.06M above Plan A's 2.17M because the owned array carries no PPA power price. Not modelled here: cassette "
"and CD-R lines, stamper supply to other plants, automation services and the open plant stack for "
"other pressing plants (section 5.6), dropshipping fees, and the ramp year. BOI tax "
"exemptions shield part of early-year profits where there are any.",
])),
IMG(pick("renders/calculator/plan-a-cash.png", "renders/calculator/plan-b-cash.png"), 160,
"Figure 12. Ten years of cash in the plant and business plan calculator, " + pick(
"Plan A preset: cash payback in year ~3.9, IRR ~25 %, NPV ~4.9M USD at 10 %",
"Plan B preset: cash payback in year ~4.4, IRR ~21 %, NPV ~4.1M USD at 10 %") +
"Plan A preset: cash payback in year ~3.8, IRR ~26 %, NPV ~5.4M USD at 10 %",
"Plan B preset: cash payback in year ~4.2, IRR ~22 %, NPV ~4.7M USD at 10 %") +
". Year 0 is the midpoint investment plus the ramp-up reserve; years 1 to 3 sell 35, 70 and 90 % of "
"the mature year's output. Pre-tax, pre-financing, no BOI tax holiday, no terminal value. The "
"calculator's own cost build-up and faster Duplex planning rate, not the table above "
@@ -892,7 +939,8 @@ def blocks():
["Factory licence (Ror.Ngor. 4) with galvanics in the first licence", "First production, Q4 2028",
"~4 months", "Galvanics effluent and hazardous-substance registration are now in the first "
"licence scope: the most likely regulatory friction point; ZLD design in the application from "
"the start"],
"the start; the biomass boiler's registration and its air-emission limits go into the same permit "
"work (to confirm)"],
pick(["Solar through the PPA (the installer builds and owns the array)", "Fit-out, ~Q2 2028",
"Large", "Not a risk; the PPA offer is phase 0 work; PEA interconnection approval takes 3 to "
"6 months, filed alongside procurement; battery lead time is 50 to 60 days"],
@@ -913,9 +961,7 @@ def blocks():
P("**BOI windows are comfortable** on the August calendar: machinery clears customs ~Q3 2028 against a "
"30-month import window ending ~Q4 2029 (~15 months of margin), and first production ~Q4 2028 "
"against a ~36-month full-operation deadline (~18 months). The launch plant puts four vendors' "
"machines, not one, inside the import window" + pick(
", and Plan A adds the Chinese boiler modules. ",
". ") +
"machines, not one, inside the import window. " +
"The margin is consumed by exactly one scenario: filing early to start the clock and then discovering "
"the site does not work. Verify zoning before filing."),
P("**The one lever worth six to nine months** is the BOI sequencing question in section 7: the duty "
@@ -947,18 +993,16 @@ def blocks():
"between the Mueang Chi lease, other Payap land and the industrial estate; resolve the 35 % vs "
"45 % humidity floor", "BOI filed"],
["2. Commit", "Incorporate under the certificate; sign the lease; order every long-lead item: "
"Pheenix galvanics line, Sillitoe lathe, Sibert line, " + pick(
"Newbilt Duplex and Classic, first two boiler and chiller modules (boilers through the Chinese "
"route)",
"Newbilt Duplex and Classic, first two boiler and chiller modules (boilers and compressor "
"from Thai suppliers)"), "BOI certificate and validated pricing"],
"Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt Duplex and Classic, the two "
"biomass boiler modules and the first two chiller modules", "BOI certificate and validated "
"pricing"],
["3. Build and commission (~6 to 12 months after commitment)", pick(
"Construction, water-treatment building, utilities, HVAC, clean zones, security, the "
"crane-ready frame (a mobile crane for the installations); the solar array built by the PPA "
"installer; machinery installation and vendor commissioning; traceability and ERPNext live "
"Construction, water-treatment building, utilities (the biomass boilers and fuel store), HVAC, "
"clean zones, security, the crane-ready frame (a mobile crane for the installations); the "
"factory-roof solar array built by the PPA installer; machinery installation and vendor commissioning; traceability and ERPNext live "
"before the machines; hire and train",
"Construction, water-treatment building, utilities, HVAC, clean zones, solar and battery, "
"security, crane, visitor corridor; machinery installation and vendor commissioning; "
"Construction, water-treatment building, utilities (the biomass boilers and fuel store), HVAC, "
"clean zones, factory-roof solar and battery, security, crane, visitor corridor; machinery installation and vendor commissioning; "
"traceability and ERPNext live before the machines; hire and train"),
"Building permit, vendor build dates confirmed"],
["4. Launch (the whole chain in-house)", "Commission in sequence (table below); test pressings, QC "
@@ -966,11 +1010,12 @@ def blocks():
"compound", "Commissioning complete"],
["5. Expand (revenue-gated)", pick(
"Second Duplex system; further Classics; the laser confocal and wide-area profiler; the visitor "
"corridor and public tours; cassette and CD-R duplication; an owned crane if needed; the "
"biomass boiler if steam starts electric; the phase 2 building; CD replication if chosen",
"corridor and public tours; cassette and CD-R duplication; an owned crane if needed; PV on "
"the PV-ready office roof and canopies when the load rises; the phase 2 building; CD "
"replication if chosen",
"Second Duplex system, then further Duplex systems and Classics (the hall is laid out for five "
"Duplex bays and four Classic positions); the biomass boiler if steam starts electric; the "
"phase 2 building; CD replication if chosen"),
"Duplex bays and four Classic positions); PV on the PV-ready office roof and canopies when the "
"load rises; the phase 2 building; CD replication if chosen"),
"Revenue and, for CD replication, a separate decision"],
], widths_mm=[42, 96, 32], font_pt=8.5),
H2("11.1 Commissioning sequence"),
@@ -980,7 +1025,7 @@ def blocks():
"First lacquers, fathers, mothers and stampers, and the metal archive "
"from the first title"],
["2", "Newbilt Duplex system (two HRP 12, EX 50 and EX 35), with the steam and cooling plant "
"(boiler modules B-1, B-2; chiller modules CH-1, CH-2)",
"(biomass boiler modules B-1, B-2 with the fuel store; chiller modules CH-1, CH-2)",
"The semi-automatic presses suit the colour, splatter and boutique runs that carry the premiums, "
"and they teach the crews the process"],
["3", "Newbilt Classic, fully automatic", "Volume runs once the metal path and the press process "
@@ -1017,24 +1062,25 @@ def blocks():
"the start, and on Payap land the lessor's consent as well."],
["**The cutting room is a smaller decision than it was.** The Sillitoe SDMS lists at USD 125k with "
"automation in the box, and the Payap programmes in mastering and lathe cutting need a working "
"room.", pick("**More capital up front.** ~127M to 226M THB in one round (~177M at the "
"room.", pick("**More capital up front.** ~132M to 233M THB in one round (~182M at the "
"midpoint), against ~57M to 95M THB for the superseded phased entry; more of it is "
"committed before the market has validated the price.",
"**More capital up front.** ~156M to 275M THB in one round (~216M at the midpoint), "
"**More capital up front.** ~156M to 277M THB in one round (~217M at the midpoint), "
"against ~57M to 95M THB for the superseded phased entry; more of it is committed "
"before the market has validated the price.")],
pick(["**Six levers, no machine dropped.** The levers bring the whole chain to ~180M THB, and the "
pick(["**Six levers, no machine dropped.** The levers bring the whole chain to ~180M THB (~182M at "
"the midpoint, ~2M above 180M; a Chinese biomass boiler quote could close the gap), and the "
"second Duplex waits for demand and revenue on a reserved floor.",
"**What the levers give up.** Owned solar (a PPA bill of ~0.07M USD a year instead), public tours "
"at first, cassette and CD-R at launch, a bought crane; the boilers are imported from China "
"under the Thai boiler rules. The adverse case still loses money."],
["**Everything in at launch.** Owned solar on every roof and canopy (~640 kWp) with no PPA "
"**What the levers give up.** Owned solar (a PPA bill of ~0.06M USD a year instead), public tours "
"at first, cassette and CD-R at launch, a bought crane, a Thai-serviced compressor. The adverse "
"case still loses money."],
["**Everything in at launch.** Owned solar on the factory roof (~520 kWp) with no PPA "
"bill, the full metrology stack "
"from the first release, tours and the Payap programmes from day one, cassette and CD-R, its "
"own crane and locally serviced utilities; the second Duplex waits for demand and revenue on a "
"own crane and a locally serviced compressor; the second Duplex waits for demand and revenue on a "
"reserved floor.",
"**~39M THB more that the model does not repay.** The same EBITDA as Plan A with more "
"depreciation and a longer payback (~3.8 against ~3.1 years); the adverse case still loses "
"**~35M THB more that the model does not repay.** The same EBITDA as Plan A with more "
"depreciation and a longer payback (~3.8 against ~3.2 years); the adverse case still loses "
"money."]),
], widths_mm=[85, 85], font_pt=8.5),
P("**How the plan answers the risks:** commission the metal path first and measure it before the "
@@ -1087,7 +1133,7 @@ def blocks():
"whose incentives are aligned with the plant's schedule and quality, within the same province.",
"**Debt-to-equity no higher than 3:1**, maintained for the life of the BOI privileges, which sets "
"the floor on equity in the financing mix: at least a quarter of the funding, " + pick(
"~44M THB of Plan A's ~177M", "~54M THB of Plan B's ~216M") +
"~46M THB of Plan A's ~182M", "~54M THB of Plan B's ~217M") +
" (arithmetic, before financing costs).",
"**A shareholders' agreement** covering board composition, reserved matters (capital calls and "
"tranche releases, the growth options such as a second Duplex, CD replication), pre-emption and transfer, information rights, and the founders' roles and "
@@ -1133,7 +1179,8 @@ def blocks():
"Payap R&D", "Simona", "USD 5k to 15k",
"Sequencing, scope"],
["3", "Thai counsel: lease heads of terms (term, renewal, building ownership, assignment) and zoning "
"of the chosen plot for pressing, a steam boiler and electroplating; company and shareholder "
"of the chosen plot for pressing, a biomass steam boiler (with its air-emission limits) and "
"electroplating; company and shareholder "
"structure including Ploy Printing", "Simona, counsel", "USD 5k to 15k", "Zoning, lease, "
"ownership"],
["4", "Soil boring test on the chosen plot", "Alexander", "THB 30k to 50k", "Ground risk"],
@@ -1148,32 +1195,37 @@ def blocks():
["8", "Sibert itemised quotation and order terms against the USD 250k budget: lead time, "
"installation time, spares, shipping, travel", "Alexander", "Free", "Stamper prep, schedule"],
["9", "Building request for quotation to two or three Thai pre-engineered building contractors, "
"with the soil result", "Alexander", "Free", "Building estimate"],
"with the soil result and the office roof and canopies PV-ready", "Alexander", "Free",
"Building estimate"],
["10", pick(
"Utility requests: Chinese boiler makers for the plan's boiler modules (ZOZEN, Sitong, Fangkuai, "
"Taiguo; 1.25 MPa, ASME S stamp, electric and fired variants) with a Thai installer; compressors "
"from Kaishan and Denair's Thai offices; Thai suppliers for the rest; chillers and HVAC, Chinese "
"makers included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for the central "
"plant",
"Utility requests: Thai suppliers; Chinese boiler makers (ZOZEN, Sitong, Fangkuai, Taiguo; "
"1.25 MPa, ASME S stamp, electric and fired variants) and compressors from Kaishan and Denair's "
"Thai offices for comparison; chillers and HVAC, Chinese makers included; the 35 % vs 45 % "
"humidity floor; a Thai hydraulic builder for the central plant"),
"Alexander", "Free", "Utilities band, fuel choice"],
"Utility requests: biomass boiler packages from Getabec and from Chinese makers (ZOZEN, Sitong, "
"Taiguo, Yongxing; ASME S stamp, with a Thai installer), the Chinese quote first, because ~2M "
"THB or more below the Thai package puts Plan A back under 180M; electric modules as the "
"fallback quote; fuel supply offers (chips and wood, delivered price, a monsoon stock); "
"compressors from Kaishan and Denair's Thai offices; Thai suppliers for the rest; chillers and "
"HVAC, Chinese makers included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for "
"the central plant",
"Utility requests: biomass boiler packages from Getabec and, for comparison, Chinese makers "
"(ZOZEN, Sitong, Taiguo, Yongxing); electric modules as the fallback quote; fuel supply offers "
"(chips and wood, delivered price, a monsoon stock); Thai suppliers for the rest, compressors "
"from Kaishan and Denair's Thai offices for comparison; chillers and HVAC, Chinese makers "
"included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for the central plant"),
"Alexander", "Free", "Utilities band, fuel supply"],
["11", pick("Metrology distributor quotes (XRF, inline vision, audio station; confocal and profiler "
"for later)", "Metrology distributor quotes (XRF, confocal, profiler, inline vision, "
"audio station)"), "Alexander", "Free", "Metrology band"],
["12", pick("Solar PPA offers (the plan's lever) next to a purchase quote; the installer's battery "
"and inverter design checked", "Solar and battery purchase quotes, with a PPA offer for "
"comparison; battery and inverter engineering "
"checks"), "Alexander", "Free",
["12", pick("Solar PPA offers for the ~520 kWp factory roof (the plan's lever) next to a purchase "
"quote; the installer's battery and inverter design checked", "Solar and battery purchase "
"quotes for the ~520 kWp factory roof, with a PPA offer for comparison; battery and "
"inverter engineering checks"), "Alexander", "Free",
pick("Solar lever, PPA price", "Solar block")],
["13", pick("Cassette and CD-R equipment quotes from two vendors each, for the growth step; tape and "
"shell supply", "Cassette and CD-R equipment quotes from two vendors each; tape and "
"shell supply"), "Alexander", "Free", "New-scope estimates"],
["14", "Search for the galvanics process engineer and the cutting engineer; next meeting with Payap "
"on the programmes", "Simona, Alexander", "None yet", "Skills risk"],
["15", "60 rai title check for the coppice plan", "Simona", "Small", "Biomass path"],
["15", "60 rai title check for own fuelwood (the coppice plan)", "Simona", "Small",
"Own fuel later, an upside"],
["16", "Optional: vinyl manufacturing consultancy for a layout and installation review",
"Alexander", "GBP 10k to 20k", "Layout risk"],
["17", "Archive the Thai invoices and tour notes with this plan", "Simona", "None", "Evidence base"],
@@ -1183,44 +1235,46 @@ def blocks():
["Now", "Approval of Phase 0 spending of ~USD 40k to 80k (~1.3M to 2.6M THB, part of the plan "
"price), so the quotes, the soil test, the BOI consultant and counsel can start."],
["On the gates clearing", pick(
"A commitment in principle to **Plan A at ~180M THB** (~177M at the midpoint, the ramp-up "
"A commitment in principle to **Plan A at ~180M THB** (~182M at the midpoint, the ramp-up "
"reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, "
"with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~44M "
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~24M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~127M to "
"226M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes and the solar PPA offer decide where in that range it lands.",
"A commitment in principle to **Plan B at ~215M THB** (~216M at the midpoint, the ramp-up "
"with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~46M "
"THB). Told plainly: at the midpoint the plan is **~2M above 180M** (177M to 187M with the "
"reserve's 10M to 20M); the price carries no contingency (at 15 % it would be ~25M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~132M to "
"233M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes, the solar PPA offer and a Chinese biomass boiler quote decide where in "
"that range it lands and whether it comes back under 180M.",
"A commitment in principle to **Plan B at ~215M THB** (~217M at the midpoint, the ramp-up "
"reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, "
"with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~54M "
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~30M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~156M to "
"275M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"277M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes and the solar and battery purchase quotes decide where in that range it "
"lands.")],
["Decisions", pick(
"The equity and debt mix, and how quotes landing above the plan price are funded; the six "
"levers, the solar PPA first (~17.5M THB off the price for a power bill of ~0.07M USD a year); "
"CD replication, "
"yes or no, before the BOI application is finalised; the steam fuel (electric or biomass); "
"levers, the solar PPA first (~14.7M THB off the price for a power bill of ~0.06M USD a year); "
"whether to buy a Chinese biomass boiler if its quote brings the plan under 180M; CD "
"replication, yes or no, before the BOI application is finalised; the biomass fuel contracts; "
"the shareholder structure with Ploy Printing and the founders; hedging of the EUR orders.",
"The equity and debt mix, and how quotes landing above the plan price are funded; the ~39M "
"THB of items Plan A leases or defers (owned solar on every roof and canopy with no PPA bill, "
"the full "
"metrology stack, the visitor corridor, cassette and CD-R, the bought crane, Thai boilers and "
"The equity and debt mix, and how quotes landing above the plan price are funded; the ~35M "
"THB of items Plan A leases or defers (owned solar on the factory roof with no PPA bill, the "
"full metrology stack, the visitor corridor, cassette and CD-R, the bought crane, the Thai "
"compressor), each weighed against its lever; CD replication, yes or no, before the BOI "
"application is finalised; the steam fuel (electric or biomass); the shareholder structure "
"application is finalised; the biomass fuel contracts; the shareholder structure "
"with Ploy Printing and the founders; hedging of the EUR orders.")],
["Later", pick(
"Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; "
"~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), "
"the laser confocal and wide-area profiler (USD 180k to 350k), the visitor "
"corridor, cassette and CD-R, an owned crane if needed, further Classics, the biomass boiler "
"if steam starts electric, and the phase 2 building.",
"corridor, cassette and CD-R, an owned crane if needed, further Classics, PV on the PV-ready "
"office roof and canopies (~120 kWp, ~2.4M to 3.1M THB, estimate), and the phase 2 building.",
"Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; "
"~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), "
"then further Duplex systems and Classics in the hall laid out for five Duplex bays and four "
"Classic positions; the biomass boiler if steam starts electric; and the phase 2 building.")],
"Classic positions; PV on the PV-ready office roof and canopies (~120 kWp, ~2.4M to 3.1M THB, "
"estimate); and the phase 2 building.")],
], widths_mm=[38, 132]),
P("The next version of this plan should carry: the Newbilt, Pheenix, Sillitoe and Sibert quotes with "
"their build times in place of the placeholder and estimated blocks; the building quote with the "
@@ -1228,7 +1282,8 @@ def blocks():
"its price; ",
"the BOI consultant's reading on the battery (battery storage, capped at 12M THB "
"per MW); ") +
"the negotiated lease; a buyer-side price data point; the investor's CD and fuel decisions; how "
"the negotiated lease; a buyer-side price data point; the investor's CD decision; the biomass boiler "
"quotes (Getabec and a Chinese maker) and fuel supply offers; how "
"overruns are funded, since the price carries no contingency; a calendar re-drawn for the launch "
"plant with the metal-path commissioning in it; a year-by-year cash model for the ramp; and the "
"shareholder terms. Each of those is a phase 0 output."),
@@ -1252,8 +1307,10 @@ def blocks():
["finance/revenue-model.md", "Pricing, the Thai market data and factory tour, the Record Industry "
"benchmark, direct cost, the launch-plant operating picture and the "
"operating pictures of Plan A and Plan B"],
["finance/utilities-investment.csv", "Thai supplier candidates and budgetary ranges for steam, "
"cooling, air, water, HVAC, solar and battery"],
["finance/utilities-investment.csv", "Thai supplier candidates and budgetary ranges for steam "
"(the biomass package and the fuel store; the electric bank "
"as the alternative), cooling, air, water, HVAC, solar and "
"battery"],
["finance/phase1-construction-rfq.md", "Contractor price request with quantities from the "
"parametric model"],
["fleet-calculator.html", "Plant and business plan calculator: target output and specials share to "
@@ -1272,8 +1329,9 @@ def blocks():
"contacts"],
["suppliers/making-vinyl-europe-2026-exhibitors.md", "Making Vinyl Europe 2026 briefing and what "
"came after the show"],
["suppliers/china-utilities.md", "Chinese boilers, compressed air and hydraulics; Thai rules for "
"imported boilers; what the Chinese route saves"],
["suppliers/china-utilities.md", "Chinese boilers (electric priced; biomass makers named, not "
"priced), compressed air and hydraulics; Thai rules for imported "
"boilers; what the Chinese route saves"],
["digital-factory.md (demos plant-operation.html, factory-console.html)", "Data platform: ERPNext "
"as the only system of record, machine data, the factory application, the "
"NixOS fleet; the plant overview and factory console demos (Figures 2 to 4)"],
@@ -1291,11 +1349,18 @@ def blocks():
"stage, lead times and the repress path"],
["traceability.md, quality-automation.md", "The traceability specification; metrology, layered "
"record QC, the materials lab"],
["sustainability.md, biomass.md, steam-cooling.html", "Solar, heat recovery, water, zero discharge, "
"the grid tariff; the biomass fuel strategy; "
"the steam and cooling plant"],
["sustainability.md ('What ~640 kWp means on the grid'), finance/utilities-investment.csv (solar "
"rows), boi.md", "Solar on every roof and canopy (~640 kWp) and its sources: the installed price of "
["sustainability.md, steam-cooling.html", "Solar, heat recovery, water, zero discharge, the grid "
"tariff; the steam and cooling plant"],
["biomass.md", "Biomass steam for both plans: what the boilers burn (~300 t of air-dry wood or ~460 t "
"of fresh chips a year at ~850k records), the fuel prices (1.35 to 2 THB/kg delivered, "
"0.5 to 0.9 THB/kWh of heat; sources in finance/biomass/), the northern fuel market, "
"the 60 rai of own fuelwood and its title check, logistics on site (fuel store, ash)"],
["sustainability.md ('PV size with biomass steam', the hourly PV sizing sketch), "
"finance/utilities-investment.csv "
"(solar rows), boi.md", "PV on the factory roof (~520 kWp; the office roof and the canopies "
"PV-ready) and its sources: the hourly sizing sketch (two shifts, 300 days, the 271 kWh battery, "
"PEA time-of-use with Ft, 23,000 THB/kWp over 25 years at 8 %: best array ~500 to 550 kWp, "
"estimate); the installed price of "
"20 to 26 THB/W (DEDE's Thailand PV Status survey, CapSolar 2026, Saimai Solar's 2026 list); zero "
"export for factories on PEA's grid (CapSolar, rooftop solar regulations, 2026; Sahawatthanakit, "
"2026); the permits (Ministerial Regulation No. 3 B.E. 2567, in force 28 December 2024; ERC's "