"""Part C: investment, revenue and operating model, timeline, phasing, team and ownership, risks, next steps. Draft 0.3, October 2026: two versions built from this one file, Plan A (~180M THB, the launch plant with six cost levers, three presses) and Plan B (~215M THB, the same launch plant and three presses with everything in, none of the levers taken; re-defined by the user on 17 October 2026). In both the second Duplex system is a growth step from revenue. Both are priced without contingency and with the ramp-up reserve: docs/finance/total-investment.md "Two plans: A at ~180M THB and B at ~215M THB (October 2026)" and docs/finance/revenue-model.md "Operating pictures of Plan A and Plan B (October 2026)". plan_variant.pick() switches the text; it is called inside blocks() only (build_plan.py sets the plan before it calls blocks()). """ from plan_lib import H1, H2, H3, P, B, N, T, KV, IMG, CALL, PB from plan_variant import pick, is_a, is_b, label, name # ------------------------------------------------------------ 8.1 blocks def _block_rows(): """This plan's blocks: the calculator rows of its preset, grouped (USD and THB, low to high).""" a = is_a() rows = [ ["Phase 0: BOI consultant, legal and lease work, soil test, re-quotes", "40k to 80k", "1.3M to 2.6M", "Estimate"], ["Newbilt Duplex system 1 (two HRP 12 presses, EX 50 main and EX 35 colour extruder, trimmer, label " "oven, shrink wrapper, grinder, label punch)", "350k to 370k", "11.6M to 12.2M", "Quoted: 2024 offer EUR 200,500 for the Single 2.1 plus the quoted second press and extruder " "~USD 115k; expired, re-quote"], ] rows += [ ["Newbilt Classic, fully automatic press", "290k to 460k", "9.6M to 15.2M", "Placeholder (the old " "automatic-press band per press); **no Newbilt price on file**"], ["Pheenix galvanics line (PASU, PPPU, one PDPU, PMPB)", "324k to 445k", "10.7M to 14.7M", "**OMS's reference plus 20 %**: OMS's 4-cell wet room with the EUR 10k know-how transfer, EUR 234k " "to 321k (letter of 9 October 2026), × 1.2 = EUR 280.8k to 385.2k; **no Pheenix price on file**"], ["Galvanics water: zero-discharge (ZLD) evaporator and DI water", "97k to 258k", "3.2M to 8.5M", "Researched: utilities rows, launch scope"], ["Water-treatment building next to galvanics (~12 × 10 m, proposed)", "52k to 87k", "1.7M to 2.9M", "Estimate at the building rate below"], ["Sibert stamper prep: VSF back-finisher, VSP punch, VSC coiner", "250k", "8.3M", "Sibert's budget " "confirmation, 5 October 2026; its time, spares, shipping and travel sit in the freight and " "working-capital lines"], ["Cutting room: Sillitoe SDMS lathe, spare cutterhead and support, mastering console and chain, " "monitoring, room build-out", "200k to 350k", "6.6M to 11.6M", "SDMS list price USD 125k (ex tax " "and shipping); the rest estimate"], pick(["Metrology and QC, launch tier: XRF, inline vision on the presses, audio station", "170k to 460k", "5.6M to 15.2M", "Estimate; the laser confocal and the wide-area profiler (USD 180k to 350k) are " "bought from revenue (lever 2, section 8.2)"], ["Metrology and QC, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio " "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"], ["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 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; 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"]), ["Maintenance workshop and machine bay fit-out", "30k to 76k", "1.0M to 2.5M", "Estimate"], ] if not a: rows.append(["Visitor corridor and accessible entrance", "67k to 148k", "2.2M to 4.9M", "Estimate"]) rows += [ ["Utility yard built for four boiler and four chiller modules", "73k to 122k", "2.4M to 4.0M", "Estimate"], ["Factory software, ERPNext, artist platform public side", "115k to 310k", "3.8M to 10.2M", "Estimate: factory software 60k to 170k, ERPNext implementation 15k to 50k, artist platform " "40k to 90k"], ] if not a: rows.append(["Cassette duplication and CD-R duplication", "55k to 190k", "1.8M to 6.3M", "Estimate, " "sections 4.8 and 4.9: cassette 40k to 150k, CD-R 15k to 40k"]) rows += [ ["Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its " "quoted 5 days)", "150k to 300k", "5.0M to 9.9M", "Estimate"], ["Working capital, PVC stock, spares, lease deposit, first-year rent", "137k to 293k", "4.5M to 9.6M", "Estimate; land is leased, so no land purchase"], ] if a: 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.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.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 %, ~25M THB at the midpoint", "For information: at 15 %, ~30M THB at the midpoint")], ] return 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", "", "~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", "~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", "~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", "~170.5M", "No cassette or CD-R at launch; a growth " "step"], ["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. 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**", "", "**~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.") 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 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 " "start", "~3.6M"], ["Cassette and CD-R duplication", "Both formats sold from launch", "~4.0M"], ["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"], ["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**", "", "**~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 ~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", "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 % (~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 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 % (~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 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 (~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 (~201.6M THB at the midpoint); the THB " "figures are the shares applied to it (arithmetic, estimates).")) # ------------------------------------------------------- 9.4 operating picture def _operating_table(): if is_a(): rows = [ ["Records", "0.58M", "0.74M", "0.90M"], ["Blended price, 60 % specials", "3.76", "4.49", "5.27"], ["Direct cost", "2.70", "2.00", "1.35"], ["Contribution per record", "1.06", "2.49", "3.92"], ["Pressing contribution", "0.61M", "1.83M", "3.51M"], ["Title-services contribution", "0.07M", "0.23M", "0.48M"], ["**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.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)", "~31 yr", "~3.2 yr (2.3 to 4.1 on 3.99M to " "7.05M)", "~1.1 yr"], ] else: rows = [ ["Records", "0.58M", "0.74M", "0.90M"], ["Blended price, 60 % specials", "3.76", "4.49", "5.27"], ["Direct cost", "2.70", "2.00", "1.35"], ["Contribution per record", "1.06", "2.49", "3.92"], ["Pressing contribution", "0.61M", "1.83M", "3.51M"], ["Title-services contribution", "0.07M", "0.23M", "0.48M"], ["**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.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)", "~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 " "2026)'. Title services at 60 to 70 % contribution after lacquers, styli and nickel. " "Contribution per record and total contribution are the table's own arithmetic.") def _risk_rows(): a = is_a() rows = [ ["High", "Pricing power in the region is unproven", "The single biggest assumption in the revenue " "model; a turnaround advantage nobody pays a premium for is a cost, not a moat", "Market " "validation gate: regional label conversations, the artist platform's calculator as an interest " "list, a second Thai data point; no large spending before it clears"], ] rows += [ ["High", "No contingency in the plan price", pick( "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 ~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 ~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 " "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"), pick("Central breaks even at ~0.2M records; commission in sequence; the second Duplex waits for " "demand; treat the adverse column as the honest one", "Central breaks even at ~0.24M records; commission in sequence; the second Duplex waits for " "demand; treat the adverse column as the honest one")], ] rows += [ ["High", "Galvanics and cutting on the critical path", "No paying release until the cutting room " "and galvanics make good stampers; a slow start there delays every press", "Commission the " "metal path first and measure it; vendor training; Stamper Discs and SST as contacts for a " "slipping commissioning, not a plan"], ["High", "Skills: galvanics process engineer, cutting engineer", "Galvanics is the hardest skill to " "hire; both roles are now needed at launch", "Recruit or train abroad; BOI work permits; vendor " "training (Pheenix, Sillitoe, OMS as a reference); Payap programmes as a longer-term pipeline"], ["High", "Prices not on file: the Classic and the Pheenix line", "The Classic band is a placeholder borrowed from another vendor's automatic press; the Pheenix " "line is priced at OMS's reference plus 20 %, without a Pheenix figure", "Newbilt re-quote and Pheenix quote in phase 0; OMS's dedicated offer as the galvanics benchmark"], ["High", "Vendor build times unknown", "The press build carries ~40 % of the schedule; 15 to 18 " "months would push launch to mid-2029; Pheenix, Sillitoe and Sibert lead times also unquoted", "Required field in every re-quote, now"], ["High", "Zoning of the chosen plot unverified", "A site reset costs ~6 months; the Payap point " "fails zoning as the plan stands (Payap says it can be rezoned: ~16 to 19 months); Mueang Chi is " "unverified", "Verify on the land-use map and with counsel " "before the BOI filing; industrial estate as " "fallback"], ] if a: rows.append(["Medium", "Solar PPA price", "The PPA gives up owning the bill saving and adds a power " "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 ~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 " "later from revenue, as in Plan A, while the corridor is cheaper to have from the start"]) rows += [ ["Medium", "Lease terms and building ownership", "A weak lease makes the building hard to finance " "and exposes it at expiry", "Registered 30 to 50 year lease with renewal, explicit building " "ownership and assignment rights; Thai counsel in phase 0"], ["Medium", "Soil conditions", "Piling could add several hundred to 1,000+ THB/m² across building, " "paving and fill", "Soil boring test in phase 0 (THB 30k to 50k)"], ["Medium", "Galvanics permitting", "Effluent and hazardous-substance permitting are the most likely " "regulatory friction, now in the first factory licence", "Zero-discharge design and the " "water-treatment building from the " "start; industrial estate option; " "lessor's consent on Payap land"], ["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 " "Classic quote disappoints"], ["Medium", "Hydraulic ring-main contamination", "One shared oil system: a contamination event " "reaches every press", "ISO 4406 target, flushing to ISO 23309, particle counts at acceptance " "and after flushing, non-bypass branch filters, isolation per press, online particle counter, " "kidney loop; central plant still to be quoted"], ["Medium", "Currency", "EUR on Newbilt and Pheenix, USD on Sibert and Sillitoe, THB costs, USD/EUR " "revenue; a 10 % baht move is worth 0.09 to 0.17 USD per record on margin", "Currency and validity " "in every quote; THB " "pricing regionally; " "hedging decision with " "the investor"], ["Medium", "Vinyl demand is cyclical", "Global capacity has been added; the model assumes the plant " "sells what it presses", pick("Mixed fleet suits boutique work that is less cyclical; cassette and " "CD-R lines diversify once added; growth options wait for demand", "Mixed fleet suits boutique work that is less cyclical; cassette and " "CD-R lines diversify; further growth waits for demand")], ["Medium", "Reject rate in early production", "Early runs, and the first stampers from a new " "galvanics room, will be worse than the 5 to 10 % allowance while the process settles", "Vendor " "commissioning, stamper metrology, materials lab from day one, QC layers, conservative launch " "promises; the ramp-up reserve"], ["Medium", "Competitive response", "The incumbent may add plating, or a second entrant may appear; " "the domestic price ceiling may compress on our arrival", "Compete on capability (traceability, " "QC, climate), export customers, and " "the collaboration under discussion"], pick(["Low", "Solar integration under the PPA", "Rack voltage vs inverter window, certifications and " "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 ~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 " "are added", "Blank tape and shells come from few suppliers"), "Hold stock; qualify two sources"], ["Low", "CD replication scope creep", "Adds USD 1.5M to 4.0M and a second commissioning programme", "Decide before BOI filing; treat as a separate project if chosen"], ] return rows def blocks(): a = is_a() return [ # ------------------------------------------------- 8 investment H1("8. Investment"), P(pick( "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. 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 " "minus 30 to 50 % on the estimates) until requests for quotation replace them. Exchange rates: " "1 USD = 33 THB, 1 EUR = 1.155 USD, 1 GBP = 1.35 USD."), P("The September 2026 draft of this plan priced a phased entry (one press, bridge stampers, outsourced " "cutting) and a five-press full vision. Both are superseded, as is the launch-plant budget with a " "15 % contingency of the previous draft; they are not repeated here, and the planning repository " "keeps them for the record."), H2(pick("8.1 Plan A, all blocks", "8.1 Plan B, all blocks")), T(["Block", "USD", "THB", "Basis"], _block_rows(), widths_mm=[52, 30, 30, 58], font_pt=8.5, caption=pick( "Source: docs/finance/total-investment.md, 'Two plans', and the Plan A preset of the plant and " "business plan calculator (docs/fleet-calculator.html), whose rows are grouped here; estimates. " "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.", "Source: docs/finance/total-investment.md, 'Two plans', and the Plan B preset of the plant and " "business plan calculator (docs/fleet-calculator.html), whose rows are grouped here; estimates. " "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("~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 " "to quote. The blocks are vendor prices without Thai duty or import VAT, so they assume BOI " "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 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, ~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", "~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.23M against Plan A's 2.17M, no PPA " "power bill)"], ["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.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, 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."), *( [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, ~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 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 " "reserved floor bay with its utility module positions and ring-main tees.")] ), 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.", "**~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 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.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 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 " "tees are reserved, so adding it from revenue is a step, not a rebuild.", ]), P("Figure 11 is the budget check of the plant and business plan calculator with the " + label() + " 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: 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."), H2("8.3 Tranches"), P("The plan is one capital round, but it is not one payment. Capital is released against milestones, " "so each tranche is spent only once the previous gate has cleared. Because cutting and galvanics are " "commissioned first and have their own build times, their orders sit in the first long-lead tranche " "next to the presses. The shares below are estimates for planning the calls on capital, not a " "payment schedule agreed with any vendor."), _tranches(), H2("8.4 What moves the number"), B([ "**No contingency in the price.** " + pick( "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 " "borrowed from another vendor's automatic press); the Pheenix line is priced at OMS's reference " "plus 20 %, without a Pheenix figure; " + pick( "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; 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 " "the band."), "**BOI promotion.** The machinery duty and import VAT exemption applies across most of the " "equipment blocks (~0.11M USD of duty and ~0.17M USD of import VAT cash flow on the launch plant, " "estimates), and the automation and metrology spend converts into corporate income tax exemption " "headroom (the Smart and Sustainable Industry upgrade measure). The application precedes every " "purchase order. Solar is not part of it in either plan: since 1 July 2025 the BOI no longer " "promotes solar installations, rooftop or farm (Announcement 3/2568, amending the alternative-energy " "measure of Announcement 15/2565). What that measure keeps for energy is battery storage with its " "inverters, the eligible investment for the corporate income tax exemption capped at 12M THB per MW " "(our reading, to confirm with the BOI consultant). " + pick( "In Plan A the battery comes with the PPA and belongs to the installer, so the plant claims " "nothing for it; the installer may itself be promoted as a power producer (activity 7.1.2, an " "8-year corporate income tax exemption), and whether that shows in the PPA price is for the " "negotiation.", "Plan B owns the 271 kWh battery (2.0M to 3.5M THB installed), so it may qualify; the case for " "owning the array itself is the power bill (below)."), "**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.", "**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 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).", ]), H2("8.5 Currency exposure"), P("Revenue will be mostly USD and EUR from export customers; the cost base is mostly THB; the equipment " "is priced in several currencies. Newbilt quotes in EUR, and the Pheenix line is expected in EUR " "(European vendor, no quote yet; the currency is a stated field in the request; the plan prices it " "at OMS's EUR reference plus 20 %, EUR 280.8k to 385.2k). Sibert's budget and Sillitoe's list price " "are in USD (Sibert is a UK company, Sillitoe Australian). None of it is hedged, and the orders will " "not be placed for roughly a year. In the September draft a 10 % move in EUR/THB was worth USD 25k " "to 35k on the Duplex line alone; with the Classic and the galvanics line also in EUR, the three EUR " "lines come to ~0.96M to 1.28M USD, so the same move is worth roughly USD 0.10M to 0.13M " "(estimate)."), P("Operationally, roughly two-thirds of direct cost (labour, energy, local cartons, maintenance) is " "THB, so a 10 % baht appreciation takes **0.09 to 0.17 USD off the gross margin per record** without " "any operational change, enough to push the adverse case further under water. " "Three mitigations are planned: every re-quote states its currency and validity period; decide early " "whether to quote regional customers in THB; and decide, once the BOI timeline is known, whether to " "hedge the EUR orders. The hedging decision belongs to the investor."), # ------------------------------------- 9 revenue and operating model H1("9. Revenue and operating model"), P("A first-pass economic model of " + pick("Plan A's three presses", "Plan B's three presses") + " in a " "mature year. Most numbers are estimates from industry pricing norms and the project's own cost " "research; the point is the shape of the economics and which levers matter, not precision. The price " "assumption is deliberately held at the conservative Western export level even though the one set " "of Thai market data (section 3.3) says domestic prices are several times higher: re-basing the " "whole model on one supplier's price list in a market with one supplier would be worse than leaving " "it low."), H2("9.1 Pricing assumptions"), B([ "**Blended pressing price: USD 3.76 to 5.27 per record** (THB 124 to 174) at the planned **60 % " "specials** (splatter, marble and colour effects; the plant focuses on special prints, not mono " "colours): standard USD 3.40 / 3.80 / 4.25 plus a specials premium of 0.60 / 1.15 / 1.70 on 60 % " "of the records, covering pressing, labels, inner sleeve and assembly into the jacket; deluxe " "packaging passed through at cost plus margin. At ~20 % specials the same prices blend to 3.50 to " "4.60. Western plants charge roughly USD 2.90 to 5.80 for standard black at volume, with premiums " "of 0.60 to 1.70 for colour and splatter, 180 g and small runs. What specials cost extra " "(coloured compound, colour-change purge, trim that only goes back into black) is not yet in the " "direct cost, so the specials gain is an upper bound until the compound quotes arrive.", "**Western benchmark, October 2026.** Record Industry (Haarlem) publishes its prices online: 300 " "copies of a black 140 g LP with stampers, test pressings, printed labels, a paper inner sleeve, a " "printed jacket and shrink wrap come to **1,721 EUR all-in (~219 THB a copy)**, ex VAT and freight. " "Its per-title items (set-up, small-run charge, cutting, stampers, test pressings) total about 580 " "to 600 EUR, the low end of this plan's title assumption; black pressing with printed labels and a " "paper inner sleeve comes to about 2.43 USD a copy at 300, below the 2.90 to 5.80 range.", "**Thai market.** The ResurRec invoices of August 2026 come to **650 to 950 THB a copy all-in at " "300**, about 3 to 4.3 times Record Industry's ex-works price. The artist ordering demo's price " "list comes to **~343 THB a copy at 300** with vinyl mastering: above the European ex-works price, " "well below the Thai market. Both price levels stay open until market validation (roadmap item 1).", "**Per-title services: USD 580 to 1,730 per title** (THB 19k to 57k) for mastering, cutting, " "stampers and test pressings. The middle of the range is the **artist-demo per-title fee of 37,836 " "THB**: mastering 10,000, lacquer 5,336, cutting 4,000, plating 14,000, press set-up 3,000 and " "tests 1,500. " + pick("Plan A models 200 to 400 titles a year", "Plan B models 200 to 400 titles " "a year") + "; mastering is labour-bound, and the plan staffs one to two engineers, which caps this line.", pick("**Cassettes and CD-Rs** come later in Plan A (a growth step, lever 4) and are not in the " "operating picture. The September draft illustrated them at 20k to 60k cassettes a year at " "USD 2.50 to 4.00 and 10k to 40k CD-Rs at USD 1.50 to 3.00; estimates with no market data " "behind them yet.", "**Cassettes and CD-Rs** are add-on lines in the plant from launch, not in the operating " "picture. The September draft illustrated them at 20k to 60k cassettes a year at USD 2.50 to " "4.00 and 10k to 40k CD-Rs at USD 1.50 to 3.00; estimates with no market data behind them " "yet."), "**Dropshipping fees** per parcel, **stamper supply to other plants**, and **automation services " "and the open plant stack for other pressing plants** (section 5.6) are on top and not modelled.", ]), H2(pick("9.2 Capacity and revenue of Plan A", "9.2 Capacity and revenue of Plan B")), P( "Three presses make **~0.58 to 0.90 million records a year on two shifts at 60 % specials** " "(estimate). Specials run only on the Duplex system (the Classic has one built-in extruder), so its " "two semi-automatic presses at 60 to 80 records an hour each set the pace, and the Classic (~128 an " "hour, 28 s cycle, vendor flyer) presses the standard 40 % at about two thirds load; at 60 to 70 % " "effectiveness, 16 hours a day and 300 days a year. At ~20 % specials the same presses made 0.71 to " "0.97 million. The plant and business plan calculator, at the team's planning rates (3 records a " "minute per Duplex system, 2 per Classic, 65 % effectiveness), stays balanced at ~0.94 million. " "The central case takes the middle, 0.74 million."), T(["USD per year", "Adverse", "Central", "Favourable"], [ ["Records", "0.58M", "0.74M", "0.90M"], ["Blended price, 60 % specials", "3.76", "4.49", "5.27"], ["Pressing revenue", "~2.17M", "~3.31M", "~4.72M"], ["Titles × per-title fee", "200 × 580", "300 × 1,155", "400 × 1,730"], ["Title-services revenue", "~0.12M", "~0.35M", "~0.69M"], ["**Revenue**", "**2.28M (~75M THB)**", "**3.65M (~120M THB)**", "**5.41M (~179M THB)**"], ], widths_mm=[50, 40, 40, 40], caption="Estimate. Pressing and title revenue are records × price and titles × fee; the totals are " "those of docs/finance/revenue-model.md. A pure-volume plant runs at the low per-title " "end; a boutique-heavy mix pushes titles up and volume down."), H2("9.3 Direct cost per record"), T(["Cost element", "USD/record", "THB/record", "Basis"], [ ["PVC compound", "0.29 to 0.46", "9.6 to 15.2", "~150 to 160 g effective virgin at 1.75 to 2.90 " "USD/kg; regrind loop covers scrap"], ["Labels", "0.03 to 0.09", "1.1 to 3.0", "Printed pairs, volume"], ["Inner sleeve", "0.09 to 0.17", "3.0 to 5.7", "Poly-lined"], ["Jacket (standard)", "0.40 to 0.92", "13.3 to 30.4", "Ploy Printing and local carton partners; " "largely pass-through"], ["Shrink wrap", "0.02 to 0.03", "0.8 to 1.1", "Film"], ["Energy", "0.12 to 0.23", "3.8 to 7.6", "~1.5 to 2 kWh blended per record at grid/solar mix"], pick(["Production labour, Plan A", "**0.13 to 0.28**", "4.2 to 9.3", "13 to 19 direct staff, " "3.7M to 5.4M THB a year, over 0.58 to 0.90M records (0.08 to 0.16 on five presses)"], ["Production labour, Plan B", "**0.13 to 0.28**", "4.2 to 9.3", "13 to 19 direct staff, " "3.7M to 5.4M THB a year, over 0.58 to 0.90M records, as in Plan A"]), ["Stamper amortisation", "0.03 to 0.12", "1.0 to 4.0", "In-house three-generation set at ~USD 60 " "to 150 marginal over 1,000 to 2,000 " "pressings"], ["Maintenance, spares, consumables", "0.12 to 0.23", "3.8 to 7.6", "Estimate"], ["Reject allowance", "0.12 to 0.17", "3.8 to 5.7", "5 to 10 % reject rate carried by good units"], pick(["**Total direct cost, Plan A**", "**~1.35 to 2.70**", "**~45 to 89**", "Central 2.00; no " "extra cost for specials yet"], ["**Total direct cost, Plan B**", "**~1.35 to 2.70**", "**~45 to 89**", "Central 2.00; no " "extra cost for specials yet"]), ], widths_mm=[42, 26, 26, 76], font_pt=8.5, caption="Estimates, docs/finance/revenue-model.md. THB at 33 per USD."), P(pick( "**Why labour per record is higher than in the September draft.** Two shifts need the full press, " "finishing, galvanics, QC and maintenance crews whether the hall holds three presses or five, so " "the direct payroll stays at 3.7M to 5.4M THB a year (113k to 163k USD) while the volume falls from " "1.0 to 1.5 million records to 0.58 to 0.90 million. Labour per record rises to **0.13 / 0.19 / " "0.28 USD** (favourable / central / adverse), and the direct cost to 1.35 / 2.00 / 2.70 USD. The " "build-up, at northern Thai rates loaded ×1.3 for social security, overtime, bonus and PPE:", "**Labour per record.** Two shifts need the full press, finishing, galvanics, QC and maintenance " "crews whatever the press count, so the direct payroll stays at 3.7M to 5.4M THB a year (113k to " "163k USD), and Plan B spreads it over the same 0.58 to 0.90 million records as Plan A: **0.13 / " "0.19 / 0.28 USD** a record (favourable / central / adverse), and a direct cost of 1.35 / 2.00 / " "2.70 USD. The build-up, at northern Thai rates loaded ×1.3 for social security, overtime, bonus " "and PPE:")), T(["Role", "Heads", "THB/month each, loaded"], [ ["Press and finishing operators", "8 to 12", "~19,500"], ["Galvanics", "2 to 3", "~32,500"], ["QC", "1 to 2", "~26,000"], ["Maintenance", "2", "~32,500"], ["**Direct production payroll**", "**13 to 19**", "**~312,000 to 449,000 a month**"], ], widths_mm=[80, 30, 60]), P("Mastering and cutting engineers are title-services labour, not per-record (a cutting engineer earns " "about 50,000 THB a month base, team figure); admin, sales and logistics sit in overheads. Group " "health insurance with a yearly check-up (~0.35M THB a year for ~20 staff) and unified workwear " "(~0.3M THB a year) come on top of the ×1.3 and are not yet in the per-record figure."), H2(pick("9.4 Operating picture of Plan A", "9.4 Operating picture of Plan B")), P("Built from the components above. Three scenarios, each internally consistent: adverse pairs low " "volume with the low price, the high cost, the high capital and the high overheads; favourable does " "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.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.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.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 ~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 ~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 " "assumed: price realisation and utilisation decide solvency, not upside.", "**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 A preset, " "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 ~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.", "**The adverse case loses money.** It would need ~1.1 million records to cover depreciation, and " "the three presses make 0.58 million at that rate; the operating loss is ~18M THB a year. 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.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 ~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.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.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 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.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 " "(docs/fleet-calculator.html); a sketch, not a forecast, estimates."), H2("9.5 The ramp"), P(pick( "The table above is a mature year. Plan A does not start there. It is commissioned in sequence: " "first the cutting room and galvanics (the presses need their stampers), then the Duplex system, " "then the Classic. Early production runs slower and rejects more than any of these figures while " "the process settles, and the crews of a two-shift plant are on the payroll before the volume is. " "The **ramp-up reserve of ~10M to 20M THB** (estimate, inside the plan price) is there to carry " "staff hired before first revenue and overheads until volume covers them. Fan-funded campaigns on " "the artist platform open only after the first releases have shipped and lead times are measured.", "The table above is a mature year. Plan B does not start there. It is commissioned in sequence: " "first the cutting room and galvanics (the presses need their stampers), then the Duplex system, " "then the Classic, with the cassette and CD-R lines alongside. Early production runs slower and " "rejects more than any of these figures while the process settles, and the crews of a two-shift " "plant are on the payroll before the volume is. The **ramp-up reserve of ~10M to 20M THB** " "(estimate, inside the plan price, the same as in Plan A) is there to carry staff hired before first " "revenue and overheads until volume covers them. Fan-funded campaigns on the artist platform open " "only after the first releases have shipped and lead times are measured.")), P("**A year-by-year cash model for the ramp is a next step, not a claim this plan makes.** It belongs " "to the financing discussion and needs the vendor build times and the commissioning calendar " "(section 10) first. The calculator's 35, 70 and 90 % ramp in section 9.4 is a planning assumption, " "not that model."), P(pick( "**The growth option.** A second Duplex system (two more semi-automatic presses) lifts the plant to " "~1.0 to 1.5 million records a year at 60 % specials, roughly **+0.4 to 0.6 million records**, for " "**~USD 230k to 300k** for the press system (estimate: two presses at the quoted ~115k per press " "and extruder set, plus hydraulic unit and EX 35, no EX 35 price on file). With its chiller module " "(CH-3, USD 48k to 78k), freight and installation (24k to 48k) and the working capital for the " "extra records it comes to ~15.4M THB at the midpoint (estimate). The hall, the module positions " "in the boiler hall and chiller compound, and the ring-main tees are reserved for it, so it is a " "revenue-funded step, not a rebuild.", "**The growth option, the same as in Plan A.** A second Duplex system (two more semi-automatic " "presses) adds roughly **+0.4 to 0.6 million records** a year at 60 % specials, for **~USD 230k to " "300k** for the press system (estimate: two presses at the quoted ~115k per press and extruder set, " "plus hydraulic unit and EX 35, no EX 35 price on file). With a third chiller module (USD 48k to " "78k), freight and installation (24k to 48k) and the working capital for the extra records it " "comes to ~15.4M THB at the midpoint (estimate). The floor bay, the module positions in the boiler " "hall and chiller compound (built for four modules each; the launch plant fills two of each), and " "the ring-main tees are reserved for it, so it is a revenue-funded step, not a rebuild. Beyond it, " "the hall is laid out for five Duplex bays and four Classic positions, and growth adds Duplex " "systems first, then Classics.")), # ----------------------------------------------- 10 timeline H1("10. Timeline: today to first paying release"), P("Every duration is an estimate. The calendar in the planning repository was drawn in August 2026 and " "has not yet been re-drawn for the launch plant; nothing in phase 0 has started, so it shifts day for day with the BOI consultant engagement. On " "that calendar, **first paying release lands around Q4 2028 to mid-2029, roughly 27 to 33 months " "from the start of phase 0.** This plan quotes that as the working figure, not as a re-based date " "(the executive summary marks it open), and flags the new risk to it: the launch plant puts the " "metal path on the critical path."), CALL("The critical path", [ "**BOI certificate → long-lead orders → vendor builds → sea freight → commissioning of the cutting " "room and galvanics → first stampers → press commissioning → test pressings → first paying " "release.** Everything else, including the entire building, has float against that chain.", "**Galvanics and cutting now come before the first paying release.** There are no bridge stampers " "and no outsourced cutting in the launch plant, so the presses cannot press a paying title until " "the cutting room cuts lacquers and the galvanics line grows fathers, mothers and stampers that " "pass inspection. The August calendar did not contain this step; whether it fits inside the 2 to " "3 months of installation and commissioning depends on build times nobody has quoted and on two " "hires.", "**The press build time is still assumed.** 9 to 12 months is an industry-typical figure for a " "built-to-order system from a small German manufacturer, and it carries about 40 % of the " "schedule. If the real figure is 15 to 18 months, launch moves to mid-2029.", "**The other vendors are unquoted too.** The Sillitoe lathe is built to order, and the Pheenix line " "and the Sibert machines have no lead time on file. Build time and order-book position are " "required fields in every re-quote; it is one line in each email and the highest-value missing " "fact in the project.", ]), T(["#", "Step", "Duration", "Source"], [ ["1", "Engage BOI consultant, prepare application", "4 to 5 months", "Estimate"], ["2", "BOI review to certificate", "4 to 6 months", "BOI: ~40 working days decision, 4 to 6 " "months in practice"], ["3", "Company incorporation under the certificate", "1 to 2 months", "Roadmap"], ["4", "Press order to vendor-ready", "**9 to 12 months**", "**Assumed; not yet quoted.** Pheenix, " "Sillitoe and Sibert build times also unquoted"], ["5", "Sea freight Europe to Thailand", "6 to 8 weeks", "Newbilt quote includes freight"], ["6", "Install, commission, train", "2 to 3 months", "Newbilt includes 5 days; rest at ~USD 97/h " "plus travel"], ["6a", "Commission the cutting room and galvanics; first stampers pass inspection", "**Not yet " "estimated**", "**New with the launch plant**; must finish before step 7"], ["7", "Test pressings, QC baseline, reject shakedown", "1.5 to 2 months", "Roadmap"], ["", "**Total**", "**~27 to 33 months**", "August 2026 calendar, before step 6a"], ], widths_mm=[10, 68, 34, 58]), T(["Track (in parallel)", "Needed by", "Float", "Becomes critical if"], [ ["Land lease, zoning, soil test", "Design start, ~Q1 2027", "~4 months", "Zoning fails and a new " "site is needed (~6 months reset); the plot Payap first offered fails zoning unless the rezoning " "Payap describes is gazetted (~16 to 19 months)"], ["Construction, incl. the water-treatment building and utility yard", "Machinery arrival, " "~Q3 2028", "~3 to 5 months", "Soft soil forces piling, or permits stall; the galvanics room, " "clean zone and ZLD plant are now needed first, ahead of the press hall"], ["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 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"], ["Solar and battery (purchase)", "Fit-out, ~Q2 2028", "Large", "Not a risk; rooftop solar " "outside industrial estates needs no factory licence since 28 December 2024; PEA " "interconnection approval takes 3 to 6 months, filed alongside procurement; battery lead time " "is 50 to 60 days"]), pick(["Cassette and CD-R lines", "Later (growth step)", "Not on the launch calendar", "Not a risk; " "short lead " "times"], ["Cassette and CD-R lines", "Fit-out, ~Q2 2028", "Large", "Not a risk; short lead times"]), ["Hiring: galvanics process engineer and cutting engineer", "Before the metal path commissions", "**None: now on the critical path**", "Galvanics is the hardest skill to hire; both people must " "be hired and trained (at the vendors) before step 6a"], ["Hiring and training: the rest of the launch team", "Commissioning, ~Q3 2028", "~2 months", "Two shifts are needed from the start of volume production"], ], widths_mm=[42, 36, 28, 64]), 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. " + "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 " "exemption attaches at importation, not at contract signature, so if an order and deposit can be " "placed while the application is in review, the press build overlaps the BOI process. It is a " "question for the BOI consultant, not a claim. The land lease cannot pull the launch forward on its " "own: construction has float against the vendor chain, and only the orders move the end date."), P("**What a delay costs.** A month lost engaging the BOI consultant costs a month of launch. A month " "lost on land or construction costs nothing until the float is gone. A month lost getting the " "vendor build times in writing, or hiring the galvanics and cutting engineers, costs nothing today " "and may cost months of surprise later."), # ------------------------------------ 11 phasing and commissioning sequence H1("11. Phasing and commissioning sequence"), P("The plant launches with the whole chain in one capital round. That replaces the September draft's " "phased entry, in which galvanics, cutting and the automatic press followed from revenue. The " "gates have not moved: no machinery order before the BOI certificate, no large spending before the " "market validates the price, no coppice planning before the land-title check. What changed is " "that the round, once released, buys " + pick( "Plan A's plant, the launch plant with its six levers, and only growth and the items the levers " "move later stay revenue-gated.", "Plan B's plant, the launch plant with everything in, and only growth stays revenue-gated.")), T(["Phase", "Content", "Gate"], [ ["0. Validate and clear the gates (now)", "Market validation with regional labels and distributors" "; BOI consultant, activity code, " "application; lease terms, zoning, soil test; 60 rai title check; re-quotes and quotes from every " "launch vendor (section 14.1)", "Runs in parallel; gates everything"], ["1. Quotes and site (during the BOI window)", "Firm quotes with build times; site selection " "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, 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 (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 (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 " "baselines, reject shakedown; first paying releases; per-lot PVC gate live; qualify Thai " "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; 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); 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"), T(["Step", "What is commissioned", "Why in this order"], [ ["1", "Cutting room (Sillitoe SDMS) and galvanics (Pheenix line with ZLD and DI water), with the " "Sibert stamper-prep line", "The presses need their stampers; no bridge stampers are planned. " "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 " "(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 " "are stable"], *([] if a else [ ["Alongside", "Cassette and CD-R duplication lines", "Independent of the metal path and the " "presses; short lead times"]]), ], widths_mm=[12, 78, 80]), P("If commissioning of the metal path slips, Stamper Discs (stampers) and SST in Frankfurt (lacquer " "cutting, already Poy Records' cutter) stay contacts for overflow and for a slipping commissioning, " "not a plan."), H2("11.2 Why the whole chain at launch"), P("This is the decision with the most consequences in the plan, and the investor should see both sides:"), T(["For", "Against, and the risks it takes on"], [ ["**No bridge stampers.** A plant that buys every stamper set abroad waits on two international " "freight legs per job and on one small overseas supplier; that is the bottleneck this plant " "exists to remove.", "**Supplier advice.** Sibert, which sells into the galvanics line, advised " "after Haarlem, against its own interest, to get presses, boilers, operators " "and live feedback loops right first and to earn some return before every " "manufacturing step is in place."], ["**Title services and repress economics.** Cutting and plating in-house earn the per-title fees " "(the middle price is 37,836 THB a title), and the archived father and mother of every side let " "a repress, or a worn mother, be regrown without a recut.", "**Galvanics skill.** It is the " "hardest skill to hire, and the " "process engineer probably comes " "from abroad or is trained abroad. " "The first paying release now waits " "for it."], ["**The Thai market gap is metalwork, not presses.** The incumbent turns away small runs and adds " "weeks above 3,000 units, most plausibly because every stamper set is an import (section 3.3).", "**Permitting.** Galvanics effluent and hazardous-substance registration move into the first " "factory licence, the most likely regulatory friction point in the project; zero discharge from " "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.** ~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 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 (~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.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 a locally serviced compressor; the second Duplex waits for demand and revenue on a " "reserved floor.", "**~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 " "presses depend on it; hire the galvanics and cutting engineers early and train them at the " "vendors; design zero discharge from the start; and release the round in tranches (section 8.3), " "so that nothing is ordered before the BOI certificate and validated pricing."), # --------------------------------------- 12 team, ownership, governance H1("12. Team, ownership and governance"), H2("12.1 The people"), T(["Who", "Role"], [ ["Simona Meesaiyati", "Project Lead: management and the audio side."], ["Alexander Grabowski", "Technical Consultant: the technical side (equipment selection and vendors, " "utilities, the building model, the traceability and QC specification, the factory software)."], ["buildfor.life", "Supports the project in a consulting capacity."], ["Ploy Printing (Ploy Karnpim Limited Partnership, Chiang Mai)", "Packaging partner and intended " "strategic co-investor: jackets, sleeves, inserts, J-cards and CD packaging on offset, digital, " "risograph, UV and latex presses, with existing vinyl packaging production."], ["Payap University (Chiang Mai)", "Partnership under discussion (October 2026): joint student " "programmes around the plant in mastering and lathe cutting, IT and business administration, " "starting small (memorandum, internships, short certificate courses). Nothing is agreed yet; " "scope, form and money are open. It is a hiring pipeline for the hardest roles, not a substitute " "for hiring them: the teacher comes before the students."], ["To be hired, at launch", "**Galvanics process engineer** and **cutting engineer** (both on the " "critical path, section 10; a cutting engineer earns about 50,000 THB a month base, team " "figure); plant manager; galvanics operators; QC lead; maintenance; press and finishing operators " "for two shifts; sales and customer service for labels, artists and the traceability portal."], ["External", "BOI-registered consultant; Thai counsel for the lease, company and shareholder " "agreement; optional vinyl manufacturing consultancy for layout, installation and training " "(GBP 10k to 20k packages); vendor commissioning and training (Newbilt, Pheenix, Sibert, " "Sillitoe); property insurer."], ], widths_mm=[48, 122]), P("Headcount: the plant runs the whole chain on two shifts, so it needs most of the mature crew from " "the start: a direct production payroll of 13 to 19 (8 to 12 press and finishing operators, 2 to 3 " "galvanics, 1 to 2 QC, 2 maintenance), 1 to 2 mastering and cutting engineers, and 3 to 5 in admin, " "sales and logistics. The revenue model plans on about 20 people at the start (estimate), " + pick( "and the cassette and CD-R lines add 1 to 2 when they come.", "plus 1 to 2 for the cassette and CD-R lines from launch.") + " A process engineer from abroad can be employed on a BOI work permit (section 7)."), H2("12.2 Ownership and structure"), P("The main investor holds **at least 60 %** of the company, so at most **40 %** is for sale to other " "shareholders (decided by the main investor, October 2026). Amounts, the share price and the split " "of the 40 % are not yet agreed. The intended structure is:"), B([ "**One Thai limited company** holds the plant, the lease, the equipment and the BOI promotion. BOI " "promotion permits 100 % foreign ownership of the promoted manufacturing activity, so the " "shareholding can be set on commercial terms rather than to satisfy the Foreign Business Act.", "**Shareholders:** the lead investor with at least 60 %; within the remaining 40 % at most, Ploy " "Printing as strategic co-investor, the founders and any further co-investor. " "Ploy Printing's participation, whether in cash, in kind (print capacity, premises, working " "capital in packaging) or both, is to be discussed; its strategic value is a packaging partner " "whose incentives are aligned with the plant's schedule and quality, within the same province.", "**Funding: the shareholders fund the whole plant and get shares for it** (decided October 2026); " "no bank loan is planned. " + pick( "Plan A's ~182M THB is paid in as share capital: at one share price the lead investor's 60 % " "is at least ~109M THB and the 40 % at most ~73M THB", "Plan B's ~217M THB is paid in as share capital: at one share price the lead investor's 60 % " "is at least ~130M THB and the 40 % at most ~87M THB") + " (arithmetic only; share price and any founders' or in-kind shares are not agreed). The capital " "can be registered in full and called in instalments (at least 25 % on subscription, the rest " "called by the directors with notice), which fits the tranches of section 8.3. BOI's 3:1 " "debt-to-equity ceiling is met with no debt; the machinery stays unpledged and could secure a " "loan later if one is ever needed. Possible share prices from market data: " "docs/finance/share-price.md.", "**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 " "remuneration.", "**Related-party discipline.** Ploy Printing will be both a shareholder and the plant's main " "packaging supplier. The supply agreement is priced at arm's length, benchmarked periodically " "against other printers, with quality and lead-time terms written down, and Ploy Printing abstains " "from board decisions on its own contract. This protects both the lead investor and Ploy Printing, " "and it is what a BOI or bank reviewer will look for.", "**Any label, content or retail activity (Poy Records as a brand) sits in a separate entity**, so " "the manufacturing company's BOI application stays clean.", ]), # ------------------------------------------------------ 13 risks H1("13. Risks and open questions"), P("Every plan has risks; the point of listing them is to say which are being retired, by what, and " "when. The first column is the plan's own honest severity. The September draft's bridge-stamper " "risk is gone with the bridge stampers; the launch plant brings its own in its place" + pick( ", and Plan A's levers and its price without contingency add theirs.", ", and Plan B's extra launch capital and its price without contingency add theirs.")), T(["Severity", "Risk", "What it would do", "Mitigation and status"], _risk_rows(), widths_mm=[16, 40, 52, 62], font_pt=8), P("**Open questions with owners** are in the next section. Two standing caveats on the evidence base: " "the Thai market data is one buyer, one plant and one afternoon, and the underlying invoices and " "tour notes should be archived with this plan before it goes in front of a bank; and the industry " "interest in traceability at Making Vinyl Europe 2026 is supplier-side evidence, not buyer price " "validation."), # ------------------------------------------------- 14 next steps H1("14. Next steps and the ask"), H2("14.1 Phase 0: the next three to six months"), T(["#", "Action", "Owner", "Cost", "Retires"], [ ["1", "Market validation with regional labels and distributors: the 3.76 to 5.27 USD blended " "price at 60 % specials, run sizes, and whether faster turnaround earns a premium; publish the " "artist platform's calculator early with indicative prices and an interest list", "Simona, " "Alexander", "Travel", "Pricing risk"], ["2", "Engage a BOI-registered consultant: activity sub-code; the order-before-certificate question " "first; galvanics, cassette and CD-R in the application; CD replication decision; " + pick( "whether the battery would qualify for BOI as battery storage (12M THB per MW cap, Announcement " "3/2568) if bought instead of leased with the PPA; ", "whether the battery qualifies for BOI as battery storage (12M THB per MW cap, Announcement " "3/2568); ") + "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 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"], ["5", "Newbilt re-quote: Duplex (EX 50 and EX 35) and Classic, with build time, order-book position, PLC data access, central hydraulic supply " "and written hydraulic requirements, currency and validity", "Alexander", "Free", "Classic and EX 35 price, schedule"], ["6", "Pheenix quote for the galvanics line (PASU, PPPU, PDPU, PMPB) with lead time and training; " "OMS dedicated offer as the reference; ZLD and DI water vendor", "Alexander", "Free", "Galvanics priced on a reference only"], ["7", "Sillitoe quote and build time (SDMS, spare cutterhead, support terms, DMM question)", "Alexander", "Free", "Cutting room, schedule"], ["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 and the office roof and canopies PV-ready", "Alexander", "Free", "Building estimate"], ["10", pick( "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 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 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"], ], widths_mm=[8, 84, 26, 24, 28], font_pt=8), H2("14.2 What the investor is asked for"), KV([ ["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** (~182M at the midpoint, the ramp-up " "reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, " "paid in by the shareholders as share capital and called against the milestones. 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, " "paid in by the shareholders as share capital and called against the milestones. 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 " "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 share price and the call schedule, and how quotes landing above the plan price are " "funded (a further call on the shareholders); the six " "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 split of the 40 % open to co-investors (Ploy Printing, the founders, others; the lead " "investor holds at least 60 %); hedging of the EUR orders.", "The share price and the call schedule, and how quotes landing above the plan price are " "funded (a further call on the shareholders); 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 biomass fuel contracts; the shareholder structure " "within the 40 % open to co-investors (Ploy Printing, the founders, others; the lead " "investor holds at least 60 %); 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, 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; 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 " "soil result; " + pick("the solar PPA offer, with whether the installer's own BOI promotion shows in " "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 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."), # --------------------------------------------------- 15 appendix H1("15. Appendix: sources and planning documents"), P("This plan is compiled from the project's planning repository (cnx_vinyl, on the project's Gitea " "server git.b4l.co.th), which is the source of truth and holds the detail behind every section. " "Paths are relative to docs/:"), T(["Document", "Content"], [ ["roadmap.md", "Next steps in dependency order, from the gates through the launch plant's " "commissioning sequence to the revenue-gated growth options"], ["project-timeline.md", "Calendar to first paying release, critical path and float (August 2026 " "calendar, to be re-drawn for the launch plant)"], ["scale.md", "Project sizing on one page: capacity per fleet, building zones, electrical, solar, " "steam and cooling, utility phasing, people"], ["finance/total-investment.md", "The launch-plant roll-up (October 2026) with the basis of every " "block; 'Two plans': Plan A at ~180M and Plan B at ~215M THB, " "the six levers and what is not in either price; the superseded " "investor answer, full vision and phased entry"], ["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 " "(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 " "the Duplex/Classic mix, people, utilities, investment and the operating " "picture, with the Plan A and Plan B presets and the isometric plant " "view (Figures 8 to 12)"], ["equipment/pressing-line.md and equipment/newbilt/", "Press fleet strategy, hydraulic ring mains; " "Newbilt offer, site requirements, service " "rates, 2026 product flyers"], ["equipment/galvanics.md (with pheenix-alpha/, sibert/, oms/)", "Pheenix electroforming line, " "Sibert stamper prep, OMS reference " "prices (the Pheenix price basis), " "cycle times, the metal archive"], ["suppliers/vendor-landscape.md, equipment-suppliers.md", "Per-vendor narrative (lathes, cutting " "services) and the full needs list with " "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 (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)"], ["digital-factory.md, 'Open source throughout, and working with other plants'", "Open source and " "services to other plants: every server on NixOS, declared in one clan repository; ERPNext on " "Frappe and the open machine-data stack; our own code published as open source; the closed " "exceptions (firmware and HMIs inside the machines and instruments); and, later, automation " "services and an open plant stack for other pressing plants (section 5.6; not in this plan's " "revenue)"], ["artist-platform.md (demos artist-order.html, make-a-record.html)", "Upload and itemised price " "calculator, fan-funded " "campaigns, the record " "passport (Figures 5 to 7)"], ["process-flow.md, production-timeline.md", "The chain and its checks; order turnaround stage by " "stage, lead times and the repress path"], ["traceability.md, quality-automation.md", "The traceability specification; metrology, layered " "record QC, the materials lab"], ["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 " "1,000 kVA line; PEA interconnection; CapSolar, factory solar and the RG.4 permit, 2026); the BOI: " "no promotion for solar installations since 1 July 2025, battery storage kept at a 12M THB per MW " "cap (Announcement 3/2568; B Global Law, 18 January 2026; Smarter Energy Solution, 2026), and a PPA " "developer's own promotion under activity 7.1.2 (CapSolar, BOI solar incentives, 2026)"], ["facility-security.md, worker-safety.md", "Climate control, security, fire and life safety, the " "archive room; training, clean rooms, PPE"], ["crane-workshop-tours.md", "Overhead crane, maintenance workshop, visitor corridor"], ["site-candidates.md and land-listings/", "Mueang Chi, the industrial estate and Payap land; the " "checks before choosing; zoning records"], ["payap-partnership.md", "Joint student programmes with Payap University"], ["boi.md", "BOI promotion strategy, requirements, process, open items"], ["cnx_vinyl_parametric.FCStd, cnx_vinyl_parametric_payap.FCStd and renders/", "Parametric building " "and site models on " "the candidate " "plots (draft 0.2's " "figures; this draft " "uses the " "calculator's view)"], ], widths_mm=[62, 108], font_pt=8.5), P("Vendor PDFs and spreadsheets are primary sources and reflect the state of negotiations at their file " "dates. Treat prices and lead times as snapshots, not commitments."), ]