Solar and battery re-priced from Thai market data (October 2026)
Deploy test site / deploy (push) Successful in 46s

- Rooftop PV, 300 kWp (size still illustrative): 20 to 26 THB/W installed
  with the Deye hybrid inverters, 6.0M to 7.8M THB (was 25 to 35 THB/W,
  7.5M to 10.5M). Sources in the utilities CSV: DEDE Thailand PV Status
  report (Mahidol survey: 22 to 25 THB/W for factory systems of 10 kW to
  1 MW, 2023), CapSolar 2026 (20 to 25 under 1 MWp), Saimai Solar's list
  (300 kW for 5.4M THB), Deye hybrid inverter retail (160,500 THB per
  50 kW).
- Battery 271 kWh, now installed: 2.0M to 3.5M THB (was the bare Gobel
  list price, 1.4M to 2.0M, which matches DEDE's 5,000 to 7,000 THB/kWh
  for LiFePO4); adds enclosure, fire protection, controls and installation,
  below CapSolar's 12,000 to 15,000 THB/kWh for a fully installed factory
  BESS because the hybrid inverters do the conversion (estimate).
- Utilities baseline 27.57M to 47.50M THB; launch plant ~160M / 222M /
  283M THB with contingency; Plan B ~208M (~149M to 266M), ~31M more than
  Plan A; Plan A's total unchanged, its solar lever ~9.7M. PV payback
  ~3.8 to 5.4 years (sustainability.md). Calculator, README, roadmap,
  revenue model and both business plan versions (renders included)
  updated.
This commit is contained in:
grabowski committed 2026-10-17 16:41:14 +07:00
1 parent 3f33babdaa
commit ab303618d8
25 files changed
+116 -111

No files matched your search

+6 -6
View File
@@ -70,14 +70,14 @@ steps are open planning items.
- The plant now launches with everything in one capital round (October - The plant now launches with everything in one capital round (October
2026): one Newbilt Duplex system and one Classic, a Pheenix galvanics 2026): one Newbilt Duplex system and one Classic, a Pheenix galvanics
line, the Sibert stamper-prep line, a Sillitoe cutting room and the line, the Sibert stamper-prep line, a Sillitoe cutting room and the
modular boiler and chiller plant: ~161M to 285M THB with contingency modular boiler and chiller plant: ~160M to 283M THB with contingency
(midpoint ~223M), the Pheenix line priced at OMS's reference plus 20 % (midpoint ~222M), the Pheenix line priced at OMS's reference plus 20 %
([total investment](docs/finance/total-investment.md#launch-plant-october-2026)). ([total investment](docs/finance/total-investment.md#launch-plant-october-2026)).
For the investor the business plan comes in two versions, priced For the investor the business plan comes in two versions, priced
without contingency and with the ramp-up reserve without contingency and with the ramp-up reserve
([two plans](docs/finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-210m-thb-october-2026)): ([two plans](docs/finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-210m-thb-october-2026)):
**Plan A, ~177M THB**, the launch plant with six cost levers, and **Plan A, ~177M THB**, the launch plant with six cost levers, and
**Plan B, ~209M THB**, the same launch plant with everything in. **Plan B, ~208M THB**, the same launch plant with everything in.
Chinese boilers, compressor and hydraulics save about 2M THB of that Chinese boilers, compressor and hydraulics save about 2M THB of that
([Chinese suppliers](docs/suppliers/china-utilities.md)). ([Chinese suppliers](docs/suppliers/china-utilities.md)).
The business plan is re-based on it (draft 0.2). The business plan is re-based on it (draft 0.2).
@@ -280,8 +280,8 @@ The detail lives in dedicated documents:
output capacity, building area, land, electrical demand, solar and output capacity, building area, land, electrical demand, solar and
storage, steam and fuel, headcount, and money cross-references storage, steam and fuel, headcount, and money cross-references
- [Total investment](docs/finance/total-investment.md): the launch plant - [Total investment](docs/finance/total-investment.md): the launch plant
decided in October 2026 (~161M to 285M THB, ~4.9M to 8.6M USD, midpoint decided in October 2026 (~160M to 283M THB, ~4.85M to 8.6M USD, midpoint
~223M THB) with the basis of every block, the two plans for the investor ~222M THB) with the basis of every block, the two plans for the investor
(Plan A ~180M, Plan B ~210M THB, without contingency), and the earlier (Plan A ~180M, Plan B ~210M THB, without contingency), and the earlier
answer to the 180M / 216M question; the earlier full vision and phased answer to the 180M / 216M question; the earlier full vision and phased
entry are kept as superseded entry are kept as superseded
@@ -293,7 +293,7 @@ The detail lives in dedicated documents:
planned 60 % specials (central revenue ~3.65M USD a year on ~0.74M planned 60 % specials (central revenue ~3.65M USD a year on ~0.74M
records, EBITDA ~1.7M; the adverse case loses money), the operating records, EBITDA ~1.7M; the adverse case loses money), the operating
pictures of Plan A (payback ~3.1 years on ~177M THB) and Plan B (the pictures of Plan A (payback ~3.1 years on ~177M THB) and Plan B (the
same output, payback ~3.7 years on ~209M THB: its extra pays back same output, payback ~3.6 years on ~208M THB: its extra pays back
through what the table leaves out), the five-press table, and the levers and through what the table leaves out), the five-press table, and the levers and
caveats behind the numbers caveats behind the numbers
- Business plan, draft 0.3 (October 2026), in two versions: - Business plan, draft 0.3 (October 2026), in two versions:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+17 -17
View File
@@ -33,7 +33,7 @@ def blocks():
"version, Plan B (~210M THB), builds the same plant and takes none of the levers. ", "version, Plan B (~210M THB), builds the same plant and takes none of the levers. ",
"This version is Plan B: the launch plant with the whole chain, cutting and galvanics " "This version is Plan B: the launch plant with the whole chain, cutting and galvanics "
"included, three presses, with everything in and none of the cost levers taken, at ~210M " "included, three presses, with everything in and none of the cost levers taken, at ~210M "
"THB (~209M). A second version, Plan A (~180M THB), builds the same plant with six cost " "THB (~208M). A second version, Plan A (~180M THB), builds the same plant with six cost "
"levers. ") "levers. ")
+ "The plan price includes the ramp-up reserve and carries no contingency. Cover picture: the " + "The plan price includes the ramp-up reserve and carries no contingency. Cover picture: the "
"plant as the plant and business plan calculator draws this plan (schematic, Payap scenario " "plant as the plant and business plan calculator draws this plan (schematic, Payap scenario "
@@ -111,7 +111,7 @@ def blocks():
"right first; " + pick("the launch plant", "the whole chain at launch") "right first; " + pick("the launch plant", "the whole chain at launch")
+ " was decided anyway, and that advice is carried as a risk (sections 11.2 and 13).", + " was decided anyway, and that advice is carried as a risk (sections 11.2 and 13).",
pick( pick(
"**Six cost levers bring the plant to ~180M THB**, from ~194M to ~162M THB at the midpoint " "**Six cost levers bring the plant to ~180M THB**, from ~193M to ~162M THB at the midpoint "
"before the ramp-up reserve (estimates, section 8): rooftop solar and battery through a solar " "before the ramp-up reserve (estimates, section 8): rooftop solar and battery through a solar "
"PPA (the installer owns and finances the array, the plant buys the power); metrology in two " "PPA (the installer owns and finances the array, the plant buys the power); metrology in two "
"steps (XRF, inline vision and the audio station at launch, the laser confocal and the " "steps (XRF, inline vision and the audio station at launch, the laser confocal and the "
@@ -120,8 +120,8 @@ def blocks():
"with frame, runway and machine door kept crane-ready; boilers and compressor through the " "with frame, runway and machine door kept crane-ready; boilers and compressor through the "
"Chinese route. Every press, the cutting room, the galvanics line and the stamper-prep line " "Chinese route. Every press, the cutting room, the galvanics line and the stamper-prep line "
"stay in.", "stay in.",
"**Everything in, none of the cost levers: ~210M THB**, ~194M THB at the midpoint before the " "**Everything in, none of the cost levers: ~210M THB**, ~193M THB at the midpoint before the "
"ramp-up reserve and ~32M THB more than Plan A (estimates, section 8): owned rooftop solar and " "ramp-up reserve and ~31M THB more than Plan A (estimates, section 8): owned rooftop solar and "
"battery (and with them the BOI solar measure); the full metrology stack from launch (XRF, " "battery (and with them the BOI solar measure); the full metrology stack from launch (XRF, "
"laser confocal, wide-area profiler, inline vision, audio station); the visitor corridor and " "laser confocal, wide-area profiler, inline vision, audio station); the visitor corridor and "
"accessible entrance, so public tours and the Payap student programmes are possible from the " "accessible entrance, so public tours and the Payap student programmes are possible from the "
@@ -190,10 +190,10 @@ def blocks():
"(staff and overheads before volume covers them). From the low to the high end of every " "(staff and overheads before volume covers them). From the low to the high end of every "
"block: ~THB 127M to 226M. Estimates: no quote yet for the Classic, the galvanics line " "block: ~THB 127M to 226M. Estimates: no quote yet for the Classic, the galvanics line "
"(priced at OMS's reference plus 20 %) or the building", "(priced at OMS's reference plus 20 %) or the building",
"**~THB 209M (~USD 6.33M), rounded to ~210M THB**: the plan investment, ~THB 193.8M (~USD " "**~THB 208M (~USD 6.30M), rounded to ~210M THB**: the plan investment, ~THB 192.8M (~USD "
"5.87M) at the midpoint with everything in, plus a ramp-up reserve of ~THB 10M to 20M (staff " "5.84M) at the midpoint with everything in, plus a ramp-up reserve of ~THB 10M to 20M (staff "
"and overheads before volume covers them); at the midpoint within the investor's 180M THB " "and overheads before volume covers them); at the midpoint within the investor's 180M THB "
"plus 20 %. From the low to the high end of every block: ~THB 150M to 268M. Estimates: no " "plus 20 %. From the low to the high end of every block: ~THB 149M to 266M. Estimates: no "
"quote yet for the Classic, the galvanics line (priced at OMS's reference plus 20 %) or the " "quote yet for the Classic, the galvanics line (priced at OMS's reference plus 20 %) or the "
"building")], "building")],
["Not in the plan price", "**No contingency** (at the 15 % used in the cost documents, ~THB " ["Not in the plan price", "**No contingency** (at the 15 % used in the cost documents, ~THB "
@@ -222,7 +222,7 @@ def blocks():
"~3.1 years on the plan price in the central case (2.2 to 4.0 from the low to the high end of " "~3.1 years on the plan price in the central case (2.2 to 4.0 from the low to the high end of "
"the price); ~1.0 year in the favourable case, ~30 years in the adverse case (EBITDA, mature " "the price); ~1.0 year in the favourable case, ~30 years in the adverse case (EBITDA, mature "
"year, ramp-up reserve included; estimates)", "year, ramp-up reserve included; estimates)",
"~3.7 years on the plan price in the central case (2.6 to 4.7 from the low to the high end of " "~3.6 years on the plan price in the central case (2.6 to 4.7 from the low to the high end of "
"the price); ~1.2 years in the favourable case, ~35 years in the adverse case (EBITDA, mature " "the price); ~1.2 years in the favourable case, ~35 years in the adverse case (EBITDA, mature "
"year, ramp-up reserve included; estimates)")], "year, ramp-up reserve included; estimates)")],
["First paying release", "**Open.** The August 2026 calendar gives Q4 2028 to mid-2029 (27 to 33 " ["First paying release", "**Open.** The August 2026 calendar gives Q4 2028 to mid-2029 (27 to 33 "
@@ -239,7 +239,7 @@ def blocks():
"~THB 177M (~USD 5.35M), the ~180M THB plan, released in tranches against milestones " "~THB 177M (~USD 5.35M), the ~180M THB plan, released in tranches against milestones "
"(section 8), starting with phase 0 (~THB 1.3M to 2.6M). BOI caps debt-to-equity at 3:1, so " "(section 8), starting with phase 0 (~THB 1.3M to 2.6M). BOI caps debt-to-equity at 3:1, so "
"at least a quarter is equity: ~THB 44M (arithmetic, before financing costs)", "at least a quarter is equity: ~THB 44M (arithmetic, before financing costs)",
"~THB 209M (~USD 6.33M), the ~210M THB plan, released in tranches against milestones " "~THB 208M (~USD 6.30M), the ~210M THB plan, released in tranches against milestones "
"(section 8), starting with phase 0 (~THB 1.3M to 2.6M). BOI caps debt-to-equity at 3:1, so " "(section 8), starting with phase 0 (~THB 1.3M to 2.6M). BOI caps debt-to-equity at 3:1, so "
"at least a quarter is equity: ~THB 52M (arithmetic, before financing costs)")], "at least a quarter is equity: ~THB 52M (arithmetic, before financing costs)")],
]), ]),
@@ -251,7 +251,7 @@ def blocks():
"presses (one Duplex system and the Classic) and takes six cost levers. ") "presses (one Duplex system and the Classic) and takes six cost levers. ")
+ "Both carry the ramp-up reserve and neither carries a contingency, and in both the second Duplex " + "Both carry the ramp-up reserve and neither carries a contingency, and in both the second Duplex "
"system is a growth step from revenue. What decides between them is no longer demand, because both " "system is a growth step from revenue. What decides between them is no longer demand, because both "
"make the same records: it is whether the investor funds ~THB 32M (~18 %) more at launch for what " "make the same records: it is whether the investor funds ~THB 31M (~18 %) more at launch for what "
"Plan A leases or buys from revenue. Plan B keeps the BOI solar measure (only an owned array " "Plan A leases or buys from revenue. Plan B keeps the BOI solar measure (only an owned array "
"qualifies), measures every stamper fully from the first release, makes tours and the Payap " "qualifies), measures every stamper fully from the first release, makes tours and the Payap "
"programmes possible from the start, sells cassette and CD-R from launch, owns its crane and buys " "programmes possible from the start, sells cassette and CD-R from launch, owns its crane and buys "
@@ -262,19 +262,19 @@ def blocks():
"Section 8 sets the two side by side."), "Section 8 sets the two side by side."),
T(["", "Plan A", "Plan B"], [ T(["", "Plan A", "Plan B"], [
["Plan price (ramp-up reserve in, no contingency)", "~THB 177M (~USD 5.35M); ~127M to 226M from " ["Plan price (ramp-up reserve in, no contingency)", "~THB 177M (~USD 5.35M); ~127M to 226M from "
"the low to the high end", "~THB 209M (~USD 6.33M); ~150M to 268M from the low to the high end"], "the low to the high end", "~THB 208M (~USD 6.30M); ~149M to 266M from the low to the high end"],
["Presses", "3: one Duplex system (2 semi-automatic) and one Classic", "The same 3"], ["Presses", "3: one Duplex system (2 semi-automatic) and one Classic", "The same 3"],
["Records a year at 60 % specials", "~0.58M to 0.90M (central 0.74M)", "The same"], ["Records a year at 60 % specials", "~0.58M to 0.90M (central 0.74M)", "The same"],
["EBITDA, central case", "~USD 1.73M (~THB 57M)", "~USD 1.73M (~THB 57M); cassette and CD-R " ["EBITDA, central case", "~USD 1.73M (~THB 57M)", "~USD 1.73M (~THB 57M); cassette and CD-R "
"not modelled"], "not modelled"],
["Operating profit, central case", "~USD 1.34M (~THB 44M)", "~USD 1.26M (~THB 42M)"], ["Operating profit, central case", "~USD 1.34M (~THB 44M)", "~USD 1.26M (~THB 42M)"],
["Payback on the plan price, central case", "~3.1 years (2.2 to 4.0)", "~3.7 years (2.6 to 4.7)"], ["Payback on the plan price, central case", "~3.1 years (2.2 to 4.0)", "~3.6 years (2.6 to 4.7)"],
["Adverse case", "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.39M", ["Adverse case", "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.39M",
"Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.52M"], "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.52M"],
["What Plan A gives up, what Plan B buys", "At launch: solar through a PPA (very likely without " ["What Plan A gives up, what Plan B buys", "At launch: solar through a PPA (very likely without "
"the BOI solar measure), no confocal or profiler, no visitor corridor or tours, no cassette or " "the BOI solar measure), no confocal or profiler, no visitor corridor or tours, no cassette or "
"CD-R, a rented crane; Chinese-made boilers and compressor", "CD-R, a rented crane; Chinese-made boilers and compressor",
"~THB 32M more at launch: owned solar and battery with the BOI solar measure, the full " "~THB 31M more at launch: owned solar and battery with the BOI solar measure, the full "
"metrology stack, the visitor corridor and tours, cassette and CD-R, a bought crane; " "metrology stack, the visitor corridor and tours, cassette and CD-R, a bought crane; "
"Thai-supplied boilers and compressor"], "Thai-supplied boilers and compressor"],
], widths_mm=[42, 64, 64], font_pt=8.5, ], widths_mm=[42, 64, 64], font_pt=8.5,
@@ -317,18 +317,18 @@ def blocks():
"boiler and chiller modules), building contract, fit-out, commissioning in sequence " "boiler and chiller modules), building contract, fit-out, commissioning in sequence "
"(section 8). From the low to the high end of every block the plan runs from ~THB 127M to " "(section 8). From the low to the high end of every block the plan runs from ~THB 127M to "
"226M; quotes that land high are funded outside the plan or by scope steps.", "226M; quotes that land high are funded outside the plan or by scope steps.",
"**Then the Plan B round, ~THB 209M (~USD 6.33M), rounded to ~210M THB**, including the " "**Then the Plan B round, ~THB 208M (~USD 6.30M), rounded to ~210M THB**, including the "
"ramp-up reserve and without contingency, within the investor's 180M THB plus 20 % at the " "ramp-up reserve and without contingency, within the investor's 180M THB plus 20 % at the "
"midpoint, released in tranches against milestones: BOI certificate and lease signed, " "midpoint, released in tranches against milestones: BOI certificate and lease signed, "
"long-lead orders (lathe, galvanics, stamper prep, presses, boiler and chiller modules), " "long-lead orders (lathe, galvanics, stamper prep, presses, boiler and chiller modules), "
"building contract, fit-out, commissioning in sequence (section 8). From the low to the high " "building contract, fit-out, commissioning in sequence (section 8). From the low to the high "
"end of every block the plan runs from ~THB 150M to 268M; quotes that land high are funded " "end of every block the plan runs from ~THB 149M to 266M; quotes that land high are funded "
"outside the plan or by scope steps."), "outside the plan or by scope steps."),
"**Decisions needed from the investor:** which version to fund, Plan A or Plan B (both make the " "**Decisions needed from the investor:** which version to fund, Plan A or Plan B (both make the "
"same records, so the choice is ~THB 32M more at launch for what Plan A leases or defers; the " "same records, so the choice is ~THB 31M more at launch for what Plan A leases or defers; the "
"Classic, Pheenix and EX 35 quotes, the solar PPA offer and the building quote settle the " "Classic, Pheenix and EX 35 quotes, the solar PPA offer and the building quote settle the "
"numbers); the equity/debt mix (BOI requires debt-to-equity of at most 3:1, so at " "numbers); the equity/debt mix (BOI requires debt-to-equity of at most 3:1, so at "
"least ~THB " + pick("44M of Plan A's ~177M", "52M of Plan B's ~209M") + " is equity); CD " "least ~THB " + pick("44M of Plan A's ~177M", "52M of Plan B's ~208M") + " is equity); CD "
"replication, yes or no (it must be in the BOI application from the start); and the steam fuel, " "replication, yes or no (it must be in the BOI application from the start); and the steam fuel, "
"electric or biomass.", "electric or biomass.",
"**Co-investment:** Ploy Printing, the Chiang Mai print and packaging house that will produce " "**Co-investment:** Ploy Printing, the Chiang Mai print and packaging house that will produce "
+11 -9
View File
@@ -367,13 +367,14 @@ def blocks():
"Taken through a solar PPA (below): the plant pays the PPA price for this " "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 " "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", "price and the ~3.7 THB/kWh of grid power it displaces",
"Saves ~1.2M to 1.3M THB a year and pays back in ~4.5 to 7 years at 25,000 " "Saves ~1.2M to 1.3M THB a year and pays back in ~3.8 to 5.4 years at 20,000 "
"to 35,000 THB/kWp (estimates)")], "to 26,000 THB/kWp installed (estimates)")],
["Canopies and the second building", "~40 kWp on the parking canopies (construction RFQ; ~54 " ["Canopies and the second building", "~40 kWp on the parking canopies (construction RFQ; ~54 "
"kWp if fully covered). A phase 2 building's roof adds " "kWp if fully covered). A phase 2 building's roof adds "
"~251 kWp, ~498 kWp across both roofs"], "~251 kWp, ~498 kWp across both roofs"],
["Battery", "271 kWh Gobel Power LiFePO4 rack (15 stacked 18 kWh packs, 8,000+ cycles), USD " ["Battery", "271 kWh Gobel Power LiFePO4 rack (15 stacked 18 kWh packs, 8,000+ cycles), USD "
"39,900 to 58,000 listed, 50 to 60 day lead. Roughly an hour of the chiller bank's " "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"], "peak draw: ride-through, not off-grid autonomy"],
["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), Thai distribution via Solar " ["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), Thai distribution via Solar "
"Nicolo; Deye is a supported protocol on the Gobel battery management"], "Nicolo; Deye is a supported protocol on the Gobel battery management"],
@@ -387,17 +388,18 @@ def blocks():
"terms", "")], "terms", "")],
pick(["Solar PPA (this plan)", "An installer owns and finances the PV and the battery, and the " pick(["Solar PPA (this plan)", "An installer owns and finances the PV and the battery, and the "
"plant buys the power at a price still to quote (the calculator carries 3.0 THB/kWh, an " "plant buys the power at a price still to quote (the calculator carries 3.0 THB/kWh, an "
"estimate, ~0.03M USD a year on the energy line). That keeps the PV EPC (USD 227k to " "estimate, ~0.03M USD a year on the energy line). That keeps the PV EPC (USD 182k to "
"318k) and the battery (USD 42k to 62k) out of the capital round: ~10.7M THB less at the " "236k) and the battery (USD 61k to 106k) out of the capital round: ~9.7M THB less at the "
"midpoint, one of the six levers in section 8. The BOI solar measure (section 7) rewards " "midpoint, one of the six levers in section 8. The BOI solar measure (section 7) rewards "
"the plant's own solar investment, so its tax value very likely goes with the array (to " "the plant's own solar investment, so its tax value very likely goes with the array (to "
"confirm with the BOI consultant). The PPA offer is asked against the specification " "confirm with the BOI consultant). The PPA offer is asked against the specification "
"above"], "above"],
["Owned (this plan)", "The plant buys the array and the battery: rooftop PV EPC USD 227k " ["Owned (this plan)", "The plant buys the array and the battery: rooftop PV EPC USD 182k "
"to 318k (7.5M to 10.5M THB) and the battery USD 42k to 62k (1.4M to 2.0M THB), " "to 236k (6.0M to 7.8M THB, 20 to 26 THB/W at Thai 2026 market prices) and the battery, installed, "
"USD 61k to 106k (2.0M to 3.5M THB), "
"estimates, section 8. Owning them is what the BOI solar measure rewards (section 7). A " "estimates, section 8. Owning them is what the BOI solar measure rewards (section 7). A "
"solar PPA (an installer owns and finances them, the plant buys the power at a price " "solar PPA (an installer owns and finances them, the plant buys the power at a price "
"still to quote) would take ~10.7M THB out of the capital round at the midpoint, but " "still to quote) would take ~9.7M THB out of the capital round at the midpoint, but "
"very likely gives up that measure"]), "very likely gives up that measure"]),
]), ]),
H3("Steam: the open engineering choice"), H3("Steam: the open engineering choice"),
@@ -965,7 +967,7 @@ def blocks():
P("**Process:** file via the e-Investment system and present at an analyst meeting. BOI quotes " 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 " "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)", "larger tiers; at " + pick("~127M to 226M THB with the ramp-up reserve (~177M at the midpoint)",
"~150M to 268M THB with the ramp-up reserve (~209M at the midpoint)") + "~149M to 266M THB with the ramp-up reserve (~208M at the midpoint)") +
" the plan sits around that line, so the consultant " " 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; " "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 " "the company is incorporated under it; machinery is imported within a window commonly 30 months "
+52 -52
View File
@@ -62,7 +62,7 @@ def _block_rows():
"racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"], "racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"],
] ]
if not a: if not a:
rows.append(["Rooftop PV (EPC) and the 271 kWh Gobel battery, owned", "269k to 380k", "8.9M to 12.5M", rows.append(["Rooftop PV (EPC) and the 271 kWh Gobel battery, owned", "243k to 342k", "8.0M to 11.3M",
"Researched: utilities rows; owned, so the BOI solar measure applies"]) "Researched: utilities rows; owned, so the BOI solar measure applies"])
rows += [ rows += [
["Building ~1,500 m² plus civil and site works", "650k to 1,100k", "21.4M to 36.3M", "Estimate at " ["Building ~1,500 m² plus civil and site works", "650k to 1,100k", "21.4M to 36.3M", "Estimate at "
@@ -97,14 +97,14 @@ def _block_rows():
rows += [ rows += [
pick(["**Subtotal, plan investment**", "**~3.56M to 6.25M**", "**~117.4M to 206.1M**", pick(["**Subtotal, plan investment**", "**~3.56M to 6.25M**", "**~117.4M to 206.1M**",
"**Midpoint ~161.7M THB (~4.90M USD)**"], "**Midpoint ~161.7M THB (~4.90M USD)**"],
["**Subtotal, plan investment**", "**~4.24M to 7.50M**", "**~140.0M to 247.6M**", ["**Subtotal, plan investment**", "**~4.22M to 7.47M**", "**~139.1M to 246.4M**",
"**Midpoint ~193.8M THB (~5.87M USD)**"]), "**Midpoint ~192.8M THB (~5.84M USD)**"]),
["Ramp-up reserve: staff hired before first revenue, overheads until volume covers them", ["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"], "~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**", pick(["**Plan A price**", "**~3.86M to 6.85M**", "**~127M to 226M**",
"**Midpoint ~177M THB (~5.35M USD): ~180M THB**"], "**Midpoint ~177M THB (~5.35M USD): ~180M THB**"],
["**Plan B price**", "**~4.55M to 8.11M**", "**~150M to 268M**", ["**Plan B price**", "**~4.52M to 8.07M**", "**~149M to 266M**",
"**Midpoint ~209M THB (~6.33M USD): ~210M THB**"]), "**Midpoint ~208M THB (~6.30M USD): ~210M THB**"]),
["Contingency: not in the plan price", "", "", pick( ["Contingency: not in the plan price", "", "", pick(
"For information: at 15 %, ~24M THB at the midpoint", "For information: at 15 %, ~24M THB at the midpoint",
"For information: at 15 %, ~29M THB at the midpoint")], "For information: at 15 %, ~29M THB at the midpoint")],
@@ -115,9 +115,9 @@ def _block_rows():
def _levers_table(): def _levers_table():
"""Plan A: the six levers from the launch plant with every block, midpoints, no contingency.""" """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"], [ return T(["Step", "Saves", "Subtotal after it", "What it gives up"], [
["Launch plant, every block, no contingency", "", "~193.8M THB (~5.87M USD)", ""], ["Launch plant, every block, no contingency", "", "~192.8M THB (~5.84M USD)", ""],
["1. Rooftop solar and battery through a solar PPA (the installer owns and finances the array; the " ["1. Rooftop solar and battery through a solar PPA (the installer owns and finances the array; the "
"plant buys the power)", "~10.7M", "~183.1M", "Owned solar and very likely the BOI solar measure with " "plant buys the power)", "~9.7M", "~183.1M", "Owned solar and very likely the BOI solar measure with "
"its tax benefit (our reading, for the BOI consultant); " "its tax benefit (our reading, for the BOI consultant); "
"adds the PPA power price to the energy bill, ~0.03M USD a " "adds the PPA power price to the energy bill, ~0.03M USD a "
"year in the calculator at 3.0 THB/kWh (estimate, to " "year in the calculator at 3.0 THB/kWh (estimate, to "
@@ -148,7 +148,7 @@ def _keeps_table():
"""Plan B: what it keeps that Plan A's six levers move off the launch budget, midpoints, no contingency.""" """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)"], [ return T(["In at launch in Plan B", "What it gives the plant", "THB, midpoint (Plan A's lever)"], [
["Rooftop PV and the 271 kWh battery, owned (EPC and Gobel battery)", "The BOI solar measure (only an " ["Rooftop PV and the 271 kWh battery, owned (EPC and Gobel battery)", "The BOI solar measure (only an "
"owned array qualifies; our reading, for the BOI consultant) and no PPA power bill", "~10.7M"], "owned array qualifies; our reading, for the BOI consultant) and no PPA power bill", "~9.7M"],
["Metrology, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio station", ["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"], "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 " ["Visitor corridor and accessible entrance", "Public tours and the Payap programmes possible from the "
@@ -159,14 +159,14 @@ def _keeps_table():
"the installations", "~3.2M"], "the installations", "~3.2M"],
["Boilers and compressor from Thai suppliers", "Local service; no import route for the boilers", ["Boilers and compressor from Thai suppliers", "Local service; no import route for the boilers",
"~1.9M"], "~1.9M"],
["**Together**", "", "**~32M (193.8M minus Plan A's 161.7M)**"], ["**Together**", "", "**~31M (192.8M minus Plan A's 161.7M)**"],
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~193.8M (~5.87M USD)"], ["Launch plant, every block, no contingency: Plan B's subtotal", "", "~192.8M (~5.84M USD)"],
["Ramp-up reserve", "", "+10M to 20M"], ["Ramp-up reserve", "", "+10M to 20M"],
["**Plan B**", "", "**~209M THB (~6.33M USD)**; ~150M to 268M from the low to the high end"], ["**Plan B**", "", "**~208M THB (~6.30M USD)**; ~149M to 266M from the low to the high end"],
], widths_mm=[62, 70, 38], font_pt=8.5, ], widths_mm=[62, 70, 38], font_pt=8.5,
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. " 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 ~32.2M, and the " "Each figure is what the matching Plan A lever saves; rounded, the six add to ~31.2M, and the "
"two subtotals differ by ~32.1M.") "two subtotals differ by ~31.1M.")
def _tranches(): def _tranches():
@@ -183,7 +183,7 @@ def _tranches():
["2", "Building permit; vendor build dates confirmed in writing", ["2", "Building permit; vendor build dates confirmed in writing",
"Construction, water-treatment building, utility yard, utilities, balance payments as machines are " "Construction, water-treatment building, utility yard, utilities, balance payments as machines are "
"built", "built",
pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~68M to 87M)")], pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~67M to 87M)")],
["3", "Building watertight; first machinery shipped", ["3", "Building watertight; first machinery shipped",
pick("Fit-out, HVAC and clean zones, ZLD and DI water, the rented crane for the installations, the " 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", "metrology launch tier, factory software and ERPNext, the launch team",
@@ -193,11 +193,11 @@ def _tranches():
pick("15 to 20 % (~24M to 32M)", "15 to 20 % (~29M to 39M)")], pick("15 to 20 % (~24M to 32M)", "15 to 20 % (~29M to 39M)")],
["4", "Cutting room and galvanics commissioned; first stampers made", "Working capital, PVC stock, " ["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 " "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 23M), plus the reserve")], "on", pick("8 to 12 % (~13M to 19M), plus the reserve", "8 to 12 % (~15M to 23M), plus the reserve")],
], widths_mm=[14, 46, 78, 32], font_pt=8.5, ], 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 (~161.7M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates).", "figures are the shares applied to it (arithmetic, estimates).",
"Shares of Plan B's investment before the reserve (~193.8M THB at the midpoint); the THB " "Shares of Plan B's investment before the reserve (~192.8M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates).")) "figures are the shares applied to it (arithmetic, estimates)."))
@@ -234,8 +234,8 @@ def _operating_table():
["Depreciation", "0.75M", "0.47M", "0.28M"], ["Depreciation", "0.75M", "0.47M", "0.28M"],
["**Operating profit**", "**-0.52M**", "**1.26M**", "**3.51M**"], ["**Operating profit**", "**-0.52M**", "**1.26M**", "**3.51M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"], ["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~35 yr", "~3.7 yr (2.6 to 4.7 on 4.55M to " ["Payback on the plan price (EBITDA, mature year)", "~35 yr", "~3.6 yr (2.6 to 4.7 on 4.52M to "
"8.11M)", "~1.2 yr"], "8.07M)", "~1.2 yr"],
] ]
return T(["USD per year, mature", "Adverse", "Central", "Favourable"], rows, widths_mm=[50, 36, 48, 36], 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 " caption="Estimates, docs/finance/revenue-model.md 'Operating pictures of Plan A and Plan B (October "
@@ -256,7 +256,7 @@ def _risk_rows():
"Quotes landing high are not covered: at 15 % a contingency would be ~24M THB at the midpoint, " "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", "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 ~29M THB at the midpoint, " "Quotes landing high are not covered: at 15 % a contingency would be ~29M THB at the midpoint, "
"and the high end of every block comes to ~268M with the reserve"), "and the high end of every block comes to ~266M with the reserve"),
"The requests that settle most of the band come before commitment (section 8.4); tranche release; " "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 " "how overruns are funded (outside the plan price or by scope steps) agreed with the investor up "
"front"], "front"],
@@ -299,9 +299,9 @@ def _risk_rows():
"and PPA offers next to the purchase quote in phase 0; buying the array, as Plan B does, " "and PPA offers next to the purchase quote in phase 0; buying the array, as Plan B does, "
"stays the alternative"]) "stays the alternative"])
else: else:
rows.append(["Medium", "The extra ~32M THB earns nothing in the model", "Plan B's operating picture is " rows.append(["Medium", "The extra ~31M THB earns nothing in the model", "Plan B's operating picture is "
"Plan A's (same presses, records, revenue and EBITDA): the ~32M THB more at launch adds " "Plan A's (same presses, records, revenue and EBITDA): the ~31M THB more at launch adds "
"depreciation, so central operating profit is 1.26M against 1.34M USD, payback ~3.7 against " "depreciation, so central operating profit is 1.26M against 1.34M USD, payback ~3.6 against "
"~3.1 years and the adverse corner deeper; its case rests on what the table leaves out (the " "~3.1 years and the adverse corner deeper; its case rests on what the table leaves out (the "
"BOI solar measure, cassette and CD-R sales, tours and the Payap programmes, full stamper " "BOI solar measure, 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 " "metrology for the traceability pitch)", "Phase 0 prices each item against its lever (PPA "
@@ -430,8 +430,8 @@ def blocks():
"This document is " + label() + ". How the two differ (estimates):"), "This document is " + label() + ". How the two differ (estimates):"),
T(["Midpoints, estimates", "Plan A" + pick(" (this plan)", ""), "Plan B" + pick("", " (this plan)")], [ 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", ["Plan price: ramp-up reserve in, no contingency", "~177M THB (~5.35M USD): ~180M",
"~209M THB (~6.33M USD): ~210M"], "~208M THB (~6.30M USD): ~210M"],
["Low to high end of every block", "~127M to 226M THB", "~150M to 268M THB"], ["Low to high end of every block", "~127M to 226M THB", "~149M to 266M THB"],
["Presses", "3: Duplex system 1 (two HRP 12) and one Classic", "The same 3"], ["Presses", "3: Duplex system 1 (two HRP 12) and one Classic", "The same 3"],
["Records a year at 60 % specials", "~0.58 to 0.90M, central 0.74M (Duplex-limited)", "The same"], ["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)"], ["Revenue, central", "3.65M USD (~120M THB)", "The same (cassette and CD-R not modelled)"],
@@ -440,11 +440,11 @@ def blocks():
["Operating profit, adverse case", "-0.39M USD: loses money", "-0.52M USD: loses more (more " ["Operating profit, adverse case", "-0.39M USD: loses money", "-0.52M USD: loses more (more "
"depreciation on the same EBITDA)"], "depreciation on the same EBITDA)"],
["Payback on the plan price, central (EBITDA, mature year)", "~3.1 yr (2.2 to 4.0)", ["Payback on the plan price, central (EBITDA, mature year)", "~3.1 yr (2.2 to 4.0)",
"~3.7 yr (2.6 to 4.7; calculator: 2.8 yr against Plan A's 2.4)"], "~3.6 yr (2.6 to 4.7; calculator: 2.8 yr against Plan A's 2.4)"],
["What it gives up or takes on", "Six levers: solar through a PPA (very likely without the BOI " ["What it gives up or takes on", "Six levers: solar through a PPA (very likely without the BOI "
"solar measure), confocal and profiler from revenue, no tours at first, cassette and CD-R later, a " "solar measure), 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: " "rented crane, Chinese boilers and compressor; the second Duplex waits for revenue", "No levers: "
"buys at launch what Plan A leases or defers, ~32M THB more (owned solar and battery with the BOI " "buys at launch what Plan A leases or defers, ~31M THB more (owned solar and battery with the BOI "
"solar measure, the full metrology stack, the visitor corridor, cassette and CD-R, a bought crane, " "solar measure, the full metrology stack, the visitor corridor, cassette and CD-R, a bought crane, "
"Thai boilers and compressor); the second Duplex waits for revenue"], "Thai boilers and compressor); the second Duplex waits for revenue"],
], widths_mm=[46, 62, 62], font_pt=8.5, ], widths_mm=[46, 62, 62], font_pt=8.5,
@@ -454,8 +454,8 @@ def blocks():
[P("**Plan A: six levers, every machine kept.** From the launch plant with every block, no " [P("**Plan A: six levers, every machine kept.** From the launch plant with every block, no "
"contingency, midpoint values:"), "contingency, midpoint values:"),
_levers_table(), _levers_table(),
P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~32M THB more " P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~31M THB more "
"at the midpoint, so ~193.8M THB before the reserve and ~209M (~210M THB) with it.")] "at the midpoint, so ~192.8M THB before the reserve and ~208M (~210M THB) with it.")]
if a else if a else
[P("**Plan B: the launch plant with everything in, no levers.** What Plan B keeps that Plan A's six " [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 source abroad, midpoint values:"),
@@ -467,12 +467,12 @@ def blocks():
CALL("What decides between Plan A and Plan B", [ 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 " "**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.", "records a year (central 0.74 million); market validation (section 14.1, item 1) gates both alike.",
"**~32M THB more at launch, for what Plan A leases or buys from revenue.** Plan B keeps the BOI " "**~31M THB more at launch, for what Plan A leases or buys from revenue.** Plan B keeps the BOI "
"solar measure (only an owned array qualifies), measures every stamper fully from the first release " "solar measure (only an owned array qualifies), measures every stamper fully from the first release "
"(the traceability pitch), opens tours and the Payap programmes from day one, sells cassette and " "(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 utilities with local service.",
"**On the modelled numbers the extra earns nothing.** The same EBITDA, more depreciation, a longer " "**On the modelled numbers the extra earns nothing.** The same EBITDA, more depreciation, a longer "
"payback (~3.7 against ~3.1 years) and a deeper adverse corner: Plan A has the better modelled " "payback (~3.6 against ~3.1 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 " "return, Plan B the more complete plant. Most of Plan B's items can be added to Plan A later from "
"revenue; the BOI solar measure and the corridor are cheaper to have from the start.", "revenue; the BOI solar measure and the corridor are cheaper to have from the start.",
"**The quotes.** The Newbilt re-quote for the Classic and the EX 35, the Pheenix quote against the " "**The quotes.** The Newbilt re-quote for the Classic and the EX 35, the Pheenix quote against the "
@@ -488,8 +488,8 @@ def blocks():
"Figure 11. Budget card of the plant and business plan calculator, " + pick( "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 " "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", "ramp-up reserve of 10M to 20M, inside 180M at the midpoint",
"Plan B preset: 193.8M THB at the midpoint without contingency, 203.8M to 213.8M with the " "Plan B preset: 192.8M THB at the midpoint without contingency, 202.8M to 212.8M with the "
"ramp-up reserve of 10M to 20M, 16.2M to spare under the 225M mark (180M plus 25 %)") + "ramp-up reserve of 10M to 20M, 17.2M 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 " ". 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."), "hatched, against 180M and 225M THB. Calculator figures (docs/fleet-calculator.html), estimates."),
@@ -506,8 +506,8 @@ def blocks():
"**No contingency in the price.** " + pick( "**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 " "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. ", "15 % a contingency would add ~24M THB, and the high end of every block comes to ~226M. ",
"Plan B's ~209M THB is the midpoint of every block with the ramp-up reserve and no buffer: at " "Plan B's ~208M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~29M THB, and the high end of every block comes to ~268M. ") + "15 % a contingency would add ~29M THB, and the high end of every block comes to ~266M. ") +
"Quotes landing above the midpoint are funded outside the plan price or by scope steps; how they are " "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).", "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 " "**The quotes that decide it.** The Classic has no Newbilt price (its band is a placeholder "
@@ -538,11 +538,11 @@ def blocks():
"**Chinese suppliers: ~1 %.** Plan B prices Thai-supplied utilities. The Chinese route for the " "**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 " "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."), "it); chillers and HVAC, the larger blocks, are not checked yet."),
pick("**Solar PPA.** The largest single lever (~10.7M THB at the midpoint) moves the array off the " pick("**Solar PPA.** The largest single lever (~9.7M THB at the midpoint) moves the array off the "
"capital budget and adds a power price to the energy line instead (~0.03M USD a year in the " "capital budget and adds a power price to the energy line instead (~0.03M USD a year in the "
"calculator at 3.0 THB/kWh, an estimate to quote).", "calculator at 3.0 THB/kWh, an estimate to quote).",
"**Solar bought, not leased.** Plan B owns the array and the battery (8.9M to 12.5M THB). A " "**Solar bought, not leased.** Plan B owns the array and the battery (8.0M to 11.3M THB). A "
"solar PPA would take ~10.7M THB off the price at the midpoint and add a power price to the " "solar PPA would take ~9.7M THB off the price at the midpoint and add a power price to the "
"energy line instead, very likely without the BOI solar measure."), "energy line instead, very likely without the BOI solar measure."),
"**Every band narrows only with quotes.** The supplier map in the planning repository lists who to " "**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).", "ask, and the re-quotes are phase 0 work (section 14).",
@@ -696,9 +696,9 @@ def blocks():
"(central) and the low end (3.56M USD) over 15 years (favourable). Payback is counted on the " "(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 " "whole plan price including the ramp-up reserve (3.86M / 5.35M / 6.85M USD from the low to the "
"high end).", "high end).",
"the high end (7.50M USD) over 10 years (adverse), the midpoint (5.87M USD) over 12.5 years " "the high end (7.47M USD) over 10 years (adverse), the midpoint (5.84M USD) over 12.5 years "
"(central) and the low end (4.24M USD) over 15 years (favourable). Payback is counted on the " "(central) and the low end (4.22M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (4.55M / 6.33M / 8.11M USD from the low to the " "whole plan price including the ramp-up reserve (4.52M / 6.30M / 8.07M USD from the low to the "
"high end).")), "high end).")),
_operating_table(), _operating_table(),
CALL("Reading this table honestly", pick([ CALL("Reading this table honestly", pick([
@@ -727,7 +727,7 @@ def blocks():
"supply to other plants, dropshipping fees, and the ramp year. BOI tax exemptions shield part of " "supply to other plants, dropshipping fees, and the ramp year. BOI tax exemptions shield part of "
"early-year profits where there are any.", "early-year profits where there are any.",
], [ ], [
"**The central case works on ~209M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.26M " "**The central case works on ~208M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.26M "
"USD (~42M THB) a year once the plant runs at volume. It breaks even on operating profit at about " "USD (~42M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.23 million records a year, about a third of its central output**. Against the earlier ~20 % " "**0.23 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.", "specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.",
@@ -737,9 +737,9 @@ def blocks():
"cost and volume the price that covers depreciation is ~2.8 USD (~91 THB) a record (arithmetic on " "cost and volume the price that covers depreciation is ~2.8 USD (~91 THB) a record (arithmetic on "
"the table), below the low price assumed: price realisation and utilisation decide solvency, not " "the table), below the low price assumed: price realisation and utilisation decide solvency, not "
"upside.", "upside.",
"**What the extra ~32M THB buys is not in this table.** Plan B is Plan A's plant with the six levers " "**What the extra ~31M 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.47M against " "not taken, so revenue, direct cost and EBITDA are Plan A's; only the depreciation (0.47M against "
"Plan A's 0.39M USD at the centre) and the payback (~3.7 against ~3.1 years) move. Not modelled: " "Plan A's 0.39M USD at the centre) and the payback (~3.6 against ~3.1 years) move. Not modelled: "
"cassette and CD-R revenue, tour and Payap revenue, stamper supply to other plants, and the tax " "cassette and CD-R revenue, tour and Payap revenue, stamper supply to other plants, and the tax "
"benefit of the BOI solar measure.", "benefit of the BOI solar measure.",
"**The central margin is too good to trust yet.** A central EBITDA margin of ~47 % is far above " "**The central margin is too good to trust yet.** A central EBITDA margin of ~47 % is far above "
@@ -751,7 +751,7 @@ def blocks():
"with its own cost build-up (it adds electric steam heat and the cutting engineer, which this " "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 " "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.07M USD, " "Duplex-limited, gives at 850k records and 60 % specials: revenue ~4.14M, EBITDA 2.07M USD, "
"payback 2.8 years on the 193.8M THB investment in a mature year; with a ramp of 35, 70 and 90 % in " "payback 2.8 years on the 192.8M 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.3, ~21 % IRR and an NPV " "the first three years and the reserve in year 0, cash payback in year ~4.3, ~21 % IRR and an NPV "
"of ~4.1M USD over ten years, pre-tax and pre-financing (estimates). Its EBITDA is 0.03M above " "of ~4.1M USD over ten years, pre-tax and pre-financing (estimates). Its EBITDA is 0.03M above "
"Plan A's 2.04M because the owned array carries no PPA power price. Not modelled here: cassette " "Plan A's 2.04M because the owned array carries no PPA power price. Not modelled here: cassette "
@@ -983,7 +983,7 @@ def blocks():
"room.", pick("**More capital up front.** ~127M to 226M THB in one round (~177M at the " "room.", pick("**More capital up front.** ~127M to 226M THB in one round (~177M at the "
"midpoint), against ~57M to 95M THB for the superseded phased entry; more of it is " "midpoint), against ~57M to 95M THB for the superseded phased entry; more of it is "
"committed before the market has validated the price.", "committed before the market has validated the price.",
"**More capital up front.** ~150M to 268M THB in one round (~209M at the midpoint), " "**More capital up front.** ~149M to 266M THB in one round (~208M at the midpoint), "
"against ~57M to 95M THB for the superseded phased entry; more of it is committed " "against ~57M to 95M THB for the superseded phased entry; more of it is committed "
"before the market has validated the price.")], "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, and the "
@@ -995,8 +995,8 @@ def blocks():
"from the first release, tours and the Payap programmes from day one, cassette and CD-R, its " "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 locally serviced utilities; the second Duplex waits for demand and revenue on a "
"reserved floor.", "reserved floor.",
"**~32M THB more that the model does not repay.** The same EBITDA as Plan A with more " "**~31M THB more that the model does not repay.** The same EBITDA as Plan A with more "
"depreciation and a longer payback (~3.7 against ~3.1 years); the adverse case still loses " "depreciation and a longer payback (~3.6 against ~3.1 years); the adverse case still loses "
"money."]), "money."]),
], widths_mm=[85, 85], font_pt=8.5), ], 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 " P("**How the plan answers the risks:** commission the metal path first and measure it before the "
@@ -1049,7 +1049,7 @@ def blocks():
"whose incentives are aligned with the plant's schedule and quality, within the same province.", "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 " "**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( "the floor on equity in the financing mix: at least a quarter of the funding, " + pick(
"~44M THB of Plan A's ~177M", "~52M THB of Plan B's ~209M") + "~44M THB of Plan A's ~177M", "~52M THB of Plan B's ~208M") +
" (arithmetic, before financing costs).", " (arithmetic, before financing costs).",
"**A shareholders' agreement** covering board composition, reserved matters (capital calls and " "**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 " "tranche releases, the growth options such as a second Duplex, CD replication), pre-emption and transfer, information rights, and the founders' roles and "
@@ -1148,12 +1148,12 @@ def blocks():
"the midpoint), and from the low to the high end of every block the plan comes to ~127M to " "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, " "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.", "the metrology quotes and the solar PPA offer decide where in that range it lands.",
"A commitment in principle to **Plan B at ~210M THB** (~209M at the midpoint, the ramp-up " "A commitment in principle to **Plan B at ~210M THB** (~208M at the midpoint, the ramp-up "
"reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, " "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 ~52M " "with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~52M "
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~29M THB more at " "THB). Told plainly: the price carries no contingency (at 15 % it would be ~29M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~150M to " "the midpoint), and from the low to the high end of every block the plan comes to ~149M to "
"268M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, " "266M 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 " "the metrology quotes and the solar and battery purchase quotes decide where in that range it "
"lands.")], "lands.")],
["Decisions", pick( ["Decisions", pick(
@@ -1161,7 +1161,7 @@ def blocks():
"levers, the solar PPA first (it very likely gives up the BOI solar measure); CD replication, " "levers, the solar PPA first (it very likely gives up the BOI solar measure); CD replication, "
"yes or no, before the BOI application is finalised; the steam fuel (electric or biomass); " "yes or no, before the BOI application is finalised; the steam fuel (electric or biomass); "
"the shareholder structure with Ploy Printing and the founders; hedging of the EUR orders.", "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 ~32M " "The equity and debt mix, and how quotes landing above the plan price are funded; the ~31M "
"THB of items Plan A leases or defers (owned solar with the BOI solar measure, the full " "THB of items Plan A leases or defers (owned solar with the BOI solar measure, the full "
"metrology stack, the visitor corridor, cassette and CD-R, the bought crane, Thai boilers and " "metrology stack, the visitor corridor, cassette and CD-R, the bought crane, Thai boilers and "
"compressor), each weighed against its lever; CD replication, yes or no, before the BOI " "compressor), each weighed against its lever; CD replication, yes or no, before the BOI "
+6 -6
View File
@@ -671,7 +671,7 @@ What it says:
The business plan comes in two versions The business plan comes in two versions
([total investment](total-investment.md#two-plans-a-at-180m-thb-and-b-at-210m-thb-october-2026)): ([total investment](total-investment.md#two-plans-a-at-180m-thb-and-b-at-210m-thb-october-2026)):
**Plan A** (~177M THB, the launch plant with six cost levers) and **Plan A** (~177M THB, the launch plant with six cost levers) and
**Plan B** (~209M THB, the same launch plant with everything in), both **Plan B** (~208M THB, the same launch plant with everything in), both
priced without contingency and with the ramp-up reserve. Both run the priced without contingency and with the ramp-up reserve. Both run the
same three presses, so volume, price, direct cost, title services and same three presses, so volume, price, direct cost, title services and
overheads are those of the launch-plant table above; only the overheads are those of the launch-plant table above; only the
@@ -681,12 +681,12 @@ depreciation follows each plan's capital (estimates):
midpoint (4.90M USD) over 12.5, the low end (3.56M USD) over 15. The midpoint (4.90M USD) over 12.5, the low end (3.56M USD) over 15. The
solar PPA adds its power price to the energy line (~0.03M USD a year in solar PPA adds its power price to the energy line (~0.03M USD a year in
the calculator), not shown here. the calculator), not shown here.
- **Plan B**: 7.50M USD over 10 years, 5.87M over 12.5, 4.24M over 15. - **Plan B**: 7.47M USD over 10 years, 5.84M over 12.5, 4.22M over 15.
Its owned solar saves the PPA power bill; cassette and CD-R sales, tours Its owned solar saves the PPA power bill; cassette and CD-R sales, tours
and the Payap programmes it opens from the start are not modelled. and the Payap programmes it opens from the start are not modelled.
- **Payback** is counted on the whole plan price including the ramp-up - **Payback** is counted on the whole plan price including the ramp-up
reserve (Plan A 3.86M / 5.35M / 6.85M USD, Plan B 4.55M / 6.33M / reserve (Plan A 3.86M / 5.35M / 6.85M USD, Plan B 4.52M / 6.30M /
8.11M USD from the low to the high end). 8.07M USD from the low to the high end).
| USD/yr | A adverse | A central | A favourable | B adverse | B central | B favourable | | USD/yr | A adverse | A central | A favourable | B adverse | B central | B favourable |
|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|
@@ -700,7 +700,7 @@ depreciation follows each plan's capital (estimates):
| Depreciation | 0.62M | 0.39M | 0.24M | 0.75M | 0.47M | 0.28M | | Depreciation | 0.62M | 0.39M | 0.24M | 0.75M | 0.47M | 0.28M |
| **Operating profit** | **-0.39M** | **1.34M** | **3.55M** | **-0.52M** | **1.26M** | **3.51M** | | **Operating profit** | **-0.39M** | **1.34M** | **3.55M** | **-0.52M** | **1.26M** | **3.51M** |
| Revenue | 2.28M (~75M THB) | 3.65M (~120M THB) | 5.41M (~179M THB) | 2.28M (~75M THB) | 3.65M (~120M THB) | 5.41M (~179M THB) | | Revenue | 2.28M (~75M THB) | 3.65M (~120M THB) | 5.41M (~179M THB) | 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) | ~1.0 yr | ~35 yr | ~3.7 yr (2.6 to 4.7) | ~1.2 yr | | Payback on the plan price (EBITDA, mature year) | ~30 yr | ~3.1 yr (2.2 to 4.0) | ~1.0 yr | ~35 yr | ~3.6 yr (2.6 to 4.7) | ~1.2 yr |
What it says: What it says:
@@ -712,7 +712,7 @@ What it says:
corner loses more (~1.1 million records needed to cover depreciation). corner loses more (~1.1 million records needed to cover depreciation).
At the central cost and volume the price that covers its depreciation At the central cost and volume the price that covers its depreciation
is ~2.8 USD (~91 THB) a record. is ~2.8 USD (~91 THB) a record.
- **On these numbers Plan B's extra ~32M THB earns nothing**: the same - **On these numbers Plan B's extra ~31M THB earns nothing**: the same
EBITDA, more depreciation and a longer payback. Its case rests on what EBITDA, more depreciation and a longer payback. Its case rests on what
the table leaves out: the BOI solar measure on the owned array, the the table leaves out: the BOI solar measure on the owned array, the
PPA power bill it avoids, full stamper metrology from the first PPA power bill it avoids, full stamper metrology from the first
+11 -11
View File
@@ -51,7 +51,7 @@ on two shifts (estimate: the [scale](../scale.md) basis gives ~0.71 to
| Cutting room: Sillitoe SDMS, spare cutterhead and support, mastering console and chain, monitoring, room build-out | 200k – 350k | 6.6M – 11.6M | SDMS list price USD 125k (ex tax and shipping); the rest estimate | | Cutting room: Sillitoe SDMS, spare cutterhead and support, mastering console and chain, monitoring, room build-out | 200k – 350k | 6.6M – 11.6M | SDMS list price USD 125k (ex tax and shipping); the rest estimate |
| Metrology and QC stack (XRF, laser confocal, wide-area profiler, inline vision on three presses, audio station) | 350k – 810k | 11.6M – 26.7M | estimate, phaseable ([quality automation](../quality-automation.md)) | | Metrology and QC stack (XRF, laser confocal, wide-area profiler, inline vision on three presses, audio station) | 350k – 810k | 11.6M – 26.7M | estimate, phaseable ([quality automation](../quality-automation.md)) |
| PVC lab, day-one tier | 55k – 150k | 1.8M – 5.0M | estimate, [quality automation](../quality-automation.md) | | PVC lab, day-one tier | 55k – 150k | 1.8M – 5.0M | estimate, [quality automation](../quality-automation.md) |
| Utilities, solar, battery, HVAC, clean zones, racking | 863k – 1,477k | 28.5M – 48.7M | [utilities CSV](utilities-investment.csv) baseline re-sized for three presses: chiller bank two modules instead of three | | Utilities, solar, battery, HVAC, clean zones, racking | 835k – 1,439k | 27.6M – 47.5M | [utilities CSV](utilities-investment.csv) baseline re-sized for three presses: chiller bank two modules instead of three; solar at 20 to 26 THB/W installed and the battery installed (Thai market prices checked October 2026, sources in the CSV) |
| Building ~1,500 m² plus civil and site works | 650k – 1,100k | 21.4M – 36.3M | estimate at 12,000 – 20,000 THB/m² plus ~20 % site works; soil is the main variable | | Building ~1,500 m² plus civil and site works | 650k – 1,100k | 21.4M – 36.3M | estimate at 12,000 – 20,000 THB/m² plus ~20 % site works; soil is the main variable |
| Overhead crane, runway, frame premium, machine door | 97k – 227k | 3.2M – 7.5M | estimate, [crane, workshop and tours](../crane-workshop-tours.md) | | Overhead crane, runway, frame premium, machine door | 97k – 227k | 3.2M – 7.5M | estimate, [crane, workshop and tours](../crane-workshop-tours.md) |
| Maintenance workshop and machine bay fit-out | 30k – 76k | 1.0M – 2.5M | estimate, same | | Maintenance workshop and machine bay fit-out | 30k – 76k | 1.0M – 2.5M | estimate, same |
@@ -61,9 +61,9 @@ on two shifts (estimate: the [scale](../scale.md) basis gives ~0.71 to
| Cassette duplication and CD-R duplication | 55k – 190k | 1.8M – 6.3M | estimate, business plan sections 4.8 and 4.9 | | Cassette duplication and CD-R duplication | 55k – 190k | 1.8M – 6.3M | estimate, business plan sections 4.8 and 4.9 |
| Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its quoted 5 days) | 150k – 300k | 5.0M – 9.9M | estimate | | Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its quoted 5 days) | 150k – 300k | 5.0M – 9.9M | estimate |
| Working capital, PVC stock, spares, lease deposit, first-year rent | 135k – 290k | 4.5M – 9.6M | estimate; land is leased, so no land purchase | | Working capital, PVC stock, spares, lease deposit, first-year rent | 135k – 290k | 4.5M – 9.6M | estimate; land is leased, so no land purchase |
| Subtotal | ~4.24M – 7.50M | ~140M – 248M | midpoint ~5.87M USD, ~194M THB | | Subtotal | ~4.22M – 7.47M | ~139M – 246M | midpoint ~5.84M USD, ~193M THB |
| Contingency 15 % | ~0.64M – 1.13M | ~21M – 37M | | | Contingency 15 % | ~0.63M – 1.12M | ~21M – 37M | |
| **Total, launch plant** | **~4.9M – 8.6M USD** | **~161M – 285M THB** | midpoint ~6.76M USD, ~223M THB | | **Total, launch plant** | **~4.85M – 8.6M USD** | **~160M – 283M THB** | midpoint ~6.72M USD, ~222M THB |
Not in the total: a **reserve for the ramp-up** (staff hired before first Not in the total: a **reserve for the ramp-up** (staff hired before first
revenue, overheads until volume covers them; ~10M to 20M THB, estimate), revenue, overheads until volume covers them; ~10M to 20M THB, estimate),
@@ -153,8 +153,8 @@ reference plus 20 % in both. Midpoints, estimates:
| Plan A: launch plant with six levers | Saves | Subtotal after it | | Plan A: launch plant with six levers | Saves | Subtotal after it |
|---|---|---| |---|---|---|
| Launch plant, every block, no contingency | | ~193.8M THB (~5.87M USD) | | Launch plant, every block, no contingency | | ~192.8M THB (~5.84M USD) |
| Rooftop solar and battery through a solar PPA (the installer owns and finances the array, the plant buys the power) | ~10.7M | ~183.1M | | Rooftop solar and battery through a solar PPA (the installer owns and finances the array, the plant buys the power) | ~9.7M | ~183.1M |
| 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 | | 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 |
| Visitor corridor built later; no public tours at first | ~3.6M | ~170.8M | | Visitor corridor built later; no public tours at first | ~3.6M | ~170.8M |
| Cassette and CD-R duplication later | ~4.0M | ~166.8M | | Cassette and CD-R duplication later | ~4.0M | ~166.8M |
@@ -165,12 +165,12 @@ reference plus 20 % in both. Midpoints, estimates:
| Plan B: the launch plant, everything in | USD | THB | | Plan B: the launch plant, everything in | USD | THB |
|---|---|---| |---|---|---|
| Launch plant, every block, no contingency (the six lever items included: owned solar and battery ~10.7M, full metrology ~8.8M, visitor corridor ~3.6M, cassette and CD-R ~4.0M, bought crane ~3.2M, Thai boilers and compressor ~1.9M, together ~32M THB at the midpoint) | 4.24M – 7.50M | ~140M – 248M, **~193.8M (~5.87M USD)** at the midpoint | | Launch plant, every block, no contingency (the six lever items included: owned solar and battery ~9.7M, full metrology ~8.8M, visitor corridor ~3.6M, cassette and CD-R ~4.0M, bought crane ~3.2M, Thai boilers and compressor ~1.9M, together ~31M THB at the midpoint) | 4.22M – 7.47M | ~139M – 246M, **~192.8M (~5.84M USD)** at the midpoint |
| Ramp-up reserve | | +10M to 20M | | Ramp-up reserve | | +10M to 20M |
| **Plan B** | | **~209M THB (~6.33M USD): ~210M**, ~150M to 268M from the low to the high end of every block | | **Plan B** | | **~208M THB (~6.30M USD): ~210M**, ~149M to 266M from the low to the high end of every block |
Plan B costs ~32M THB (~18 %) more than Plan A and, at the midpoint, Plan B costs ~31M THB (~18 %) more than Plan A and, at the midpoint,
stays within the investor's 180M THB plus 20 % (its high end, ~268M, does stays within the investor's 180M THB plus 20 % (its high end, ~266M, does
not). It keeps what Plan A leases or defers: not). It keeps what Plan A leases or defers:
owned solar and battery (and with them the BOI solar measure), the full owned solar and battery (and with them the BOI solar measure), the full
metrology stack from the first release, the visitor corridor and tours metrology stack from the first release, the visitor corridor and tours
@@ -192,7 +192,7 @@ both as presets.
and Thai duty and import VAT (the blocks assume BOI promotion). and Thai duty and import VAT (the blocks assume BOI promotion).
**What decides between them:** not demand, since both make the same **What decides between them:** not demand, since both make the same
records, but whether the investor funds ~32M THB more at launch for what records, but whether the investor funds ~31M THB more at launch for what
Plan A leases or buys from revenue. On the modelled numbers Plan B's Plan A leases or buys from revenue. On the modelled numbers Plan B's
extra earns nothing (same EBITDA, more depreciation, a longer payback); extra earns nothing (same EBITDA, more depreciation, a longer payback);
its case rests on what the operating table leaves out: the BOI solar its case rests on what the operating table leaves out: the BOI solar
+3 -3
View File
@@ -13,6 +13,6 @@ water,Galvanics ZLD evaporator,"Small MVR or low-temp vacuum evaporator for plat
storage,Pallet racking and shelving,"100-200 pallet positions selective/heavy-duty (beams sized 1000-1500 kg/pallet, records are dense) + archive and finished-goods shelving, installed","Jenbunjerd; LPI Rack Range (Thailand), Bangkok/Samut Prakan, racking and office mobile shelving; local fabricators (Sahawatthanakit, UPR, SD Shelf); SSI Schaefer (premium)",800000,1500000,published list prices + engineering estimate,SSI Schaefer premium tier ~1.5-3M for same scope; ~1000-2000 THB per pallet position at local tier storage,Pallet racking and shelving,"100-200 pallet positions selective/heavy-duty (beams sized 1000-1500 kg/pallet, records are dense) + archive and finished-goods shelving, installed","Jenbunjerd; LPI Rack Range (Thailand), Bangkok/Samut Prakan, racking and office mobile shelving; local fabricators (Sahawatthanakit, UPR, SD Shelf); SSI Schaefer (premium)",800000,1500000,published list prices + engineering estimate,SSI Schaefer premium tier ~1.5-3M for same scope; ~1000-2000 THB per pallet position at local tier
hvac,Whole-factory HVAC,"~1500 m2 at 20-26 C, 35-60% RH, ePM1/F7-F9 filtration sized for burning-season PM2.5, ducting and controls","Daikin Thailand; Trane; Mitsubishi Electric; Carrier; filtration: Camfil Thailand, AAF",7500000,15000000,engineering estimate at 5000-10000 THB/m2,"RH low end of 35% is aggressive for tropics and drives desiccant cost; if 45-60% RH acceptable, cost drops materially" hvac,Whole-factory HVAC,"~1500 m2 at 20-26 C, 35-60% RH, ePM1/F7-F9 filtration sized for burning-season PM2.5, ducting and controls","Daikin Thailand; Trane; Mitsubishi Electric; Carrier; filtration: Camfil Thailand, AAF",7500000,15000000,engineering estimate at 5000-10000 THB/m2,"RH low end of 35% is aggressive for tropics and drives desiccant cost; if 45-60% RH acceptable, cost drops materially"
hvac,Clean-room-grade zone adder,"Cutting room + galvanics clean room, ~2 x 60 m2, ISO 7/8 with HEPA terminals, positive pressure, airlocks",Same HVAC vendors + clean-room contractors; Camfil HEPA,1200000,3400000,engineering estimate at 10000-28000 THB/m2 adder,Applied only to the two tight zones hvac,Clean-room-grade zone adder,"Cutting room + galvanics clean room, ~2 x 60 m2, ISO 7/8 with HEPA terminals, positive pressure, airlocks",Same HVAC vendors + clean-room contractors; Camfil HEPA,1200000,3400000,engineering estimate at 10000-28000 THB/m2 adder,Applied only to the two tight zones
solar,PV rooftop EPC (illustrative 300 kWp),"Turnkey C&I rooftop EPC incl. Deye hybrid inverters, at 25000-35000 THB/kWp",Solar Nicolo (Deye tier-1 distributor); Banpu NEXT; SCG Cleanergy; Sermsang; local Chiang Mai installers,7500000,10500000,market rate per kWp; size illustrative,"Final kWp open until site selection; PEA TOU 3.2.2 plus Ft (Sep-Dec 2026): self-consumed PV worth ~3.7 THB/kWh, ~4.5-7 yr payback (sustainability.md, grid tariff)" solar,PV rooftop EPC (illustrative 300 kWp),"Turnkey C&I rooftop EPC incl. Deye hybrid inverters, at 20000-26000 THB/kWp",Solar Nicolo (Deye tier-1 distributor); Banpu NEXT; SCG Cleanergy; Sermsang; CapSolar; local Chiang Mai installers,6000000,7800000,"market rate per kWp (October 2026 check): DEDE Thailand PV Status (Mahidol survey) 22-25 THB/W for 10 kW-1 MW C&I systems in 2023; CapSolar 2026 20-25 THB/W under 1 MWp (20-23 at 500 kWp); Saimai Solar 2026 list 5.4M THB for 300 kW (18 THB/W); top of range covers Deye SUN-50K-SG01HP3 hybrid inverters (160,500 THB each at Supsaringkan, six units); size illustrative","Final kWp open until site selection; canopy PV over parking needs its own steel structure (not priced); PEA TOU 3.2.2 plus Ft (Sep-Dec 2026): self-consumed PV worth ~3.7 THB/kWh, ~3.8-5.4 yr payback (sustainability.md, grid tariff)"
solar,Battery stack 271 kWh (Gobel),"GP-SRA-HV314 HV LiFePO4 rack, 15 x 18 kWh packs, direct from Shenzhen, 50-60 day lead",Gobel Power (no Thai distributor; integration by solar EPC),1400000,2030000,vendor listed price USD 39900-58000 at ~35 THB/USD,Confirm Deye BMS protocol compatibility and that the EPC warrants a mixed-vendor DC bus; certs (UN38.3/IEC 62619/CE) to be requested solar,Battery stack 271 kWh (Gobel) installed,"GP-SRA-HV314 HV LiFePO4 rack, 15 x 18 kWh packs, direct from Shenzhen, 50-60 day lead; plus enclosure, fire detection and suppression, controls and installation",Gobel Power (no Thai distributor; integration by solar EPC),2000000,3500000,"battery: vendor listed price USD 39900-58000 at ~35 THB/USD = 1.40-2.03M THB, in line with DEDE's 5000-7000 THB/kWh for LiFePO4 (Mahidol survey); installed: estimate below CapSolar's 12000-15000 THB/kWh for a fully installed factory BESS (2026), because the Deye hybrid inverters in the PV row do the power conversion",Confirm Deye BMS protocol compatibility and that the EPC warrants a mixed-vendor DC bus; certs (UN38.3/IEC 62619/CE) to be requested
total,BASELINE TOTAL,Electric steam bank (2 modules) + oil-injected air + chiller bank (2 modules) + softener + loop treatment + local racking + HVAC + clean zones + 300 kWp solar + 271 kWh BESS,,28470000,48730000,sum of baseline rows,"Launch plant, one Duplex system and one Classic (October 2026; was 30.07M-51.33M THB for five presses, 23.98M-41.63M for one Duplex); ~750k-1280k EUR at 38 THB/EUR; excludes options rows and the galvanics water rows (ZLD, DI), which total-investment.md carries with galvanics; all figures budgetary +/- 30%, get RFQs before BOI" total,BASELINE TOTAL,Electric steam bank (2 modules) + oil-injected air + chiller bank (2 modules) + softener + loop treatment + local racking + HVAC + clean zones + 300 kWp solar + 271 kWh BESS,,27570000,47500000,sum of baseline rows,"Launch plant, one Duplex system and one Classic (October 2026; solar and battery re-priced from Thai market data 17 Oct 2026, was 28.47M-48.73M; was 30.07M-51.33M THB for five presses, 23.98M-41.63M for one Duplex); ~750k-1280k EUR at 38 THB/EUR; excludes options rows and the galvanics water rows (ZLD, DI), which total-investment.md carries with galvanics; all figures budgetary +/- 30%, get RFQs before BOI"
1 category item spec_summary candidate_thai_suppliers cost_low_thb cost_high_thb cost_basis notes
13 storage Pallet racking and shelving 100-200 pallet positions selective/heavy-duty (beams sized 1000-1500 kg/pallet, records are dense) + archive and finished-goods shelving, installed Jenbunjerd; LPI Rack Range (Thailand), Bangkok/Samut Prakan, racking and office mobile shelving; local fabricators (Sahawatthanakit, UPR, SD Shelf); SSI Schaefer (premium) 800000 1500000 published list prices + engineering estimate SSI Schaefer premium tier ~1.5-3M for same scope; ~1000-2000 THB per pallet position at local tier
14 hvac Whole-factory HVAC ~1500 m2 at 20-26 C, 35-60% RH, ePM1/F7-F9 filtration sized for burning-season PM2.5, ducting and controls Daikin Thailand; Trane; Mitsubishi Electric; Carrier; filtration: Camfil Thailand, AAF 7500000 15000000 engineering estimate at 5000-10000 THB/m2 RH low end of 35% is aggressive for tropics and drives desiccant cost; if 45-60% RH acceptable, cost drops materially
15 hvac Clean-room-grade zone adder Cutting room + galvanics clean room, ~2 x 60 m2, ISO 7/8 with HEPA terminals, positive pressure, airlocks Same HVAC vendors + clean-room contractors; Camfil HEPA 1200000 3400000 engineering estimate at 10000-28000 THB/m2 adder Applied only to the two tight zones
16 solar PV rooftop EPC (illustrative 300 kWp) Turnkey C&I rooftop EPC incl. Deye hybrid inverters, at 25000-35000 THB/kWp Turnkey C&I rooftop EPC incl. Deye hybrid inverters, at 20000-26000 THB/kWp Solar Nicolo (Deye tier-1 distributor); Banpu NEXT; SCG Cleanergy; Sermsang; local Chiang Mai installers Solar Nicolo (Deye tier-1 distributor); Banpu NEXT; SCG Cleanergy; Sermsang; CapSolar; local Chiang Mai installers 7500000 6000000 10500000 7800000 market rate per kWp; size illustrative market rate per kWp (October 2026 check): DEDE Thailand PV Status (Mahidol survey) 22-25 THB/W for 10 kW-1 MW C&I systems in 2023; CapSolar 2026 20-25 THB/W under 1 MWp (20-23 at 500 kWp); Saimai Solar 2026 list 5.4M THB for 300 kW (18 THB/W); top of range covers Deye SUN-50K-SG01HP3 hybrid inverters (160,500 THB each at Supsaringkan, six units); size illustrative Final kWp open until site selection; PEA TOU 3.2.2 plus Ft (Sep-Dec 2026): self-consumed PV worth ~3.7 THB/kWh, ~4.5-7 yr payback (sustainability.md, grid tariff) Final kWp open until site selection; canopy PV over parking needs its own steel structure (not priced); PEA TOU 3.2.2 plus Ft (Sep-Dec 2026): self-consumed PV worth ~3.7 THB/kWh, ~3.8-5.4 yr payback (sustainability.md, grid tariff)
17 solar Battery stack 271 kWh (Gobel) Battery stack 271 kWh (Gobel) installed GP-SRA-HV314 HV LiFePO4 rack, 15 x 18 kWh packs, direct from Shenzhen, 50-60 day lead GP-SRA-HV314 HV LiFePO4 rack, 15 x 18 kWh packs, direct from Shenzhen, 50-60 day lead; plus enclosure, fire detection and suppression, controls and installation Gobel Power (no Thai distributor; integration by solar EPC) 1400000 2000000 2030000 3500000 vendor listed price USD 39900-58000 at ~35 THB/USD battery: vendor listed price USD 39900-58000 at ~35 THB/USD = 1.40-2.03M THB, in line with DEDE's 5000-7000 THB/kWh for LiFePO4 (Mahidol survey); installed: estimate below CapSolar's 12000-15000 THB/kWh for a fully installed factory BESS (2026), because the Deye hybrid inverters in the PV row do the power conversion Confirm Deye BMS protocol compatibility and that the EPC warrants a mixed-vendor DC bus; certs (UN38.3/IEC 62619/CE) to be requested
18 total BASELINE TOTAL Electric steam bank (2 modules) + oil-injected air + chiller bank (2 modules) + softener + loop treatment + local racking + HVAC + clean zones + 300 kWp solar + 271 kWh BESS 28470000 27570000 48730000 47500000 sum of baseline rows Launch plant, one Duplex system and one Classic (October 2026; was 30.07M-51.33M THB for five presses, 23.98M-41.63M for one Duplex); ~750k-1280k EUR at 38 THB/EUR; excludes options rows and the galvanics water rows (ZLD, DI), which total-investment.md carries with galvanics; all figures budgetary +/- 30%, get RFQs before BOI Launch plant, one Duplex system and one Classic (October 2026; solar and battery re-priced from Thai market data 17 Oct 2026, was 28.47M-48.73M; was 30.07M-51.33M THB for five presses, 23.98M-41.63M for one Duplex); ~750k-1280k EUR at 38 THB/EUR; excludes options rows and the galvanics water rows (ZLD, DI), which total-investment.md carries with galvanics; all figures budgetary +/- 30%, get RFQs before BOI
+4 -4
View File
@@ -3028,9 +3028,9 @@ rng("Investment blocks (USD unless THB)", [
["airT", "Compressed air, Thai supplier", 350000, 600000, "THB", "est", "Utilities CSV: screw compressor skid, dryer, receiver"], ["airT", "Compressed air, Thai supplier", 350000, 600000, "THB", "est", "Utilities CSV: screw compressor skid, dryer, receiver"],
["airC", "Compressed air, Chinese brand through its Thai office", 150000, 300000, "THB", "est", "china-utilities.md: PM VSD screw set 0.15 to 0.3M THB installed"], ["airC", "Compressed air, Chinese brand through its Thai office", 150000, 300000, "THB", "est", "china-utilities.md: PM VSD screw set 0.15 to 0.3M THB installed"],
["clR", "Clean-room adder (galvanics and cutting room)", 1200000, 3400000, "THB", "est", "Utilities CSV, ~2 × 60 m² ISO 7/8; half with only one of the two rooms (estimate)"], ["clR", "Clean-room adder (galvanics and cutting room)", 1200000, 3400000, "THB", "est", "Utilities CSV, ~2 × 60 m² ISO 7/8; half with only one of the two rooms (estimate)"],
["uRest", "Rest of the utilities baseline: softener, loop treatment, racking, whole-factory HVAC", 8620000, 17300000, "THB", "est", "Utilities CSV baseline 28.47 to 48.73M THB less boilers, chillers, air, clean room, PV and battery"], ["uRest", "Rest of the utilities baseline: softener, loop treatment, racking, whole-factory HVAC", 8620000, 17300000, "THB", "est", "Utilities CSV baseline 27.57 to 47.50M THB less boilers, chillers, air, clean room, PV and battery"],
["pv", "Rooftop PV EPC", 7500000, 10500000, "THB", "est", "Utilities CSV: illustrative 300 kWp at 25,000 to 35,000 THB/kWp; final kWp open (scale.md 247 kWp for the yield)"], ["pv", "Rooftop PV EPC", 6000000, 7800000, "THB", "est", "Utilities CSV: illustrative 300 kWp at 20 to 26 THB/W installed (DEDE Thailand PV status: factories 10 kW to 1 MW 22 to 25 THB/W, 2023; installers 18 to 25 in 2026) incl. Deye hybrid inverters; final kWp open (scale.md 247 kWp for the yield)"],
["bat", "Battery 271 kWh (Gobel)", 1400000, 2030000, "THB", "vendor", "Utilities CSV: vendor listed price USD 39,900 to 58,000"], ["bat", "Battery 271 kWh (Gobel), installed", 2000000, 3500000, "THB", "est", "Utilities CSV: Gobel list price USD 39,900 to 58,000 (battery only, matches DEDE's 5,000 to 7,000 THB/kWh for LiFePO4) plus enclosure, fire protection, controls and installation, below the 12,000 to 15,000 THB/kWh of a fully installed factory BESS because the hybrid inverters do the power conversion (estimate)"],
["bld", "Building ~1,500 m² plus civil and site works", 650000, 1100000, "USD", "est", "total-investment.md: 12,000 to 20,000 THB/m² plus ~20 % site works; soil is the main variable"], ["bld", "Building ~1,500 m² plus civil and site works", 650000, 1100000, "USD", "est", "total-investment.md: 12,000 to 20,000 THB/m² plus ~20 % site works; soil is the main variable"],
["ph2", "Phase 2 building, when the press floor outgrows the press hall", 750000, 1250000, "USD", "est", "Business plan draft 0.1: ~750k to 1,250k on 1,710 m², estimate"], ["ph2", "Phase 2 building, when the press floor outgrows the press hall", 750000, 1250000, "USD", "est", "Business plan draft 0.1: ~750k to 1,250k on 1,710 m², estimate"],
["crn", "Overhead crane, runway, frame premium, machine door", 97000, 227000, "USD", "est", "crane-workshop-tours.md via total-investment.md"], ["crn", "Overhead crane, runway, frame premium, machine door", 97000, 227000, "USD", "est", "crane-workshop-tours.md via total-investment.md"],
@@ -3710,7 +3710,7 @@ function renderInvest(e, r) {
H.push(`<tr class="grp"><td colspan="5">Totals</td></tr>`); H.push(`<tr class="grp"><td colspan="5">Totals</td></tr>`);
TR("Subtotal", cx.sub, "", true); TR("Subtotal", cx.sub, "", true);
TR(cx.ctgIn ? `Contingency ${f1(A.contPct)} %` : `Contingency ${f1(A.contPct)} % (not in the total)`, cx.ctg, cx.ctgIn ? "total-investment.md" : "shown separately, as in Plan A and Plan B"); TR(cx.ctgIn ? `Contingency ${f1(A.contPct)} %` : `Contingency ${f1(A.contPct)} % (not in the total)`, cx.ctg, cx.ctgIn ? "total-investment.md" : "shown separately, as in Plan A and Plan B");
TR("Total investment", cx.tot, "for reference, total-investment.md: the launch plant ~161M to 285M THB with contingency (midpoint ~223M); Plan A ~162M and Plan B ~194M at the midpoint without it, plus the ramp-up reserve", true); TR("Total investment", cx.tot, "for reference, total-investment.md: the launch plant ~160M to 283M THB with contingency (midpoint ~222M); Plan A ~162M and Plan B ~193M at the midpoint without it, plus the ramp-up reserve", true);
if (!cx.boiOn) { if (!cx.boiOn) {
TR(`Import duty without BOI, ${f1(A.dutyMach)} %`, cx.duty, `on ${money(cx.imp.lo)} to ${money(cx.imp.hi)} of imported machinery; import VAT ${money(cx.vat.mid)} at the midpoint, reclaimable`); TR(`Import duty without BOI, ${f1(A.dutyMach)} %`, cx.duty, `on ${money(cx.imp.lo)} to ${money(cx.imp.hi)} of imported machinery; import VAT ${money(cx.vat.mid)} at the midpoint, reclaimable`);
TR("Total with import duty", cx.all, "", true); TR("Total with import duty", cx.all, "", true);
Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 KiB

After

Width:  |  Height:  |  Size: 491 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 866 KiB

After

Width:  |  Height:  |  Size: 866 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

After

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 KiB

After

Width:  |  Height:  |  Size: 487 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 569 KiB

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 KiB

After

Width:  |  Height:  |  Size: 884 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

After

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 KiB

After

Width:  |  Height:  |  Size: 294 KiB

+1 -1
View File
@@ -173,7 +173,7 @@ Nothing in Phases 2 to 5 starts before its gate clears: no machinery order
before the BOI certificate, no big-block spending before the market before the BOI certificate, no big-block spending before the market
validates the price, no coppice fuel planning before the land title check. validates the price, no coppice fuel planning before the land title check.
Since October 2026 the plant launches with everything in one capital Since October 2026 the plant launches with everything in one capital
round (~161M to 285M THB with contingency; for the investor Plan A at round (~160M to 283M THB with contingency; for the investor Plan A at
~180M and Plan B at ~210M THB without it, in ~180M and Plan B at ~210M THB without it, in
[total investment](finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-210m-thb-october-2026)); [total investment](finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-210m-thb-october-2026));
the gates still come before the round is spent, and the growth options the gates still come before the round is spent, and the growth options
+5 -2
View File
@@ -251,8 +251,11 @@ not a cost one.
**PV, not solar thermal.** Self-consumed PV is worth **~3.7 THB/kWh** **PV, not solar thermal.** Self-consumed PV is worth **~3.7 THB/kWh**
(weekday daytime at the peak rate, weekends and early mornings at (weekday daytime at the peak rate, weekends and early mornings at
off-peak, Ft included), so the 247 kWp roof saves ~1.2M to 1.3M THB a year off-peak, Ft included), so the 247 kWp roof saves ~1.2M to 1.3M THB a year
and pays back in **~4.5 to 7 years** at 25,000 to 35,000 THB/kWp and pays back in **~3.8 to 5.4 years** at 20,000 to 26,000 THB/kWp
(estimate). It does not lower the demand charge, because the peak window installed (estimate; Thai market prices checked October 2026 in the
[utilities CSV](finance/utilities-investment.csv): DEDE's PV status report
gives 22 to 25 THB/W for factory systems of 10 kW to 1 MW in 2023,
installers quote 18 to 25 THB/W in 2026). It does not lower the demand charge, because the peak window
runs to 22:00, long after sunset. Solar thermal loses on every count here: runs to 22:00, long after sunset. Solar thermal loses on every count here:
flat-plate and evacuated-tube collectors reach only the 60 to 90 °C that flat-plate and evacuated-tube collectors reach only the 60 to 90 °C that
the feedwater heat pump already recovers from the press cooling return; the feedwater heat pump already recovers from the press cooling return;