diff --git a/README.md b/README.md index c2ac2d2..bcebeb6 100644 --- a/README.md +++ b/README.md @@ -70,14 +70,15 @@ steps are open planning items. - The plant now launches with everything in one capital round (October 2026): one Newbilt Duplex system and one Classic, a Pheenix galvanics line, the Sibert stamper-prep line, a Sillitoe cutting room and the - modular boiler and chiller plant: ~168M to 294M THB with contingency - (midpoint ~231M, PV on every roof and canopy), the Pheenix line priced at OMS's reference plus 20 % + modular boiler and chiller plant: ~168M to 296M THB with contingency + (midpoint ~232M; biomass steam, PV on the factory roof), the Pheenix line priced at OMS's reference plus 20 % ([total investment](docs/finance/total-investment.md#launch-plant-october-2026)). For the investor the business plan comes in two versions, priced without contingency and with the ramp-up reserve ([two plans](docs/finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-215m-thb-october-2026)): - **Plan A, ~177M THB**, the launch plant with six cost levers, and - **Plan B, ~216M THB**, the same launch plant with everything in. + **Plan A, ~182M THB** (~2M above 180M since steam went biomass), the + launch plant with six cost levers, and **Plan B, ~217M THB**, the same + launch plant with everything in. Chinese boilers, compressor and hydraulics save about 2M THB of that ([Chinese suppliers](docs/suppliers/china-utilities.md)). The business plan is re-based on it (draft 0.2). @@ -282,8 +283,8 @@ The detail lives in dedicated documents: output capacity, building area, land, electrical demand, solar and storage, steam and fuel, headcount, and money cross-references - [Total investment](docs/finance/total-investment.md): the launch plant - decided in October 2026 (~168M to 294M THB, ~5.1M to 8.9M USD, midpoint - ~231M THB) with the basis of every block, the two plans for the investor + decided in October 2026 (~168M to 296M THB, ~5.1M to 9.0M USD, midpoint + ~232M THB) with the basis of every block, the two plans for the investor (Plan A ~180M, Plan B ~215M THB, without contingency), and the earlier answer to the 180M / 216M question; the earlier full vision and phased entry are kept as superseded @@ -294,8 +295,8 @@ The detail lives in dedicated documents: and margin per record, the launch plant's operating picture at the planned 60 % specials (central revenue ~3.65M USD a year on ~0.74M 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 - same output, payback ~3.8 years on ~216M THB: its extra pays back + pictures of Plan A (payback ~3.2 years on ~182M THB) and Plan B (the + same output, payback ~3.8 years on ~217M THB: its extra pays back through what the table leaves out), the five-press table, and the levers and caveats behind the numbers - Business plan, draft 0.3 (October 2026), in two versions: diff --git a/docs/biomass.md b/docs/biomass.md index 14fc113..0af23c9 100644 --- a/docs/biomass.md +++ b/docs/biomass.md @@ -1,9 +1,18 @@ # Biomass Fuel Strategy -If the steam boiler goes the biomass route (see the options in -[sustainability](sustainability.md) and the Getabec candidate in the -[utilities CSV](finance/utilities-investment.csv)), the fuel comes from two -sources: the team's own 60 rai of currently unused land, and northern +**Decided 17 October 2026 (user): both business plan versions run on +biomass steam** ("option a and b should operate on biomass"): two 500 kg/h +biomass modules (or one ~1 t/h package, Getabec class, 6M to 10M THB +installed with fuel feed, grate and dust control) plus a fuel store and +handling block (1M to 2M THB, estimate) in the +[utilities CSV](finance/utilities-investment.csv). The launch plant at +~850k records burns ~954 MWh of heat a year, about 300 t of air-dry wood +or ~460 t of fresh chips, ~0.67M THB at 0.7 THB/kWh, against ~4.9M THB a +year for electric steam with its demand charge (calculator, estimates). +The electric-first staged path under Decision framing is dropped; the +electric bank stays the alternative. + +The fuel comes from two sources: the team's own 60 rai of currently unused land, and northern Thailand's agricultural waste market. Figures below are planning estimates, plus or minus a wide margin, to be refined against the actual boiler choice and duty cycle. @@ -165,7 +174,7 @@ storage are additional. [grid tariff](sustainability.md#grid-tariff-pea-and-what-it-decides)). The electric boiler is the more efficient machine; biomass is the far cheaper heat -- A staged path is possible: start electric (fast, clean permitting), plant +- (Superseded 17 October 2026: biomass from the launch.) A staged path is possible: start electric (fast, clean permitting), plant the coppice now (first harvest in 2 to 4 years), and add the biomass boiler at the automated-line expansion when demand and the fuel supply have both matured. At the tariff above that is a permitting and logistics diff --git a/docs/boi.md b/docs/boi.md index 85b0e50..0af5bff 100644 --- a/docs/boi.md +++ b/docs/boi.md @@ -26,7 +26,7 @@ top through the upgrade measures, where this project happens to be strong: THB 12M per MW ([B Global Law](https://bgloballaw.com/2026/01/18/boi-announcement-no-3-2568-amendment-to-renewable-energy-efficiency-enhancement-measures), [Smarter Energy Solution](https://smarterenergysolution.com/blog/boi-solar-thailand-2026), - checked October 2026). So owning the ~640 kWp array earns no BOI + checked October 2026). So owning the ~520 kWp factory-roof array earns no BOI benefit; its case is the bill (see [sustainability](sustainability.md)). Whether the 271 kWh battery qualifies is for the BOI consultant. A PPA developer selling solar power (200 kW or more per distribution point) diff --git a/docs/business-plan/CNX-Vinyl-Business-Plan-A.docx b/docs/business-plan/CNX-Vinyl-Business-Plan-A.docx index 7bf67d1..9566351 100644 Binary files a/docs/business-plan/CNX-Vinyl-Business-Plan-A.docx and b/docs/business-plan/CNX-Vinyl-Business-Plan-A.docx differ diff --git a/docs/business-plan/CNX-Vinyl-Business-Plan-A.pdf b/docs/business-plan/CNX-Vinyl-Business-Plan-A.pdf index c18bd74..384896b 100644 Binary files a/docs/business-plan/CNX-Vinyl-Business-Plan-A.pdf and b/docs/business-plan/CNX-Vinyl-Business-Plan-A.pdf differ diff --git a/docs/business-plan/CNX-Vinyl-Business-Plan-B.docx b/docs/business-plan/CNX-Vinyl-Business-Plan-B.docx index d5cccd3..a841b56 100644 Binary files a/docs/business-plan/CNX-Vinyl-Business-Plan-B.docx and b/docs/business-plan/CNX-Vinyl-Business-Plan-B.docx differ diff --git a/docs/business-plan/CNX-Vinyl-Business-Plan-B.pdf b/docs/business-plan/CNX-Vinyl-Business-Plan-B.pdf index 1a09d1e..626bbf1 100644 Binary files a/docs/business-plan/CNX-Vinyl-Business-Plan-B.pdf and b/docs/business-plan/CNX-Vinyl-Business-Plan-B.pdf differ diff --git a/docs/business-plan/build/content_a.py b/docs/business-plan/build/content_a.py index 6fbb828..6e51e7a 100644 --- a/docs/business-plan/build/content_a.py +++ b/docs/business-plan/build/content_a.py @@ -29,11 +29,12 @@ def blocks(): "snapshots at their file dates, not commitments. Every number in this plan is labelled as quoted, " "researched, or estimated; see section 2. " + pick( "This version is Plan A: the launch plant with the whole chain, cutting and galvanics " - "included, three presses, brought to ~180M THB (~177M) with six cost levers. A second " - "version, Plan B (~215M THB), builds the same plant and takes none of the levers. ", + "included, three presses, with six cost levers taken: labelled ~180M THB, it comes to " + "~182M at the midpoint, about 2M above 180M. A second version, Plan B (~215M 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 ~215M " - "THB (~216M). A second version, Plan A (~180M THB), builds the same plant with six cost " + "THB (~217M). 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 " @@ -84,13 +85,11 @@ def blocks(): "zero-discharge water treatment, and the Sibert stamper-prep line. The father and the mother of " "every side are archived, so represses start from our own metal.", "**A modular utility plant:** a boiler hall and a chiller compound built once for four modules " - "each, with " + pick( - "two 500 kg/h boiler modules (B-1, B-2, bought through the Chinese route) and two 250 kW " - "chiller modules (CH-1, CH-2)", - "two 500 kg/h boiler modules (B-1, B-2, from Thai suppliers) and two 250 kW chiller modules " - "(CH-1, CH-2)") - + " installed at launch; further presses add modules, not rooms. The steam fuel (electric or " - "biomass) is still open.", + "each, with two 500 kg/h biomass boiler modules (B-1, B-2) and two 250 kW chiller modules " + "(CH-1, CH-2) installed at launch; further presses add modules, not rooms. **Steam is biomass " + "from launch in both versions of this plan**, fired with wood chips from a covered fuel " + "store: ~0.67M THB of fuel a year against ~4.9M THB for electric steam (estimates). Electric " + "boilers are the alternative, not the plan.", pick("**Cassette duplication and CD-R duplication as a growth step** after launch, not in the " "plan price; both fit inside the building programme. ", "**Cassette duplication and CD-R duplication in-house** from launch. ") @@ -98,10 +97,11 @@ def blocks(): "(injection-moulded discs) is a separate, much larger decision, outside the totals; both CD " "routes are set out in section 4.10 for the investor to decide.", "**A purpose-built ~1,500 m² plant on long-term leased land**, with a detached utility yard, " - + pick("solar on every roof and canopy (~640 kWp, estimate) through a solar power purchase " + + pick("solar on the factory roof (~520 kWp, estimate) through a solar power purchase " "agreement (PPA)", - "owned solar on every roof and canopy (~640 kWp, estimate) with a battery") - + " and room for a second building.", + "owned solar on the factory roof (~520 kWp, estimate) with a battery") + + ", the office roof and the car and scooter canopies built PV-ready for later panels, and " + "room for a second building.", "**Open source throughout:** every plant server runs NixOS, declared in one repository in the " "fleet B4L already operates, so any machine is rebuilt from it; ERPNext (no licence fee) is the " "only system of record; and our own code (the factory console, the plant overview, the artist " @@ -120,25 +120,28 @@ 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 ~201M to ~162M THB at the midpoint " - "before the ramp-up reserve (estimates, section 8): solar on every roof and canopy (~640 kWp) " - "and the battery through a solar PPA (the installer owns and finances the array, the plant " - "buys the power); metrology in two " - "steps (XRF, inline vision and the audio station at launch, the laser confocal and the " + "**Six cost levers bring the plant to ~182M THB: labelled ~180M, it is about 2M above 180M " + "at the midpoint** (177M with the low end of the ramp-up reserve), from ~201.6M to ~167.1M " + "THB at the midpoint before the reserve (estimates, section 8): solar on the factory roof " + "(~520 kWp) and the battery through a solar PPA (the installer owns and finances the array, " + "the plant buys the power); metrology in two steps (XRF, inline vision and the audio " + "station at launch, the laser confocal and the " "wide-area profiler bought from revenue); the visitor corridor built later, so no public tours " "at first; cassette and CD-R duplication later; a mobile crane rented for the installations, " - "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: ~215M THB**, ~201M THB at the midpoint before the " - "ramp-up reserve and ~39M THB more than Plan A (estimates, section 8): owned solar on every " - "roof and canopy (~640 kWp) and the battery, so no PPA power bill (~2.3M THB a year in Plan " - "A, estimate); the full metrology stack from launch (XRF, " + "with frame, runway and machine door kept crane-ready; the compressor through the Chinese " + "route. Every press, the cutting room, the galvanics line, the stamper-prep line and the " + "biomass boilers stay in. The Chinese route priced only electric boilers; a Chinese biomass " + "boiler is not yet quoted, and one ~2M THB or more below the Thai package would bring the " + "midpoint back to 180M.", + "**Everything in, none of the cost levers: ~215M THB** (~217M at the midpoint with the " + "ramp-up reserve, ~201.6M THB before it) and ~35M THB more than Plan A (estimates, section " + "8): owned solar on the factory roof (~520 kWp) and the battery, so no PPA power bill (~1.9M " + "THB a year in Plan A, estimate); 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 " - "start; cassette and CD-R duplication; a bought 5 t overhead crane; boilers and compressor " - "from Thai suppliers, with local service. Every press, the cutting room, the galvanics line " - "and the stamper-prep line are the same as in Plan A."), + "start; cassette and CD-R duplication; a bought 5 t overhead crane; the compressor from a " + "Thai supplier, with local service. Every press, the cutting room, the galvanics line, the " + "stamper-prep line and the biomass boilers are the same as in Plan A."), ]), H2("What makes it top-notch"), P("Four things separate this plant from a pressing shop, and they are the reason it can charge " @@ -164,14 +167,18 @@ def blocks(): "press cycle is logged, and sampled records are compared automatically against the source " "master.", "**Efficiency designed in.** Heat is recovered before energy is generated: in order, a flue-gas " - "economiser if the boiler is fired, as much condensate back to the feed tank as possible, then a " - "heat pump that lifts the presses' ~60 °C cooling return into boiler feedwater. Every roof and " - "canopy carries solar: **~640 kWp** on the Payap scenario layout (factory roof ~523 kWp, " - "parking canopies ~54 kWp, office roof ~65 kWp), about 900 MWh a year, of which ~85 % is used " - "on site (~760 MWh, ~38 % of the launch plant's electricity with electric steam); the rest is " - "curtailed, because a factory on PEA's grid runs zero export and is not paid for surplus " - "(estimates). On the Mueang Chi hall the roof and canopies hold ~300 kWp, so the rest would be " - "ground-mounted or wait for the second building's roof. A 271 kWh battery gives ride-through" + "economiser on the biomass boilers, as much condensate back to the feed tank as possible, then " + "a heat pump that lifts the presses' ~60 °C cooling return into boiler feedwater. Solar goes on " + "the factory roof: **~520 kWp** on the Payap scenario layout, about 730 to 780 MWh a year, of " + "which ~87 % is used on site (~633 MWh, ~61 % of the launch plant's ~1,036 MWh a year of " + "electricity); the rest is curtailed, because a factory on PEA's grid runs zero export and is " + "not paid for surplus. With biomass steam the running load is ~230 kW, and an hourly sketch " + "puts the best array for it at ~500 to 550 kWp, so the factory roof sits at that optimum " + "(estimates). The office roof (~65 kWp) and the car and scooter canopies (~54 kWp) are built " + "PV-ready (structure rated for panels, conduit to the main board) and take panels when the " + "load rises with the second Duplex system: ~120 kWp for ~2.4M to 3.1M THB (estimate). On the " + "Mueang Chi hall the factory roof takes ~247 kWp and its canopies are PV-ready too. A 271 kWh " + "battery gives ride-through" + pick( "; array and battery come through the solar PPA: the installer owns and finances them, the " "plant buys the power. ", @@ -180,7 +187,8 @@ def blocks(): "galvanics rinse water goes through a zero-discharge evaporator, and 20% of the feedstock is " "in-house regrind. Boilers and chillers come in identical modules, so spares and service are one " "routine. At reported northern fuel prices biomass heat costs a quarter to a tenth of electric " - "steam; the fuel choice is open.", + "steam, which is why steam is biomass from launch: it saves ~4.2M THB (~USD 0.13M) a year " + "against electric boilers and keeps the grid demand at ~264 kW instead of ~980 kW (estimates).", "**Climate control as product quality.** The whole plant runs at 20 to 26 °C, 35 to 60% " "relative humidity, with particulate filtration sized for Northern Thailand's burning season. " "Moisture and dust are the two classic causes of noisy records; the plant we visited has " @@ -197,23 +205,26 @@ def blocks(): "at our planning rates). Second Duplex as a growth step from revenue (section 4.4); full hall " "as a later option: ~2.9M to 4.4M")], ["Site", "~1,500 m² main building plus a ~379 m² utility yard built for four boiler and four " - "chiller modules, on leased land (~4 rai minimum, 6 to 8 rai with expansion); second " + "chiller modules and a covered biomass fuel store, on leased land (~4 rai minimum, " + "6 to 8 rai with expansion); second " "building as expansion"], [pick("Investment, Plan A", "Investment, Plan B"), pick( - "**~THB 177M (~USD 5.35M), rounded to ~180M THB**: the plan investment, ~THB 161.7M (~USD " - "4.90M) at the midpoint with the six levers taken, plus a ramp-up reserve of ~THB 10M to 20M " - "(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 " + "**~THB 182M (~USD 5.52M), labelled ~180M THB**: the plan investment, ~THB 167.1M (~USD " + "5.06M) at the midpoint with the six levers taken, plus a ramp-up reserve of ~THB 10M to 20M " + "(staff and overheads before volume covers them). **At the midpoint that is about 2M above " + "180M**; with the low end of the reserve (~177M) it fits. From the low to the high end of " + "every block: ~THB 132M to 233M. Estimates: no quote yet for the Classic, the galvanics line " "(priced at OMS's reference plus 20 %) or the building", - "**~THB 216M (~USD 6.53M), rounded to ~215M THB**: the plan investment, ~THB 200.6M (~USD " - "6.08M) 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 just within the investor's 180M " - "THB plus 20 % (216M). From the low to the high end of every block: ~THB 156M to 275M. " + "**~THB 217M (~USD 6.56M), labelled ~215M THB**: the plan investment, ~THB 201.6M (~USD " + "6.11M) 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 ~0.6M above the investor's 180M " + "THB plus 20 % (216M), inside 225M. From the low to the high end of every block: ~THB 156M " + "to 277M. " "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 " - + pick("24M", "30M") + " at the midpoint): quotes that land high are " + + pick("25M", "30M") + " at the midpoint): quotes that land high are " "funded outside the plan or by scope steps (section 8). Also not in " "it: the central hydraulic plant (not yet costed), the archive's mobile " "shelving (to quote), CD replication, financing costs, currency moves, " @@ -222,24 +233,24 @@ def blocks(): "(USD 9k to 30k), section 6.1"], ["Operating result, mature year", pick( "Central case at 60 % specials: revenue ~USD 3.65M (~THB 120M), EBITDA ~USD 1.73M (~THB " - "57M), operating profit ~USD 1.34M (~THB 44M); break-even on operating profit at ~0.2M " + "57M), operating profit ~USD 1.33M (~THB 44M); break-even on operating profit at ~0.2M " "records a year. **The adverse case loses money:** EBITDA ~USD 0.23M, operating loss ~USD " - "0.39M (~THB 13M); it would need ~0.9M records a year to cover depreciation and the three " - "presses make 0.58M at that rate. The solar PPA's power price (~USD 0.07M a year in the " + "0.41M (~THB 14M); it would need ~1.0M records a year to cover depreciation and the three " + "presses make 0.58M at that rate. The solar PPA's power price (~USD 0.06M a year in the " "calculator) is not in these figures. Utilisation and price decide the outcome, not upside " "(section 9)", "Central case at 60 % specials: revenue ~USD 3.65M (~THB 120M), EBITDA ~USD 1.73M (~THB " "57M), operating profit ~USD 1.24M (~THB 41M); break-even on operating profit at ~0.24M " "records a year. **The adverse case loses money:** EBITDA ~USD 0.23M, operating loss ~USD " - "0.54M (~THB 18M); it would need ~1.1M records a year to cover depreciation and the three " + "0.55M (~THB 18M); it would need ~1.1M records a year to cover depreciation and the three " "presses make 0.58M at that rate. Cassette, CD-R and tour revenue are not in these figures. " "Utilisation and price decide the outcome, not upside (section 9)")], ["Payback", pick( - "~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 " + "~3.2 years on the plan price in the central case (2.3 to 4.1 from the low to the high end of " + "the price); ~1.1 years in the favourable case, ~31 years in the adverse case (EBITDA, mature " "year, ramp-up reserve included; estimates)", - "~3.8 years on the plan price in the central case (2.7 to 4.8 from the low to the high end of " - "the price); ~1.2 years in the favourable case, ~36 years in the adverse case (EBITDA, mature " + "~3.8 years on the plan price in the central case (2.7 to 4.9 from the low to the high end of " + "the price); ~1.2 years in the favourable case, ~37 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 " "months from the start of phase 0), but it was drawn for a one-press " @@ -252,10 +263,11 @@ def blocks(): "crew, because two shifts still need press, finishing, galvanics, QC and maintenance " "staff (13 to 19 direct production staff in the revenue model)"], ["The ask", pick( - "~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 216M (~USD 6.53M), the ~215M THB plan, released in tranches against milestones " + "~THB 182M (~USD 5.52M), the plan labelled ~180M THB (about 2M above 180M at the midpoint), " + "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 46M " + "(arithmetic, before financing costs)", + "~THB 217M (~USD 6.56M), the ~215M 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 54M (arithmetic, before financing costs)")], ]), @@ -267,12 +279,13 @@ 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 39M (~22 %) more at launch for what " + "make the same records: it is whether the investor funds ~THB 35M (~19 %) more at launch for what " "Plan A leases or buys from revenue. Plan B owns its solar array (no PPA power bill), 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 " - "its utilities with local service. On the modelled numbers that extra earns little (the same " - "EBITDA in the revenue model, ~USD 0.07M a year more in the calculator for the PPA power bill the " + "its compressor with local service; both run on biomass steam. On the modelled numbers that extra " + "earns little (the same EBITDA in the revenue model, ~USD 0.06M a year more in the calculator for " + "the PPA power bill the " "owned array avoids; more depreciation, a longer payback, a deeper adverse case), so Plan A has " "the better modelled return and Plan B the more complete plant. Most of Plan B's items can be added to Plan A " "later from revenue; the corridor is cheaper to build in from the start, and owning the array " @@ -280,27 +293,31 @@ def blocks(): "2025, section 7.1), so neither plan earns a tax benefit on the array. " "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 216M (~USD 6.53M); ~156M to 275M from the low to the high end"], + ["Plan price (ramp-up reserve in, no contingency)", "~THB 182M (~USD 5.52M), ~2M above 180M at " + "the midpoint; ~132M to 233M from the low to the high end", "~THB 217M (~USD 6.56M); ~156M to " + "277M 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"], + ["Steam", "Biomass from launch: two 500 kg/h modules and a covered fuel store", "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.24M (~THB 41M)"], - ["Payback on the plan price, central case", "~3.1 years (2.2 to 4.0)", "~3.8 years (2.7 to 4.8)"], - ["Adverse case", "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.39M", - "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.54M"], + ["Operating profit, central case", "~USD 1.33M (~THB 44M)", "~USD 1.24M (~THB 41M)"], + ["Payback on the plan price, central case", "~3.2 years (2.3 to 4.1)", "~3.8 years (2.7 to 4.9)"], + ["Adverse case", "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.41M", + "Loses money: EBITDA ~USD 0.23M, operating loss ~USD 0.55M"], ["What Plan A gives up, what Plan B buys", "At launch: solar through a PPA (a power bill of " - "~USD 0.07M a year instead of owning the array), no confocal or profiler, no visitor corridor " - "or tours, no cassette or CD-R, a rented crane; Chinese-made boilers and compressor", - "~THB 39M more at launch: owned solar (~640 kWp, every roof and canopy covered) and battery, " + "~USD 0.06M a year instead of owning the array), no confocal or profiler, no visitor corridor " + "or tours, no cassette or CD-R, a rented crane; a Chinese-made compressor", + "~THB 35M more at launch: owned solar (~520 kWp on the factory roof) and battery, " "so no PPA bill, the full " "metrology stack, the visitor corridor and tours, cassette and CD-R, a bought crane; " - "Thai-supplied boilers and compressor"], + "a Thai-supplied compressor"], ], widths_mm=[42, 64, 64], font_pt=8.5, caption="Estimates: mature year at 60 % specials, from the revenue model; payback counted on the " "whole plan price including the reserve. A central EBITDA margin of ~47 % (both plans) is " - "far above the 15 to 25 % pressing plants earn; read the adverse case as the honest one."), + "far above the 15 to 25 % pressing plants earn; read the adverse case as the honest one. " + "The revenue model does not split energy cost by plan or fuel, so the PPA bill and the " + "biomass saving show only in the calculator."), H2("Where we are, and what we ask"), P("The project is at the planning stage. Industry outreach has run for several years. Alexander and " "Simona attended **Making Vinyl Europe in Haarlem** (30 September to 2 October 2026): most people " @@ -326,31 +343,34 @@ def blocks(): "of the investment band: " + pick( "the Newbilt re-quote for the Duplex system (with an EX 35 price) and the Classic, a Pheenix " "quote for the galvanics line, the building price request with the soil test, metrology " - "distributor quotes and a solar PPA offer.", + "distributor quotes, a solar PPA offer and a Chinese biomass-boiler quote (one ~2M THB or " + "more below the Thai package brings Plan A's midpoint back to 180M).", "the Newbilt re-quote for the Duplex system (with an EX 35 price) and the Classic, a Pheenix " "quote for the galvanics line, the building price request with the soil test, and metrology " "distributor quotes."), pick( - "**Then the Plan A round, ~THB 177M (~USD 5.35M), rounded to ~180M THB**, including the " + "**Then the Plan A round, ~THB 182M (~USD 5.52M), labelled ~180M THB**, about 2M above 180M " + "at the midpoint, including the " "ramp-up reserve and without contingency, 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 127M to " - "226M; quotes that land high are funded outside the plan or by scope steps.", - "**Then the Plan B round, ~THB 216M (~USD 6.53M), rounded to ~215M THB**, including the " - "ramp-up reserve and without contingency, just within the investor's 180M THB plus 20 % " - "(216M) at the midpoint, released in tranches against milestones: BOI certificate and lease signed, " + "(section 8). From the low to the high end of every block the plan runs from ~THB 132M to " + "233M; quotes that land high are funded outside the plan or by scope steps.", + "**Then the Plan B round, ~THB 217M (~USD 6.56M), labelled ~215M THB**, including the " + "ramp-up reserve and without contingency, at the midpoint ~0.6M above the investor's 180M " + "THB plus 20 % (216M) and inside 225M, 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 156M to 275M; quotes that land high are funded " + "end of every block the plan runs from ~THB 156M to 277M; 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 39M more at launch for what Plan A leases or defers; the " + "same records, so the choice is ~THB 35M 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", "54M of Plan B's ~216M") + " is equity); CD " - "replication, yes or no (it must be in the BOI application from the start); and the steam fuel, " - "electric or biomass.", + "least ~THB " + pick("46M of Plan A's ~182M", "54M of Plan B's ~217M") + " is equity); and CD " + "replication, yes or no (it must be in the BOI application from the start). The steam fuel is " + "no longer open: both versions run on biomass steam from launch.", "**Co-investment:** Ploy Printing, the Chiang Mai print and packaging house that will produce " "the plant's jackets and sleeves, has expressed the intention to invest alongside the lead " "investor. Terms are not yet discussed; the intended structure is described in section 12.", @@ -536,9 +556,8 @@ def blocks(): "Newbilt Duplex system (2 presses, main + colour extruder) and one Newbilt Classic", pick("Launch plant; second Duplex as growth option", "At launch; second Duplex as growth option")], ["Steam, cooling and compressed air engineered locally", "The largest energy loads; efficiency " - "lives here", "Boiler hall and chiller compound for four modules each; " + pick( - "2 x 500 kg/h boilers (Chinese route) and 2 x 250 kW chillers", - "2 x 500 kg/h boilers (Thai suppliers) and 2 x 250 kW chillers") + "; heat recovery designed in", + "lives here", "Boiler hall and chiller compound for four modules each; 2 x 500 kg/h biomass " + "boilers with a covered fuel store and 2 x 250 kW chillers; heat recovery designed in", LP + "; modules added with presses"], ["Whole-plant climate and particulate control", "Moisture and dust are the two classic record " "defects", "20 to 26 °C, 35 to 60% RH, filtration for the burning season, tighter in clean " @@ -566,10 +585,11 @@ def blocks(): "mobile shelving (to quote)", LP], ["Renewable energy and closed-loop water", "Cost, resilience, brand" + pick( "", "; the owned battery may qualify for BOI as storage"), - pick("PV on every roof and canopy (~640 kWp) and a 271 kWh battery through a solar PPA " - "(installer-owned), closed cooling loop, zero process discharge", - "PV on every roof and canopy (~640 kWp) and a 271 kWh battery (owned), closed cooling " - "loop, zero process discharge"), + pick("PV on the factory roof (~520 kWp; office roof and canopies PV-ready) and a 271 kWh " + "battery through a solar PPA (installer-owned), biomass steam, closed cooling loop, zero " + "process discharge", + "PV on the factory roof (~520 kWp; office roof and canopies PV-ready) and a 271 kWh " + "battery (owned), biomass steam, closed cooling loop, zero process discharge"), pick("Launch plant (PV and battery through a solar PPA)", "At launch")], ["Trained people and a safety program", "Steam at 10 bar, hydraulics at 180 bar, plating " "chemistry", "Vendor commissioning training, in-house program, PPE, clean rooms", @@ -721,23 +741,19 @@ def blocks(): P("The Pheenix Alpha AD12 automatic press left the plan in October 2026 and stays the comparison if " "the Classic re-quote disappoints."), P("**What Newbilt deliberately excludes**, and what is engineered and sourced locally: steam and " - "cooling. " + pick( - "At Newbilt's per-machine figures the three presses draw about 450 to 540 kg/h of steam " - "at 10 bar / 180 °C and up to ~390 kW of cooling on a hot afternoon (estimates; the Classic is " - "counted as one press and extruder until Newbilt states its own figures). They are met by **two " - "500 kg/h boiler modules (B-1, B-2) and two 250 kW chiller modules (CH-1, CH-2)**, in a boiler " - "hall and an open chiller compound built for four modules each; a second Duplex adds a third " - "chiller module, and the fourth positions are reserve and growth. Plan A buys the two boiler " - "modules through the Chinese route: ASME-stamped 1.25 MPa units from makers with Thai " - "references, installed by a Thai contractor and verified under the Thai rules for imported " - "boilers (section 5.4). ", - "At Newbilt's per-machine figures the three presses draw about 450 to 540 kg/h of steam " - "at 10 bar / 180 °C and up to ~390 kW of cooling on a hot afternoon (estimates; the Classic is " - "counted as one press and extruder until Newbilt states its own figures). They are met by **two " - "500 kg/h boiler modules (B-1, B-2) and two 250 kW chiller modules (CH-1, CH-2)**, in a boiler " - "hall and an open chiller compound built for four modules each; a second Duplex adds a third " - "chiller module, and the fourth positions are reserve and growth. Plan B buys the boiler " - "modules and the compressor from Thai suppliers, with local service. ") + "cooling. At Newbilt's per-machine figures the three presses draw about 450 to 540 kg/h of steam " + "at 10 bar / 180 °C and up to ~390 kW of cooling on a hot afternoon (estimates; the Classic is " + "counted as one press and extruder until Newbilt states its own figures). They are met by **two " + "500 kg/h biomass boiler modules (B-1, B-2) and two 250 kW chiller modules (CH-1, CH-2)**, in a " + "boiler hall and an open chiller compound built for four modules each; a second Duplex adds a " + "third chiller module, and the fourth positions are reserve and growth. The boilers burn wood " + "chips from a covered fuel store, in both versions of the plan: ~6M to 10M THB installed with " + "fuel feed, grate and dust control, plus ~1M to 2M THB for the fuel store and handling, and " + "~0.67M THB of fuel a year (estimates). " + pick( + "Plan A buys the compressor through the Chinese route. That route priced only electric " + "boilers; Chinese makers also build biomass boilers but none is priced yet, and a quote ~2M " + "THB or more below the Thai package would bring Plan A's midpoint back to 180M (section 5.4). ", + "Plan B buys the compressor from a Thai supplier, with local service. ") + "The presses share one central hydraulic plant and one " "compressed-air plant through ring mains with a valved tee at every press position, so a new press " "is connected without stopping the others; the standby pump set, accumulators and ring main are " diff --git a/docs/business-plan/build/content_b.py b/docs/business-plan/build/content_b.py index 39d652c..b99e89f 100644 --- a/docs/business-plan/build/content_b.py +++ b/docs/business-plan/build/content_b.py @@ -279,23 +279,20 @@ def blocks(): "one observation: the steam's job is to heat the moulds and the cooling water's job is to remove " "that same heat again. Roughly 98% of the press cooling load is heat the steam put into the " "moulds, and the press cooling return leaves at about 60 °C. That warm return, the condensate and " - "a fired boiler's flue gas are heat the plant reuses before it generates anything new."), + "the biomass boilers' flue gas are heat the plant reuses before it generates anything new."), H3("Utilities: backbone once, modules with the presses"), P("Everything that is cheap to oversize now and costly to change in a running plant is built once, " "for the five-press fleet: the boiler hall and the chiller compound with room for four modules " "each, the steam main and condensate return, the cooling mains, the heat-exchanger frame and " "tanks, and hydraulic and compressed-air ring mains with a valved, capped tee at every press " - "position. The machines that make steam and cold water come in identical modules: " + pick( - "at launch two 500 kg/h boilers (B-1, B-2) for the 450 to 540 kg/h peak and two 250 kW " - "air-cooled chillers rated at 40 °C ambient (CH-1, CH-2) for ~391.5 kW, sequenced lead and " - "lag by one controller. Either boiler alone carries 93 to 111% of the steam demand; one " - "chiller out leaves ~64% of the cooling peak. The boiler bodies come through the Chinese " - "route and the compressor from a Chinese brand's Thai office (below). ", - "at launch two 500 kg/h boilers (B-1, B-2) for the 450 to 540 kg/h peak and two 250 kW " - "air-cooled chillers rated at 40 °C ambient (CH-1, CH-2) for ~391.5 kW, sequenced lead and " - "lag by one controller. Either boiler alone carries 93 to 111% of the steam demand; one " - "chiller out leaves ~64% of the cooling peak. The boilers and the compressor come from Thai " - "suppliers, with local service (below). ") + + "position. The machines that make steam and cold water come in identical modules: at launch " + "two 500 kg/h biomass boilers (B-1, B-2) for the 450 to 540 kg/h peak (one ~1 t/h package is " + "the alternative) and two 250 kW air-cooled chillers rated at 40 °C ambient (CH-1, CH-2) for " + "~391.5 kW, sequenced lead and lag by one controller. Either boiler alone carries 93 to 111% of " + "the steam demand; one chiller out leaves ~64% of the cooling peak. Both plans make their steam " + "from biomass (below); " + pick( + "the boilers come from a Thai maker and the compressor from a Chinese brand's Thai office. ", + "the boilers and the compressor come from Thai suppliers, with local service. ") + "Identical modules mean one set of spares " "and one service routine, N+1 later is one more module rather than a redesign, and the plant " "never runs one oversized boiler at poor part load. Four boilers carry about eight presses with " @@ -305,7 +302,7 @@ def blocks(): "station, ring main) is not costed yet; a Thai hydraulic power unit builder quotes it."), T(["Measure", "What it does", "Effect"], [ ["1. Flue-gas economizer (fired boilers)", "Recovers stack heat into the boiler feedwater; the " - "first measure to investigate on a biomass or LPG bank (an electric boiler has no flue gas)", + "first measure to investigate on the biomass bank (an electric boiler has no flue gas)", "Outlet and stack temperatures are vendor figures; rice-husk ash is abrasive, so the RFQ asks " "for cleaning, wear protection and a bypass"], ["2. Condensate return", "As much clean, hot condensate back to the feed tank as possible", @@ -344,14 +341,15 @@ def blocks(): "weekdays) and 2.6037 THB/kWh off-peak, plus the Ft fuel adjustment (+0.1623 THB/kWh for " "September to December 2026; it resets every four months) and reclaimable VAT. Two shifts put " "about two thirds of process energy into peak hours: a blended ~3.81 THB/kWh before the demand " - "charge. For the five-press fleet the backbone is built for" + - ", without electric steam, that is " - "roughly 4.5M to 6.8M THB a year before solar, 0.7M to 1.1M of it demand charge (estimates), on " - "an 800 to 1,000 kVA connection. Three design consequences:"), + "charge. For the five-press fleet the backbone is built for, on biomass steam with no electric " + "boiler on the grid, that is roughly 4.5M to 6.8M THB a year before solar, 0.7M to 1.1M of it " + "demand charge, on an 800 to 1,000 kVA connection; the launch plant's peak demand is ~264 kW, " + "against ~980 kW had its steam been electric (estimates). Three design consequences:"), B([ - "**Biomass heat is far cheaper than electric steam** (below): the demand charge follows the " - "boiler's full-power draw, and the peak window covers 13 of the 16 production hours.", - "**Every roof gets PV, not solar thermal.** Self-consumed PV is worth ~3.7 THB/kWh" + pick( + "**Steam comes from biomass in both plans,** because biomass heat is far cheaper than " + "electric steam (below): an electric boiler's full-power draw would set the demand charge, and " + "the peak window covers 13 of the 16 production hours.", + "**The factory roof gets PV, not solar thermal.** Self-consumed PV is worth ~3.7 THB/kWh" + pick( " of grid power displaced, less the PPA price the plant pays for it (below)", "") + "; surplus earns nothing, because a factory on PEA's grid runs zero export (below); and PV " "cannot lower the demand charge, because the peak window runs to 22:00, long after sunset.", @@ -361,37 +359,47 @@ def blocks(): ]), H3("Renewable energy"), KV([ - ["PV on every roof and canopy", "~640 kWp (decided October 2026: as much roof as possible). In " - "the Payap scenario model the calculator draws the factory roof " - "at ~523 kWp (901 modules of a generic 580 W placeholder; no " - "module chosen yet), the car and scooter canopies at ~54 kWp and " - "the office roof at ~65 kWp; the covered link and the utility " - "yard are left out. ~900 MWh a year at 1,400 to 1,500 kWh/kWp, " - "~85% of it used on site (~760 MWh: two shifts on 300 days, a " - "~60 kW base load off-shift and the battery), about 38% of the " - "launch plant's ~2,000 MWh a year with electric steam " - "(estimates). " + pick( + ["PV on the factory roof", "~520 kWp (decided October 2026: PV on the factory only, the other " + "roofs PV-ready). In the Payap scenario model the calculator draws " + "the factory roof at ~523 kWp (901 modules of a generic 580 W " + "placeholder; no module chosen yet). ~730 to 780 MWh a year at " + "1,400 to 1,500 kWh/kWp, ~87% of it used on site (~633 MWh: two " + "shifts on 300 days, a ~60 kW base load off-shift and the " + "battery), about 61% of the launch plant's ~1,036 MWh a year of " + "electricity with biomass steam (estimates). " + pick( "Taken through a solar PPA (below): the plant pays the PPA price for this power instead of " "buying the array, so its saving is the gap between that price and the ~3.7 THB/kWh of " "grid power it displaces", - "Saves ~2.8M to 3.0M THB a year at ~3.7 THB/kWh self-consumed and pays back in ~4.2 to 5.9 " - "years at 20 to 26 THB/W installed; the last ~340 kWp beyond the first ~300 pay back in " - "~4.9 to 6.3 years, because more of their yield is curtailed on Sundays (estimates)")], - ["Zero export", "The ~15% the plant cannot use, mostly on Sundays and holidays, is curtailed, not " + "Saves ~2.3M to 2.5M THB a year at ~3.7 THB/kWh self-consumed and pays back in ~4.1 to 5.8 " + "years at 20 to 26 THB/W installed (estimates)")], + ["Why ~520 kWp", "With biomass steam the running load is ~230 kW, with no electric boilers. An " + "hourly sketch (two shifts on 300 days, ~60 kW off-shift base load, the 271 kWh " + "battery, PEA's time-of-use tariff with Ft, 23,000 THB/kWp, 25 years at 8%) " + "puts the best array at ~500 to 550 kWp: the net present value peaks there, and " + "the kWp above ~550 lose money because more of their yield is curtailed. The " + "factory roof's ~520 kWp sits at that optimum (estimates)"], + ["PV-ready: office roof and canopies", "The office roof (~65 kWp) and the car and scooter canopies " + "(~54 kWp: car ~42, scooter ~13) are built ready for panels: structure rated for them (~20 kg/m² " + "plus wind uplift), conduit and a cable route to the main board, and a spare way for a later " + "inverter. Panels go on when the load rises with the second Duplex system: ~120 kWp for ~2.4M " + "to 3.1M THB at 20 to 26 THB/W (estimate). The preparation is small (estimate) and sits in the " + "building and site works; the construction RFQ already specifies canopy steel carrying PV"], + ["Zero export", "The ~13% the plant cannot use, mostly on Sundays and holidays, is curtailed, not " "sold: a factory on PEA's grid runs zero export, with no payment for surplus and " "a zero-export controller (reverse-power relay) as part of the interconnection " "(CapSolar and Sahawatthanakit, 2026)"], - ["On the Mueang Chi hall", "The 60 × 25 m hall of section 6.2 takes only ~300 kWp: ~247 kWp on " - "the 1,523 m² monopitch roof (425 modules) and ~40 to 54 kWp on the " - "parking canopies. The rest would need ground mount on the ~70 m of " - "plot behind the building (not covered by the rooftop exemption, so " - "it may still need a factory permit) or the phase 2 roof (~251 " - "kWp)"], + ["On the Mueang Chi hall", "The factory roof of the 60 × 25 m hall of section 6.2 takes only " + "~247 kWp (425 modules on the 1,523 m² monopitch roof), about half " + "the optimum; its parking canopies are PV-ready too (~40 to 54 kWp). " + "More would need ground mount on the ~70 m of plot behind the " + "building (not covered by the rooftop exemption, so it may still " + "need a factory permit) or the phase 2 roof (~251 kWp)"], ["Battery", "271 kWh Gobel Power LiFePO4 rack (15 stacked 18 kWh packs, 8,000+ cycles), USD " "39,900 to 58,000 listed (battery only; ~2.0M to 3.5M THB installed with enclosure, fire protection and " "controls, estimate), 50 to 60 day lead. Roughly an hour of the chiller bank's " "peak draw: ride-through, not off-grid autonomy"], - ["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), ~500 kVA in all (estimate); " + ["Inverters", "Deye three-phase hybrid units (30 to 80 kW class), ~430 kVA in all (about nine 50 kW " + "units, estimate); " "Thai distribution via Solar Nicolo; Deye is a supported protocol on the Gobel " "battery management"], ["Roof design", "Monopitch at 10° falling toward ESE puts the whole roof on one plane at ~98% " @@ -400,7 +408,7 @@ def blocks(): "burning-season dust"], ["Permits", "Since Ministerial Regulation No. 3 B.E. 2567 (in force 28 December 2024) rooftop " "solar outside industrial estates is not a factory, so it needs no Ror.Ngor. 4 " - "licence at any size. At ~500 kVA of inverters, under the 1,000 kVA line of the " + "licence at any size. At ~430 kVA of inverters, under the 1,000 kVA line of the " "Energy Regulatory Commission (ERC), an ERC exemption notification replaces a " "generation licence. PEA approves the interconnection with zero-export control in 3 " "to 6 months, filed in parallel with procurement (CapSolar, 2026); the roof load is " @@ -410,12 +418,13 @@ def blocks(): "against PVGIS before committing" + pick("; the PPA offer itself, price and " "terms", "")], pick(["Solar PPA (this plan)", "An installer owns and finances the PV and the battery, and the " - "plant buys the power at a price still to quote. The PPA covers the full ~640 kWp; the " - "calculator carries 3.0 THB/kWh (estimate) for the ~760 MWh used on site, ~2.3M THB or " - "~0.07M USD a year on the energy line. That keeps the PV EPC (USD 388k to 504k, 12.8M to " - "16.6M THB at 20 to 26 THB/W) and the battery (USD 61k to 106k) out of the capital round: " - "~17.5M THB less at the midpoint, one of the six levers in section 8. The launch plant's " - "power bill (~0.75M THB a month before solar, estimate) is well above the 100,000 THB a " + "plant buys the power at a price still to quote. The PPA covers the ~520 kWp factory " + "roof; the calculator carries 3.0 THB/kWh (estimate) for the ~633 MWh used on site, ~1.9M " + "THB or ~0.06M USD a year on the energy line. That keeps the PV EPC (USD 315k to 410k, " + "10.4M to 13.5M THB at 20 to 26 THB/W) and the battery (USD 61k to 106k) out of the capital " + "round: ~14.7M THB less at the midpoint, one of the six levers in section 8. The launch " + "plant's power bill (~0.36M THB a month before solar with biomass steam: ~1,036 MWh at the " + "blended ~3.81 THB/kWh plus the demand charge, estimate) is well above the 100,000 THB a " "month CapSolar asks of a PPA site; PPA discounts run 10 to 15 % off the tariff at MEAei " "and 10 to 30 % at CapSolar, so the calculator's ~21 % is to be quoted. Leasing gives up no BOI benefit on the array: BOI stopped promoting solar " "installations on 1 July 2025 (Announcement 3/2568, section 7.1). A PPA developer selling " @@ -424,77 +433,94 @@ def blocks(): "above and, if the PPA includes the battery, the battery's possible BOI eligibility as " "storage (to confirm with the BOI consultant). The PPA offer is asked against the " "specification above"], - ["Owned (this plan)", "The plant buys the array and the battery: PV EPC USD 388k to 504k " - "(12.8M to 16.6M THB for ~640 kWp, 20 to 26 THB/W installed with inverters at Thai 2026 " - "market prices; the canopy steel is in the building and site works) and the battery, " - "installed, USD 61k to 106k (2.0M to 3.5M THB): ~17.5M THB together at the midpoint, " - "estimates, section 8. Owning them saves the power bill a PPA would carry: at the " - "calculator's 3.0 THB/kWh (estimate, to quote) for the ~760 MWh used on site, ~2.3M THB " - "or ~0.07M USD a year. A solar PPA (an installer owns and finances them, the plant buys " - "the power at a price still to quote) would take ~17.5M THB out of the capital round at " - "the midpoint at the cost of that bill. The array itself carries no BOI benefit: BOI " + ["Owned (this plan)", "The plant buys the array and the battery: PV EPC USD 315k to 410k " + "(10.4M to 13.5M THB for ~520 kWp on the factory roof, 20 to 26 THB/W installed with " + "inverters at Thai 2026 market prices; the PV-ready canopy steel and conduit are in the " + "building and site works) and the battery, installed, USD 61k to 106k (2.0M to 3.5M THB): " + "~14.7M THB together at the midpoint, estimates, section 8. Owning them saves the power bill " + "a PPA would carry: at the calculator's 3.0 THB/kWh (estimate, to quote) for the ~633 MWh " + "used on site, ~1.9M THB or ~0.06M USD a year. A solar PPA (an installer owns and finances " + "them, the plant buys the power at a price still to quote) would take ~14.7M THB out of the " + "capital round at the midpoint at the cost of that bill. The array itself carries no BOI benefit: BOI " "stopped promoting solar installations on 1 July 2025 (Announcement 3/2568, section " "7.1); the owned battery may still qualify as storage (to confirm with the BOI " "consultant)"]), ]), - H3("Steam: the open engineering choice"), - P("The boilers' fuel is still open; the modular bank works with either. There is no natural gas " - "pipeline in Northern Thailand, so gas means a bulk LPG tank on site with hazardous-storage " - "separation and licensing, and diesel means a fuel tank with price exposure. The two routes " - "without a fossil tank, compared for the same heat (~1,120 to 1,280 MWh a year at about 1.0 " - "million records, the top of the plant's range; estimates):"), - T(["", "Electric boiler bank (~98%)", "Biomass boiler bank (~80%)"], [ - ["Price of heat", "~3.9 THB/kWh, plus the demand charge", "~0.5 to 0.9 THB/kWh at 1.35 to 2 " - "THB/kg delivered (reported market prices, October 2026; no supplier quote yet)"], - ["Running cost, mature two shifts", "~5.2M to 6.0M THB a year, including 0.8M to 1.0M of extra " - "demand charge for the five-press bank", "~0.6M to 1.2M THB a year of fuel, plus handling " - "and ash"], - ["Boiler package, 2 × 500 kg/h", pick("~2.8M to 5.5M THB through the Chinese route, the " - "plan's price (4.5M to 7M from Thai suppliers)", - "4.5M to 7M THB (Thai suppliers); the plan's price"), - "~6M to 10M THB, plus the fuel store"], - ["Grid", "Peak ~950 to 1,330 kW: PEA Schedule 4, 1,250 to 1,600 kVA", "Unchanged, ~800 to " - "1,000 kVA"], - ["Also", "Cleanest permitting, no fuel logistics, no stack", "Fuel contracts, a dry store sized " - "for the monsoon, ash handling, a 14 m stack and its emissions"], - ], widths_mm=[36, 64, 70], font_pt=8.5), + H3("Steam: biomass in both plans"), + P("Both plans make their steam from biomass (decided October 2026): two 500 kg/h biomass modules " + "(B-1, B-2) or one ~1 t/h package, Getabec class, 6M to 10M THB installed with the fuel feed, " + "grate and dust control, plus a fuel store and handling block of 1.0M to 2.0M THB (a covered " + "store, a chip bay, ash bins and a compact loader; utilities CSV, estimates). The electric boiler " + "bank (4.5M to 7M THB from Thai suppliers, 2.8M to 5.5M through the Chinese route) is now the " + "alternative, not the plan. There is no natural gas pipeline in Northern Thailand, so gas would " + "mean a bulk LPG tank on site with hazardous-storage separation and licensing, and diesel a fuel " + "tank with price exposure. The two routes without a fossil tank, compared for the launch plant " + "at ~850k records a year (~1,403 t of steam, ~954 MWh of heat; estimates):"), + T(["", "Biomass boiler bank (~80%): the plan", "Electric boiler bank (~98%): the alternative"], [ + ["Price of heat", "~0.5 to 0.9 THB/kWh at 1.35 to 2 THB/kg delivered (reported market prices, " + "October 2026; no supplier quote yet), ~0.7 planned", "~3.9 THB/kWh, plus the demand charge"], + ["Running cost, launch plant", "~0.67M THB a year of fuel at ~0.7 THB/kWh: about 300 t of " + "air-dry wood or ~460 t of fresh chips, plus handling and ash", "~4.9M THB a year: ~973 MWh at " + "the blended ~3.81 THB/kWh plus the demand charge on 2 × 360 kW of boilers"], + ["Boiler package, 2 × 500 kg/h", "~6M to 10M THB installed, plus 1.0M to 2.0M for the fuel " + "store and handling", "4.5M to 7M THB from Thai suppliers, ~2.8M to 5.5M through the Chinese " + "route"], + ["Grid", "Launch plant peak demand ~264 kW; 800 to 1,000 kVA for the five-press backbone", + "~980 kW at launch; the five presses ~950 to 1,330 kW, PEA Schedule 4, 1,250 to 1,600 kVA"], + ["Also", "Fuel contracts and a monsoon stock, ash handling, a 14 m flue stack with a dust " + "collector, more maintenance, a certified boiler attendant, emission limits in the permit", + "Cleanest permitting, no fuel logistics, no stack"], + ], widths_mm=[32, 70, 68], font_pt=8.5), P("**Reading it.** The electric boiler is the more efficient machine; biomass is by far the cheaper " - "heat. At maturity the fuel saving of ~4.0M to 5.4M THB a year repays the biomass premium in " - "under a year (estimate), so the earlier staged path (start electric, add biomass later) is a " - "permitting and fuel-logistics choice, not a cost one: every year on electric steam costs roughly " - "1.4M to 5.4M THB more. The site can decide it too: next to the pharmaceutical facility on Payap " - "land a biomass stack would be a hard sell, which favours electric or LPG there (section 6.1)."), - P("**Fuel.** A biomass bank burns roughly 350 to 400 tonnes of air-dry wood a year at about 1.0 " - "million records (~540 to 620 t as fresh chips, which is what the store and the monsoon stock are " - "sized for). Lamphun alone produces more than 900,000 t of farm residues a year (Maejo " - "University), so supply is not the constraint; price is. Reported prices follow diesel, so the " - "fuel contract gets a diesel clause and sources within ~50 km. The local price-setter is Ratch " - "Pathana's biomass buying centre at Pa Sak, Mueang Lamphun, which feeds a 9.6 MW cogeneration " - "plant and competes for the same fuel. The team's own 60 rai of forestry-classified land could " - "supply 80 to 135 t a year as short-rotation coppice once its title is checked; at market prices " - "that is worth only ~0.1M to 0.25M THB a year, so its value is supply security and the story " - "('records pressed with steam from our own trees'), not the fuel bill. Next step: written quotes " - "from Pa Sak and two or three chip suppliers, priced by moisture, before the boiler decision."), - P("**Where the boilers come from.** " + pick( - "The plan buys the two modules through the Chinese route: boiler bodies from a Chinese maker " - "with Thai references (ZOZEN, Sitong, Fangkuai, Taiguo), installed with the feed tank, pumps, " - "header, controls and piping by a Thai boiler contractor, for roughly 2.8M to 5.5M THB " - "installed against 4.5M to 7M from Thai suppliers, about 1.6M THB less at the midpoint. The " - "compressor is a Chinese brand bought through its Thai office (Kaishan and Denair have one), " - "so service stays local; with it the route saves ~1.9M THB at the midpoint (estimates from " - "listings, not quotes). ", - "The plan buys the two modules and the compressor from Thai suppliers (4.5M to 7M THB " - "installed for the boilers). Chinese makers with Thai references (ZOZEN, Sitong, Fangkuai, " - "Taiguo) could supply the boilers for roughly 2.8M to 5.5M THB installed, about 1.6M THB " - "less at the midpoint, and with a Chinese compressor brand bought through its Thai office " - "~1.9M less (estimates from listings, not quotes): a step if quotes land high. ") + - "The specification is a 1.25 MPa design to ASME Section I with the S stamp; most Chinese packaged " - "electric units are rated 0.4 to 0.8 MPa and cannot deliver 10 bar. An imported boiler must meet " - "TIS, ASME, JIS, EN or an equivalent standard and be verified by a certification body registered " - "with the Department of Industrial Works (DIW), engaged before the order (section 7). No mainland " - "maker has a verified Thai service partner, so a Thai boiler contractor and the certification " - "body are the service layer either way. Chillers and air conditioning, the larger blocks, have " - "not been checked for a Chinese route yet."), + "heat. At launch biomass saves **~4.2M THB (~0.13M USD) a year** against electric steam, so it " + "repays its higher price and the fuel store (~3.8M to 5.4M THB more at the midpoints than a Thai " + "or a Chinese electric bank) in about a year (estimates). Without electric boilers the plant's " + "demand stays at ~264 kW instead of ~980 kW, which also means a smaller transformer and PEA " + "deposit (not re-priced; an upside). The earlier staged path (start electric, add biomass later) " + "is dropped: each year on electric steam would cost about that ~4.2M THB more. The site still " + "matters: next to the pharmaceutical facility on Payap land a biomass stack is a hard sell, so " + "the GMP-neighbour check (section 6.1) asks about it before any design work, and the electric " + "bank is the fall-back there."), + P("**What biomass brings with it.** Fuel contracts and a dry stock for the monsoon: the 42 m² store " + "drawn in the utility yard holds ~6 to 7 weeks of fresh chips, and a 3-month monsoon stock needs " + "~80 m² (estimates). Ash to handle and dispose of. The 14 m flue stack and the dust collector, " + "already drawn in the utility yard. More maintenance than an electric bank, and a certified boiler " + "attendant from the maintenance team as the licensed boiler controller (section 7.2). Boiler " + "registration and the air-emission limits for a solid-fuel boiler in the permit work (to confirm, " + "section 7.2). And a visible point source in Chiang Mai's burning season (February to April): dust " + "control matters for the story as much as for the permit, and buying farm residues that would " + "otherwise be burned in the fields is the other half of that story."), + P("**Fuel.** The launch plant burns about 300 t of air-dry wood or ~460 t of fresh chips a year at " + "~850k records; the five-press fleet at about 1.0 million records would burn 350 to 400 t air-dry " + "(~540 to 620 t as fresh chips; estimates). Lamphun alone produces more than 900,000 t of farm " + "residues a year (Maejo University), so supply is not the constraint; price is. Reported prices " + "follow diesel, so the fuel contract gets a diesel clause and sources within ~50 km. The local " + "price-setter is Ratch Pathana's biomass buying centre at Pa Sak, Mueang Lamphun, which feeds a " + "9.6 MW cogeneration plant and competes for the same fuel. The team's own 60 rai of " + "forestry-classified land could supply 80 to 135 t a year as short-rotation coppice, an upside " + "once its title is checked; at market prices that is worth only ~0.1M to 0.25M THB a year, so its " + "value is supply security and the story ('records pressed with steam from our own trees'), not " + "the fuel bill. Next step: written quotes from Pa Sak and two or three chip suppliers, priced by " + "moisture, before the boiler order."), + P("**Where the boilers come from.** Both plans price the biomass modules from a Thai maker with " + "Thai fabrication and service (Getabec class, 6M to 10M THB installed; utilities CSV, estimate). " + "Chinese makers build biomass boilers too (ZOZEN DZL, Sitong DZL and SZL, Taiguo, Yongxing), but " + "none is priced yet: the Chinese route checked so far priced only electric boilers. " + pick( + "That makes a Chinese biomass quote a decision point for this plan: one ~2M THB or more below " + "the Thai package would bring Plan A back under 180M THB at the midpoint. What this plan takes " + "through the Chinese route is the compressor, a Chinese brand bought through its Thai office " + "(Kaishan and Denair have one) so service stays local, ~0.25M THB less at the midpoint " + "(estimate from listings, not a quote). ", + "A Chinese biomass quote is a step if quotes land high, and so is a Chinese compressor brand " + "bought through its Thai office (Kaishan and Denair have one), ~0.25M THB less at the midpoint " + "(estimate from listings, not a quote); this plan buys the compressor from a Thai supplier. ") + + "Any module, Thai or imported, is specified as a 1.25 MPa design to ASME Section I with the S " + "stamp (most Chinese packaged electric units are rated 0.4 to 0.8 MPa and cannot deliver 10 bar). " + "An imported boiler must meet TIS, ASME, JIS, EN or an equivalent standard and be verified by a " + "certification body registered with the Department of Industrial Works (DIW), engaged before the " + "order (section 7). No mainland maker has a verified Thai service partner, so for an imported " + "boiler a Thai boiler contractor and the certification body would be the service layer. Chillers " + "and air conditioning, the larger blocks, have not been checked for a Chinese route yet."), H3("Water"), P("Water arriving is still open: no source is confirmed for the candidate site (PWA mains, a " "licensed deep well, or both), and a water analysis comes before the boiler and chiller RFQs " @@ -522,12 +548,13 @@ def blocks(): "acceptable the cost drops materially, and that question is on the RFQ list."), CALL("Efficiency in one paragraph, for the investor", "Steam and cooling are built once as a " "backbone and filled with identical modules as presses arrive; heat is recovered from the " - "flue gas, the condensate and the press returns before more is generated; every roof and " - "canopy carries PV" + pick(" through a solar PPA", "") + " (~640 kWp, over a third of the " - "launch plant's electricity even with electric steam, estimate), with a battery for " - "ride-through; no " - "process water is discharged; a fifth of the plastic is reclaimed; and biomass steam, if " - "chosen, costs a quarter to a tenth of electric steam. The same choices push the energy line " + "flue gas, the condensate and the press returns before more is generated; steam comes from " + "biomass in both plans, at about a seventh of what electric steam would cost (~0.67M against " + "~4.9M THB a year at launch, estimate); the factory roof carries PV" + + pick(" through a solar PPA", "") + " (~520 kWp, ~61% of the launch plant's electricity, " + "estimate), with the office roof and the canopies ready for more panels and a battery for " + "ride-through; no process water is discharged; and a fifth of the plastic is reclaimed. The " + "same choices push the energy line " "toward its low end and hedge Thai tariff rises; the heat recovery and automation can count " "toward BOI's Smart and Sustainable Industry measure" + pick( "", " and the owned battery may qualify as storage") + " (section 7.1; BOI no longer " @@ -688,7 +715,8 @@ def blocks(): "the same land"], ], widths_mm=[28, 44, 44, 54], font_pt=8.5), P("**Galvanics now raises the bar for every site.** With the electroplating line in the plan, a " - "plot has to permit record pressing with a steam boiler **and** electroplating from day " + "plot has to permit record pressing with a biomass-fired steam boiler **and** electroplating " + "from day " "one, not in a later phase. That favours the industrial estate (licensing through the estate, " "shared effluent treatment) and makes zoning the first check everywhere else."), P("**Payap University** approached the project and is interested in leasing land next to a " @@ -706,11 +734,12 @@ def blocks(): "could back the PVC lab. Any Payap plot is checked in this order, before any design work:"), N([ "**Zoning:** the plot's zone in the Chiang Mai city plan allows a record-pressing factory with a " - "steam boiler and electroplating (the neighbour's pharmaceutical permit proves little).", + "biomass-fired steam boiler and electroplating (the neighbour's pharmaceutical permit proves " + "little).", "**Lease-ability:** Chanote title, university council approval, and whether campus land of a " "private university can be leased commercially; with Thai counsel, together with the lease " "terms below.", - "**The GMP neighbour:** a pharmaceutical plant is sensitive to the boiler stack, galvanics " + "**The GMP neighbour:** a pharmaceutical plant is sensitive to the biomass boiler's stack, galvanics " "extraction, extrusion fumes, noise and trucks; emission and buffer rules go into the lease, " "not after the first complaint.", "**Flooding:** Payap describes the land as low-lying when bought; check the plot against the " @@ -743,9 +772,9 @@ def blocks(): "figure.", ]), P("Land requirements: ~4 rai minimum, 6 to 8 rai comfortable with expansion; truck access and " - "turning, parking, the detached utility yard, a separated battery enclosure, and a medium-voltage " - "connection from PEA (800 to 1,000 kVA for the five-press backbone without electric steam, 1,250 " - "to 1,600 kVA with it)."), + "turning, parking, the detached utility yard with truck access for biomass deliveries, a " + "separated battery enclosure, and a medium-voltage connection from PEA (800 to 1,000 kVA for the " + "five-press backbone on biomass steam; electric steam would need 1,250 to 1,600 kVA)."), H2("6.2 The building"), P("The main building is a single-storey steel portal frame (pre-engineered) of **60 × 25 m " @@ -791,12 +820,14 @@ def blocks(): "figures and their source."), IMG(pick("renders/calculator/plan-a-iso-roof.png", "renders/calculator/plan-b-iso-roof.png"), 170, "Figure 8. The site from above, " + label() + " preset of the plant and business plan calculator: " - "every roof and canopy carries PV, ~640 kWp on the factory, the office and the car and scooter " - "parking" + pick(", supplied through the solar PPA (the battery is drawn too; whether a PPA offer " - "includes it is open)", ", owned with the battery") + - "; the utility yard (boiler hall and chiller compound built for four modules each, pump and " - "heat-exchanger room, transformer, water treatment, PVC silos) and the phase 2 reserve. Schematic render of the Payap scenario model (docs/fleet-calculator.html); " - "positions and envelopes are estimates."), + "PV on the factory roof, ~520 kWp" + pick(", supplied through the solar PPA (the battery is drawn " + "too; whether a PPA offer includes it is open)", + ", owned with the battery") + + ", with the office roof and the car and scooter canopies PV-ready and without panels; the " + "utility yard (biomass boiler hall and chiller compound built for four modules each, the " + "biomass fuel store, the flue stack and dust collector, pump and heat-exchanger room, " + "transformer, water treatment, PVC silos) and the phase 2 reserve. Schematic render of the " + "Payap scenario model (docs/fleet-calculator.html); positions and envelopes are estimates."), IMG(pick("renders/calculator/plan-a-iso-gf.png", "renders/calculator/plan-b-iso-gf.png"), 170, "Figure 9. Ground floor with the roofs cut away, " + label() + " preset: from the west end the " "staff entry, workshop, galvanics (PASU, PPPU, PDPU, PMPB), Sibert stamper prep, metrology" + @@ -810,12 +841,14 @@ def blocks(): IMG(pick("renders/calculator/plan-a-iso-hall.png", "renders/calculator/plan-b-iso-hall.png"), 170, "Figure 10. The press hall close up, " + label() + " preset: " + pick( "Duplex system 1 (two HRP 12 presses with their extruders) and the Classic; the dashed " - "outlines are the free Duplex bays and Classic positions for growth. In the yard, boiler " - "modules B-1 and B-2 and chillers CH-1 and CH-2, with B-3, B-4, CH-3 and CH-4 free", + "outlines are the free Duplex bays and Classic positions for growth. In the yard, biomass " + "boiler modules B-1 and B-2 with the fuel store, flue stack and dust collector, and chillers " + "CH-1 and CH-2, with B-3, B-4, CH-3 and CH-4 free", "Duplex system 1 (two HRP 12 presses with their extruders) and the Classic, in a hall laid " "out for five Duplex bays and four Classic positions; the dashed outlines are the free bays " - "and positions for growth. In the yard, boiler modules B-1 and B-2 and chillers CH-1 and " - "CH-2, with B-3, B-4, CH-3 and CH-4 free; the 5 t crane over the hall, the visitor corridor " + "and positions for growth. In the yard, biomass boiler modules B-1 and B-2 with the fuel " + "store, flue stack and dust collector, and chillers CH-1 and CH-2, with B-3, B-4, CH-3 and " + "CH-4 free; the 5 t crane over the hall, the visitor corridor " "and the cassette and CD-R rooms are in place") + ". Schematic, estimates."), H3("Crane, workshop and visitor corridor"), @@ -873,17 +906,18 @@ def blocks(): ])), H3("Utility yard and water-treatment building"), T(["Detached utility yard (decided October 2026)", "Size (estimate)"], [ - ["Boiler hall, four 500 kg/h module positions (B-1 and B-2 at launch)", "~162 m² (18 × 9 m), " + ["Boiler hall, four 500 kg/h biomass module positions (B-1 and B-2 at launch)", "~162 m² (18 × 9 m), " "6.0 m high"], - ["Biomass fuel store", "42 m²"], + ["Biomass fuel store (~6 to 7 weeks of fresh chips; ~80 m² would hold a 3-month monsoon " + "stock)", "42 m² drawn"], ["Chiller compound, open and screened, four pads (CH-1 and CH-2" " at launch)", "~135 m² (12.5 × " "10.8 m)"], ["Cooling pump and heat-exchanger room", "~40 m² (8 × 5 m)"], - ["Flue stack", "14 m"], + ["Flue stack, with the dust collector and fans along the boiler hall's back wall", "14 m"], ["**Yard in all**", "**~379 m²**, against 178 m² before the four-module decision"], ], widths_mm=[110, 60], - caption="The fired case sets the boiler hall (an electric bank would need about half). No " + caption="The biomass bank of both plans sets the boiler hall (an electric bank would need about half). No " "cooling tower: the chillers are air-cooled. The rooms are built once for four modules " "and the plant goes in one module at a time; the yard sits outside the main building " "because the boiler must have its own room and biomass deliveries need yard access."), @@ -904,8 +938,8 @@ def blocks(): H3("Site works and the second building"), P("On the Mueang Chi parcel the site works are a ~444 m perimeter wall, one 10 m sliding gate with " "a guard house, 4,387 m² of paving in two classes (1,608 m² heavy-duty for trucks, 2,779 m² " - "general), roofed parking for 10 cars and 30 scooters with its canopies fully covered in PV (~54 " - "kWp; ~40 kWp in the construction RFQ), a ring foundation " + "general), roofed parking for 10 cars and 30 scooters under PV-ready canopies (steel for ~40 " + "kWp of panels in the construction RFQ; panels later), a ring foundation " "for a 9 m fire-water tank with its pump house and one for a 5 m raw-water tank, a fire ring main " "and hydrants, stormwater drainage and domestic sanitation. With the buildings, ~6,549 m² or 68% " "of the modelled plot is sealed, so stormwater attenuation, quite possibly a detention pond, may " @@ -930,7 +964,9 @@ def blocks(): "utility yard with floors, pads and plinths for all four positions; a lump sum for the rest of " "the site works; and the foundation assumption behind all of it. It excludes process machinery, " "PV, air conditioning, boilers, chillers and tanks, sprinklers, fit-out and the PEA transformer, " - "and asks whether permit drawings for the building permit and the factory licence are included."), + "and asks whether permit drawings for the building permit and the factory licence are included. " + "The PV-ready provisions (the canopy steel it already specifies, roof loads for panels, conduit to " + "the main board and a spare way for a later inverter) belong to the same works."), H3("What the building costs, and what is not known"), T(["Block", "USD", "THB", "Basis"], [ ["Building ~1,500 m² plus civil and site works", "650k to 1,100k", "21.4M to 36.3M", @@ -948,7 +984,8 @@ def blocks(): ["Visitor corridor and accessible entrance", "67k to 148k", "2.2M to 4.9M", "estimate; " "building it later would take ~3.6M THB out at the midpoint"]), ["Utility yard for four boiler and four chiller modules", "73k to 122k", "2.4M to 4.0M", - "estimate at the building rate"], + "estimate at the building rate; the biomass fuel store and handling (1.0M to 2.0M THB) sit in " + "the utilities block"], ["Water-treatment building next to galvanics", "52k to 87k", "1.7M to 2.9M", "estimate at the " "building rate"], pick(["**Together**", "**~0.84M to 1.48M**", "**~28M to 49M**", "sum of the blocks; the plan " @@ -979,8 +1016,8 @@ def blocks(): "decontamination procedures, eyewash and emergency shower at the line, and a hard-wired " "interlock (no extraction, no plating). A machine is lifted only after lockout (power isolated, " "steam vented, hydraulics depressurised including the accumulator) and with a lift plan; hot work " - "stays in the workshop under a permit; the boilers run under a licensed boiler controller " - "(section 7)."), + "stays in the workshop under a permit; the biomass boilers run under a licensed boiler " + "controller, a certified attendant from the maintenance team (section 7.2)."), P("Decided in October 2026: every member of staff, office included, gets group health insurance " "(inpatient and outpatient) and a yearly check-up on top of social security, plus the " "occupational checks Thai law requires for risk-factor work (press-floor heat and noise, " @@ -1060,8 +1097,8 @@ def blocks(): "machinery and raw materials lives, from the first capex invoice."), P("**Process:** file via the e-Investment system and present at an analyst meeting. BOI quotes " "about 40 working days to a decision for projects under THB 200M and 60 to 90 working days for " - "larger tiers; at " + pick("~127M to 226M THB with the ramp-up reserve (~177M at the midpoint)", - "~156M to 275M THB with the ramp-up reserve (~216M at the midpoint)") + + "larger tiers; at " + pick("~132M to 233M THB with the ramp-up reserve (~182M at the midpoint)", + "~156M to 277M THB with the ramp-up reserve (~217M at the midpoint)") + " the plan sits around that line, so the consultant " "confirms which applies. In practice it is roughly 4 to 6 months end to end to the certificate; " "the company is incorporated under it; machinery is imported within a window commonly 30 months " @@ -1071,7 +1108,8 @@ def blocks(): "directly."), H2("7.2 Factory licence, galvanics and boilers"), P("BOI promotion does not replace the factory licence (Ror.Ngor. 4), hazardous-substance " - "registration for the plating chemistry, wastewater permitting or the boiler rules. **Galvanics " + "registration for the plating chemistry, wastewater permitting, the boiler rules or the air-emission " + "limits for the biomass boiler's stack. **Galvanics " "is in the plant from launch, so the electroplating line, its chemistry and its zero-discharge " "effluent system are in the first factory licence application**, not a later amendment. The " "earlier plan to keep galvanics out of the first licence to protect the schedule no longer " @@ -1079,7 +1117,7 @@ def blocks(): "sits on the path to the first paying release:"), B([ "**The site must permit plating from day one** (section 6.1): zoning has to allow a " - "record-pressing factory with a steam boiler and an electroplating line. The industrial " + "record-pressing factory with a biomass-fired steam boiler and an electroplating line. The industrial " "estate's licensing and shared effluent treatment are the easiest path; on Mueang Chi the " "permit is ours; on Payap land the lessor's written consent comes on top.", "**Zero discharge is the design, and the application says so:** rinse water through the ZLD " @@ -1100,13 +1138,16 @@ def blocks(): "reported to DIW within 30 days; **a licensed boiler controller on site**; and **inspection at " "least once a year**. The relief for small once-through units does not apply at ~10.5 bar (our " "reading), and the labour-side regulation of 2021 adds licensed-engineer installation and " - "testing and a feedwater standard. " + pick( - "**This plan's two boiler bodies come from a Chinese maker, so they take the imported-boiler " - "route of the notification:** verification by a registered certification body with the full " - "dossier, and an ASME Section I design at 1.25 MPa with the S stamp, because a boiler built " - "to the Chinese GB code would rest on 'or equivalent' with no precedent found. ", - "The plan's modules come from Thai suppliers to the same ASME specification; a Chinese " - "boiler built to the Chinese GB code would rest on 'or equivalent' with no precedent found. ") + + "testing and a feedwater standard. Both plans price the biomass modules from a Thai maker to the " + "ASME specification of section 5.4. A Chinese biomass boiler" + pick( + " (the open decision point of section 5.4)", "") + " would take the imported-boiler route of " + "the notification: verification by a registered certification body with the full dossier, and an " + "ASME Section I design at 1.25 MPa with the S stamp, because a boiler built to the Chinese GB code " + "would rest on 'or equivalent' with no precedent found. **Biomass adds to the permit work** (to " + "confirm with the permit engineer before the RFQ): the boiler registered with DIW; the air-emission " + "limits for a solid-fuel boiler met at the 14 m stack, with the dust collector in the boiler " + "package; the fuel store and ash handling in the factory licence drawings; and the licensed " + "boiler controller, a certified attendant from the maintenance team. " + "DIW has announced a " "revision of the boiler, pressure-vessel and refrigeration rules, so they are rechecked before " "the RFQ, and a certification body is engaged before any boiler order."), diff --git a/docs/business-plan/build/content_c.py b/docs/business-plan/build/content_c.py index 44df4b3..f396fdc 100644 --- a/docs/business-plan/build/content_c.py +++ b/docs/business-plan/build/content_c.py @@ -48,29 +48,36 @@ def _block_rows(): "station", "350k to 810k", "11.6M to 26.7M", "Estimate; all of it at launch (Plan A buys the laser " "confocal and the wide-area profiler from revenue)"]), ["PVC lab, day-one tier", "55k to 150k", "1.8M to 5.0M", "Estimate"], - pick(["Steam, cooling and compressed air: two 500 kg/h boiler modules (priced electric), cooling " - "backbone for four modules (plate heat exchanger, tanks, pumps, mains), two 250 kW chiller " - "modules (CH-1, CH-2), screw compressor, dryer and receiver", "239k to 416k", "7.9M to 13.7M", - "Researched: utilities rows; boilers and compressor through the Chinese route (lever 6): " - "ASME-stamped 1.25 MPa boiler bodies installed by a Thai contractor, the compressor from a " - "Chinese brand's Thai office"], - ["Steam, cooling and compressed air: two 500 kg/h boiler modules (priced electric), cooling " - "backbone for four modules (plate heat exchanger, tanks, pumps, mains), two 250 kW chiller " - "modules (CH-1, CH-2), screw compressor, dryer and receiver", "296k to 470k", "9.8M to 15.5M", - "Researched: utilities rows; boilers and compressor from Thai suppliers, with local service"]), + ["Steam: two 500 kg/h biomass boiler modules (B-1, B-2; Getabec class), installed with fuel feed, " + "grate and dust control", "182k to 303k", "6.0M to 10.0M", "Researched: utilities rows, the biomass " + "package for ~1 t/h (engineering estimate); both plans run on biomass (decided 17 October 2026); the " + "electric bank (Thai 4.5M to 7.0M, Chinese route 2.8M to 5.5M) is the alternative, not the plan"], + ["Biomass fuel store and handling: covered fuel store, chip bay, ash bins, a compact loader", + "30k to 61k", "1.0M to 2.0M", "Estimate, utilities rows: 42 m² store drawn (~6 to 7 weeks of fresh " + "chips), ~80 m² for a 3-month monsoon stock"], + pick(["Cooling and compressed air: cooling backbone for four modules (plate heat exchanger, tanks, " + "pumps, mains), two 250 kW chiller modules (CH-1, CH-2), screw compressor, dryer and receiver", + "153k to 248k", "5.05M to 8.2M", "Researched: utilities rows; the compressor through the Chinese " + "route (lever 6), from a Chinese brand's Thai office"], + ["Cooling and compressed air: cooling backbone for four modules (plate heat exchanger, tanks, " + "pumps, mains), two 250 kW chiller modules (CH-1, CH-2), screw compressor, dryer and receiver", + "159k to 258k", "5.25M to 8.5M", "Researched: utilities rows; the compressor from a Thai supplier, " + "with local service"]), ["Whole-factory HVAC, clean-room adder for galvanics and the cutting room, softener, loop treatment, " "racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"], ] if not a: - rows.append(["Solar PV (EPC) on every roof and canopy, ~640 kWp, and the 271 kWh Gobel battery, owned", - "449k to 610k", "14.8M to 20.1M", - "Researched: utilities rows; PV at 20 to 26 THB/W installed, inverters included (12.8M to " - "16.6M), battery 2.0M to 3.5M; ~85 % of the yield used on site under zero export (estimate); " + rows.append(["Solar PV (EPC) on the factory roof, ~520 kWp, and the 271 kWh Gobel battery, owned (the " + "office roof and the canopies PV-ready, panels later)", + "376k to 516k", "12.4M to 17.0M", + "Researched: utilities rows; PV at 20 to 26 THB/W installed, inverters included (10.4M to " + "13.5M), battery 2.0M to 3.5M; ~87 % of the yield used on site under zero export (estimate); " "owned, so the plant keeps the whole bill saving (no BOI promotion for solar installations " "since 1 July 2025, section 8.4)"]) rows += [ ["Building ~1,500 m² plus civil and site works", "650k to 1,100k", "21.4M to 36.3M", "Estimate at " - "12,000 to 20,000 THB/m² plus ~20 % site works; soil is the main variable"], + "12,000 to 20,000 THB/m² plus ~20 % site works; soil is the main variable; includes making the office " + "roof and the canopies PV-ready (structure, conduit; small, estimate)"], pick(["Crane rented for the installations (mobile crane); frame, runway and machine door stay " "crane-ready", "39k to 91k", "1.3M to 3.0M", "Estimate: 40 % of the crane block (lever 5)"], ["Overhead crane, runway, frame premium, machine door", "97k to 227k", "3.2M to 7.5M", "Estimate"]), @@ -95,22 +102,22 @@ def _block_rows(): "4.5M to 9.7M", "Estimate; land is leased, so no land purchase"], ] if a: - rows.append(["Not bought at launch (levers, section 8.2): solar PV on every roof and canopy (~640 kWp) " + rows.append(["Not bought at launch (levers, section 8.2): solar PV on the factory roof (~520 kWp) " "and the battery (solar PPA), visitor corridor, cassette and CD-R duplication", "none", "none", "The PPA installer owns and " "finances the array; the rest are growth steps from revenue"]) rows += [ - pick(["**Subtotal, plan investment**", "**~3.56M to 6.25M**", "**~117.4M to 206.1M**", - "**Midpoint ~161.7M THB (~4.90M USD)**"], - ["**Subtotal, plan investment**", "**~4.42M to 7.73M**", "**~145.9M to 255.2M**", - "**Midpoint ~200.6M THB (~6.08M USD)**"]), + pick(["**Subtotal, plan investment**", "**~3.68M to 6.44M**", "**~121.6M to 212.6M**", + "**Midpoint ~167.1M THB (~5.06M USD)**"], + ["**Subtotal, plan investment**", "**~4.42M to 7.79M**", "**~146.0M to 257.1M**", + "**Midpoint ~201.6M THB (~6.11M USD)**"]), ["Ramp-up reserve: staff hired before first revenue, overheads until volume covers them", "~0.30M to 0.61M", "10M to 20M", "Estimate; cash the investor puts in, so it is in the plan price"], - pick(["**Plan A price**", "**~3.86M to 6.85M**", "**~127M to 226M**", - "**Midpoint ~177M THB (~5.35M USD): ~180M THB**"], - ["**Plan B price**", "**~4.72M to 8.34M**", "**~156M to 275M**", - "**Midpoint ~216M THB (~6.53M USD): ~215M THB**"]), + pick(["**Plan A price**", "**~3.99M to 7.05M**", "**~132M to 233M**", + "**Midpoint ~182M THB (~5.52M USD): ~180M THB, ~2M above 180M**"], + ["**Plan B price**", "**~4.73M to 8.40M**", "**~156M to 277M**", + "**Midpoint ~217M THB (~6.56M USD): ~215M THB**"]), ["Contingency: not in the plan price", "", "", pick( - "For information: at 15 %, ~24M THB at the midpoint", + "For information: at 15 %, ~25M THB at the midpoint", "For information: at 15 %, ~30M THB at the midpoint")], ] return rows @@ -119,28 +126,30 @@ def _block_rows(): def _levers_table(): """Plan A: the six levers from the launch plant with every block, midpoints, no contingency.""" return T(["Step", "Saves", "Subtotal after it", "What it gives up"], [ - ["Launch plant, every block, no contingency", "", "~200.6M THB (~6.08M USD)", ""], - ["1. Solar on every roof and canopy (~640 kWp) and the battery through a solar PPA (the installer owns " - "and finances the array; the plant buys the power)", "~17.5M", "~183.1M", "Owned solar and its whole " - "bill saving: adds the PPA power price to the energy bill, ~0.07M USD (~2.3M THB) a year in the " - "calculator for ~760 MWh used on site at 3.0 THB/kWh (estimate, to quote)"], + ["Launch plant, every block, no contingency", "", "~201.6M THB (~6.11M USD)", ""], + ["1. Solar on the factory roof (~520 kWp) and the battery through a solar PPA (the installer owns " + "and finances the array; the plant buys the power)", "~14.7M", "~186.9M", "Owned solar and its whole " + "bill saving: adds the PPA power price to the energy bill, ~0.06M USD (~1.9M THB) a year in the " + "calculator for ~633 MWh used on site at 3.0 THB/kWh (estimate, to quote)"], ["2. Metrology launch tier: XRF, inline vision and audio station at launch; laser confocal and " - "wide-area profiler (USD 180k to 350k) bought from revenue", "~8.8M", "~174.4M", "Every stamper and " + "wide-area profiler (USD 180k to 350k) bought from revenue", "~8.8M", "~178.1M", "Every stamper and " "record is still measured (XRF, inline vision on the presses, audio station); the confocal and the " "profiler come later"], - ["3. Visitor corridor built later", "~3.6M", "~170.8M", "No public tours at first: the tour route and " + ["3. Visitor corridor built later", "~3.6M", "~174.5M", "No public tours at first: the tour route and " "the Payap programmes around it start later"], - ["4. Cassette and CD-R duplication later", "~4.0M", "~166.8M", "No cassette or CD-R at launch; a growth " + ["4. Cassette and CD-R duplication later", "~4.0M", "~170.5M", "No cassette or CD-R at launch; a growth " "step"], - ["5. Crane rented for the installations (mobile crane)", "~3.2M", "~163.6M", "No overhead crane at " + ["5. Crane rented for the installations (mobile crane)", "~3.2M", "~167.3M", "No overhead crane at " "first; frame, runway and machine door stay crane-ready, so it can be bought later if needed"], - ["6. Boilers and compressor through the Chinese route", "~1.9M", "**~161.7M (~4.90M USD)**", - "Imported boilers take the Thai route (Ministry of Industry boiler notification B.E. 2549: design " - "and import rules, a certification body registered with the Department of Industrial Works) with an " - "ASME S stamp at 1.25 MPa"], + ["6. Compressor through the Chinese route (a Chinese brand's Thai office)", "~0.25M", + "**~167.1M (~5.06M USD)**", "A Chinese brand's screw compressor (Kaishan or Denair, both with Thai " + "offices) instead of a Thai supplier's. The route priced only electric boilers; Chinese biomass " + "boilers (ZOZEN, Sitong, Taiguo, Yongxing) are not priced yet, and a quote ~2M THB or more below the " + "Thai biomass package would put Plan A back under 180M"], ["Ramp-up reserve", "", "+10M to 20M", ""], - ["**Plan A**", "", "**~177M THB (~5.35M USD)**", "~127M to 226M from the low to the high end of every " - "block"], + ["**Plan A**", "", "**~182M THB (~5.52M USD)**", "**~2M above 180M at the midpoint** (177M to 187M " + "with the reserve's 10M to 20M); ~132M to 233M from " + "the low to the high end of every block"], ], widths_mm=[56, 16, 32, 66], font_pt=8.5, caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. " "The levers keep every machine of the launch plant.") @@ -149,10 +158,11 @@ def _levers_table(): def _keeps_table(): """Plan B: what it keeps that Plan A's six levers move off the launch budget, midpoints, no contingency.""" return T(["In at launch in Plan B", "What it gives the plant", "THB, midpoint (Plan A's lever)"], [ - ["Solar PV on every roof and canopy (~640 kWp) and the 271 kWh battery, owned (EPC and Gobel battery)", - "No PPA power bill: the whole saving on the ~760 MWh used on site (~2.8M to 3.0M THB a year) stays " - "with the plant instead of ~2.3M THB (~0.07M USD) a year going to a PPA installer; payback ~4.2 to " - "5.9 years (estimates)", "~17.5M"], + ["Solar PV on the factory roof (~520 kWp; the office roof and the canopies PV-ready) and the 271 kWh " + "battery, owned (EPC and Gobel battery)", + "No PPA power bill: the whole saving on the ~633 MWh used on site (~2.3M to 2.5M THB a year) stays " + "with the plant instead of ~1.9M THB (~0.06M USD) a year going to a PPA installer; payback ~4.1 to " + "5.8 years (estimates)", "~14.7M"], ["Metrology, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio station", "Every stamper measured fully from the first release, the core of the traceability pitch", "~8.8M"], ["Visitor corridor and accessible entrance", "Public tours and the Payap programmes possible from the " @@ -161,47 +171,44 @@ def _keeps_table(): ["5 t overhead crane, runway, frame premium, machine door, bought", "Its own crane over the press " "hall; no mobile crane to rent for " "the installations", "~3.2M"], - ["Boilers and compressor from Thai suppliers", "Local service; no import route for the boilers", - "~1.9M"], - ["**Together**", "", "**~39M (200.6M minus Plan A's 161.7M)**"], - ["Launch plant, every block, no contingency: Plan B's subtotal", "", "~200.6M (~6.08M USD)"], + ["Screw compressor from a Thai supplier", "Local service", "~0.25M"], + ["**Together**", "", "**~34.5M (201.6M minus Plan A's 167.1M)**"], + ["Launch plant, every block, no contingency: Plan B's subtotal", "", "~201.6M (~6.11M USD)"], ["Ramp-up reserve", "", "+10M to 20M"], - ["**Plan B**", "", "**~216M THB (~6.53M USD)**; ~156M to 275M from the low to the high end"], + ["**Plan B**", "", "**~217M THB (~6.56M USD)**; ~156M to 277M from the low to the high end"], ], widths_mm=[62, 70, 38], font_pt=8.5, caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. " - "Each figure is what the matching Plan A lever saves; rounded, the six add to ~39.0M, and the " - "two subtotals differ by ~38.9M.") + "Each figure is what the matching Plan A lever saves; rounded, the six add to ~34.6M, and the " + "two subtotals differ by ~34.5M. Steam is biomass in both plans, so the boilers are not a " + "difference between them.") def _tranches(): return T(["Tranche", "Trigger", "Covers", "Approx. share, THB"], [ ["0", "Now", "Phase 0 work (section 14.1)", "The Phase 0 block, ~1.3M to 2.6M (1 to 2 %)"], ["1", "BOI certificate issued; lease signed; zoning and soil confirmed; pricing validated", - pick("Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt " - "Duplex system and Classic; building design and permit; first boiler and chiller modules " - "(boilers and compressor through the Chinese route)", - "Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt " - "Duplex system and Classic; building design and permit; first boiler and chiller modules " - "(boilers and compressor from Thai suppliers)"), - pick("20 to 30 % (~32M to 49M)", "20 to 30 % (~40M to 60M)")], + "Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt " + "Duplex system and Classic; building design and permit; the two biomass boiler modules and the first " + "two chiller modules", + pick("20 to 30 % (~33M to 50M)", "20 to 30 % (~40M to 60M)")], ["2", "Building permit; vendor build dates confirmed in writing", "Construction, water-treatment building, utility yard, utilities, balance payments as machines are " "built", - pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~70M to 90M)")], + pick("35 to 45 % (~58M to 75M)", "35 to 45 % (~71M to 91M)")], ["3", "Building watertight; first machinery shipped", pick("Fit-out, HVAC and clean zones, ZLD and DI water, the rented crane for the installations, the " "metrology launch tier, factory software and ERPNext, the launch team", - "Fit-out, HVAC and clean zones, ZLD and DI water, solar PV on every roof and canopy and the " + "Fit-out, HVAC and clean zones, ZLD and DI water, solar PV on the factory roof and the " "battery, crane, visitor corridor, the full metrology stack, factory software and ERPNext, cassette and CD-R lines, the " "launch team"), - pick("15 to 20 % (~24M to 32M)", "15 to 20 % (~30M to 40M)")], + pick("15 to 20 % (~25M to 33M)", "15 to 20 % (~30M to 40M)")], ["4", "Cutting room and galvanics commissioned; first stampers made", "Working capital, PVC stock, " "spares, first-year rent; the ramp-up reserve (10M to 20M THB, in the plan price) is drawn from here " - "on", pick("8 to 12 % (~13M to 19M), plus the reserve", "8 to 12 % (~16M to 24M), plus the reserve")], + "on", pick("8 to 12 % (~13M to 20M), plus the reserve", "8 to 12 % (~16M to 24M), plus the reserve")], ], widths_mm=[14, 46, 78, 32], font_pt=8.5, - caption=pick("Shares of Plan A's investment before the reserve (~161.7M THB at the midpoint); the THB " + caption=pick("Shares of Plan A's investment before the reserve (~167.1M THB at the midpoint); the THB " "figures are the shares applied to it (arithmetic, estimates).", - "Shares of Plan B's investment before the reserve (~200.6M THB at the midpoint); the THB " + "Shares of Plan B's investment before the reserve (~201.6M THB at the midpoint); the THB " "figures are the shares applied to it (arithmetic, estimates).")) @@ -218,11 +225,11 @@ def _operating_table(): ["**Total contribution**", "**0.68M**", "**2.06M**", "**3.99M**"], ["Cash overheads", "0.45M", "0.33M", "0.20M"], ["**EBITDA**", "**0.23M**", "**1.73M**", "**3.79M**"], - ["Depreciation", "0.62M", "0.39M", "0.24M"], - ["**Operating profit**", "**-0.39M**", "**1.34M**", "**3.55M**"], + ["Depreciation", "0.64M", "0.40M", "0.25M"], + ["**Operating profit**", "**-0.41M**", "**1.33M**", "**3.54M**"], ["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"], - ["Payback on the plan price (EBITDA, mature year)", "~30 yr", "~3.1 yr (2.2 to 4.0 on 3.86M to " - "6.85M)", "~1.0 yr"], + ["Payback on the plan price (EBITDA, mature year)", "~31 yr", "~3.2 yr (2.3 to 4.1 on 3.99M to " + "7.05M)", "~1.1 yr"], ] else: rows = [ @@ -235,11 +242,11 @@ def _operating_table(): ["**Total contribution**", "**0.68M**", "**2.06M**", "**3.99M**"], ["Cash overheads", "0.45M", "0.33M", "0.20M"], ["**EBITDA**", "**0.23M**", "**1.73M**", "**3.79M**"], - ["Depreciation", "0.77M", "0.49M", "0.29M"], - ["**Operating profit**", "**-0.54M**", "**1.24M**", "**3.50M**"], + ["Depreciation", "0.78M", "0.49M", "0.29M"], + ["**Operating profit**", "**-0.55M**", "**1.24M**", "**3.50M**"], ["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"], - ["Payback on the plan price (EBITDA, mature year)", "~36 yr", "~3.8 yr (2.7 to 4.8 on 4.72M to " - "8.34M)", "~1.2 yr"], + ["Payback on the plan price (EBITDA, mature year)", "~37 yr", "~3.8 yr (2.7 to 4.9 on 4.73M to " + "8.40M)", "~1.2 yr"], ] return T(["USD per year, mature", "Adverse", "Central", "Favourable"], rows, widths_mm=[50, 36, 48, 36], caption="Estimates, docs/finance/revenue-model.md 'Operating pictures of Plan A and Plan B (October " @@ -257,15 +264,15 @@ def _risk_rows(): ] rows += [ ["High", "No contingency in the plan price", pick( - "Quotes landing high are not covered: at 15 % a contingency would be ~24M THB at the midpoint, " - "and the high end of every block comes to ~226M with the reserve", + "Quotes landing high are not covered: at 15 % a contingency would be ~25M THB at the midpoint, " + "and the high end of every block comes to ~233M with the reserve", "Quotes landing high are not covered: at 15 % a contingency would be ~30M THB at the midpoint, " - "and the high end of every block comes to ~275M with the reserve"), + "and the high end of every block comes to ~277M with the reserve"), "The requests that settle most of the band come before commitment (section 8.4); tranche release; " "how overruns are funded (outside the plan price or by scope steps) agreed with the investor up " "front"], ["High", "Utilisation and price", pick( - "The cost structure is mostly fixed; the adverse case loses money: it needs ~0.9M records to cover " + "The cost structure is mostly fixed; the adverse case loses money: it needs ~1.0M records to cover " "depreciation and the three presses make 0.58M at that rate; at 60 % specials the Duplex rate and " "the extra cost of specials decide volume and margin", "The cost structure is mostly fixed; the adverse case loses money: it needs ~1.1M records to cover " @@ -298,18 +305,18 @@ def _risk_rows(): ] if a: rows.append(["Medium", "Solar PPA price", "The PPA gives up owning the bill saving and adds a power " - "price, ~0.07M USD (~2.3M THB) a year in the calculator at 3.0 THB/kWh, an estimate to " + "price, ~0.06M USD (~1.9M THB) a year in the calculator at 3.0 THB/kWh, an estimate to " "quote. No BOI benefit is lost: the BOI dropped solar installations from its promotion on " "1 July 2025 (Announcement 3/2568); a PPA developer may itself be promoted (activity 7.1.2, " "an 8-year corporate income tax exemption), which may or may not show in its price", "PPA offers next to the purchase quote in phase 0, the developer's BOI promotion raised in " "the price negotiation; buying the array, as Plan B does, stays the alternative"]) else: - rows.append(["Medium", "The extra ~39M THB earns little in the model", "Plan B's operating picture is " - "Plan A's (same presses, records, revenue and EBITDA; the calculator puts it ~0.07M USD a " - "year ahead, the PPA bill its owned array avoids): the ~39M THB more at launch adds " - "depreciation, so central operating profit is 1.24M against 1.34M USD, payback ~3.8 against " - "~3.1 years and the adverse corner deeper; its case rests on that bill and on what the " + rows.append(["Medium", "The extra ~35M THB earns little in the model", "Plan B's operating picture is " + "Plan A's (same presses, records, revenue and EBITDA; the calculator puts it ~0.06M USD a " + "year ahead, the PPA bill its owned array avoids): the ~35M THB more at launch adds " + "depreciation, so central operating profit is 1.24M against 1.33M USD, payback ~3.8 against " + "~3.2 years and the adverse corner deeper; its case rests on that bill and on what the " "table leaves out (cassette and CD-R sales, tours and the Payap programmes, full stamper " "metrology for the traceability pitch)", "Phase 0 prices each item against its lever (PPA " "offer next to the purchase quote, cassette and CD-R quotes); most items can also come " @@ -325,18 +332,22 @@ def _risk_rows(): "water-treatment building from the " "start; industrial estate option; " "lessor's consent on Payap land"], - ["Medium", "Utilities fuel choice open", "Biomass heat costs a quarter to a tenth of electric steam " - "at reported fuel prices; electric steam needs a larger grid connection, biomass a secured fuel " - "supply", "Decide before the boiler request and the grid application; quote electric and fired " - "variants of the same modules"], - ["Medium", "Boiler import compliance (DIW)", pick( - "This plan imports its boiler modules from China: an imported boiler must meet ASME, JIS, EN or " - "equivalent and be verified by a DIW-registered certification body; the modules run above the " - "once-through relief", - "An imported boiler must meet ASME, JIS, EN or equivalent and be verified by a DIW-registered " - "certification body; the modules run above the once-through relief"), - "ASME Section I design with the S stamp and the full dossier; certification body engaged before the " - "order; the same for a Thai-bought boiler"], + ["Medium", "Biomass steam: fuel, permits and the burning season", "Fuel price and supply set the " + "steam cost (planning price 1.35 to 2 THB/kg delivered; ~460 t of fresh chips a year at ~850k " + "records, ~0.67M THB, estimate); boiler registration and the air-emission limits for a solid-fuel " + "boiler come into the permit work (to confirm); the stack is a visible point source in Chiang Mai's " + "burning season", "Fuel contracts and a 3-month monsoon stock (~80 m² of covered store); the team's " + "60 rai of own fuelwood later, after the land-title check; the dust collector and the 14 m stack " + "drawn from the start, dust control part of the plant's story; a certified boiler attendant from " + "the maintenance team; electric modules stay the fallback" + pick( + "; a Chinese biomass boiler quote ~2M THB or more below the Thai package would bring Plan A back " + "under 180M", "")], + ["Medium", "Boiler registration and import rules (DIW)", "Every steam boiler is registered with the " + "Department of Industrial Works and run by a certified attendant; a boiler bought abroad must also " + "meet ASME, JIS, EN or equivalent and be verified by a DIW-registered certification body" + pick( + ", which applies if Plan A takes a Chinese biomass boiler", ""), + "A Thai-fabricated biomass package (Getabec class) as the base; for an import, ASME Section I design " + "with the S stamp and the full dossier, the certification body engaged before the order"], ["Medium", "Single press vendor (Newbilt)", "All three presses, the extruders and the hydraulic " "aggregates come from one small German manufacturer; build time and order book unknown", "Spares and service terms in the re-quote; the Pheenix automatic press stays the comparison if the " @@ -368,7 +379,7 @@ def _risk_rows(): "warranty move to the installer, but the plant still depends on the array", "Engineering checks " "of the installer's design in phase 0; large float"], ["Low", "Solar and battery integration", "Rack voltage vs inverter window; unpublished " - "certifications; mixed-vendor warranty; under PEA's zero export ~15 % of the ~640 kWp array's " + "certifications; mixed-vendor warranty; under PEA's zero export ~13 % of the ~520 kWp array's " "yield is curtailed (estimate)", "Engineering checks and certificate requests in phase 0; PEA " "interconnection approval (3 to 6 months) filed alongside procurement; large float"]), ["Low", "Cassette supply chain", pick("Blank tape and shells come from few suppliers, once the lines " @@ -389,11 +400,13 @@ def blocks(): "This chapter prices **Plan A (~180M THB)**: the launch plant decided in October 2026, one Newbilt " "Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, " "in one capital round and commissioned in sequence, brought down with six cost levers that keep " - "every machine. ", + "every machine. At the midpoint that is ~182M THB, **~2M above 180M** (section 8.2). ", "This chapter prices **Plan B (~215M THB)**: the launch plant decided in October 2026, one Newbilt " "Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, " "in one capital round and commissioned in sequence, with everything in: none of Plan A's six cost " "levers taken. ") + + "In both plans the steam comes from biomass and PV sits on the factory roof only (~520 kWp; the " + "office roof and the canopies are built PV-ready), as decided on 17 October 2026. " "The plan price carries the ramp-up reserve, because that is cash the investor puts in, and **no " "contingency**. Blocks marked 'estimate' have no vendor confirmation; the rest trace to quotes, " "published prices or researched ranges. Treat all figures as budgetary with a wide margin (plus or " @@ -416,7 +429,7 @@ def blocks(): "The second Duplex system and further Classics are growth options with room reserved (hall " "floor, utility module positions, ring-main tees), not part of this plan.")), P("**Not in the plan price:** a contingency (the blocks are budgetary, so the plan carries no buffer " - "for quotes landing high; at 15 % it would be " + pick("~24M", "~30M") + " THB at the midpoint); CD " + "for quotes landing high; at 15 % it would be " + pick("~25M", "~30M") + " THB at the midpoint); CD " "replication (section 4.10); financing costs; currency moves; the mobile shelving for the father and " "mother archive (to quote); and the central hydraulic plant around the Newbilt aggregates (standby " "pump set, accumulator station, ring main), not costed yet, for a Thai hydraulic power unit builder " @@ -424,37 +437,41 @@ def blocks(): "promotion: without it, ~5 % duty on ~2.3M USD of imported machinery (~0.11M USD, the launch " "plant's estimate) comes on top, plus ~0.17M USD of import VAT paid at the border and reclaimed " "later (estimates)" + pick( - ". Plan A imports its boiler modules and buys less metrology at launch; the estimate is not " - "re-sized for either.", + ". Plan A buys less metrology at launch; the estimate is not re-sized for it.", ". Plan B is the launch plant that estimate was made for.")), H2("8.2 Two versions of this plan"), P("The lead investor asked in October 2026 whether the plant can be built for **180M THB (~5.45M USD), " "possibly up to 20 % more**. The answer is two versions of this plan, built from the same documents, " "both priced without contingency and with the ramp-up reserve: **Plan A** keeps every machine of " - "the launch plant and brings it to ~180M THB with six cost levers; **Plan B** builds the same " - "launch plant with everything in, none of the levers taken, at ~215M THB, just within 180M plus " - "20 % (216M). " + "the launch plant and brings it to ~180M THB with six cost levers, ~182M at the midpoint, which is " + "**~2M above 180M** (the low end of the reserve, 177M, fits); **Plan B** builds the same launch plant " + "with everything in, none of the levers taken, at ~215M THB: ~217M at the midpoint, ~0.6M above " + "180M plus 20 % (216M) and inside 225M. Both burn biomass for steam and carry PV on the factory roof " + "only. " "This document is " + label() + ". How the two differ (estimates):"), T(["Midpoints, estimates", "Plan A" + pick(" (this plan)", ""), "Plan B" + pick("", " (this plan)")], [ - ["Plan price: ramp-up reserve in, no contingency", "~177M THB (~5.35M USD): ~180M", - "~216M THB (~6.53M USD): ~215M"], - ["Low to high end of every block", "~127M to 226M THB", "~156M to 275M THB"], + ["Plan price: ramp-up reserve in, no contingency", "~182M THB (~5.52M USD): ~180M, ~2M above " + "180M at the midpoint", + "~217M THB (~6.56M USD): ~215M"], + ["Low to high end of every block", "~132M to 233M THB", "~156M to 277M THB"], ["Presses", "3: Duplex system 1 (two HRP 12) and one Classic", "The same 3"], + ["Steam and solar", "Biomass steam (two 500 kg/h modules); ~520 kWp on the factory roof through a " + "solar PPA", "Biomass steam, the same; the ~520 kWp array and the battery owned"], ["Records a year at 60 % specials", "~0.58 to 0.90M, central 0.74M (Duplex-limited)", "The same"], ["Revenue, central", "3.65M USD (~120M THB)", "The same (cassette and CD-R not modelled)"], - ["EBITDA, central", "1.73M USD", "1.73M USD (calculator: 2.12M against Plan A's 2.05M, no PPA " + ["EBITDA, central", "1.73M USD", "1.73M USD (calculator: 2.23M against Plan A's 2.17M, no PPA " "power bill)"], - ["Operating profit, adverse case", "-0.39M USD: loses money", "-0.54M USD: loses more (more " + ["Operating profit, adverse case", "-0.41M USD: loses money", "-0.55M USD: loses more (more " "depreciation on the same EBITDA)"], - ["Payback on the plan price, central (EBITDA, mature year)", "~3.1 yr (2.2 to 4.0)", - "~3.8 yr (2.7 to 4.8; calculator: 2.9 yr against Plan A's 2.4)"], - ["What it gives up or takes on", "Six levers: solar through a PPA (a power bill of ~0.07M USD a " + ["Payback on the plan price, central (EBITDA, mature year)", "~3.2 yr (2.3 to 4.1)", + "~3.8 yr (2.7 to 4.9; calculator: 2.7 yr against Plan A's 2.3)"], + ["What it gives up or takes on", "Six levers: solar through a PPA (a power bill of ~0.06M USD a " "year), confocal and profiler from revenue, no tours at first, cassette and CD-R later, a " - "rented crane, Chinese boilers and compressor; the second Duplex waits for revenue", "No levers: " - "buys at launch what Plan A leases or defers, ~39M THB more (owned solar and battery, ~640 kWp on " - "every roof and canopy with no PPA bill, the full metrology stack, the visitor corridor, cassette " - "and CD-R, a bought crane, Thai boilers and compressor); the second Duplex waits for revenue"], + "rented crane, a Chinese compressor; the second Duplex waits for revenue", "No levers: " + "buys at launch what Plan A leases or defers, ~35M THB (~19 %) more (owned solar and battery, " + "~520 kWp on the factory roof with no PPA bill, the full metrology stack, the visitor corridor, " + "cassette and CD-R, a bought crane, a Thai compressor); the second Duplex waits for revenue"], ], widths_mm=[46, 62, 62], font_pt=8.5, caption="Estimates: docs/finance/total-investment.md 'Two plans' and docs/finance/revenue-model.md " "'Operating pictures of Plan A and Plan B'. Section 9 has this plan's operating picture."), @@ -462,11 +479,11 @@ def blocks(): [P("**Plan A: six levers, every machine kept.** From the launch plant with every block, no " "contingency, midpoint values:"), _levers_table(), - P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~39M THB more " - "at the midpoint, so ~200.6M THB before the reserve and ~216M (~215M THB) with it.")] + P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~34.5M THB more " + "at the midpoint, so ~201.6M THB before the reserve and ~217M (~215M THB) with it.")] if a else [P("**Plan B: the launch plant with everything in, no levers.** What Plan B keeps that Plan A's six " - "cost levers lease, defer or source abroad, midpoint values:"), + "cost levers lease, defer or buy through the Chinese route, midpoint values:"), _keeps_table(), P("The plant itself is Plan A's: the same three presses, the same output and the same operating " "picture (section 9). The second Duplex system is a growth step from revenue in both plans, on a " @@ -475,18 +492,21 @@ def blocks(): CALL("What decides between Plan A and Plan B", [ "**No longer demand.** Both plans are the same three presses making the same ~0.58 to 0.90 million " "records a year (central 0.74 million); market validation (section 14.1, item 1) gates both alike.", - "**~39M THB more at launch, for what Plan A leases or buys from revenue.** Plan B owns its array " + "**~35M THB more at launch, for what Plan A leases or buys from revenue.** Plan B owns its array " "and keeps the whole bill saving (no PPA bill), measures every stamper fully from the first release " "(the traceability pitch), opens tours and the Payap programmes from day one, sells cassette and " - "CD-R from the start, owns its crane and buys utilities with local service.", + "CD-R from the start, owns its crane and buys its compressor with local service. Steam is biomass " + "in both.", "**On the modelled numbers the extra earns little.** The same EBITDA in the revenue model (the " - "calculator puts Plan B ~0.07M USD a year ahead, the PPA bill its owned array avoids), more " - "depreciation, a longer payback (~3.8 against ~3.1 years) and a deeper adverse corner: Plan A has the better modelled " + "calculator puts Plan B ~0.06M USD a year ahead, the PPA bill its owned array avoids), more " + "depreciation, a longer payback (~3.8 against ~3.2 years) and a deeper adverse corner: Plan A has the better modelled " "return, Plan B the more complete plant. Most of Plan B's items can be added to Plan A later from " "revenue; the corridor is cheaper to have from the start, and every year the array is leased " "costs the PPA bill.", "**The quotes.** The Newbilt re-quote for the Classic and the EX 35, the Pheenix quote against the " - "OMS reference, the building quote with the soil test, and, for Plan A, the solar PPA offer.", + "OMS reference, the building quote with the soil test, and, for Plan A, the solar PPA offer and a " + "Chinese biomass boiler quote: ~2M THB or more below the Thai package would put Plan A back under " + "180M.", "**Neither price carries a contingency.** Quotes landing high are funded outside the plan price or " "by scope steps (section 8.4).", "**The second Duplex stays a growth step.** Its floor, utility module positions and ring-main " @@ -496,10 +516,11 @@ def blocks(): " preset, contingency kept out of the total as in this plan."), IMG(pick("renders/calculator/plan-a-budget.png", "renders/calculator/plan-b-budget.png"), 160, "Figure 11. Budget card of the plant and business plan calculator, " + pick( - "Plan A preset: 161.7M THB at the midpoint without contingency, 171.7M to 181.7M with the " - "ramp-up reserve of 10M to 20M, inside 180M at the midpoint", - "Plan B preset: 200.6M THB at the midpoint without contingency, 210.6M to 220.6M with the " - "ramp-up reserve of 10M to 20M, 9.4M to spare under the 225M mark (180M plus 25 %)") + + "Plan A preset: 167.1M THB at the midpoint without contingency, 177.1M to 187.1M with the " + "ramp-up reserve of 10M to 20M; against 180M it is 2.1M over at the midpoint, and it fits 225M " + "with 42.9M to spare", + "Plan B preset: 201.6M THB at the midpoint without contingency, 211.6M to 221.6M with the " + "ramp-up reserve of 10M to 20M, 8.4M to spare under the 225M mark (180M plus 25 %)") + ". Bars: the investment at the low end, the midpoint and the high end of every block, the reserve " "hatched, against 180M and 225M THB. Calculator figures (docs/fleet-calculator.html), estimates."), @@ -514,10 +535,11 @@ def blocks(): H2("8.4 What moves the number"), B([ "**No contingency in the price.** " + pick( - "Plan A's ~177M THB is the midpoint of every block with the ramp-up reserve and no buffer: at " - "15 % a contingency would add ~24M THB, and the high end of every block comes to ~226M. ", - "Plan B's ~216M THB is the midpoint of every block with the ramp-up reserve and no buffer: at " - "15 % a contingency would add ~30M THB, and the high end of every block comes to ~275M. ") + + "Plan A's ~182M THB is the midpoint of every block with the ramp-up reserve and no buffer, ~2M " + "above 180M: at 15 % a contingency would add ~25M THB, and the high end of every block comes to " + "~233M. ", + "Plan B's ~217M THB is the midpoint of every block with the ramp-up reserve and no buffer: at " + "15 % a contingency would add ~30M THB, and the high end of every block comes to ~277M. ") + "Quotes landing above the midpoint are funded outside the plan price or by scope steps; how they are " "funded is a decision for the investor before commitment (section 14.2).", "**The quotes that decide it.** The Classic has no Newbilt price (its band is a placeholder " @@ -526,7 +548,8 @@ def blocks(): "the EX 35 is priced only as the expired 2024 quote's second-extruder option; the building " "depends on the soil; and the solar PPA lever depends on an offer. The Newbilt re-quote, the " "Pheenix quote, the building request with a soil test, the metrology distributor quotes and " - "the PPA offers settle most of the band.", + "the PPA offers settle most of the band; a Chinese biomass boiler quote decides whether Plan A " + "comes back under 180M.", "the EX 35 is priced only as the expired 2024 quote's second-extruder option; and the building " "depends on the soil. The Newbilt re-quote, the Pheenix quote, the building request with a soil " "test, the metrology distributor quotes and the solar and battery purchase quotes settle most of " @@ -549,32 +572,56 @@ def blocks(): "**The ground.** Soft paddy soil under the building, paving and fill platform is the single largest " "cost variable in the building package, and the cheapest to resolve: a soil boring test costs " "THB 30k to 50k.", - pick("**Chinese suppliers: taken where they pay.** Plan A buys the boiler modules and the " - "compressor through the Chinese route (~1.9M THB at the midpoint, about 1 % of the price); the " - "Newbilt hydraulic aggregates stay Newbilt's. Chillers and HVAC, the larger blocks, are not " - "checked yet; that is the next Chinese lever to test.", - "**Chinese suppliers: ~1 %.** Plan B prices Thai-supplied utilities. The Chinese route for the " - "boiler modules and the compressor would take ~1.9M THB off at the midpoint (Plan A takes " - "it); chillers and HVAC, the larger blocks, are not checked yet."), - pick("**Solar PPA.** The largest single lever (~17.5M THB at the midpoint) moves the array, ~640 kWp " - "on every roof and canopy, and the battery off the capital budget and adds a power price to the " - "energy line instead: ~760 MWh a year used on site at 3.0 THB/kWh, ~2.3M THB or ~0.07M USD a " + "**Biomass steam in both plans.** Steam comes from two 500 kg/h biomass modules (Getabec class, " + "6M to 10M THB installed with fuel feed, grate and dust control) and a fuel store with handling " + "(1.0M to 2.0M THB); the electric bank (Thai 4.5M to 7.0M, Chinese route 2.8M to 5.5M) is the " + "alternative, not the plan. At ~850k records the boilers burn ~460 t of fresh chips (or ~300 t of " + "air-dry wood) a year, ~0.67M THB at ~0.7 THB/kWh of heat, where electric steam would cost ~4.9M " + "THB in power and demand charge: **biomass saves ~4.2M THB (~0.13M USD) a year** (estimates; " + "biomass.md planning price 1.35 to 2 THB/kg delivered). Without electric boilers the grid demand " + "falls from ~980 kW to ~264 kW, so the transformer and the PEA deposit can be smaller (not " + "re-priced, an upside). It brings fuel contracts and a monsoon stock, ash handling, the 14 m flue " + "stack and dust collector, more maintenance and a certified boiler attendant (section 13). The " + "revenue model does not split energy by fuel; the calculator does (section 9.4).", + pick("**Chinese suppliers: the compressor now, a biomass boiler quote next.** Plan A buys the " + "compressor through a Chinese brand's Thai office (~0.25M THB at the midpoint). The Chinese " + "route priced only electric boiler modules; Chinese makers build biomass boilers too (ZOZEN " + "DZL, Sitong DZL/SZL, Taiguo, Yongxing), none priced yet. **A quote ~2M THB or more below the " + "Thai biomass package would put Plan A back under 180M**, so it is the first utilities request " + "(section 14.1, item 10). The Newbilt hydraulic aggregates stay Newbilt's. Chillers and HVAC, " + "the larger blocks, are not checked yet; that is the next Chinese lever to test.", + "**Chinese suppliers: small so far.** Plan B prices Thai-supplied utilities. The Chinese route " + "for the compressor would take ~0.25M THB off at the midpoint (Plan A takes it); Chinese " + "biomass boilers are not priced yet; chillers and HVAC, the larger blocks, are not checked " + "yet."), + pick("**Solar PPA.** The largest single lever (~14.7M THB at the midpoint) moves the array, ~520 kWp " + "on the factory roof, and the battery off the capital budget and adds a power price to the " + "energy line instead: ~633 MWh a year used on site at 3.0 THB/kWh, ~1.9M THB or ~0.06M USD a " "year in the calculator, an estimate to quote (~21 % off the tariff; MEAei names 10 to 15 % as " - "usual, CapSolar 10 to 30 %). The plant's bill (~0.75M THB a month before solar, estimate) " - "is well above the 100,000 THB a month CapSolar asks of a PPA site.", - "**Solar bought, not leased.** Plan B owns the array, ~640 kWp on every roof and canopy, and " - "the 271 kWh battery: 14.8M to 20.1M THB (PV at 20 to 26 THB/W installed, inverters included; " - "battery 2.0M to 3.5M). Factories on PEA's grid run zero export, so ~85 % of the ~900 MWh a " - "year is used on site and the rest curtailed; the array saves ~2.8M to 3.0M THB a year and " - "pays back in ~4.2 to 5.9 years (estimates). A solar PPA would take ~17.5M THB off the price " - "at the midpoint and add a power price to the energy line instead: owned, the ~760 MWh used on " - "site save the full ~3.8 THB/kWh; through a PPA at ~3.0 THB/kWh (estimate, to quote) only ~0.8 " - "THB/kWh, so the PPA bill is ~2.3M THB (~0.07M USD) a year."), - "**The array follows the site.** ~640 kWp is what every roof and canopy carries on the Payap " - "scenario plot the calculator draws (factory roof ~523 kWp, office roof ~65 kWp, car and scooter " - "canopies ~54 kWp); on the Mueang Chi hall of section 6.2 the roof and canopies take ~300 kWp, and " - "the rest would need ground mount behind the building (which the rooftop permit exemption does not " - "cover) or the phase 2 roof (estimates).", + "usual, CapSolar 10 to 30 %). The plant's bill with biomass steam (~0.36M THB a month before " + "solar: ~1,036 MWh a year and ~264 kW of demand at the PEA tariff, our arithmetic, estimate) is " + "well above the 100,000 THB a month CapSolar asks of a PPA site.", + "**Solar bought, not leased.** Plan B owns the array, ~520 kWp on the factory roof, and the " + "271 kWh battery: 12.4M to 17.0M THB (PV at 20 to 26 THB/W installed, inverters included, 10.4M " + "to 13.5M; battery 2.0M to 3.5M). Factories on PEA's grid run zero export, so ~87 % of the ~730 " + "to 780 MWh a year is used on site (~633 MWh in the calculator) and the rest curtailed; that " + "covers ~61 % of the " + "launch plant's ~1,036 MWh a year of electricity, saves ~2.3M to 2.5M THB a year and pays back " + "in ~4.1 to 5.8 years (estimates). A solar PPA would take ~14.7M THB off the price at the " + "midpoint and add a power price to the energy line instead: owned, the ~633 MWh used on site " + "save the full ~3.7 THB/kWh; through a PPA at ~3.0 THB/kWh (estimate, to quote) only ~0.7 " + "THB/kWh, so the PPA bill is ~1.9M THB (~0.06M USD) a year."), + "**The array is sized to the load, not to the roof area.** With biomass steam the plant's running " + "load is ~230 kW; an hourly sketch (two shifts on 300 days, ~60 kW off-shift base, the 271 kWh battery, the " + "PEA time-of-use tariff with Ft, 23,000 THB/kWp, 25 years at 8 %) puts the best array at **~500 to " + "550 kWp**: above ~550 kWp more of the yield is curtailed under zero export and the extra panels " + "lose money. The factory roof on the Payap scenario plot the calculator draws carries ~520 kWp " + "(~523 kWp in the site model), so PV goes there only. The office roof (~65 kWp) and the car and " + "scooter canopies (~54 kWp) are built PV-ready (structure rated for the panels, conduit to the " + "main board, a spare way for a later inverter), and ~120 kWp go on them when the load rises with " + "the second Duplex system, for ~2.4M to 3.1M THB at 20 to 26 THB/W. On the Mueang Chi hall of " + "section 6.2 the factory roof takes ~247 kWp, its canopies PV-ready too. ~430 kVA of inverters " + "stays under the ERC's 1,000 kVA line (estimates).", "**Every band narrows only with quotes.** The supplier map in the planning repository lists who to " "ask, and the re-quotes are phase 0 work (section 14).", ]), @@ -723,21 +770,21 @@ def blocks(): "the opposite; central takes midpoints. Cash overheads (admin, sales, insurance, facility running, " "IT, professional fees, marketing, the land lease) are estimated at USD 0.20M to 0.45M a year and " "paired high-to-adverse. Depreciation is on this plan's blocks: " + pick( - "the high end (6.25M USD) over 10 years (adverse), the midpoint (4.90M USD) over 12.5 years " - "(central) and the low end (3.56M USD) over 15 years (favourable). Payback is counted on the " - "whole plan price including the ramp-up reserve (3.86M / 5.35M / 6.85M USD from the low to the " + "the high end (6.44M USD) over 10 years (adverse), the midpoint (5.06M USD) over 12.5 years " + "(central) and the low end (3.68M USD) over 15 years (favourable). Payback is counted on the " + "whole plan price including the ramp-up reserve (3.99M / 5.52M / 7.05M USD from the low to the " "high end).", - "the high end (7.73M USD) over 10 years (adverse), the midpoint (6.08M USD) over 12.5 years " + "the high end (7.79M USD) over 10 years (adverse), the midpoint (6.11M USD) over 12.5 years " "(central) and the low end (4.42M USD) over 15 years (favourable). Payback is counted on the " - "whole plan price including the ramp-up reserve (4.72M / 6.53M / 8.34M USD from the low to the " + "whole plan price including the ramp-up reserve (4.73M / 6.56M / 8.40M USD from the low to the " "high end).")), _operating_table(), CALL("Reading this table honestly", pick([ - "**The central case works on ~177M THB.** EBITDA ~1.7M USD (~57M THB) and operating profit ~1.3M " + "**The central case works on ~182M THB.** EBITDA ~1.7M USD (~57M THB) and operating profit ~1.3M " "USD (~44M THB) a year once the plant runs at volume. It breaks even on operating profit at about " "**0.2 million records a year, about a quarter of its central output**. Against the earlier ~20 % " "specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.", - "**The adverse case loses money.** It would need ~0.9 million records to cover depreciation, and " + "**The adverse case loses money.** It would need ~1.0 million records to cover depreciation, and " "the three presses make 0.58 million at that rate. It stacks the low price, the high cost, the high " "capital and the high overheads at once. At the central cost and volume the price that covers " "depreciation is ~2.7 USD (~88 THB) a record (arithmetic on the table), below the low price " @@ -748,18 +795,18 @@ def blocks(): "above the reject allowance, sales commissions and the extra cost of specials. **Treat the adverse " "column as the honest one until those lines exist.** The plan price carries no contingency either.", "**This is a sensitivity, not a forecast.** The plant and business plan calculator's Plan A preset, " - "with its own cost build-up (it adds electric steam heat, the cutting engineer and the PPA power " - "price, ~0.07M USD a year, which this table leaves out) and the team's faster Duplex planning rate, " - "at which the three presses are not Duplex-limited, gives at 850k records and 60 % specials: " - "revenue ~4.14M, EBITDA 2.05M USD, payback 2.4 years on the 161.7M THB investment in a mature " - "year; with a ramp of 35, 70 and 90 % in the first three years and the reserve in year 0, cash " - "payback in year ~3.9, ~25 % IRR and an NPV of ~4.9M USD over ten years, pre-tax and " - "pre-financing (estimates). Not modelled here: cassette and CD-R lines (later in Plan A), stamper " + "with its own cost build-up (it adds the biomass fuel for the steam, ~0.67M THB a year, the cutting " + "engineer, and the PPA power price of ~0.06M USD a year, which this table leaves out) and the " + "team's faster Duplex planning rate, at which the three presses are not Duplex-limited, gives at " + "850k records and 60 % specials: revenue ~4.14M, EBITDA 2.17M USD, payback 2.3 years on the " + "167.1M THB investment in a mature year; with a ramp of 35, 70 and 90 % in the first three years " + "and the reserve in year 0, cash payback in year ~3.8, ~26 % IRR and an NPV of ~5.4M USD over ten " + "years, pre-tax and pre-financing (estimates). Not modelled here: cassette and CD-R lines (later in Plan A), stamper " "supply to other plants, automation services and the open plant stack for other pressing plants " "(section 5.6), dropshipping fees, and the ramp year. BOI tax exemptions shield part of " "early-year profits where there are any.", ], [ - "**The central case works on ~216M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.24M " + "**The central case works on ~217M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.24M " "USD (~41M THB) a year once the plant runs at volume. It breaks even on operating profit at about " "**0.24 million records a year, about a third of its central output**. Against the earlier ~20 % " "specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.", @@ -769,33 +816,33 @@ def blocks(): "cost and volume the price that covers depreciation is ~2.8 USD (~92 THB) a record (arithmetic on " "the table), below the low price assumed: price realisation and utilisation decide solvency, not " "upside.", - "**What the extra ~39M THB buys is not in this table.** Plan B is Plan A's plant with the six levers " + "**What the extra ~35M THB buys is not in this table.** Plan B is Plan A's plant with the six levers " "not taken, so revenue, direct cost and EBITDA are Plan A's; only the depreciation (0.49M against " - "Plan A's 0.39M USD at the centre) and the payback (~3.8 against ~3.1 years) move. Not modelled: " + "Plan A's 0.40M USD at the centre) and the payback (~3.8 against ~3.2 years) move. Not modelled: " "cassette and CD-R revenue, tour and Payap revenue, stamper supply to other plants, automation " "services and the open plant stack for other pressing plants (section 5.6), and the PPA power bill " - "the owned array avoids (~0.07M USD a year in the calculator).", + "the owned array avoids (~0.06M USD a year in the calculator).", "**The central margin is too good to trust yet.** A central EBITDA margin of ~47 % is far above " "the 15 to 25 % pressing plants earn. The direct cost table counts only per-record consumables and " "direct payroll and leaves out indirect labour (supervision, planning, warehouse), freight, scrap " "above the reject allowance, sales commissions and the extra cost of specials. **Treat the adverse " "column as the honest one until those lines exist.** The plan price carries no contingency either.", "**This is a sensitivity, not a forecast.** The plant and business plan calculator's Plan B preset, " - "with its own cost build-up (it adds electric steam heat and the cutting engineer, which this " - "table leaves out) and the team's faster Duplex planning rate, at which the three presses are not " - "Duplex-limited, gives at 850k records and 60 % specials: revenue ~4.14M, EBITDA 2.12M USD, " - "payback 2.9 years on the 200.6M THB investment in a mature year; with a ramp of 35, 70 and 90 % in " - "the first three years and the reserve in year 0, cash payback in year ~4.4, ~21 % IRR and an NPV " - "of ~4.1M USD over ten years, pre-tax and pre-financing (estimates). Its EBITDA is 0.07M above " - "Plan A's 2.05M because the owned array carries no PPA power price. Not modelled here: cassette " + "with its own cost build-up (it adds the biomass fuel for the steam, ~0.67M THB a year, and the " + "cutting engineer, which this table leaves out) and the team's faster Duplex planning rate, at " + "which the three presses are not Duplex-limited, gives at 850k records and 60 % specials: revenue " + "~4.14M, EBITDA 2.23M USD, payback 2.7 years on the 201.6M THB investment in a mature year; with a " + "ramp of 35, 70 and 90 % in the first three years and the reserve in year 0, cash payback in year " + "~4.2, ~22 % IRR and an NPV of ~4.7M USD over ten years, pre-tax and pre-financing (estimates). Its " + "EBITDA is 0.06M above Plan A's 2.17M because the owned array carries no PPA power price. Not modelled here: cassette " "and CD-R lines, stamper supply to other plants, automation services and the open plant stack for " "other pressing plants (section 5.6), dropshipping fees, and the ramp year. BOI tax " "exemptions shield part of early-year profits where there are any.", ])), IMG(pick("renders/calculator/plan-a-cash.png", "renders/calculator/plan-b-cash.png"), 160, "Figure 12. Ten years of cash in the plant and business plan calculator, " + pick( - "Plan A preset: cash payback in year ~3.9, IRR ~25 %, NPV ~4.9M USD at 10 %", - "Plan B preset: cash payback in year ~4.4, IRR ~21 %, NPV ~4.1M USD at 10 %") + + "Plan A preset: cash payback in year ~3.8, IRR ~26 %, NPV ~5.4M USD at 10 %", + "Plan B preset: cash payback in year ~4.2, IRR ~22 %, NPV ~4.7M USD at 10 %") + ". Year 0 is the midpoint investment plus the ramp-up reserve; years 1 to 3 sell 35, 70 and 90 % of " "the mature year's output. Pre-tax, pre-financing, no BOI tax holiday, no terminal value. The " "calculator's own cost build-up and faster Duplex planning rate, not the table above " @@ -892,7 +939,8 @@ def blocks(): ["Factory licence (Ror.Ngor. 4) with galvanics in the first licence", "First production, Q4 2028", "~4 months", "Galvanics effluent and hazardous-substance registration are now in the first " "licence scope: the most likely regulatory friction point; ZLD design in the application from " - "the start"], + "the start; the biomass boiler's registration and its air-emission limits go into the same permit " + "work (to confirm)"], pick(["Solar through the PPA (the installer builds and owns the array)", "Fit-out, ~Q2 2028", "Large", "Not a risk; the PPA offer is phase 0 work; PEA interconnection approval takes 3 to " "6 months, filed alongside procurement; battery lead time is 50 to 60 days"], @@ -913,9 +961,7 @@ def blocks(): P("**BOI windows are comfortable** on the August calendar: machinery clears customs ~Q3 2028 against a " "30-month import window ending ~Q4 2029 (~15 months of margin), and first production ~Q4 2028 " "against a ~36-month full-operation deadline (~18 months). The launch plant puts four vendors' " - "machines, not one, inside the import window" + pick( - ", and Plan A adds the Chinese boiler modules. ", - ". ") + + "machines, not one, inside the import window. " + "The margin is consumed by exactly one scenario: filing early to start the clock and then discovering " "the site does not work. Verify zoning before filing."), P("**The one lever worth six to nine months** is the BOI sequencing question in section 7: the duty " @@ -947,18 +993,16 @@ def blocks(): "between the Mueang Chi lease, other Payap land and the industrial estate; resolve the 35 % vs " "45 % humidity floor", "BOI filed"], ["2. Commit", "Incorporate under the certificate; sign the lease; order every long-lead item: " - "Pheenix galvanics line, Sillitoe lathe, Sibert line, " + pick( - "Newbilt Duplex and Classic, first two boiler and chiller modules (boilers through the Chinese " - "route)", - "Newbilt Duplex and Classic, first two boiler and chiller modules (boilers and compressor " - "from Thai suppliers)"), "BOI certificate and validated pricing"], + "Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt Duplex and Classic, the two " + "biomass boiler modules and the first two chiller modules", "BOI certificate and validated " + "pricing"], ["3. Build and commission (~6 to 12 months after commitment)", pick( - "Construction, water-treatment building, utilities, HVAC, clean zones, security, the " - "crane-ready frame (a mobile crane for the installations); the solar array built by the PPA " - "installer; machinery installation and vendor commissioning; traceability and ERPNext live " + "Construction, water-treatment building, utilities (the biomass boilers and fuel store), HVAC, " + "clean zones, security, the crane-ready frame (a mobile crane for the installations); the " + "factory-roof solar array built by the PPA installer; machinery installation and vendor commissioning; traceability and ERPNext live " "before the machines; hire and train", - "Construction, water-treatment building, utilities, HVAC, clean zones, solar and battery, " - "security, crane, visitor corridor; machinery installation and vendor commissioning; " + "Construction, water-treatment building, utilities (the biomass boilers and fuel store), HVAC, " + "clean zones, factory-roof solar and battery, security, crane, visitor corridor; machinery installation and vendor commissioning; " "traceability and ERPNext live before the machines; hire and train"), "Building permit, vendor build dates confirmed"], ["4. Launch (the whole chain in-house)", "Commission in sequence (table below); test pressings, QC " @@ -966,11 +1010,12 @@ def blocks(): "compound", "Commissioning complete"], ["5. Expand (revenue-gated)", pick( "Second Duplex system; further Classics; the laser confocal and wide-area profiler; the visitor " - "corridor and public tours; cassette and CD-R duplication; an owned crane if needed; the " - "biomass boiler if steam starts electric; the phase 2 building; CD replication if chosen", + "corridor and public tours; cassette and CD-R duplication; an owned crane if needed; PV on " + "the PV-ready office roof and canopies when the load rises; the phase 2 building; CD " + "replication if chosen", "Second Duplex system, then further Duplex systems and Classics (the hall is laid out for five " - "Duplex bays and four Classic positions); the biomass boiler if steam starts electric; the " - "phase 2 building; CD replication if chosen"), + "Duplex bays and four Classic positions); PV on the PV-ready office roof and canopies when the " + "load rises; the phase 2 building; CD replication if chosen"), "Revenue and, for CD replication, a separate decision"], ], widths_mm=[42, 96, 32], font_pt=8.5), H2("11.1 Commissioning sequence"), @@ -980,7 +1025,7 @@ def blocks(): "First lacquers, fathers, mothers and stampers, and the metal archive " "from the first title"], ["2", "Newbilt Duplex system (two HRP 12, EX 50 and EX 35), with the steam and cooling plant " - "(boiler modules B-1, B-2; chiller modules CH-1, CH-2)", + "(biomass boiler modules B-1, B-2 with the fuel store; chiller modules CH-1, CH-2)", "The semi-automatic presses suit the colour, splatter and boutique runs that carry the premiums, " "and they teach the crews the process"], ["3", "Newbilt Classic, fully automatic", "Volume runs once the metal path and the press process " @@ -1017,24 +1062,25 @@ def blocks(): "the start, and on Payap land the lessor's consent as well."], ["**The cutting room is a smaller decision than it was.** The Sillitoe SDMS lists at USD 125k with " "automation in the box, and the Payap programmes in mastering and lathe cutting need a working " - "room.", pick("**More capital up front.** ~127M to 226M THB in one round (~177M at the " + "room.", pick("**More capital up front.** ~132M to 233M THB in one round (~182M at the " "midpoint), against ~57M to 95M THB for the superseded phased entry; more of it is " "committed before the market has validated the price.", - "**More capital up front.** ~156M to 275M THB in one round (~216M at the midpoint), " + "**More capital up front.** ~156M to 277M THB in one round (~217M at the midpoint), " "against ~57M to 95M THB for the superseded phased entry; more of it is committed " "before the market has validated the price.")], - pick(["**Six levers, no machine dropped.** The levers bring the whole chain to ~180M THB, and the " + pick(["**Six levers, no machine dropped.** The levers bring the whole chain to ~180M THB (~182M at " + "the midpoint, ~2M above 180M; a Chinese biomass boiler quote could close the gap), and the " "second Duplex waits for demand and revenue on a reserved floor.", - "**What the levers give up.** Owned solar (a PPA bill of ~0.07M USD a year instead), public tours " - "at first, cassette and CD-R at launch, a bought crane; the boilers are imported from China " - "under the Thai boiler rules. The adverse case still loses money."], - ["**Everything in at launch.** Owned solar on every roof and canopy (~640 kWp) with no PPA " + "**What the levers give up.** Owned solar (a PPA bill of ~0.06M USD a year instead), public tours " + "at first, cassette and CD-R at launch, a bought crane, a Thai-serviced compressor. The adverse " + "case still loses money."], + ["**Everything in at launch.** Owned solar on the factory roof (~520 kWp) with no PPA " "bill, the full metrology stack " "from the first release, tours and the Payap programmes from day one, cassette and CD-R, its " - "own crane and locally serviced utilities; the second Duplex waits for demand and revenue on a " + "own crane and a locally serviced compressor; the second Duplex waits for demand and revenue on a " "reserved floor.", - "**~39M THB more that the model does not repay.** The same EBITDA as Plan A with more " - "depreciation and a longer payback (~3.8 against ~3.1 years); the adverse case still loses " + "**~35M THB more that the model does not repay.** The same EBITDA as Plan A with more " + "depreciation and a longer payback (~3.8 against ~3.2 years); the adverse case still loses " "money."]), ], widths_mm=[85, 85], font_pt=8.5), P("**How the plan answers the risks:** commission the metal path first and measure it before the " @@ -1087,7 +1133,7 @@ def blocks(): "whose incentives are aligned with the plant's schedule and quality, within the same province.", "**Debt-to-equity no higher than 3:1**, maintained for the life of the BOI privileges, which sets " "the floor on equity in the financing mix: at least a quarter of the funding, " + pick( - "~44M THB of Plan A's ~177M", "~54M THB of Plan B's ~216M") + + "~46M THB of Plan A's ~182M", "~54M THB of Plan B's ~217M") + " (arithmetic, before financing costs).", "**A shareholders' agreement** covering board composition, reserved matters (capital calls and " "tranche releases, the growth options such as a second Duplex, CD replication), pre-emption and transfer, information rights, and the founders' roles and " @@ -1133,7 +1179,8 @@ def blocks(): "Payap R&D", "Simona", "USD 5k to 15k", "Sequencing, scope"], ["3", "Thai counsel: lease heads of terms (term, renewal, building ownership, assignment) and zoning " - "of the chosen plot for pressing, a steam boiler and electroplating; company and shareholder " + "of the chosen plot for pressing, a biomass steam boiler (with its air-emission limits) and " + "electroplating; company and shareholder " "structure including Ploy Printing", "Simona, counsel", "USD 5k to 15k", "Zoning, lease, " "ownership"], ["4", "Soil boring test on the chosen plot", "Alexander", "THB 30k to 50k", "Ground risk"], @@ -1148,32 +1195,37 @@ def blocks(): ["8", "Sibert itemised quotation and order terms against the USD 250k budget: lead time, " "installation time, spares, shipping, travel", "Alexander", "Free", "Stamper prep, schedule"], ["9", "Building request for quotation to two or three Thai pre-engineered building contractors, " - "with the soil result", "Alexander", "Free", "Building estimate"], + "with the soil result and the office roof and canopies PV-ready", "Alexander", "Free", + "Building estimate"], ["10", pick( - "Utility requests: Chinese boiler makers for the plan's boiler modules (ZOZEN, Sitong, Fangkuai, " - "Taiguo; 1.25 MPa, ASME S stamp, electric and fired variants) with a Thai installer; compressors " - "from Kaishan and Denair's Thai offices; Thai suppliers for the rest; chillers and HVAC, Chinese " - "makers included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for the central " - "plant", - "Utility requests: Thai suppliers; Chinese boiler makers (ZOZEN, Sitong, Fangkuai, Taiguo; " - "1.25 MPa, ASME S stamp, electric and fired variants) and compressors from Kaishan and Denair's " - "Thai offices for comparison; chillers and HVAC, Chinese makers included; the 35 % vs 45 % " - "humidity floor; a Thai hydraulic builder for the central plant"), - "Alexander", "Free", "Utilities band, fuel choice"], + "Utility requests: biomass boiler packages from Getabec and from Chinese makers (ZOZEN, Sitong, " + "Taiguo, Yongxing; ASME S stamp, with a Thai installer), the Chinese quote first, because ~2M " + "THB or more below the Thai package puts Plan A back under 180M; electric modules as the " + "fallback quote; fuel supply offers (chips and wood, delivered price, a monsoon stock); " + "compressors from Kaishan and Denair's Thai offices; Thai suppliers for the rest; chillers and " + "HVAC, Chinese makers included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for " + "the central plant", + "Utility requests: biomass boiler packages from Getabec and, for comparison, Chinese makers " + "(ZOZEN, Sitong, Taiguo, Yongxing); electric modules as the fallback quote; fuel supply offers " + "(chips and wood, delivered price, a monsoon stock); Thai suppliers for the rest, compressors " + "from Kaishan and Denair's Thai offices for comparison; chillers and HVAC, Chinese makers " + "included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for the central plant"), + "Alexander", "Free", "Utilities band, fuel supply"], ["11", pick("Metrology distributor quotes (XRF, inline vision, audio station; confocal and profiler " "for later)", "Metrology distributor quotes (XRF, confocal, profiler, inline vision, " "audio station)"), "Alexander", "Free", "Metrology band"], - ["12", pick("Solar PPA offers (the plan's lever) next to a purchase quote; the installer's battery " - "and inverter design checked", "Solar and battery purchase quotes, with a PPA offer for " - "comparison; battery and inverter engineering " - "checks"), "Alexander", "Free", + ["12", pick("Solar PPA offers for the ~520 kWp factory roof (the plan's lever) next to a purchase " + "quote; the installer's battery and inverter design checked", "Solar and battery purchase " + "quotes for the ~520 kWp factory roof, with a PPA offer for comparison; battery and " + "inverter engineering checks"), "Alexander", "Free", pick("Solar lever, PPA price", "Solar block")], ["13", pick("Cassette and CD-R equipment quotes from two vendors each, for the growth step; tape and " "shell supply", "Cassette and CD-R equipment quotes from two vendors each; tape and " "shell supply"), "Alexander", "Free", "New-scope estimates"], ["14", "Search for the galvanics process engineer and the cutting engineer; next meeting with Payap " "on the programmes", "Simona, Alexander", "None yet", "Skills risk"], - ["15", "60 rai title check for the coppice plan", "Simona", "Small", "Biomass path"], + ["15", "60 rai title check for own fuelwood (the coppice plan)", "Simona", "Small", + "Own fuel later, an upside"], ["16", "Optional: vinyl manufacturing consultancy for a layout and installation review", "Alexander", "GBP 10k to 20k", "Layout risk"], ["17", "Archive the Thai invoices and tour notes with this plan", "Simona", "None", "Evidence base"], @@ -1183,44 +1235,46 @@ def blocks(): ["Now", "Approval of Phase 0 spending of ~USD 40k to 80k (~1.3M to 2.6M THB, part of the plan " "price), so the quotes, the soil test, the BOI consultant and counsel can start."], ["On the gates clearing", pick( - "A commitment in principle to **Plan A at ~180M THB** (~177M at the midpoint, the ramp-up " + "A commitment in principle to **Plan A at ~180M THB** (~182M at the midpoint, the ramp-up " "reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, " - "with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~44M " - "THB). Told plainly: the price carries no contingency (at 15 % it would be ~24M THB more at " - "the midpoint), and from the low to the high end of every block the plan comes to ~127M to " - "226M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, " - "the metrology quotes and the solar PPA offer decide where in that range it lands.", - "A commitment in principle to **Plan B at ~215M THB** (~216M at the midpoint, the ramp-up " + "with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~46M " + "THB). Told plainly: at the midpoint the plan is **~2M above 180M** (177M to 187M with the " + "reserve's 10M to 20M); the price carries no contingency (at 15 % it would be ~25M THB more at " + "the midpoint), and from the low to the high end of every block the plan comes to ~132M to " + "233M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, " + "the metrology quotes, the solar PPA offer and a Chinese biomass boiler quote decide where in " + "that range it lands and whether it comes back under 180M.", + "A commitment in principle to **Plan B at ~215M THB** (~217M at the midpoint, the ramp-up " "reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, " "with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~54M " "THB). Told plainly: the price carries no contingency (at 15 % it would be ~30M THB more at " "the midpoint), and from the low to the high end of every block the plan comes to ~156M to " - "275M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, " + "277M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, " "the metrology quotes and the solar and battery purchase quotes decide where in that range it " "lands.")], ["Decisions", pick( "The equity and debt mix, and how quotes landing above the plan price are funded; the six " - "levers, the solar PPA first (~17.5M THB off the price for a power bill of ~0.07M USD a year); " - "CD replication, " - "yes or no, before the BOI application is finalised; the steam fuel (electric or biomass); " + "levers, the solar PPA first (~14.7M THB off the price for a power bill of ~0.06M USD a year); " + "whether to buy a Chinese biomass boiler if its quote brings the plan under 180M; CD " + "replication, yes or no, before the BOI application is finalised; the biomass fuel contracts; " "the shareholder structure with Ploy Printing and the founders; hedging of the EUR orders.", - "The equity and debt mix, and how quotes landing above the plan price are funded; the ~39M " - "THB of items Plan A leases or defers (owned solar on every roof and canopy with no PPA bill, " - "the full " - "metrology stack, the visitor corridor, cassette and CD-R, the bought crane, Thai boilers and " + "The equity and debt mix, and how quotes landing above the plan price are funded; the ~35M " + "THB of items Plan A leases or defers (owned solar on the factory roof with no PPA bill, the " + "full metrology stack, the visitor corridor, cassette and CD-R, the bought crane, the Thai " "compressor), each weighed against its lever; CD replication, yes or no, before the BOI " - "application is finalised; the steam fuel (electric or biomass); the shareholder structure " + "application is finalised; the biomass fuel contracts; the shareholder structure " "with Ploy Printing and the founders; hedging of the EUR orders.")], ["Later", pick( "Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; " "~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), " "the laser confocal and wide-area profiler (USD 180k to 350k), the visitor " - "corridor, cassette and CD-R, an owned crane if needed, further Classics, the biomass boiler " - "if steam starts electric, and the phase 2 building.", + "corridor, cassette and CD-R, an owned crane if needed, further Classics, PV on the PV-ready " + "office roof and canopies (~120 kWp, ~2.4M to 3.1M THB, estimate), and the phase 2 building.", "Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; " "~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), " "then further Duplex systems and Classics in the hall laid out for five Duplex bays and four " - "Classic positions; the biomass boiler if steam starts electric; and the phase 2 building.")], + "Classic positions; PV on the PV-ready office roof and canopies (~120 kWp, ~2.4M to 3.1M THB, " + "estimate); and the phase 2 building.")], ], widths_mm=[38, 132]), P("The next version of this plan should carry: the Newbilt, Pheenix, Sillitoe and Sibert quotes with " "their build times in place of the placeholder and estimated blocks; the building quote with the " @@ -1228,7 +1282,8 @@ def blocks(): "its price; ", "the BOI consultant's reading on the battery (battery storage, capped at 12M THB " "per MW); ") + - "the negotiated lease; a buyer-side price data point; the investor's CD and fuel decisions; how " + "the negotiated lease; a buyer-side price data point; the investor's CD decision; the biomass boiler " + "quotes (Getabec and a Chinese maker) and fuel supply offers; how " "overruns are funded, since the price carries no contingency; a calendar re-drawn for the launch " "plant with the metal-path commissioning in it; a year-by-year cash model for the ramp; and the " "shareholder terms. Each of those is a phase 0 output."), @@ -1252,8 +1307,10 @@ def blocks(): ["finance/revenue-model.md", "Pricing, the Thai market data and factory tour, the Record Industry " "benchmark, direct cost, the launch-plant operating picture and the " "operating pictures of Plan A and Plan B"], - ["finance/utilities-investment.csv", "Thai supplier candidates and budgetary ranges for steam, " - "cooling, air, water, HVAC, solar and battery"], + ["finance/utilities-investment.csv", "Thai supplier candidates and budgetary ranges for steam " + "(the biomass package and the fuel store; the electric bank " + "as the alternative), cooling, air, water, HVAC, solar and " + "battery"], ["finance/phase1-construction-rfq.md", "Contractor price request with quantities from the " "parametric model"], ["fleet-calculator.html", "Plant and business plan calculator: target output and specials share to " @@ -1272,8 +1329,9 @@ def blocks(): "contacts"], ["suppliers/making-vinyl-europe-2026-exhibitors.md", "Making Vinyl Europe 2026 briefing and what " "came after the show"], - ["suppliers/china-utilities.md", "Chinese boilers, compressed air and hydraulics; Thai rules for " - "imported boilers; what the Chinese route saves"], + ["suppliers/china-utilities.md", "Chinese boilers (electric priced; biomass makers named, not " + "priced), compressed air and hydraulics; Thai rules for imported " + "boilers; what the Chinese route saves"], ["digital-factory.md (demos plant-operation.html, factory-console.html)", "Data platform: ERPNext " "as the only system of record, machine data, the factory application, the " "NixOS fleet; the plant overview and factory console demos (Figures 2 to 4)"], @@ -1291,11 +1349,18 @@ def blocks(): "stage, lead times and the repress path"], ["traceability.md, quality-automation.md", "The traceability specification; metrology, layered " "record QC, the materials lab"], - ["sustainability.md, biomass.md, steam-cooling.html", "Solar, heat recovery, water, zero discharge, " - "the grid tariff; the biomass fuel strategy; " - "the steam and cooling plant"], - ["sustainability.md ('What ~640 kWp means on the grid'), finance/utilities-investment.csv (solar " - "rows), boi.md", "Solar on every roof and canopy (~640 kWp) and its sources: the installed price of " + ["sustainability.md, steam-cooling.html", "Solar, heat recovery, water, zero discharge, the grid " + "tariff; the steam and cooling plant"], + ["biomass.md", "Biomass steam for both plans: what the boilers burn (~300 t of air-dry wood or ~460 t " + "of fresh chips a year at ~850k records), the fuel prices (1.35 to 2 THB/kg delivered, " + "0.5 to 0.9 THB/kWh of heat; sources in finance/biomass/), the northern fuel market, " + "the 60 rai of own fuelwood and its title check, logistics on site (fuel store, ash)"], + ["sustainability.md ('PV size with biomass steam', the hourly PV sizing sketch), " + "finance/utilities-investment.csv " + "(solar rows), boi.md", "PV on the factory roof (~520 kWp; the office roof and the canopies " + "PV-ready) and its sources: the hourly sizing sketch (two shifts, 300 days, the 271 kWh battery, " + "PEA time-of-use with Ft, 23,000 THB/kWp over 25 years at 8 %: best array ~500 to 550 kWp, " + "estimate); the installed price of " "20 to 26 THB/W (DEDE's Thailand PV Status survey, CapSolar 2026, Saimai Solar's 2026 list); zero " "export for factories on PEA's grid (CapSolar, rooftop solar regulations, 2026; Sahawatthanakit, " "2026); the permits (Ministerial Regulation No. 3 B.E. 2567, in force 28 December 2024; ERC's " diff --git a/docs/finance/phase1-construction-rfq.md b/docs/finance/phase1-construction-rfq.md index bee22d3..381d99e 100644 --- a/docs/finance/phase1-construction-rfq.md +++ b/docs/finance/phase1-construction-rfq.md @@ -161,7 +161,7 @@ PIR. | Paving — heavy duty | **1,608 m²** rigid reinforced concrete for laden trucks: truck apron, dock face, internal circulation road, Phase 2 link | | Paving — general | **2,779 m²** lighter hardstanding: car park, yard and margins | | **Paving total** | **4,387 m²** — see note below | -| Car/scooter parking | Roofed canopies: **27.7 × 7.0 m (195 m², 10 cars)** + **13.7 × 5.5 m (76 m², 30 scooters)**, steel canopy carrying **~40 kWp** PV | +| Car/scooter parking | Roofed canopies: **27.7 × 7.0 m (195 m², 10 cars)** + **13.7 × 5.5 m (76 m², 30 scooters)**, steel canopy built **PV-ready** for ~40 kWp (structure for the panels' dead load and uplift, conduit to the main board); panels later, not in this contract | | Guard house | **12 m² (4 × 3 m)**, insulated/AC'd, with toilet; sited at the gate, north-west side | | Tank foundations | Ring foundation for a **9 m dia × 4 m** fire water tank (**~250 m³, ~250 t full** — the geometry gives 254 m³ gross; if 200 m³ usable with freeboard is intended, the foundation still carries the full 250 t) sited in the **north-west corner of the plot**, with the **fire pump house adjacent to it**; plus a **5 m dia × 3 m** raw water tank. Tanks themselves are vendor-supplied bolted panels — foundations only | | Fire main | Ring main runs from the north-west corner to the buildings — quote the **length**, not just "a ring main" | diff --git a/docs/finance/revenue-model.md b/docs/finance/revenue-model.md index 2815b7d..450ac28 100644 --- a/docs/finance/revenue-model.md +++ b/docs/finance/revenue-model.md @@ -670,23 +670,24 @@ What it says: The business plan comes in two versions ([total investment](total-investment.md#two-plans-a-at-180m-thb-and-b-at-215m-thb-october-2026)): -**Plan A** (~177M THB, the launch plant with six cost levers) and -**Plan B** (~216M THB, the same launch plant with everything in), both -priced without contingency and with the ramp-up reserve. Both run the +**Plan A** (~182M THB, the launch plant with six cost levers) and +**Plan B** (~217M THB, the same launch plant with everything in), both +priced without contingency and with the ramp-up reserve, both on biomass +steam with PV on the factory roof (October 2026). Both run the same three presses, so volume, price, direct cost, title services and overheads are those of the launch-plant table above; only the depreciation follows each plan's capital (estimates): -- **Plan A**: the high end of its blocks (6.25M USD) over 10 years, 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.07M USD a year in - the calculator for the ~640 kWp array), not shown here. -- **Plan B**: 7.73M USD over 10 years, 6.08M over 12.5, 4.42M over 15. - Its owned solar (~640 kWp, every roof and canopy) saves the PPA power bill; cassette and CD-R sales, tours +- **Plan A**: the high end of its blocks (6.44M USD) over 10 years, the + midpoint (5.06M USD) over 12.5, the low end (3.68M USD) over 15. The + solar PPA adds its power price to the energy line (~0.06M USD a year in + the calculator for the ~520 kWp factory roof), not shown here. +- **Plan B**: 7.79M USD over 10 years, 6.11M over 12.5, 4.42M over 15. + Its owned solar (~520 kWp on the factory roof) saves the PPA power bill; cassette and CD-R sales, tours and the Payap programmes it opens from the start are not modelled. - **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.72M / 6.53M / - 8.34M USD from the low to the high end). + reserve (Plan A 3.99M / 5.52M / 7.05M USD, Plan B 4.73M / 6.56M / + 8.40M USD from the low to the high end). | USD/yr | A adverse | A central | A favourable | B adverse | B central | B favourable | |---|---|---|---|---|---|---| @@ -697,23 +698,23 @@ depreciation follows each plan's capital (estimates): | Title-services contribution | 0.07M | 0.23M | 0.48M | 0.07M | 0.23M | 0.48M | | Cash overheads | 0.45M | 0.33M | 0.20M | 0.45M | 0.33M | 0.20M | | **EBITDA** | **0.23M** | **1.73M** | **3.79M** | **0.23M** | **1.73M** | **3.79M** | -| Depreciation | 0.62M | 0.39M | 0.24M | 0.77M | 0.49M | 0.29M | -| **Operating profit** | **-0.39M** | **1.34M** | **3.55M** | **-0.54M** | **1.24M** | **3.50M** | +| Depreciation | 0.64M | 0.40M | 0.25M | 0.78M | 0.49M | 0.29M | +| **Operating profit** | **-0.41M** | **1.33M** | **3.54M** | **-0.55M** | **1.24M** | **3.50M** | | 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 | ~36 yr | ~3.8 yr (2.7 to 4.8) | ~1.2 yr | +| Payback on the plan price (EBITDA, mature year) | ~31 yr | ~3.2 yr (2.3 to 4.1) | ~1.1 yr | ~37 yr | ~3.8 yr (2.7 to 4.9) | ~1.2 yr | What it says: - **Plan A** breaks even on operating profit at **~0.2 million records a year**; its adverse corner still loses money, because it would need - ~0.9 million records to cover depreciation and the three presses make + ~1.0 million records to cover depreciation and the three presses make 0.58 million at that rate. - **Plan B** breaks even at **~0.24 million records**, and its adverse corner loses more (~1.1 million records needed to cover depreciation). At the central cost and volume the price that covers its depreciation is ~2.8 USD (~92 THB) a record. -- **On these numbers Plan B's extra ~39M THB earns little**: the same - EBITDA here (the calculator, which splits energy by plan, puts it ~0.07M +- **On these numbers Plan B's extra ~35M THB earns little**: the same + EBITDA here (the calculator, which splits energy by plan, puts it ~0.06M USD a year ahead for the PPA bill the owned array avoids), more depreciation and a longer payback. Its case rests on what the table leaves out: the PPA power bill it avoids (the BOI no longer @@ -726,11 +727,13 @@ What it says: The [calculator](../fleet-calculator.html) presets, at the team's planning rates (3 records a minute per Duplex system) and its own cost -build-up, give at 850k records: **Plan A** EBITDA 2.05M USD, payback 2.4 -years on the investment, cash payback in year ~3.9 and ~25 % IRR over ten -years with the reserve in year 0; **Plan B** EBITDA 2.12M USD, payback 2.9 -years, cash payback in year ~4.4 and ~21 % IRR (pre-tax, pre-financing, -estimates). +build-up, give at 850k records: **Plan A** EBITDA 2.17M USD, payback 2.3 +years on the investment, cash payback in year ~3.8 and ~26 % IRR over ten +years with the reserve in year 0; **Plan B** EBITDA 2.23M USD, payback 2.7 +years, cash payback in year ~4.2 and ~22 % IRR (pre-tax, pre-financing, +estimates). Both rose ~0.11M to 0.12M USD a year when steam moved from electric to +biomass (~4.2M THB a year less energy); the table above does not split +energy by fuel, so it does not show that saving. ## Operating picture at full capacity (five-press fleet) diff --git a/docs/finance/total-investment.md b/docs/finance/total-investment.md index cf67e1d..bfe1147 100644 --- a/docs/finance/total-investment.md +++ b/docs/finance/total-investment.md @@ -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 | | 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) | -| Utilities, solar, battery, HVAC, clean zones, racking | 1,042k – 1,707k | 34.4M – 56.3M | [utilities CSV](utilities-investment.csv) baseline re-sized for three presses: chiller bank two modules instead of three; PV on every roof and canopy (~640 kWp, user decision 17 October 2026) at 20 to 26 THB/W installed and the battery installed (Thai market prices checked October 2026, sources in the CSV) | +| Utilities, steam, solar, battery, HVAC, clean zones, racking | 1,045k – 1,764k | 34.5M – 58.2M | [utilities CSV](utilities-investment.csv) baseline re-sized for three presses: chiller bank two modules instead of three; **biomass steam** (two 500 kg/h modules, 6M to 10M THB, plus the fuel store and handling, 1M to 2M) and **PV on the factory roof** (~520 kWp at 20 to 26 THB/W installed; office roof and parking canopies PV-ready), both user decisions of 17 October 2026; 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 | | 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 | @@ -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 | | 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 | -| Subtotal | ~4.42M – 7.73M | ~146M – 255M | midpoint ~6.08M USD, ~201M THB | -| Contingency 15 % | ~0.66M – 1.16M | ~22M – 38M | | -| **Total, launch plant** | **~5.1M – 8.9M USD** | **~168M – 294M THB** | midpoint ~6.99M USD, ~231M THB | +| Subtotal | ~4.42M – 7.79M | ~146M – 257M | midpoint ~6.11M USD, ~202M THB | +| Contingency 15 % | ~0.66M – 1.17M | ~22M – 39M | | +| **Total, launch plant** | **~5.1M – 9.0M USD** | **~168M – 296M THB** | midpoint ~7.02M USD, ~232M THB | 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), @@ -144,11 +144,20 @@ versions** for the investor, built from the same documents: First drawn as five presses at ~225M THB (Plan A plus 25 %); re-defined by the user on 17 October 2026 ("plan b should also only start with 1 duplex and 1 classic, but with all levers"). In both plans the second - Duplex system is a growth step from revenue. On 17 October 2026 the - solar array was sized to every roof and canopy (~640 kWp, "use as much - roof space as possible"); that raised Plan B from ~208M to ~216M and - Plan A's solar lever from ~9.7M to ~17.5M, and left Plan A's price as - it was, because Plan A leases the array. + Duplex system is a growth step from revenue. +- **Both run on biomass steam, with PV on the factory roof only** + (user, 17 October 2026: "only put solar on the factory, prepare the + other buildings for solar, option a and b should operate on biomass"). + The office roof and the parking canopies are built PV-ready. With + biomass the plant's running load falls to ~230 kW, so the best array + is ~500 to 550 kWp ([sustainability](../sustainability.md#pv-size-with-biomass-steam)), + about the ~520 kWp factory roof. Against the earlier electric steam + and ~640 kWp, in Plan B the biomass boilers and fuel store add ~3.8M + at the midpoint over the Thai electric bank and the smaller array saves + ~2.8M, so it rises from ~216M to **~217M**; Plan A leases the array and + had the cheaper Chinese electric boilers, so it takes the full ~5.4M, + from ~177M to **~182M**. Biomass saves ~4.2M THB a year of steam energy + (calculator). Both are priced **without contingency** (user decision) and **with the ramp-up reserve**, because the reserve is cash the investor puts in @@ -157,26 +166,26 @@ reference plus 20 % in both. Midpoints, estimates: | Plan A: launch plant with six levers | Saves | Subtotal after it | |---|---|---| -| Launch plant, every block, no contingency | | ~200.6M THB (~6.08M USD) | -| Solar (~640 kWp on every roof and canopy) and battery through a solar PPA (the installer owns and finances the array, the plant buys the power) | ~17.5M | ~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 | -| Visitor corridor built later; no public tours at first | ~3.6M | ~170.8M | -| Cassette and CD-R duplication later | ~4.0M | ~166.8M | -| Crane rented for the installations; frame, runway and machine door stay crane-ready | ~3.2M | ~163.6M | -| Boilers and compressor through the Chinese route ([Chinese suppliers](../suppliers/china-utilities.md)) | ~1.9M | **~161.7M (~4.90M USD)** | +| Launch plant, every block, no contingency | | ~201.6M THB (~6.11M USD) | +| Solar (~520 kWp on the factory roof) and battery through a solar PPA (the installer owns and finances the array, the plant buys the power) | ~14.7M | ~186.9M | +| 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 | ~178.1M | +| Visitor corridor built later; no public tours at first | ~3.6M | ~174.5M | +| Cassette and CD-R duplication later | ~4.0M | ~170.5M | +| Crane rented for the installations; frame, runway and machine door stay crane-ready | ~3.2M | ~167.3M | +| Compressor through the Chinese route ([Chinese suppliers](../suppliers/china-utilities.md)); the route priced only electric boilers, so with biomass it saves only the compressor | ~0.25M | **~167.1M (~5.06M USD)** | | Ramp-up reserve | | +10M to 20M | -| **Plan A** | | **~177M THB (~5.35M USD)**, ~127M to 226M from the low to the high end of every block | +| **Plan A** | | **~182M THB (~5.52M USD)**, ~2M above 180M at the midpoint (177M with the reserve's low end); ~132M to 233M from the low to the high end of every block | | Plan B: the launch plant, everything in | USD | THB | |---|---|---| -| Launch plant, every block, no contingency (the six lever items included: owned solar (~640 kWp) and battery ~17.5M, 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 ~39M THB at the midpoint) | 4.42M – 7.73M | ~146M – 255M, **~200.6M (~6.08M USD)** at the midpoint | +| Launch plant, every block, no contingency (the six lever items included: owned solar (~520 kWp) and battery ~14.7M, full metrology ~8.8M, visitor corridor ~3.6M, cassette and CD-R ~4.0M, bought crane ~3.2M, Thai compressor ~0.25M, together ~34.5M THB at the midpoint) | 4.42M – 7.79M | ~146M – 257M, **~201.6M (~6.11M USD)** at the midpoint | | Ramp-up reserve | | +10M to 20M | -| **Plan B** | | **~216M THB (~6.53M USD): ~215M**, ~156M to 275M from the low to the high end of every block | +| **Plan B** | | **~217M THB (~6.56M USD): ~215M**, ~156M to 277M from the low to the high end of every block | -Plan B costs ~39M THB (~22 %) more than Plan A and, at the midpoint, -stays just within the investor's 180M THB plus 20 % (216M; its high end, -~275M, does not). It keeps what Plan A leases or defers: -owned solar on every roof and canopy and the battery, the full +Plan B costs ~35M THB (~19 %) more than Plan A and, at the midpoint, +sits ~0.6M above the investor's 180M THB plus 20 % (216M) and 8.4M under +the 225M mark (its high end, ~277M, is above both). It keeps what Plan A leases or defers: +owned solar on the factory roof and the battery, the full metrology stack from the first release, the visitor corridor and tours from the start, cassette and CD-R, the bought crane, Thai-supplied utilities with local service. Both plans have the same three presses and @@ -189,17 +198,17 @@ both as presets. **Not in either plan price:** - **Contingency.** The blocks are budgetary (plus or minus 30 to 50 % on the estimates, top of this page), so the plans carry no buffer for - quotes landing high. At this page's 15 % that would be ~24M THB on + quotes landing high. At this page's 15 % that would be ~25M THB on Plan A and ~30M on Plan B at the midpoint. - The central hydraulic plant (not costed yet), the archive's mobile shelving (to quote), CD replication, financing costs, currency moves, and Thai duty and import VAT (the blocks assume BOI promotion). **What decides between them:** not demand, since both make the same -records, but whether the investor funds ~39M THB more at launch for what +records, but whether the investor funds ~35M THB more at launch for what Plan A leases or buys from revenue. On the modelled numbers Plan B's extra earns little: the same EBITDA in the revenue model (the calculator -puts Plan B ~0.07M USD a year ahead, the PPA power bill its owned array +puts Plan B ~0.06M USD a year ahead, the PPA power bill its owned array avoids), more depreciation and a longer payback; its case rests on that bill and on what the operating table leaves out: full stamper metrology for the traceability pitch from the first release, @@ -209,7 +218,10 @@ installations (Announcement 3/2568, in force 1 July 2025; only the battery may still qualify, see [BOI](../boi.md)), so owning the array earns no tax benefit, only the bill. Most of Plan B's items can be added to Plan A later from revenue; the corridor is cheaper to have from the -start. Both plans keep the second Duplex as a growth step, with its +start. **Plan A over 180M:** the way back is a quote for a Chinese +biomass boiler (ZOZEN, Sitong, Taiguo and Yongxing build them; none +priced yet): ~2M or more below the Getabec-class package brings Plan A +to 180M at the midpoint. Both plans keep the second Duplex as a growth step, with its floor, utility positions and ring-main tees reserved: ~15.4M THB at the midpoint for the system (~8.7M), a third chiller module CH-3 (~2.1M), their freight and installation (~1.2M) and the working capital for the diff --git a/docs/finance/utilities-investment.csv b/docs/finance/utilities-investment.csv index b937422..c55ed19 100644 --- a/docs/finance/utilities-investment.csv +++ b/docs/finance/utilities-investment.csv @@ -1,6 +1,7 @@ category,item,spec_summary,candidate_thai_suppliers,cost_low_thb,cost_high_thb,cost_basis,notes -steam,Electric/gas once-through boiler bank,"2 x 500 kg/h modules at 10.5 bar / 180 C, lead/lag, shared feed tank, feed pumps, economizer, installed","Miura Thailand (Chachoengsao); Bangkok Industrial Boilers; STE Thailand; Chinese route (October 2026): ZOZEN, Sitong, Fangkuai, Taiguo (ASME claimed, Thai references, no Thai service partner), see suppliers/china-utilities.md",4500000,7000000,engineering estimate,"Launch plant (October 2026): one Duplex system and one Classic, 450-540 kg/h at Newbilt's 150-180 kg/h per press, so B-1 and B-2 both at launch; the boiler hall is built for four modules (scale.md utility phasing); a third module for N+1 is an RFQ option; Miura-class modular once-through; service is Bangkok-centric, confirm northern dispatch SLA; Chinese route estimate 2.8M-5.5M THB installed (two ASME-stamped 1.25 MPa bodies USD 15k-35k each, inspection and certification, freight, Thai contractor balance of plant), about 1.6M THB less at the midpoint; imported boilers need DIW certification-body verification either way" -steam,Biomass/wood-fired boiler package (option),"~1 t/h solid fuel (wood chips/pellets/rice husk) incl. fuel feed, grate, dust control, softener, installed",Getabec PCL (Thai fabrication and service),6000000,10000000,engineering estimate,"Sized for the five-press fleet (was ~0.5 t/h for one Duplex); sustainability path matching Deepgrooves NL precedent; higher capex, lower fuel opex in the North; NOT included in baseline total" +steam,Electric/gas once-through boiler bank (alternative),"2 x 500 kg/h modules at 10.5 bar / 180 C, lead/lag, shared feed tank, feed pumps, economizer, installed","Miura Thailand (Chachoengsao); Bangkok Industrial Boilers; STE Thailand; Chinese route (October 2026): ZOZEN, Sitong, Fangkuai, Taiguo (ASME claimed, Thai references, no Thai service partner), see suppliers/china-utilities.md",4500000,7000000,engineering estimate,"NOT included in baseline total since 17 Oct 2026 (user: both plans run on biomass); kept as the alternative. Launch plant (October 2026): one Duplex system and one Classic, 450-540 kg/h at Newbilt's 150-180 kg/h per press, so B-1 and B-2 both at launch; the boiler hall is built for four modules (scale.md utility phasing); a third module for N+1 is an RFQ option; Miura-class modular once-through; service is Bangkok-centric, confirm northern dispatch SLA; Chinese route estimate 2.8M-5.5M THB installed (two ASME-stamped 1.25 MPa bodies USD 15k-35k each, inspection and certification, freight, Thai contractor balance of plant), about 1.6M THB less at the midpoint; imported boilers need DIW certification-body verification either way" +steam,"Biomass/wood-fired boiler package, 2 x 500 kg/h or one ~1 t/h","~1 t/h solid fuel (wood chips/pellets/rice husk) incl. fuel feed, grate, dust control, softener, installed",Getabec PCL (Thai fabrication and service),6000000,10000000,engineering estimate,"Baseline since 17 Oct 2026 (user: ""option a and b should operate on biomass""); the launch plant draws 450-540 kg/h, so the two 500 kg/h modules of the boiler hall (B-1, B-2) or one ~1 t/h package; Chinese makers build biomass boilers too (ZOZEN DZL, Sitong DZL/SZL, Taiguo, Yongxing; china-utilities.md), not priced yet; fuel ~300 t air-dry wood or ~460 t fresh chips a year at ~850k records, ~0.67M THB at 0.7 THB/kWh of heat (biomass.md); sustainability path matching Deepgrooves NL precedent" +steam,Biomass fuel store and handling,"Covered fuel store (42 m2 in the site model, ~6-7 weeks of fresh chips; ~80 m2 for a 3-month monsoon stock), chip bay, ash bins, compact loader",Local steel-shed contractors; loader dealers (used compact loaders),1000000,2000000,engineering estimate,"biomass.md: fuel handling and storage come on top of the boiler package; shed at roughly half the main building's 12,000-20,000 THB/m2 plus a used loader (estimate)" steam,Steam balance of plant,"Traps, accumulator, condensate return",Forbes Marshall Thailand,0,0,included,Largely included in boiler package rows; line kept for RFQ completeness compressed_air,Screw compressor skid (oil-injected),"~7.5 kW VSD screw + refrigerated dryer (3 C PDP) + coalescing filters + ~500 L receiver, installed","Atlas Copco Thailand; Kaeser Thailand (SM-T/Aircenter); Ingersoll Rand Thailand; Chinese brands with Thai offices (October 2026): Kaishan Compressor (Thailand), Denair Thailand, see suppliers/china-utilities.md",350000,600000,engineering estimate,"14-30 m3/h demand is small (5-10 hp class); oil-injected + filter train meets 5 micron / 3 C spec; Chinese route estimate 0.15M-0.3M THB installed (PM VSD 11 kW class USD 2k-5k, dryer, receiver, filters, installation)" compressed_air,True oil-free class-0 (option),Same duty in oil-free class-0,Atlas Copco (ZR/ZT); Kaeser,1200000,1800000,engineering estimate,Only if air contacts product stream; NOT included in baseline total @@ -13,6 +14,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 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 -solar,"PV EPC, every roof and canopy covered (~640 kWp on the Payap scenario plot)","Turnkey C&I EPC on the factory roof (~523 kWp), the office roof (~65 kWp) and the car and scooter canopies (~54 kWp), incl. inverters (Deye hybrids where the battery connects), at 20000-26000 THB/kWp",Solar Nicolo (Deye tier-1 distributor); Banpu NEXT; SCG Cleanergy; Sermsang; CapSolar; local Chiang Mai installers,12800000,16640000,"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, about ten 50 kW units for ~500 kVA); size: the roofs full, user decision 17 Oct 2026 (was an illustrative 300 kWp)","Size follows the site: on the Mueang Chi hall the roof and canopies take ~300 kWp (scale.md), the rest would be ground mount; canopy steel is in the construction RFQ site works; ~85% of the yield used on site under PEA zero export (hourly sketch, estimate); self-consumed PV worth ~3.7 THB/kWh, ~4.2-5.9 yr payback (sustainability.md, grid tariff)" +solar,"PV EPC, factory roof (~520 kWp on the Payap scenario plot)","Turnkey C&I EPC on the factory roof (~523 kWp in the parts model), incl. inverters (Deye hybrids where the battery connects), at 20000-26000 THB/kWp; office roof (~65 kWp) and car and scooter canopies (~54 kWp) PV-ready, panels later",Solar Nicolo (Deye tier-1 distributor); Banpu NEXT; SCG Cleanergy; Sermsang; CapSolar; local Chiang Mai installers,10400000,13520000,"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, about nine 50 kW units for ~430 kVA); size: the factory roof, user decision 17 Oct 2026 (was every roof and canopy, ~640 kWp, and before that an illustrative 300 kWp)","Size: with biomass steam the best array is ~500-550 kWp (hourly sketch, sustainability.md), so the factory roof's ~520 kWp; on the Mueang Chi hall the factory roof takes ~247 kWp (scale.md); PV-ready means structure for the panels, conduit and a spare way at the main board (in the building and site works); ~87% of the yield used on site under PEA zero export (estimate); self-consumed PV worth ~3.7 THB/kWh, ~4.1-5.8 yr payback (sustainability.md, grid tariff)" 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 + ~640 kWp solar + 271 kWh BESS,,34370000,56340000,sum of baseline rows,"Launch plant, one Duplex system and one Classic (October 2026; solar and battery re-priced from Thai market data and the array sized to every roof and canopy 17 Oct 2026, was 27.57M-47.50M at 300 kWp and 28.47M-48.73M before the re-price; 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,Biomass boiler package (2 modules) + fuel store + oil-injected air + chiller bank (2 modules) + softener + loop treatment + local racking + HVAC + clean zones + ~520 kWp factory-roof solar + 271 kWh BESS,,34470000,58220000,sum of baseline rows,"Launch plant, one Duplex system and one Classic (October 2026; biomass steam and PV on the factory roof only 17 Oct 2026, was 34.37M-56.34M with electric steam and ~640 kWp; solar and battery re-priced from Thai market data and the array sized to every roof and canopy 17 Oct 2026, was 27.57M-47.50M at 300 kWp and 28.47M-48.73M before the re-price; 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" diff --git a/docs/fleet-calculator.html b/docs/fleet-calculator.html index c0ef95a..0175609 100644 --- a/docs/fleet-calculator.html +++ b/docs/fleet-calculator.html @@ -931,8 +931,8 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } var VERSION = "1.1"; var DEF = { duplex: 1, classic: 1, galvanics: true, cutting: true, metrology: "full", - cassette: true, cdr: true, solar: "buy", pvKwp: 640, batteryKwh: 271, - fuel: "electric", boilerModules: 2, chillerModules: 2, crane: "buy", + cassette: true, cdr: true, solar: "buy", pvKwp: 520, batteryKwh: 271, + fuel: "biomass", boilerModules: 2, chillerModules: 2, crane: "buy", corridor: true, phase2: false, running: true, labels: true }; var OFFW = { off: 1, out: 1, bought: 1, no: 1, none: 1, later: 1, "false": 1, "0": 1, "": 1 }; @@ -1314,16 +1314,17 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } // ------------------------------------------------------------ PV placement var PV_ROWS = [1, 3, 5, 7, 10, 12, 14, 16, 19, 21]; - // kWp per drawn module place (~2 m2): every place on the factory roof, the office roof and the two canopies - // together (1,467) is the ~640 kWp design (site-candidates.md parts model plus the office roof) - var PV_MOD = 0.4363; + // kWp per drawn module place (~2 m2): the 1,220 places on the factory roof are the ~520 kWp array of the + // plans (decided October 2026: PV on the factory only; the office roof and the canopies are PV-ready and + // take panels only above that size) + var PV_MOD = 0.4262; function pvFields(cfg, al) { var f = []; - // the parking canopies carry PV first (construction RFQ: canopy PV), the factory roof takes the rest - f.push({ key: "cars", x0: 18.35, cols: 27, y0: 6, rows: [0.15, 2.45, 4.75], z: function (y) { return 2.9 + (y - 6) / 7 * 1.2 + 0.08; } }); - f.push({ key: "scoot", x0: 20.35, cols: 13, y0: 26, rows: [0.4, 2.85], z: function (y) { return 2.45 + (y - 26) / 5.5 * 1.05 + 0.08; } }); + // the factory roof fills first; the PV-ready office roof and parking canopies take any kWp above it f.push({ key: "roofW", x0: X(1), cols: 103, y0: FY, rows: PV_ROWS, z: function (y) { return roofZ(y - FY) + 0.12; } }); f.push({ key: "roofE", x0: X(107.25), cols: 19, y0: FY, rows: PV_ROWS, z: function (y) { return roofZ(y - FY) + 0.12; } }); + f.push({ key: "cars", x0: 18.35, cols: 27, y0: 6, rows: [0.15, 2.45, 4.75], z: function (y) { return 2.9 + (y - 6) / 7 * 1.2 + 0.08; } }); + f.push({ key: "scoot", x0: 20.35, cols: 13, y0: 26, rows: [0.4, 2.85], z: function (y) { return 2.45 + (y - 26) / 5.5 * 1.05 + 0.08; } }); // office roof: flat, the three AC units in the middle keep a clear strip around them var oz = function () { return OFC.z1 + 0.14; }; f.push({ key: "offW", x0: OFC.x0 + 1, cols: 18, y0: OFC.y0, rows: [0.8, 3.1, 5.4, 7.7, 10.0, 12.3], z: oz }); @@ -1543,8 +1544,8 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } sp.prism(rect(20, 26, 33.7, 31.5), [2.3, 2.3, 3.35, 3.35], [2.45, 2.45, 3.5, 3.5], "iso-canopy"); pvDraw(sp, pv.by.scoot.F, pv.by.scoot.panels); var nc = pv.by.cars.panels.length, ns = pv.by.scoot.panels.length; - sc.inf("canopy-cars", "Car canopy, 10 bays", "27.7 x 7.0 m at 4.1 m (construction RFQ)" + (nc ? "; " + nc + " PV modules (~" + fmt(nc * PV_MOD) + " kWp)" : "")); - sc.inf("canopy-scooters", "Scooter canopy, ~30 spaces", "13.7 x 5.5 m at 3.5 m (construction RFQ)" + (ns ? "; " + ns + " PV modules (~" + fmt(ns * PV_MOD) + " kWp)" : "")); + sc.inf("canopy-cars", "Car canopy, 10 bays", "27.7 x 7.0 m at 4.1 m (construction RFQ)" + (nc ? "; " + nc + " PV modules (~" + fmt(nc * PV_MOD) + " kWp)" : "; PV-ready: steel sized for ~42 kWp of panels, conduit to the main board; panels later")); + sc.inf("canopy-scooters", "Scooter canopy, ~30 spaces", "13.7 x 5.5 m at 3.5 m (construction RFQ)" + (ns ? "; " + ns + " PV modules (~" + fmt(ns * PV_MOD) + " kWp)" : "; PV-ready: steel sized for ~13 kWp of panels, conduit to the main board; panels later")); } // ------------------------------------------------------------ factory @@ -2224,7 +2225,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } var OFC_UP = 4.0; // storey height: first floor at z0 + 4.0 (8 m to the roof for two storeys) function officeInfo(sc, cfg) { sc.inf("office", "Office building, 32 x 15 m", - "Two storeys (~960 m2) with a stair and a lift. Ground floor: reception and lobby, canteen, changing rooms, toilets, mastering and cutting, listening room, archive. " + + "PV-ready flat roof (structure for ~65 kWp of panels, conduit to the main board; panels later). Two storeys (~960 m2) with a stair and a lift. Ground floor: reception and lobby, canteen, changing rooms, toilets, mastering and cutting, listening room, archive. " + "First floor: offices, meeting and training, a meeting room, IT and server room, toilets, pantry, a flexible room. Isolated from the factory floor, joined by a covered link (site-candidates.md)."); sc.inf("cutting", cfg.cutting ? "Mastering and cutting room" : "Cutting room: cut abroad", cfg.cutting ? "Sillitoe SDMS lathe (USD 125k list) on the ground slab, away from press vibration and outside the crane zone; inner acoustic lining" : @@ -2514,7 +2515,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; } if (onP2) parts.push(onP2 + " on the phase 2 roof"); sc.inf("pv", "PV " + fmt(kwp) + " kWp, " + fmt(cfg.batteryKwh) + " kWh battery" + (ppa ? " (PPA)" : ""), fmt(pv.want) + " modules of ~" + PV_MOD.toFixed(2) + " kWp (~2 m2 each): " + parts.join(", ") + (pv.left ? "; " + fmt(pv.left) + " do not fit the roofs (ground mount)" : "") + - ". About " + fmt(kwp * 1.4) + " to " + fmt(kwp * 1.5) + " MWh a year at 1,400 to 1,500 kWh/kWp (scale.md), ~85 % of it used on site (zero export)" + (ppa ? ". PPA: the EPC owns the panels, the plant buys the power." : ".")); + ". About " + fmt(kwp * 1.4) + " to " + fmt(kwp * 1.5) + " MWh a year at 1,400 to 1,500 kWh/kWp (scale.md), ~87 % of it used on site (zero export)" + (ppa ? ". PPA: the EPC owns the panels, the plant buys the power." : ".")); if (!inside && onRoof) { sc.tag(X(52), Y(10), roofZ(10) + 1.5, "PV " + fmt(kwp) + " kWp", 10, "pv"); if (ppa) sc.tag(X(80), Y(6), roofZ(6) + 1.0, "PPA panels", 100, "pv", "iso-signtag"); @@ -2856,7 +2857,7 @@ const S0 = { priceStd: 3.8, premSpec: 1.15, titleFee: 1155, cur: "USD", boi: "on", exportShare: 70, capexEnd: "mid", // plant configuration (defaults = the launch plant, total-investment.md October 2026) galv: "in", galvPrice: "pheenix", cut: "in", metro: "full", cass: "on", cdr: "on", countCD: "off", - solar: "buy", steamFuel: "electric", sourcing: "thai", crane: "buy", corridor: "now", reserve: "in", cont: "in", stSupply: 0, + solar: "buy", steamFuel: "biomass", sourcing: "thai", crane: "buy", corridor: "now", reserve: "in", cont: "in", stSupply: 0, }; // allowed values of every switch, default first where it matters for readHash const ENUM = { @@ -2966,9 +2967,9 @@ grp("Energy", [ ["kwhPrice", "Electricity, blended", 3.81, "THB/kWh", "doc", "scale.md: PEA TOU 3.2.2 at two shifts, before the demand charge (Ft September to December 2026)"], ["demandPrice", "Demand charge", 132.93, "THB/kW a month", "doc", "PEA 3.2.2 (scale.md)"], ["restKW", "Rest of the plant while running", 120, "kW", "est", "Estimate: HVAC, lighting, galvanics, finishing, offices; puts the start fleet in scale.md's 4.5 to 6.8M THB a year before PV"], - ["pvKWp", "PV array: factory roof, office roof and parking canopies, all full", 640, "kWp", "est", "Payap scenario: factory roof ~523 kWp and canopies ~54 kWp (site-candidates.md parts model, 580 W placeholder module) plus the office roof ~65 kWp (estimate from this drawing); on the Mueang Chi hall the roof and canopies take ~300 kWp (scale.md)"], + ["pvKWp", "PV array on the factory roof", 520, "kWp", "est", "Decided October 2026: PV on the factory only, the office roof (~65 kWp) and the parking canopies (~54 kWp) PV-ready for later. Payap scenario factory roof ~523 kWp (site-candidates.md parts model, 580 W placeholder module), near the biomass-case optimum of ~500 kWp (sustainability.md); the Mueang Chi roof takes ~247 kWp (scale.md)"], ["pvYield", "PV yield", 1400, "kWh/kWp", "doc", "scale.md: 1,400 to 1,500 kWh/kWp a year in northern Thailand"], - ["pvSelf", "Share of the PV yield used on site", 85, "%", "est", "Hourly sketch (October 2026): two shifts on 300 days, ~60 kW off-shift base load, the 271 kWh battery; the rest is curtailed, because a factory on PEA's grid runs zero export (sustainability.md)"], + ["pvSelf", "Share of the PV yield used on site", 87, "%", "est", "Hourly sketch (October 2026), biomass steam: ~230 kW running load on two shifts and 300 days, ~60 kW off-shift base load, the 271 kWh battery; the rest is curtailed, because a factory on PEA's grid runs zero export (sustainability.md)"], ["heatPrice", "Steam heat from biomass", 0.7, "THB/kWh", "doc", "biomass.md: 0.5 to 0.9 at 1.35 to 2 THB/kg delivered"], ["steamKWh", "Heat per kg of steam", 0.68, "kWh/kg", "est", "Estimate: 10 bar saturated steam from ~80 °C feed water"], ["eBoilEff", "Electric boiler efficiency", 98, "%", "est", "Estimate for an electric steam boiler (~98 %)"], @@ -3034,14 +3035,15 @@ rng("Investment blocks (USD unless THB)", [ ["pvcL", "PVC lab, day-one tier", 55000, 150000, "USD", "est", "quality-automation.md"], ["bTh", "Electric boiler module, 500 kg/h, Thai supplier, installed", 2250000, 3500000, "THB", "est", "Utilities CSV: bank of two 4.5 to 7.0M THB, engineering estimate"], ["bCn", "Electric boiler module, 500 kg/h, Chinese route, installed", 1400000, 2750000, "THB", "est", "china-utilities.md: two ASME-stamped modules 2.8 to 5.5M THB installed"], - ["bBio", "Biomass boiler module, 500 kg/h, installed", 3000000, 5000000, "THB", "est", "Utilities CSV: biomass package 6 to 10M THB for ~1 t/h (Getabec class), estimate"], + ["bBio", "Biomass boiler module, 500 kg/h, installed", 3000000, 5000000, "THB", "est", "Utilities CSV: biomass package 6 to 10M THB for ~1 t/h incl. fuel feed, grate and dust control (Getabec class), estimate"], + ["bFuel", "Biomass fuel store and handling", 1000000, 2000000, "THB", "est", "Utilities CSV: covered fuel store (42 m2 drawn, ~6 to 7 weeks of fresh chips; ~80 m2 for a 3-month monsoon stock), chip bay, ash bins, a compact loader; estimate (biomass.md: fuel handling and storage come on top of the boiler package)"], ["cBk", "Cooling backbone: plate HX, tanks, pumps, mains for four modules", 1700000, 2700000, "THB", "est", "Utilities CSV: chiller bank of two 4.9 to 7.9M THB less two modules"], ["chM", "Chiller module, 250 kW air-cooled, installed", 1600000, 2600000, "THB", "est", "Utilities CSV: one module ~1.6 to 2.6M THB, estimate"], ["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"], ["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 34.37 to 56.34M THB less boilers, chillers, air, clean room, PV and battery"], - ["pv", "PV EPC per kWp, roofs and canopies", 20000, 26000, "THB", "est", "Utilities CSV: 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. the inverters; times the array size above; canopy steel is in the building and site works (construction RFQ)"], + ["uRest", "Rest of the utilities baseline: softener, loop treatment, racking, whole-factory HVAC", 8620000, 17300000, "THB", "est", "Utilities CSV baseline 34.47 to 58.22M THB less boilers, fuel store, chillers, air, clean room, PV and battery"], + ["pv", "PV EPC per kWp, factory roof", 20000, 26000, "THB", "est", "Utilities CSV: 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. the inverters; times the array size above; canopy steel is in the building and site works (construction RFQ)"], ["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"], ["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"], @@ -3242,6 +3244,7 @@ function capexOf(r, c = S, boiOn = c.boi !== "off") { else blk("Quality", "metF", "Metrology, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio station", 1, false, { imp: 1 }); blk("Quality", "pvcL", "PVC lab, day-one tier"); const bio = c.steamFuel === "biomass", cn = c.sourcing === "china"; + if (r.nb > 0 && bio) blk("Utilities", "bFuel", "Biomass fuel store, chip bay, ash bins and a compact loader", 1, true); if (r.nb > 0) blk("Utilities", bio ? "bBio" : cn ? "bCn" : "bTh", `Steam: ${pl(r.nb, `${f0(A.boilerMod)} kg/h ${bio ? "biomass" : "electric"} boiler module`)}${bio ? "" : cn ? ", Chinese route" : ", Thai supplier"}`, r.nb, true); blk("Utilities", "cBk", "Cooling backbone: plate HX, tanks, pumps and mains for four modules", 1, true); @@ -3251,7 +3254,7 @@ function capexOf(r, c = S, boiOn = c.boi !== "off") { if (cr > 0) blk("Utilities", "clR", cr === 1 ? "Clean-room adder: galvanics and cutting room" : `Clean-room adder, half: ${galvIn ? "galvanics" : "cutting room"} only`, cr, true); blk("Utilities", "uRest", "Rest of the utilities baseline: softener, loop treatment, racking, whole-factory HVAC", 1, true); if (c.solar === "buy") { - blk("Utilities", "pv", `PV on the roofs and canopies, ${f0(A.pvKWp)} kWp, EPC`, A.pvKWp, true); + blk("Utilities", "pv", `PV on the factory roof, ${f0(A.pvKWp)} kWp, EPC (office roof and canopies PV-ready)`, A.pvKWp, true); blk("Utilities", "bat", "Battery 271 kWh (Gobel)", 1, true); } blk("Building and site", "bld", "Building ~1,500 m² plus civil and site works"); @@ -3646,7 +3649,7 @@ const CFG = [ h: { off: "Illustrative volumes and prices with no market data; left out of the money.", on: "Counted at the illustrative volumes and prices, with no running costs on file: it flatters the result." }, dis: () => S.cass === "off" && S.cdr === "off" ? "Not applicable: neither line is in the plant." : "" }, - { k: "solar", t: "Solar PV and 271 kWh battery", sub: "every roof and canopy covered (~640 kWp) plus the Gobel battery", + { k: "solar", t: "Solar PV and 271 kWh battery", sub: "the factory roof (~520 kWp; office and canopies PV-ready) plus the Gobel battery", o: [["buy", "Buy"], ["ppa", "Solar PPA"], ["none", "None"]], h: { buy: () => `${nf(1).format(A.pvLo * A.pvKWp / 1e6)}M to ${nf(1).format(A.pvHi * A.pvKWp / 1e6)}M THB for ${f0(A.pvKWp)} kWp plus ${mT("bat")} battery; the yield offsets the bill.`, ppa: "No capex: the EPC owns the array, the plant pays the PPA price on the yield.", @@ -3655,8 +3658,8 @@ const CFG = [ { k: "steamFuel", t: "Steam fuel", sub: "the boiler modules follow the fleet's peak steam", o: [["electric", "Electric"], ["biomass", "Biomass"]], h: { electric: "Electric modules on PEA power: energy charge plus demand charge per installed module.", - biomass: "Biomass modules (utilities CSV package); heat at the biomass price." } }, - { k: "sourcing", t: "Utilities sourcing", sub: "electric boiler modules and the compressor", + biomass: "Biomass modules (utilities CSV package) plus the fuel store; heat at the biomass price. Both plans run on biomass (October 2026)." } }, + { k: "sourcing", t: "Utilities sourcing", sub: "the compressor, and the boiler modules when steam is electric", o: [["thai", "Thai suppliers"], ["china", "Chinese route"]], h: { thai: "Thai suppliers, installed (utilities CSV).", china: "ASME-stamped bodies installed by a Thai contractor, compressor through a Chinese brand's Thai office (china-utilities.md)." } }, @@ -3722,7 +3725,7 @@ function renderInvest(e, r) { H.push(`