Two plans for the investor: Plan A ~180M, Plan B ~225M THB; Pheenix at OMS +20 %
Deploy test site / deploy (push) Successful in 53s
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:
1 parent
f7e20e1015
commit
f2ff1eac1f
6 files changed
+204
-44
No files matched your search
@@ -70,11 +70,14 @@ steps are open planning items.
|
||||
- The plant now launches with everything in one capital round (October
|
||||
2026): one Newbilt Duplex system and one Classic, a Pheenix galvanics
|
||||
line, the Sibert stamper-prep line, a Sillitoe cutting room and the
|
||||
modular boiler and chiller plant. The investor asked whether it can be
|
||||
built for 180M THB, possibly 20 % more: on current estimates it costs
|
||||
~161M to 292M THB (midpoint ~227M), so 216M is a realistic target with
|
||||
four levers and 180M a low-quote case
|
||||
modular boiler and chiller plant: ~161M to 285M THB with contingency
|
||||
(midpoint ~223M), the Pheenix line priced at OMS's reference plus 20 %
|
||||
([total investment](docs/finance/total-investment.md#launch-plant-october-2026)).
|
||||
For the investor the business plan comes in two versions, priced
|
||||
without contingency and with the ramp-up reserve
|
||||
([two plans](docs/finance/total-investment.md#two-plans-a-at-180m-thb-and-b-at-225m-thb-october-2026)):
|
||||
**Plan A, ~177M THB**, the launch plant with six cost levers, and
|
||||
**Plan B, ~224M THB**, five presses with the second Duplex at launch.
|
||||
Chinese boilers, compressor and hydraulics save about 2M THB of that
|
||||
([Chinese suppliers](docs/suppliers/china-utilities.md)).
|
||||
The business plan is re-based on it (draft 0.2).
|
||||
@@ -277,9 +280,10 @@ The detail lives in dedicated documents:
|
||||
output capacity, building area, land, electrical demand, solar and
|
||||
storage, steam and fuel, headcount, and money cross-references
|
||||
- [Total investment](docs/finance/total-investment.md): the launch plant
|
||||
decided in October 2026 (~161M to 292M THB, ~4.9M to 8.9M USD, midpoint
|
||||
~227M THB) with the basis of every block, and the answer to the
|
||||
investor's 180M / 216M THB question; the earlier full vision and phased
|
||||
decided in October 2026 (~161M to 285M THB, ~4.9M to 8.6M USD, midpoint
|
||||
~223M THB) with the basis of every block, the two plans for the investor
|
||||
(Plan A ~180M, Plan B ~225M THB, without contingency), and the earlier
|
||||
answer to the 180M / 216M question; the earlier full vision and phased
|
||||
entry are kept as superseded
|
||||
- [Phase 1 construction RFQ](docs/finance/phase1-construction-rfq.md):
|
||||
the spec sheet for asking a contractor to price the phase 1 buildings
|
||||
@@ -287,8 +291,10 @@ The detail lives in dedicated documents:
|
||||
- [Revenue model](docs/finance/revenue-model.md): pricing, direct cost
|
||||
and margin per record, the launch plant's operating picture at the
|
||||
planned 60 % specials (central revenue ~3.65M USD a year on ~0.74M
|
||||
records, EBITDA ~1.7M, payback ~3.8 years on 216M THB; the adverse case
|
||||
loses money), the five-press table, and the levers and
|
||||
records, EBITDA ~1.7M; the adverse case loses money), the operating
|
||||
pictures of Plan A (payback ~3.1 years on ~177M THB) and Plan B
|
||||
(1.25M records, EBITDA ~3.1M USD, payback ~2.2 years on ~224M THB, if
|
||||
the records sell), the five-press table, and the levers and
|
||||
caveats behind the numbers
|
||||
- [Business plan](docs/business-plan/CNX-Vinyl-Business-Plan.docx): the
|
||||
investor-facing roll-up of everything above, built from
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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.
|
||||
Reference in new issue
Block a user