Solar and battery re-priced from Thai market data (October 2026)
Deploy test site / deploy (push) Successful in 46s
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:
1 parent
3f33babdaa
commit
ab303618d8
25 files changed
+116
-111
No files matched your search
@@ -33,7 +33,7 @@ def blocks():
|
||||
"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 "
|
||||
"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. ")
|
||||
+ "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 "
|
||||
@@ -111,7 +111,7 @@ def blocks():
|
||||
"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).",
|
||||
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 "
|
||||
"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 "
|
||||
@@ -120,8 +120,8 @@ def blocks():
|
||||
"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 "
|
||||
"stay in.",
|
||||
"**Everything in, none of the cost levers: ~210M THB**, ~194M THB at the midpoint before the "
|
||||
"ramp-up reserve and ~32M THB more than Plan A (estimates, section 8): owned rooftop solar and "
|
||||
"**Everything in, none of the cost levers: ~210M THB**, ~193M THB at the midpoint before the "
|
||||
"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, "
|
||||
"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 "
|
||||
@@ -190,10 +190,10 @@ def blocks():
|
||||
"(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 "
|
||||
"(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 "
|
||||
"5.87M) at the midpoint with everything in, plus a ramp-up reserve of ~THB 10M to 20M (staff "
|
||||
"**~THB 208M (~USD 6.30M), rounded to ~210M THB**: the plan investment, ~THB 192.8M (~USD "
|
||||
"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 "
|
||||
"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 "
|
||||
"building")],
|
||||
["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 "
|
||||
"the price); ~1.0 year in the favourable case, ~30 years in the adverse case (EBITDA, mature "
|
||||
"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 "
|
||||
"year, ramp-up reserve included; estimates)")],
|
||||
["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 "
|
||||
"(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)",
|
||||
"~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 "
|
||||
"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. ")
|
||||
+ "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 "
|
||||
"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 "
|
||||
"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 "
|
||||
@@ -262,19 +262,19 @@ def blocks():
|
||||
"Section 8 sets the two side by side."),
|
||||
T(["", "Plan A", "Plan B"], [
|
||||
["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"],
|
||||
["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 "
|
||||
"not modelled"],
|
||||
["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",
|
||||
"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 "
|
||||
"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",
|
||||
"~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; "
|
||||
"Thai-supplied boilers and compressor"],
|
||||
], 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 "
|
||||
"(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.",
|
||||
"**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 "
|
||||
"midpoint, released in tranches against milestones: BOI certificate and lease signed, "
|
||||
"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 "
|
||||
"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."),
|
||||
"**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 "
|
||||
"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, "
|
||||
"electric or biomass.",
|
||||
"**Co-investment:** Ploy Printing, the Chiang Mai print and packaging house that will produce "
|
||||
|
||||
@@ -367,13 +367,14 @@ def blocks():
|
||||
"Taken through a solar PPA (below): the plant pays the PPA price for this "
|
||||
"power instead of buying the array, so its saving is the gap between that "
|
||||
"price and the ~3.7 THB/kWh of grid power it displaces",
|
||||
"Saves ~1.2M to 1.3M THB a year and pays back in ~4.5 to 7 years at 25,000 "
|
||||
"to 35,000 THB/kWp (estimates)")],
|
||||
"Saves ~1.2M to 1.3M THB a year and pays back in ~3.8 to 5.4 years at 20,000 "
|
||||
"to 26,000 THB/kWp installed (estimates)")],
|
||||
["Canopies and the second building", "~40 kWp on the parking canopies (construction RFQ; ~54 "
|
||||
"kWp if fully covered). A phase 2 building's roof adds "
|
||||
"~251 kWp, ~498 kWp across both roofs"],
|
||||
["Battery", "271 kWh Gobel Power LiFePO4 rack (15 stacked 18 kWh packs, 8,000+ cycles), USD "
|
||||
"39,900 to 58,000 listed, 50 to 60 day lead. Roughly an hour of the chiller bank's "
|
||||
"39,900 to 58,000 listed (battery only; ~2.0M to 3.5M THB installed with enclosure, fire protection and "
|
||||
"controls, estimate), 50 to 60 day lead. Roughly an hour of the chiller bank's "
|
||||
"peak draw: ride-through, not off-grid autonomy"],
|
||||
["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), Thai distribution via Solar "
|
||||
"Nicolo; Deye is a supported protocol on the Gobel battery management"],
|
||||
@@ -387,17 +388,18 @@ def blocks():
|
||||
"terms", "")],
|
||||
pick(["Solar PPA (this plan)", "An installer owns and finances the PV and the battery, and the "
|
||||
"plant buys the power at a price still to quote (the calculator carries 3.0 THB/kWh, an "
|
||||
"estimate, ~0.03M USD a year on the energy line). That keeps the PV EPC (USD 227k to "
|
||||
"318k) and the battery (USD 42k to 62k) out of the capital round: ~10.7M THB less at the "
|
||||
"estimate, ~0.03M USD a year on the energy line). That keeps the PV EPC (USD 182k to "
|
||||
"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 "
|
||||
"the plant's own solar investment, so its tax value very likely goes with the array (to "
|
||||
"confirm with the BOI consultant). The PPA offer is asked against the specification "
|
||||
"above"],
|
||||
["Owned (this plan)", "The plant buys the array and the battery: rooftop PV EPC USD 227k "
|
||||
"to 318k (7.5M to 10.5M THB) and the battery USD 42k to 62k (1.4M to 2.0M THB), "
|
||||
["Owned (this plan)", "The plant buys the array and the battery: rooftop PV EPC USD 182k "
|
||||
"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 "
|
||||
"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"]),
|
||||
]),
|
||||
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 "
|
||||
"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)",
|
||||
"~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 "
|
||||
"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 "
|
||||
|
||||
@@ -62,7 +62,7 @@ def _block_rows():
|
||||
"racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"],
|
||||
]
|
||||
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"])
|
||||
rows += [
|
||||
["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 += [
|
||||
pick(["**Subtotal, plan investment**", "**~3.56M to 6.25M**", "**~117.4M to 206.1M**",
|
||||
"**Midpoint ~161.7M THB (~4.90M USD)**"],
|
||||
["**Subtotal, plan investment**", "**~4.24M to 7.50M**", "**~140.0M to 247.6M**",
|
||||
"**Midpoint ~193.8M THB (~5.87M USD)**"]),
|
||||
["**Subtotal, plan investment**", "**~4.22M to 7.47M**", "**~139.1M to 246.4M**",
|
||||
"**Midpoint ~192.8M THB (~5.84M USD)**"]),
|
||||
["Ramp-up reserve: staff hired before first revenue, overheads until volume covers them",
|
||||
"~0.30M to 0.61M", "10M to 20M", "Estimate; cash the investor puts in, so it is in the plan price"],
|
||||
pick(["**Plan A price**", "**~3.86M to 6.85M**", "**~127M to 226M**",
|
||||
"**Midpoint ~177M THB (~5.35M USD): ~180M THB**"],
|
||||
["**Plan B price**", "**~4.55M to 8.11M**", "**~150M to 268M**",
|
||||
"**Midpoint ~209M THB (~6.33M USD): ~210M THB**"]),
|
||||
["**Plan B price**", "**~4.52M to 8.07M**", "**~149M to 266M**",
|
||||
"**Midpoint ~208M THB (~6.30M USD): ~210M THB**"]),
|
||||
["Contingency: not in the plan price", "", "", pick(
|
||||
"For information: at 15 %, ~24M THB at the midpoint",
|
||||
"For information: at 15 %, ~29M THB at the midpoint")],
|
||||
@@ -115,9 +115,9 @@ def _block_rows():
|
||||
def _levers_table():
|
||||
"""Plan A: the six levers from the launch plant with every block, midpoints, no contingency."""
|
||||
return T(["Step", "Saves", "Subtotal after it", "What it gives up"], [
|
||||
["Launch plant, every block, no contingency", "", "~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 "
|
||||
"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); "
|
||||
"adds the PPA power price to the energy bill, ~0.03M USD a "
|
||||
"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."""
|
||||
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 "
|
||||
"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",
|
||||
"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 "
|
||||
@@ -159,14 +159,14 @@ def _keeps_table():
|
||||
"the installations", "~3.2M"],
|
||||
["Boilers and compressor from Thai suppliers", "Local service; no import route for the boilers",
|
||||
"~1.9M"],
|
||||
["**Together**", "", "**~32M (193.8M minus Plan A's 161.7M)**"],
|
||||
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~193.8M (~5.87M USD)"],
|
||||
["**Together**", "", "**~31M (192.8M minus Plan A's 161.7M)**"],
|
||||
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~192.8M (~5.84M USD)"],
|
||||
["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,
|
||||
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 "
|
||||
"two subtotals differ by ~32.1M.")
|
||||
"Each figure is what the matching Plan A lever saves; rounded, the six add to ~31.2M, and the "
|
||||
"two subtotals differ by ~31.1M.")
|
||||
|
||||
|
||||
def _tranches():
|
||||
@@ -183,7 +183,7 @@ def _tranches():
|
||||
["2", "Building permit; vendor build dates confirmed in writing",
|
||||
"Construction, water-treatment building, utility yard, utilities, balance payments as machines are "
|
||||
"built",
|
||||
pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~68M to 87M)")],
|
||||
pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~67M to 87M)")],
|
||||
["3", "Building watertight; first machinery shipped",
|
||||
pick("Fit-out, HVAC and clean zones, ZLD and DI water, the rented crane for the installations, the "
|
||||
"metrology launch tier, factory software and ERPNext, the launch team",
|
||||
@@ -193,11 +193,11 @@ def _tranches():
|
||||
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, "
|
||||
"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,
|
||||
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).",
|
||||
"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)."))
|
||||
|
||||
|
||||
@@ -234,8 +234,8 @@ def _operating_table():
|
||||
["Depreciation", "0.75M", "0.47M", "0.28M"],
|
||||
["**Operating profit**", "**-0.52M**", "**1.26M**", "**3.51M**"],
|
||||
["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 "
|
||||
"8.11M)", "~1.2 yr"],
|
||||
["Payback on the plan price (EBITDA, mature year)", "~35 yr", "~3.6 yr (2.6 to 4.7 on 4.52M to "
|
||||
"8.07M)", "~1.2 yr"],
|
||||
]
|
||||
return T(["USD per year, mature", "Adverse", "Central", "Favourable"], rows, widths_mm=[50, 36, 48, 36],
|
||||
caption="Estimates, docs/finance/revenue-model.md 'Operating pictures of Plan A and Plan B (October "
|
||||
@@ -256,7 +256,7 @@ def _risk_rows():
|
||||
"Quotes landing high are not covered: at 15 % a contingency would be ~24M THB at the midpoint, "
|
||||
"and the high end of every block comes to ~226M with the reserve",
|
||||
"Quotes landing high are not covered: at 15 % a contingency would be ~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; "
|
||||
"how overruns are funded (outside the plan price or by scope steps) agreed with the investor up "
|
||||
"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, "
|
||||
"stays the alternative"])
|
||||
else:
|
||||
rows.append(["Medium", "The extra ~32M 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 "
|
||||
"depreciation, so central operating profit is 1.26M against 1.34M USD, payback ~3.7 against "
|
||||
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 ~31M THB more at launch adds "
|
||||
"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 "
|
||||
"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 "
|
||||
@@ -430,8 +430,8 @@ def blocks():
|
||||
"This document is " + label() + ". How the two differ (estimates):"),
|
||||
T(["Midpoints, estimates", "Plan A" + pick(" (this plan)", ""), "Plan B" + pick("", " (this plan)")], [
|
||||
["Plan price: ramp-up reserve in, no contingency", "~177M THB (~5.35M USD): ~180M",
|
||||
"~209M THB (~6.33M USD): ~210M"],
|
||||
["Low to high end of every block", "~127M to 226M THB", "~150M to 268M THB"],
|
||||
"~208M THB (~6.30M USD): ~210M"],
|
||||
["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"],
|
||||
["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)"],
|
||||
@@ -440,11 +440,11 @@ def blocks():
|
||||
["Operating profit, adverse case", "-0.39M USD: loses money", "-0.52M USD: loses more (more "
|
||||
"depreciation on the same EBITDA)"],
|
||||
["Payback on the plan price, central (EBITDA, mature year)", "~3.1 yr (2.2 to 4.0)",
|
||||
"~3.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 "
|
||||
"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: "
|
||||
"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, "
|
||||
"Thai boilers and compressor); the second Duplex waits for revenue"],
|
||||
], 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 "
|
||||
"contingency, midpoint values:"),
|
||||
_levers_table(),
|
||||
P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~32M THB more "
|
||||
"at the midpoint, so ~193.8M THB before the reserve and ~209M (~210M THB) with it.")]
|
||||
P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~31M THB more "
|
||||
"at the midpoint, so ~192.8M THB before the reserve and ~208M (~210M THB) with it.")]
|
||||
if a else
|
||||
[P("**Plan B: the launch plant with everything in, no levers.** What Plan B keeps that Plan A's six "
|
||||
"cost levers lease, defer or source abroad, midpoint values:"),
|
||||
@@ -467,12 +467,12 @@ def blocks():
|
||||
CALL("What decides between Plan A and Plan B", [
|
||||
"**No longer demand.** Both plans are the same three presses making the same ~0.58 to 0.90 million "
|
||||
"records a year (central 0.74 million); market validation (section 14.1, item 1) gates both alike.",
|
||||
"**~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 "
|
||||
"(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.",
|
||||
"**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 "
|
||||
"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 "
|
||||
@@ -488,8 +488,8 @@ def blocks():
|
||||
"Figure 11. Budget card of the plant and business plan calculator, " + pick(
|
||||
"Plan A preset: 161.7M THB at the midpoint without contingency, 171.7M to 181.7M with the "
|
||||
"ramp-up reserve of 10M to 20M, inside 180M at the midpoint",
|
||||
"Plan B preset: 193.8M THB at the midpoint without contingency, 203.8M to 213.8M with the "
|
||||
"ramp-up reserve of 10M to 20M, 16.2M to spare under the 225M mark (180M plus 25 %)") +
|
||||
"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, 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 "
|
||||
"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(
|
||||
"Plan A's ~177M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
|
||||
"15 % a contingency would add ~24M THB, and the high end of every block comes to ~226M. ",
|
||||
"Plan B's ~209M 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. ") +
|
||||
"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 ~266M. ") +
|
||||
"Quotes landing above the midpoint are funded outside the plan price or by scope steps; how they are "
|
||||
"funded is a decision for the investor before commitment (section 14.2).",
|
||||
"**The quotes that decide it.** The Classic has no Newbilt price (its band is a placeholder "
|
||||
@@ -538,11 +538,11 @@ def blocks():
|
||||
"**Chinese suppliers: ~1 %.** Plan B prices Thai-supplied utilities. The Chinese route for the "
|
||||
"boiler modules and the compressor would take ~1.9M THB off at the midpoint (Plan A takes "
|
||||
"it); chillers and HVAC, the larger blocks, are not checked yet."),
|
||||
pick("**Solar PPA.** The largest single lever (~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 "
|
||||
"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 PPA would take ~10.7M THB off the price at the midpoint and add a power price to the "
|
||||
"**Solar bought, not leased.** Plan B owns the array and the battery (8.0M to 11.3M THB). A "
|
||||
"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."),
|
||||
"**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).",
|
||||
@@ -696,9 +696,9 @@ def blocks():
|
||||
"(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 "
|
||||
"high end).",
|
||||
"the high end (7.50M USD) over 10 years (adverse), the midpoint (5.87M USD) over 12.5 years "
|
||||
"(central) and the low end (4.24M 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 "
|
||||
"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.22M USD) over 15 years (favourable). Payback is counted on the "
|
||||
"whole plan price including the ramp-up reserve (4.52M / 6.30M / 8.07M USD from the low to the "
|
||||
"high end).")),
|
||||
_operating_table(),
|
||||
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 "
|
||||
"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 "
|
||||
"**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.",
|
||||
@@ -737,9 +737,9 @@ def blocks():
|
||||
"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 "
|
||||
"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 "
|
||||
"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 "
|
||||
"benefit of the BOI solar measure.",
|
||||
"**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 "
|
||||
"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, "
|
||||
"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 "
|
||||
"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 "
|
||||
@@ -983,7 +983,7 @@ def blocks():
|
||||
"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 "
|
||||
"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 "
|
||||
"before the market has validated the price.")],
|
||||
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 "
|
||||
"own crane and locally serviced utilities; the second Duplex waits for demand and revenue on a "
|
||||
"reserved floor.",
|
||||
"**~32M 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 "
|
||||
"**~31M THB more that the model does not repay.** The same EBITDA as Plan A with more "
|
||||
"depreciation and a longer payback (~3.6 against ~3.1 years); the adverse case still loses "
|
||||
"money."]),
|
||||
], widths_mm=[85, 85], font_pt=8.5),
|
||||
P("**How the plan answers the risks:** commission the metal path first and measure it before the "
|
||||
@@ -1049,7 +1049,7 @@ def blocks():
|
||||
"whose incentives are aligned with the plant's schedule and quality, within the same province.",
|
||||
"**Debt-to-equity no higher than 3:1**, maintained for the life of the BOI privileges, which sets "
|
||||
"the floor on equity in the financing mix: at least a quarter of the funding, " + pick(
|
||||
"~44M THB of Plan A's ~177M", "~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).",
|
||||
"**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 "
|
||||
@@ -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 "
|
||||
"226M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
|
||||
"the metrology quotes and the solar PPA offer decide where in that range it lands.",
|
||||
"A commitment in principle to **Plan B at ~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, "
|
||||
"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 "
|
||||
"the midpoint), and from the low to the high end of every block the plan comes to ~150M to "
|
||||
"268M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
|
||||
"the midpoint), and from the low to the high end of every block the plan comes to ~149M to "
|
||||
"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 "
|
||||
"lands.")],
|
||||
["Decisions", pick(
|
||||
@@ -1161,7 +1161,7 @@ def blocks():
|
||||
"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); "
|
||||
"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 "
|
||||
"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 "
|
||||
|
||||
Reference in new issue
Block a user