Files
cnx_vinyl/docs/business-plan/build/plan_variant.py
T
grabowski 3f33babdaa
Deploy test site / deploy (push) Successful in 52s
Plan B re-defined: the launch plant with everything in (~210M THB); front view on the cover
- Plan B now starts like Plan A with one Duplex system and one Classic,
  but takes none of the six levers: owned solar and battery (with the BOI
  solar measure), the full metrology stack, the visitor corridor, cassette
  and CD-R, the bought crane and Thai-supplied utilities (user, 17 October
  2026). ~193.8M THB before the reserve, ~209M with it (~150M to 268M),
  ~32M (~18 %) more than Plan A; the second Duplex is a growth step from
  revenue in both (~15.4M THB, estimate).
- total-investment.md "Two plans" re-based (heading and anchor now
  "B at ~210M THB", README and roadmap links updated); revenue-model.md
  operating pictures: same volume and EBITDA as Plan A, depreciation on
  Plan B's capital (operating profit 1.26M USD central, payback ~3.7 yr);
  the extra earns nothing in the modelled table, which the docs say.
- Calculator: Plan B preset = the launch plant with contingency kept out
  (EBITDA 2.07M USD, cash payback year ~4.3, IRR ~21 %); budget card marks
  180M and 180M plus 25 %; preset label "Plan B (~210M, all in)".
- Business plan draft 0.3, both versions rebuilt: every Plan B branch of
  the three content files rewritten; renders regenerated with the
  isometric view turned to the front of the site (road, car park, office,
  corridor facade) for the cover and Figures 8 to 10.
2026-10-17 16:33:18 +07:00

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, ~210M 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": "~210M 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]})"