Two plans for the investor: Plan A ~180M, Plan B ~225M THB; Pheenix at OMS +20 %
Deploy test site / deploy (push) Successful in 53s

User (October 2026): price the Pheenix galvanics line at OMS's reference
plus 20 %, and work on a new business plan in two versions, one at
roughly 180M THB and one at +25 %; the plans do not include contingency;
Plan A keeps every machine and uses cost levers only.

- total-investment.md: Pheenix block 324k to 445k USD (OMS 4-cell wet
  room with know-how transfer, EUR 234k to 321k, plus 20 %; was 320k to
  650k estimate); launch plant now ~161M to 285M THB with contingency,
  midpoint ~223M. New section "Two plans": Plan A = launch plant with
  solar PPA, metrology launch tier, corridor later, cassette and CD-R
  later, rented crane, Chinese boilers and compressor: subtotal ~161.7M
  + ramp-up reserve 10 to 20M = ~177M THB (127M to 226M). Plan B = second
  Duplex at launch (five presses), everything in: subtotal ~209.2M +
  reserve = ~224M THB (162M to 286M). Contingency listed as not in
  either price (~24M / ~31M at 15 %). The 180M / 216M answer marked
  superseded.
- revenue-model.md: operating pictures of both plans at 60 % specials.
  Plan A central EBITDA 1.73M USD, operating profit 1.34M, payback ~3.1
  yr on the plan price; adverse loses money. Plan B (1.0 / 1.25 / 1.5M
  records) central EBITDA 3.14M, operating profit 2.63M, payback ~2.2 yr;
  adverse just covers depreciation; needs ~1.25M records sold.
- Calculator: Pheenix price basis "OMS +20 %" and "OMS directly"; new
  contingency switch (in the total / shown separately); presets Plan A
  and Plan B (replace "investor levers" and "five-press"); budget card
  against 180M and 225M.
- galvanics.md price note, README, roadmap.

Checks: calculator regression updated and passing (0 fails, no page
errors), node --check on all scripts, site build (no dead links), no em
dashes added.
This commit is contained in:
grabowski committed 2026-10-17 14:47:43 +07:00
1 parent f7e20e1015
commit f2ff1eac1f
6 files changed
+204 -44

No files matched your search

+4 -2
View File
@@ -241,8 +241,10 @@ What it changes in the plan:
on the configuration and the know-how item, is at or below the low end
of the USD 320k to 650k galvanics block in
[total investment](../finance/total-investment.md). Neither includes
water treatment (its own block) or installation days. Reference prices,
so the block stays until quotes exist.
water treatment (its own block) or installation days. Since October
2026 the plan prices the Pheenix line at **OMS's reference plus 20 %**
(user decision): EUR 280.8k to 385.2k, ~USD 324k to 445k, replacing the
320k to 650k estimate until Pheenix quotes.
- **Capacity.** 6 to 8 runs in a 7.5-hour working day is roughly an hour a
run, which matches the 1 to 1.5 hours per part the cell count below
assumes. Full capacity needs 8 to 20 parts a working day, so either
+72
View File
@@ -666,6 +666,78 @@ What it says:
investment would add its power price to the energy line instead of
capital.
## Operating pictures of Plan A and Plan B (October 2026)
The business plan comes in two versions
([total investment](total-investment.md#two-plans-a-at-180m-thb-and-b-at-225m-thb-october-2026)):
**Plan A** (~177M THB, the launch plant with six cost levers, three
presses) and **Plan B** (~224M THB, the second Duplex at launch, five
presses), both priced without contingency and with the ramp-up reserve.
Same method and cases as above, at the planned 60 % specials (estimates):
- **Plan A** runs the launch plant, so volume, price, direct cost, title
services and overheads are those of the table above; only the
depreciation follows its lower capital: the high end of Plan A's blocks
(6.25M USD) over 10 years, the midpoint (4.90M USD) over 12.5, the low
end (3.56M USD) over 15. The solar PPA adds its power price to the
energy line (~0.03M USD a year in the calculator), not shown here.
- **Plan B**'s five presses are not Duplex-limited at 60 % specials: the
four semi-automatic presses (240 to 320 records an hour) carry the
specials and the Classic the rest, so volume is the five-press band,
**1.0 / 1.25 / 1.5M** records. Direct cost per record is the five-press
table's 2.58 / 1.94 / 1.30 USD (the same payroll over more records);
title services 300 / 375 / 400 titles at 580 / 1,155 / 1,730 USD and 60
/ 65 / 70 % contribution (the five-press table's 0.10 / 0.28 / 0.48M);
depreciation on Plan B's blocks: 8.07M USD over 10 years, 6.34M over
12.5, 4.61M over 15.
- **Payback** is counted on the whole plan price including the ramp-up
reserve (Plan A 3.86M / 5.35M / 6.85M USD, Plan B 4.92M / 6.79M /
8.67M USD from the low to the high end).
| USD/yr | A adverse | A central | A favourable | B adverse | B central | B favourable |
|---|---|---|---|---|---|---|
| Records | 0.58M | 0.74M | 0.90M | 1.0M | 1.25M | 1.5M |
| Blended price (60 % specials) | 3.76 | 4.49 | 5.27 | 3.76 | 4.49 | 5.27 |
| Direct cost | 2.70 | 2.00 | 1.35 | 2.58 | 1.94 | 1.30 |
| Pressing contribution | 0.61M | 1.83M | 3.51M | 1.18M | 3.19M | 5.96M |
| Title-services contribution | 0.07M | 0.23M | 0.48M | 0.10M | 0.28M | 0.48M |
| Cash overheads | 0.45M | 0.33M | 0.20M | 0.45M | 0.33M | 0.20M |
| **EBITDA** | **0.23M** | **1.73M** | **3.79M** | **0.83M** | **3.14M** | **6.24M** |
| Depreciation | 0.62M | 0.39M | 0.24M | 0.81M | 0.51M | 0.31M |
| **Operating profit** | **-0.39M** | **1.34M** | **3.55M** | **0.02M** | **2.63M** | **5.93M** |
| Revenue | 2.28M (~75M THB) | 3.65M (~120M THB) | 5.41M (~179M THB) | 3.93M (~130M THB) | 6.05M (~200M THB) | 8.60M (~284M THB) |
| Payback on the plan price (EBITDA, mature year) | ~30 yr | ~3.1 yr (2.2 to 4.0) | ~1.0 yr | ~10.5 yr | ~2.2 yr (1.6 to 2.8) | ~0.8 yr |
What it says:
- **Plan A** breaks even on operating profit at **~0.2 million records a
year**; its adverse corner still loses money, because it would need
~0.9 million records to cover depreciation and the three presses make
0.58 million at that rate.
- **Plan B** breaks even at ~0.22 million records and its adverse corner
just covers depreciation (~1.0 million records needed, 1.0 million
made): more presses spread the same crews, overheads and title services
over more records. Its central EBITDA is ~1.8 times Plan A's for ~27 %
more money.
- **But Plan B only earns this if the records sell.** Its central case
needs ~1.25 million records a year, ~0.75 million of them special
editions, against 0.74 million for Plan A; nothing in the market data
so far shows that demand (roadmap item 1). The ramp to that volume is
longer, and the ramp-up reserve (10M to 20M THB) is the same estimate
as for Plan A.
- **The caveats above hold for both:** central EBITDA margins of ~47 %
(A) and ~52 % (B) are far above the 15 to 25 % pressing plants earn,
the cost of specials is not in the direct cost yet, and neither plan
carries a contingency. Treat the adverse columns as the honest ones.
The [calculator](../fleet-calculator.html) presets, at the team's
planning rates (3 records a minute per Duplex system) and its own cost
build-up, give: **Plan A** at 850k records EBITDA 2.04M USD, payback 2.4
years on the investment, cash payback in year ~3.9 and ~25 % IRR over ten
years with the reserve in year 0; **Plan B** at 1.25M records EBITDA
3.25M USD, payback 2.0 years, cash payback in year ~3.3 and ~32 % IRR
(pre-tax, pre-financing, estimates).
## Operating picture at full capacity (five-press fleet)
The fleet this table describes (two Duplex systems and a Classic) is now
+75 -4
View File
@@ -44,7 +44,7 @@ on two shifts (estimate: the [scale](../scale.md) basis gives ~0.71 to
| Phase 0: BOI consultant, legal and lease work, soil test, re-quotes | 40k – 80k | 1.3M – 2.6M | estimate |
| Newbilt Duplex system (two HRP 12, EX 50 + EX 35, trimmer, label oven, shrink wrapper, grinder, label punch) | 350k – 370k | 11.6M – 12.2M | 2024 quote EUR 200,500 for the Single 2.1 plus the quoted second press and extruder ~USD 115k; expired, re-quote |
| Newbilt Classic | 290k – 460k | 9.6M – 15.2M | placeholder (the old AD12 band per press); **no Newbilt price on file** |
| Pheenix galvanics line (PASU, PPPU, PDPU, PMPB) | 320k – 650k | 10.6M – 21.4M | estimate; **no Pheenix price on file**; OMS's reference prices for a 4-cell wet room (EUR 224k to 311k, ~USD 259k to 359k) sit at the low end |
| Pheenix galvanics line (PASU, PPPU, PDPU, PMPB) | 324k – 445k | 10.7M – 14.7M | **OMS's reference plus 20 %** (user, October 2026): OMS's 4-cell wet room with the know-how transfer, EUR 234k to 321k (~USD 270k to 371k, [galvanics](../equipment/galvanics.md#oms-introduction-letter-9-october-2026)), as the price basis for the Pheenix line; **no Pheenix price on file** (was 320k to 650k, estimate) |
| Galvanics water: ZLD evaporator and DI water | 97k – 258k | 3.2M – 8.5M | [utilities CSV](utilities-investment.csv) rows, now launch scope |
| Water-treatment building next to galvanics (~12 × 10 m, proposed) | 52k – 87k | 1.7M – 2.9M | estimate at the building rate below |
| Sibert VSF, VSP, VSC | 250k | 8.3M | Sibert's budget confirmation, 5 October 2026; its time, spares, shipping and travel in the freight and working-capital lines |
@@ -61,9 +61,9 @@ on two shifts (estimate: the [scale](../scale.md) basis gives ~0.71 to
| Cassette duplication and CD-R duplication | 55k – 190k | 1.8M – 6.3M | estimate, business plan sections 4.8 and 4.9 |
| Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its quoted 5 days) | 150k – 300k | 5.0M – 9.9M | estimate |
| Working capital, PVC stock, spares, lease deposit, first-year rent | 135k – 290k | 4.5M – 9.6M | estimate; land is leased, so no land purchase |
| Subtotal | ~4.24M – 7.71M | ~140M – 254M | |
| Contingency 15 % | ~0.64M – 1.16M | ~21M – 38M | |
| **Total, launch plant** | **~4.9M – 8.9M USD** | **~161M – 292M THB** | midpoint ~6.9M USD, ~227M THB |
| Subtotal | ~4.24M – 7.50M | ~140M – 248M | midpoint ~5.87M USD, ~194M THB |
| Contingency 15 % | ~0.64M – 1.13M | ~21M – 37M | |
| **Total, launch plant** | **~4.9M – 8.6M USD** | **~161M – 285M THB** | midpoint ~6.76M USD, ~223M THB |
Not in the total: a **reserve for the ramp-up** (staff hired before first
revenue, overheads until volume covers them; ~10M to 20M THB, estimate),
@@ -78,6 +78,11 @@ import VAT paid at the border and reclaimed later (estimates).
### The investor's question: 180M THB, maybe 20 % more (October 2026)
*Superseded by [Two plans](#two-plans-a-at-180m-thb-and-b-at-225m-thb-october-2026)
below. Written against the earlier Pheenix estimate (USD 320k to 650k,
total ~227M THB at the midpoint); its galvanics lever is now the base
price.*
The project's investor asked whether the plant can be built for **180M
THB (~5.45M USD), possibly up to 20 % more (216M THB, ~6.55M USD)**.
@@ -126,6 +131,72 @@ building RFQ with a soil test, and distributor quotes for the metrology
stack. Until they are in, quote **~216M THB** to the investor as the
target with the levers above, and 180M as the low-quote case.
## Two plans: A at ~180M THB and B at ~225M THB (October 2026)
Decided (user, October 2026): the business plan comes in **two
versions** for the investor, built from the same documents:
- **Plan A, ~180M THB**: the launch plant with every machine decided
above (one Duplex system, one Classic, galvanics, Sibert, the cutting
room), brought down with six cost levers.
- **Plan B, ~225M THB (Plan A plus 25 %)**: the second Duplex system at
launch, so five presses, with everything in.
Both are priced **without contingency** (user decision) and **with the
ramp-up reserve**, because the reserve is cash the investor puts in
before volume carries the plant. Pheenix galvanics is priced at OMS's
reference plus 20 % in both. Midpoints, estimates:
| Plan A: launch plant with six levers | Saves | Subtotal after it |
|---|---|---|
| Launch plant, every block, no contingency | | ~193.8M THB (~5.87M USD) |
| Rooftop solar and battery through a solar PPA (the installer owns and finances the array, the plant buys the power) | ~10.7M | ~183.1M |
| Metrology launch tier: XRF, inline vision and audio station at launch; laser confocal and wide-area profiler (USD 180k to 350k) bought from revenue | ~8.8M | ~174.4M |
| Visitor corridor built later; no public tours at first | ~3.6M | ~170.8M |
| Cassette and CD-R duplication later | ~4.0M | ~166.8M |
| Crane rented for the installations; frame, runway and machine door stay crane-ready | ~3.2M | ~163.6M |
| Boilers and compressor through the Chinese route ([Chinese suppliers](../suppliers/china-utilities.md)) | ~1.9M | **~161.7M (~4.90M USD)** |
| Ramp-up reserve | | +10M to 20M |
| **Plan A** | | **~177M THB (~5.35M USD)**, ~127M to 226M from the low to the high end of every block |
| Plan B: five presses, everything in | USD | THB, midpoint |
|---|---|---|
| Launch plant, every block, no contingency | 4.24M – 7.50M | ~193.8M |
| Second Duplex system: two HRP 12, EX 50 and EX 35 (calculator basis: two presses at the quoted ~115k per press and extruder set, plus hydraulic unit and EX 35; no EX 35 price on file) | 230k – 300k | +8.7M |
| Third chiller module, CH-3 (250 kW; the two boiler modules carry 750 to 900 kg/h) | 48k – 78k | +2.1M |
| Freight and installation for the extra machinery | 24k – 48k | +1.2M |
| Working capital for ~1.25M records a year instead of 0.85M | 64k – 139k | +3.4M |
| Subtotal | **4.61M – 8.07M** | **~209.2M (~6.34M USD)** |
| Ramp-up reserve | | +10M to 20M |
| **Plan B** | | **~224M THB (~6.79M USD)**, ~162M to 286M from the low to the high end of every block |
Plan B keeps what Plan A gives up: owned solar and battery (and with
them the BOI solar measure), the full metrology stack, the visitor
corridor, the bought crane, cassette and CD-R, Thai-supplied utilities.
Its five presses make ~1.0 to 1.5 million records a year at the planned
60 % specials (the [scale](../scale.md#production-capacity) basis; not
Duplex-limited), against ~0.58 to 0.90 million for Plan A's three; the
operating pictures of both are in the
[revenue model](revenue-model.md#operating-pictures-of-plan-a-and-plan-b-october-2026).
The [plant and business plan calculator](../fleet-calculator.html) has
both as presets.
**Not in either plan price:**
- **Contingency.** The blocks are budgetary (plus or minus 30 to 50 % on
the estimates, top of this page), so the plans carry no buffer for
quotes landing high. At this page's 15 % that would be ~24M THB on
Plan A and ~31M on Plan B at the midpoint.
- The central hydraulic plant (not costed yet), the archive's mobile
shelving (to quote), CD replication, financing costs, currency moves,
and Thai duty and import VAT (the blocks assume BOI promotion).
**What decides between them:** demand. Plan B needs ~1.25 million records
sold a year in its central case, about 70 % more than Plan A's 0.74
million, three fifths of them special editions; market validation
(roadmap item 1) is the evidence for that. Plan A keeps the second Duplex
as a growth step from revenue, with its floor, utility positions and
ring-main tees reserved.
## Full vision, all blocks (July 2026, superseded)
The five-press full vision below is superseded by the launch plant above.
+35 -27
View File
@@ -599,7 +599,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
presses, an EX 50 and an EX 35 colour extruder each) and Newbilt Classic
automatic presses, starting from the launch plant: one Duplex system and one
Classic. It builds the investment from the blocks in total-investment.md,
checks it against the investor's 180M and 216M THB, runs the P&L and a
checks it against Plan A's 180M and Plan B's 225M THB, runs the P&L and a
ten-year cash sketch, and lists what the plant needs: people, power, central
hydraulics, steam, cooling, compressed air, floor, compound and stampers.
Vendor figures are marked as such; the rest are planning figures and
@@ -609,9 +609,9 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
<div class="presets" id="presets">
<span>Presets:</span>
<button type="button" data-p="launch">Launch plant (decided)</button>
<button type="button" data-p="levers">Investor levers (216M)</button>
<button type="button" data-p="planA">Plan A (~180M)</button>
<button type="button" data-p="planB">Plan B (~225M, five presses)</button>
<button type="button" data-p="lean">Lean: bought stampers, outsourced cutting</button>
<button type="button" data-p="five">Five-press fleet (second Duplex)</button>
<button type="button" data-p="full">Full hall (5 D + 4 C)</button>
</div>
</header>
@@ -730,10 +730,12 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
</section>
<section class="card">
<h2>Budget: the investor's question</h2>
<p class="note" style="margin-top:0">The investor asked whether the plant can be built for 180M THB, possibly
20 % more (216M THB). Bars: the investment at the low end, the midpoint and the high end of every block
(contingency included), plus the ramp-up reserve when it is in the budget (hatched).</p>
<h2>Budget: Plan A and Plan B</h2>
<p class="note" style="margin-top:0">Two plans for the investor (October 2026): Plan A at ~180M THB keeps every
machine of the launch plant with six cost levers, Plan B at ~225M THB (+25 %) launches with the second Duplex
system and everything in; both priced without contingency and with the ramp-up reserve. Bars: the investment
at the low end, the midpoint and the high end of every block (contingency as set under Plant configuration),
plus the ramp-up reserve when it is in the budget (hatched).</p>
<div class="kpis" id="budK"></div>
<div class="bud" id="bud"></div>
<div id="budV"></div>
@@ -2842,7 +2844,7 @@ const S0 = {
priceStd: 3.8, premSpec: 1.15, titleFee: 1155, cur: "USD", boi: "on", exportShare: 70, capexEnd: "mid",
// plant configuration (defaults = the launch plant, total-investment.md October 2026)
galv: "in", galvPrice: "pheenix", cut: "in", metro: "full", cass: "on", cdr: "on", countCD: "off",
solar: "buy", steamFuel: "electric", sourcing: "thai", crane: "buy", corridor: "now", reserve: "in", stSupply: 0,
solar: "buy", steamFuel: "electric", sourcing: "thai", crane: "buy", corridor: "now", reserve: "in", cont: "in", stSupply: 0,
};
// allowed values of every switch, default first where it matters for readHash
const ENUM = {
@@ -2850,9 +2852,9 @@ const ENUM = {
capexEnd: ["low", "mid", "high"], galv: ["in", "bought"], galvPrice: ["pheenix", "oms"], cut: ["in", "out"],
metro: ["full", "launch"], cass: ["on", "off"], cdr: ["on", "off"], countCD: ["off", "on"],
solar: ["buy", "ppa", "none"], steamFuel: ["electric", "biomass"], sourcing: ["thai", "china"],
crane: ["buy", "rent"], corridor: ["now", "later"], reserve: ["in", "sep"],
crane: ["buy", "rent"], corridor: ["now", "later"], reserve: ["in", "sep"], cont: ["in", "sep"],
};
const CFGK = ["galv", "galvPrice", "cut", "metro", "cass", "cdr", "countCD", "solar", "steamFuel", "sourcing", "crane", "corridor", "reserve", "stSupply"];
const CFGK = ["galv", "galvPrice", "cut", "metro", "cass", "cdr", "countCD", "solar", "steamFuel", "sourcing", "crane", "corridor", "reserve", "cont", "stSupply"];
// [group, id, label, value, unit, kind, source]
const AS = [];
function grp(g, rows) { rows.forEach(r => AS.push([g].concat(r))); }
@@ -3008,8 +3010,8 @@ rng("Investment blocks (USD unless THB)", [
["dup1", "Newbilt Duplex system, the first", 350000, 370000, "USD", "doc", "total-investment.md: 2024 quote EUR 200,500 for the Single 2.1 plus the quoted second press and extruder ~USD 115k; expired, re-quote"],
["dupN", "Each further Duplex system", 230000, 300000, "USD", "est", "total-investment.md added scope: two presses at the quoted ~115k per press and extruder set, plus hydraulic unit and EX 35; no EX 35 price on file"],
["cla", "Each Newbilt Classic", 290000, 460000, "USD", "est", "total-investment.md: placeholder (the old AD12 band per press); no Newbilt price on file"],
["gPh", "Pheenix galvanics line (PASU, PPPU, PDPU, PMPB), Pheenix estimate", 320000, 650000, "USD", "est", "total-investment.md: no Pheenix price on file"],
["gOms", "Galvanics line priced near OMS's reference", 259000, 359000, "USD", "vendor", "OMS letter, 9 October 2026: 4-cell wet room EUR 224k basic to 311k advanced, at 1.155 USD; used as a price basis for the Pheenix line (investor lever)"],
["gPh", "Pheenix galvanics line (PASU, PPPU, PDPU, PMPB), OMS reference plus 20 %", 324000, 445000, "USD", "est", "total-investment.md (user, October 2026): OMS's 4-cell wet room with the know-how transfer, EUR 234k to 321k (letter, 9 October 2026), plus 20 %; no Pheenix price on file"],
["gOms", "Galvanics wet room bought from OMS directly", 270000, 371000, "USD", "vendor", "OMS letter, 9 October 2026: EUR 224k basic to 311k advanced plus the EUR 10k know-how transfer, at 1.155 USD; reference prices, not a quote"],
["gWat", "Galvanics water: ZLD evaporator and DI water", 3200000, 8500000, "THB", "est", "Utilities CSV rows ZLD 3.0 to 8.0M and RO/DI 0.2 to 0.5M THB, market estimates"],
["wtb", "Water-treatment building next to galvanics, ~12 × 10 m", 1700000, 2900000, "THB", "est", "total-investment.md: estimate at the building rate"],
["sib", "Sibert VSF, VSP, VSC", 250000, 250000, "USD", "vendor", "Sibert's budget confirmation, 5 October 2026; its time, spares, shipping and travel in the freight and working-capital lines"],
@@ -3048,8 +3050,8 @@ grp("Investment rules", [
["craneRent", "Crane rented for the installations, share of the crane block", 40, "%", "est", "Frame stays crane-ready; total-investment.md: saves ~3.7M THB at the midpoint"],
["wcRef", "Records a year the working capital is sized for", 840000, "", "doc", "revenue-model.md launch plant, central volume"],
["wcMin", "Working capital never below", 60, "%", "est", "Estimate"],
["budgetLo", "Investor's budget", 180000000, "THB", "doc", "total-investment.md: the investor's question, 180M THB"],
["budgetHi", "Investor's budget plus 20 %", 216000000, "THB", "doc", "total-investment.md: 216M THB"],
["budgetLo", "Plan A budget", 180000000, "THB", "doc", "total-investment.md: Plan A, ~180M THB without contingency, ramp-up reserve included"],
["budgetHi", "Plan B budget, Plan A plus 25 %", 225000000, "THB", "doc", "total-investment.md: Plan B, ~225M THB (user, October 2026)"],
]);
grp("Ten years of cash", [
["ramp1", "Sold output in year 1", 35, "% of the mature year", "est", "Estimate"],
@@ -3089,9 +3091,10 @@ const CFG0 = Object.fromEntries(CFGK.map(k => [k, S0[k]]));
const LAUNCH = { mode: "target", target: 850000, grow: "classic", dMin: 1, cMin: 1, dFleet: 1, cFleet: 1, ...CFG0 };
const PRESETS = {
launch: LAUNCH,
levers: { ...LAUNCH, solar: "ppa", metro: "launch", galvPrice: "oms", corridor: "later" },
// Plan A (~180M THB) and Plan B (~225M THB): total-investment.md "Two plans", priced without contingency
planA: { ...LAUNCH, solar: "ppa", metro: "launch", corridor: "later", cass: "off", cdr: "off", crane: "rent", sourcing: "china", cont: "sep" },
planB: { mode: "target", target: 1250000, grow: "classic", dMin: 2, cMin: 1, dFleet: 2, cFleet: 1, ...CFG0, cont: "sep" },
lean: { ...LAUNCH, galv: "bought", cut: "out" },
five: { mode: "fleet", dFleet: 2, cFleet: 1, ...CFG0 },
full: { mode: "fleet", dFleet: 5, cFleet: 4, ...CFG0 },
};
@@ -3215,7 +3218,7 @@ function capexOf(r, c = S, boiOn = c.boi !== "off") {
if (r.C > 0) blk("Presses", "cla", r.C === 1 ? "Newbilt Classic" : `Newbilt Classic: ${r.C} ×`, r.C, false, { imp: 1, frt: 1 });
if (galvIn) {
const oms = c.galvPrice === "oms";
blk("Galvanics and stamper prep", oms ? "gOms" : "gPh", `Pheenix galvanics line (PASU, PPPU, PDPU, PMPB), ${oms ? "priced near OMS's reference" : "Pheenix estimate"}`,
blk("Galvanics and stamper prep", oms ? "gOms" : "gPh", oms ? "Galvanics wet room bought from OMS directly (4 cells)" : "Pheenix galvanics line (PASU, PPPU, PDPU, PMPB), OMS reference plus 20 %",
1, false, { imp: 1, frt: 1, frtMid: (A.gPhLo + A.gPhHi) / 2 });
blk("Galvanics and stamper prep", "gWat", "Galvanics water: ZLD evaporator and DI water", 1, true, { imp: 1 });
blk("Galvanics and stamper prep", "wtb", "Water-treatment building next to galvanics, ~12 × 10 m", 1, true);
@@ -3263,15 +3266,16 @@ function capexOf(r, c = S, boiOn = c.boi !== "off") {
const sumOf = (f, k) => rows.filter(f).reduce((a, x) => a + x[k], 0), all = () => true;
const cont = Math.max(0, A.contPct) / 100;
const sub = tri(sumOf(all, "lo"), sumOf(all, "hi"));
const ctg = tri(sub.lo * cont, sub.hi * cont);
const tot = tri(sub.lo + ctg.lo, sub.hi + ctg.hi);
const ctg = tri(sub.lo * cont, sub.hi * cont), ctgIn = c.cont !== "sep";
// Plan A and Plan B are priced without contingency (user, October 2026): then it is shown, not added
const tot = ctgIn ? tri(sub.lo + ctg.lo, sub.hi + ctg.hi) : tri(sub.lo, sub.hi);
const imp = tri(sumOf(x => x.imp, "lo"), sumOf(x => x.imp, "hi"));
const dr = boiOn ? 0 : Math.max(0, A.dutyMach) / 100;
const duty = tri(imp.lo * dr, imp.hi * dr);
const vat = tri(boiOn ? 0 : (imp.lo + duty.lo) * A.vatRate / 100, boiOn ? 0 : (imp.hi + duty.hi) * A.vatRate / 100);
const res = tri(T(A.resLo), T(A.resHi));
const withDuty = tri(tot.lo + duty.lo, tot.hi + duty.hi);
return { rows, sub, ctg, cont, tot, imp, duty, vat, res, all: withDuty, fr, wf, boiOn };
return { rows, sub, ctg, ctgIn, cont, tot, imp, duty, vat, res, all: withDuty, fr, wf, boiOn };
}
// Money a year in USD. Lines: [group, label, USD, basis].
function econ(r, b, boiOn = S.boi !== "off") {
@@ -3607,9 +3611,9 @@ const CFG = [
h: { in: "Fathers, mothers and stampers made here; the plating share of the title fee earns its contribution.",
bought: "Stampers bought in and passed through at cost: no galvanics line, operators, ZLD or water-treatment building." } },
{ k: "galvPrice", t: "Galvanics price basis", sub: "only with galvanics in-house",
o: [["pheenix", "Pheenix estimate"], ["oms", "Near OMS reference"]],
h: { pheenix: () => `${kU("gPh")} USD; no Pheenix price on file.`,
oms: () => `${kU("gOms")} USD: OMS's reference for a 4-cell wet room, EUR 224k to 311k (letter, 9 October 2026).` },
o: [["pheenix", "Pheenix (OMS +20 %)"], ["oms", "OMS directly"]],
h: { pheenix: () => `${kU("gPh")} USD: OMS's reference for a 4-cell wet room plus 20 % (user, October 2026); no Pheenix price on file.`,
oms: () => `${kU("gOms")} USD: OMS's 4-cell wet room, EUR 234k to 321k with the know-how transfer (letter, 9 October 2026).` },
dis: () => S.galv === "bought" ? "Not applicable: the stampers are bought in." : "",
extra: `<label class="row" id="row_stSupply"><span>Stamper supply to other plants, titles a year<br><small>contribution 200 to 333 USD a title (estimate); galvanics in-house only</small></span><input type="number" id="stSupply" min="0" step="50"></label>` },
{ k: "cut", t: "Mastering and cutting room", sub: "Sillitoe SDMS lathe, console and chain, room",
@@ -3654,6 +3658,10 @@ const CFG = [
o: [["in", "In the budget"], ["sep", "Shown separately"]],
h: { in: "Added to the budget bars and to year 0 of the cash view; never to the investment total.",
sep: "Left out of the budget bars and year 0; shown as a line under the investment." } },
{ k: "cont", t: "Contingency", sub: "15 % of the subtotal (Assumptions)",
o: [["in", "In the total"], ["sep", "Shown separately"]],
h: { in: "Added to the investment total, as in the launch plant roll-up of total-investment.md.",
sep: "Left out of the total, as Plan A and Plan B are priced (user, October 2026); shown as a line under the subtotal." } },
];
function buildCfg() {
$("cfg").innerHTML = CFG.map(c => `<div class="cfg" id="cfg_${c.k}"><div class="ct">${c.t}<small>${c.sub}</small></div>` +
@@ -3700,8 +3708,8 @@ function renderInvest(e, r) {
const TR = (l, o, s, tot) => H.push(`<tr${tot ? ' class="tot"' : ""}><td>${l}</td><td class="n">${money(o.lo)}</td><td class="n">${money(o.mid)}</td><td class="n">${money(o.hi)}</td><td class="src">${s || ""}</td></tr>`);
H.push(`<tr class="grp"><td colspan="5">Totals</td></tr>`);
TR("Subtotal", cx.sub, "", true);
TR(`Contingency ${f1(A.contPct)} %`, cx.ctg, "total-investment.md");
TR("Total investment", cx.tot, "for reference, the launch plant in total-investment.md: ~161M to 292M THB, midpoint ~227M", true);
TR(cx.ctgIn ? `Contingency ${f1(A.contPct)} %` : `Contingency ${f1(A.contPct)} % (not in the total)`, cx.ctg, cx.ctgIn ? "total-investment.md" : "shown separately, as in Plan A and Plan B");
TR("Total investment", cx.tot, "for reference, total-investment.md: the launch plant ~161M to 285M THB with contingency (midpoint ~223M); Plan A ~162M and Plan B ~209M at the midpoint without it, plus the ramp-up reserve", true);
if (!cx.boiOn) {
TR(`Import duty without BOI, ${f1(A.dutyMach)} %`, cx.duty, `on ${money(cx.imp.lo)} to ${money(cx.imp.hi)} of imported machinery; import VAT ${money(cx.vat.mid)} at the midpoint, reclaimable`);
TR("Total with import duty", cx.all, "", true);
@@ -3709,7 +3717,7 @@ function renderInvest(e, r) {
TR("Ramp-up reserve (not in the total)", cx.res, S.reserve === "in" ? "in the budget bars and year 0 of the cash view" : "shown separately");
if (S.reserve === "in") TR("Total with the reserve", { lo: cx.all.lo + cx.res.lo, mid: cx.all.mid + cx.res.mid, hi: cx.all.hi + cx.res.hi }, "what the budget card compares", true);
$("ivT").innerHTML = `<thead><tr><th>Block</th><th class="n">Low</th><th class="n">Mid</th><th class="n">High</th><th>Basis</th></tr></thead><tbody>${H.join("")}</tbody>`;
$("ivK").innerHTML = kpi(money(cx.all.lo), "low end, contingency included") + kpi(money(cx.all.mid), "midpoint") +
$("ivK").innerHTML = kpi(money(cx.all.lo), cx.ctgIn ? "low end, contingency included" : "low end, without contingency") + kpi(money(cx.all.mid), "midpoint") +
kpi(money(cx.all.hi), "high end") + kpi(thbM(cx.all.mid), `midpoint in THB (${thbM(cx.all.lo)} to ${thbM(cx.all.hi)})`);
const fl = [];
if (r.nb > A.modRooms) fl.push(["warn", `${r.nb} boiler modules: beyond the boiler hall built for ${f0(A.modRooms)}; a second hall is not in the investment.`]);
@@ -3735,7 +3743,7 @@ function renderBudget(e) {
`<div class="bgap">against ${M(B1)}: ${gap(tot, B1)} · against ${M(B2)}: ${gap(tot, B2)}</div>`;
}).join("");
const mid = V[1], mt = mid.cap + mid.res, rLo = cx.res.lo * fx, rHi = cx.res.hi * fx;
$("budK").innerHTML = kpi(M(mid.cap) + " THB", "investment at the midpoint, contingency included") +
$("budK").innerHTML = kpi(M(mid.cap) + " THB", `investment at the midpoint, ${cx.ctgIn ? "contingency included" : "without contingency"}`) +
kpi(`${M(mid.cap + rLo)} to ${M(mid.cap + rHi)}`, `THB with the ramp-up reserve (${M(rLo)} to ${M(rHi)})`) +
kpi(mt <= B2 ? M(B2 - mt) : "+" + M(mt - B2), `${mt <= B2 ? "to spare under" : "over"} ${M(B2)} THB at the midpoint${inB ? ", reserve included" : ""}`);
const verdict = mt <= B2 ? `Mid fits ${M(B2)} with ${M(B2 - mt)} to spare` : `Mid is ${M(mt - B2)} over ${M(B2)}`;
+3 -2
View File
@@ -170,8 +170,9 @@ Nothing in Phases 2 to 5 starts before its gate clears: no machinery order
before the BOI certificate, no big-block spending before the market
validates the price, no coppice fuel planning before the land title check.
Since October 2026 the plant launches with everything in one capital
round (~161M to 292M THB, target ~216M with the levers in
[total investment](finance/total-investment.md#launch-plant-october-2026));
round (~161M to 285M THB with contingency; for the investor Plan A at
~180M and Plan B at ~225M THB without it, in
[total investment](finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-225m-thb-october-2026));
the gates still come before the round is spent, and the growth options
(more Duplex systems first, then Classics, in a press hall laid out for
five Duplex systems and four Classics) are funded from revenue.