Full downstream cascade model
The tool walks the downstream cascade explicitly rather than collapsing it into a single subscribers-per-PON number. One PON port feeds a 1:N optical splitter, each splitter output runs as a fibre to one ONT, each ONT exposes some number of Ethernet ports (one AP per port), and each AP serves some number of subscribers. Subscribers per ONT and per PON port are derived from the cascade inputs and shown live in the input panel before the sizing runs. The Downstream Cascade strip in the main column walks every node — distribution points, PON ports, splitter outputs, ONTs, Ethernet ports and APs, subscribers — with the running count and the per-step multiplier on each arrow, so every multiplication is auditable visually.
Geographic-aware distribution-point sizing
Subscribers split evenly across N geographic distribution points. Each distribution point computes its ONT and PON port count independently because partially filled splitters cannot be shared across locations, and the totals are aggregated for chassis sizing. This catches a class of error aggregate sizing misses — 100 subscribers across 10 distribution points with a 1:32 splitter needs 10 PON ports, one per DP, rather than the four the aggregate math suggests. A sparse-distribution-point info alert surfaces when splitter utilisation drops below 50% and recommends a smaller splitter to reduce stranded splitter outputs.
Bandwidth model with concurrency, over-subscription, and efficiency
For the selected PON standard the engine takes the downstream and upstream line rates, applies the protocol efficiency to get the usable line rate, computes the effective per-ONT load (subscribers per ONT times concurrency times bandwidth per subscriber divided by over-subscription) and divides to get the bandwidth-bound maximum ONTs per PON port. A bandwidth-direction selector (DL only, UL only, or worst-case as the minimum of both) controls which limit is enforced. Per-PON bandwidth demand at full splitter fill is reported separately and highlighted in red when it exceeds the usable line rate, so an oversold splitter is visible immediately.
Constraint analysis waterfall with binding constraint
The four candidate caps on ONTs per PON port — DL bandwidth, UL bandwidth, ONT port limit, and splitter ratio — are evaluated together and shown as a horizontal bar waterfall. The binding constraint, the lowest cap that actually limits the design, is highlighted in blue with a BINDING tag and named in the headline subtitle. Rows skipped because of the bandwidth-direction choice are dimmed with a SKIP tag. The Effective Max ONTs per PON footer reports the result, and a BW Headroom badge appears in green when bandwidth could have supported more ONTs than the physical caps allow — useful for sizing future upgrades on the same chassis.
Estimated fair-share at peak, per subscriber and per ONT
Fair-share is computed as the usable line rate divided by the active subscribers at peak (effective max ONTs times subscribers per ONT times concurrency). Both per-subscriber and per-ONT fair-share are reported for DL and UL separately. This is the actual speed each subscriber is entitled to under DBA scheduling when the PON is filled to its effective max — the defensible service-level number to set against the marketing headline speed. The fair-share number flows through every sensitivity table so the trade between bigger splitters and per-subscriber speed is direct.
Splitter ratio and PON standard sensitivity tables
Two side-by-side tables run the current cascade through every standard splitter (1:4, 1:8, 1:16, 1:32, 1:64, 1:128) and every PON standard (GPON, XG-PON, XGS-PON, NG-PON2) and report subscribers per PON, bandwidth limit, effective max ONTs, per-subscriber fair-share DL, PON ports, cards, and shelves. Each PON standard row is tagged with a BW Status badge — BW-constrained, Balanced, or Headroom — so the upgrade value of a higher-class standard is obvious. If all four standards are tagged Headroom and yield the same port count, an upgrade buys only per-subscriber speed, not infrastructure savings.
Future-growth overlay on the same cascade
A single future-growth percentage runs the same engine against an inflated subscriber count and overlays the future count on every Downstream Cascade node in green, with the plus-delta in parentheses (current state in blue, growth state below). A chassis summary line below the cascade reports the current card and shelf count alongside the future card and shelf count. Growth shares the same constraint waterfall and the same fair-share model as the current state, so a growth plan that violates the binding constraint is visible immediately rather than at procurement time.
NaN-safe inputs and silent auto-save
Every numeric input is coerced to a finite positive number through a single helper that clamps to declared minimums and maximums, rejects negatives, and falls back to a sane default when a field is cleared mid-edit. The math reads from the coerced view rather than the raw input bindings, so a field can be blanked temporarily without the display flashing NaN. The complete configuration auto-saves to local storage (key noim3.pon-planner.config.v1) on every change, restores on the next visit, and the reset button clears the slot and reverts to defaults. Persistence is silent — there is no save button and no save indicator.
Built-in self-test runner for math verification
Appending ?selftest=1 to the URL runs nine named hand-computed assertions covering trivial splitter-bound sizing, multi-distribution-point geographic split, sparse-distribution-point over-provisioning, multi-subscriber-per-ONT, bandwidth-binding constraint, splitter-binding constraint, zero subscribers, subscribers below distribution-point count, and the numeric coercion contract. Results render in a Self-Test Results panel at the bottom of the main column and are logged to the browser console (errored if any test fails), so the cascade math stays auditable as the engine evolves.