Deploy test site / deploy (push) Successful in 54s
Solar (user, 17 Oct 2026: "use as much roof space as possible") - PV on every roof and canopy: ~640 kWp on the Payap scenario plot (factory roof ~523, canopies ~54, flat office roof ~65 kWp around the AC units); ~300 kWp on the Mueang Chi hall. Calculator: pvKWp 640, new pvSelf 85 % (zero export, hourly sketch), PV cost per kWp times the array, office-roof PV in the iso view, roofs drawn full. - 12.8M to 16.6M THB at 20 to 26 THB/W; CSV baseline 34.37M to 56.34M; launch plant ~168M / 231M / 294M THB with contingency; Plan B ~216M (label ~215M), ~39M above Plan A; Plan A unchanged (it leases the array), its solar lever ~17.5M. PV payback ~4.2 to 5.9 years. - Permits (rooftop solar no factory licence since 28 Dec 2024, ERC exemption under 1,000 kVA, PEA zero export) and PPA discounts sourced in sustainability.md. BOI correction - Announcement 3/2568 (in force 1 July 2025) ended BOI promotion for solar installations; only the battery may qualify (12M THB per MW cap). Removed the "BOI solar measure" from boi.md, total-investment, revenue-model, sustainability, site-candidates and both plan versions; Plan B's case for owning the array is the PPA bill it avoids (~0.07M USD a year). Open source (user, 17 Oct 2026) - digital-factory.md "Open source throughout, and working with other plants": everything we run and build is open source on NixOS, our code published (licence to decide), vendor firmware the stated exception; later the stack and factory-automation services for other pressing plants, not in the revenue. - Business plan section 5.6 plus an executive-summary bullet, reading guide and not-modelled mentions; draft 0.3 rebuilt (A 60, B 61 pages), renders re-made with the roofs full.
37 lines
978 B
Python
37 lines
978 B
Python
"""Which version of the business plan is being built (October 2026).
|
|
|
|
Plan A, ~180M THB: the launch plant (1 Duplex system + 1 Classic, every machine) with six cost levers.
|
|
Plan B, ~215M THB: the same launch plant with everything in (none of the six levers).
|
|
Both are priced without contingency and with the ramp-up reserve
|
|
(docs/finance/total-investment.md, "Two plans").
|
|
|
|
build_plan.py sets PLAN before it calls the content modules' blocks(); call pick() and the
|
|
helpers inside blocks(), never at import time.
|
|
"""
|
|
PLAN = "A"
|
|
|
|
NAME = {"A": "Plan A", "B": "Plan B"}
|
|
PRICE = {"A": "~180M THB", "B": "~215M THB"}
|
|
|
|
|
|
def is_a() -> bool:
|
|
return PLAN == "A"
|
|
|
|
|
|
def is_b() -> bool:
|
|
return PLAN == "B"
|
|
|
|
|
|
def pick(a, b):
|
|
"""The Plan A or the Plan B variant of a value, text or list of blocks."""
|
|
return a if PLAN == "A" else b
|
|
|
|
|
|
def name() -> str:
|
|
return NAME[PLAN]
|
|
|
|
|
|
def label() -> str:
|
|
"""e.g. 'Plan A (~180M THB)'."""
|
|
return f"{NAME[PLAN]} ({PRICE[PLAN]})"
|