KB: Население (Population)

Статус: верифицирован (сессия 2026-03-15)

Суть

Расчётный домен. Собирает персонал всех доменов, считает семьи, общее население, кризисное покрытие. Итерация до сходимости.

Ориентир

Общее население поселения — до 500+ человек. Не хардкап, а ориентир для проектирования инфраструктуры.

Константы

КонстантаЗначениеОписание
FAMILY_MULT2.5Всего людей на 1 работника (работник + 1.5 доп.)
CRISIS_BUFFER1.25Кризисное покрытие (ферма кормит × 1.25)
CHILDREN_SHARE0.22Доля детей в населении (22%)
SOC_TAX1.43Коэффициент налогов на ФОТ

Слайдеры

СлайдерМинМаксДефолтШагОписание
familyMult0.53.01.50.1Доп. людей на 1 работника (2.5 total при дефолте)
housingPct0%100%100%10%% персонала в доходном доме УК (остальные — свой дом на участке)
seloNative01501001Местные жители Уожана
villaLoadPct10%100%50%10%% резидентов вилл на месте (ежедневная нагрузка)
enrollPct20%100%70%10%% детей, посещающих школу

Формула (итерация)

do {
  prevPop = totalPop

  // Персонал с семьями
  staffWithFamily = totalStaff × FAMILY_MULT

  // Население (все живут в Уожане)
  seloPop = staffWithFamily + seloNative
  villaPop = villas × 4
  totalPop = seloPop + villaPop                            // всегда все
  crisisCov = round(totalPop × CRISIS_BUFFER)

  // Для жилья (capex/revenue):
  housedPop = staffWithFamily × housingPct                 // % в доходном доме УК

  // Производный персонал (зависит от населения)
  farmStaff = f(crisisCov)                               // из kb-farm
  schoolStaff = f(totalPop × CHILDREN_SHARE × enrollPct) // из kb-selo
  seloServiceStaff = 1 + max(2, ceil(totalPop / 120))    // из kb-selo
  utilStaff = max(2, ceil(totalPop / 150))                // из kb-utilization

  // Итого персонал
  totalStaff = farmStaff + villaStaff + sanStaff
             + engStaff + secStaff + ukStaff
             + schoolStaff + seloServiceStaff + utilStaff

} while (abs(totalPop - prevPop) > 5)

Производные величины

// Дети
totalChildren = totalPop × CHILDREN_SHARE
enrolledChildren = totalChildren × enrollPct

// Разбивка детей (для revenue школы)
seloChildren = seloPop × CHILDREN_SHARE × enrollPct
villaChildren = villaPop × CHILDREN_SHARE × enrollPct

// Ежедневная нагрузка (вода, ФАП, магазин)
villaPopDaily = villaPop × villaLoadPct
dailyPop = seloPop + villaPopDaily

// Вода/канализация (для инженерии)
waterPop = totalPop + sanPop

Правила

  • housingPct влияет только на capex/revenue жилья (доходный дом УК), НЕ на население
  • seloPop = staffWithFamily + seloNative (все 100% персонала с семьями живут в Уожане)
  • housedPop = staffWithFamily × housingPct (% в доходном доме; остальные — свой дом на участке)
  • Ферма кормит всех (crisisCov = totalPop × 1.25)
  • Итерация до сходимости (дельта < 5 чел), обычно 2–3 раунда
  • Домен выключен (toggle off) → его staff = 0
  • villaPop = villas × 4 (постоянные, для школы и кризиса)
  • villaPopDaily = villaPop × villaLoadPct (для ежедневной нагрузки)
  • seloNative — интегрированы (школа, магазин, ФАП), но мы за них не платим

Связь с доменами

ДоменЧто берёт из населения
ФермаcrisisCov → размер фермы
Село (жильё)housedPop → м² жилья (доходный дом)
Село (школа)enrolledChildren → персонал, capex, revenue
Село (сервис)totalPop → персонал
ИнженерияwaterPop → capex воды/канализации
УтилизацияtotalPop → capex, персонал
ЗемляtotalPop → благоустройство