# Бизнес-единицы (Business Units) Детальное описание типов бизнес-единиц компании. ## Обзор Бизнес-единица — операционная единица компании (магазин, фабрика, склад и т.д.). 📂 **Код:** [`backend/src/MyBiz.Core/BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs) --- ## Архитектура ``` ┌─────────────────┐ │ BusinessUnit │ │ (базовый) │ └────────┬────────┘ │ ┌───────────────────┼───────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Shop │ │ Factory │ │ Warehouse │ │ (магазин) │ │ (фабрика) │ │ (склад) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ Office │ │ ResearchLab │ │ (офис) │ │ (лаборатория) │ └─────────────────┘ └─────────────────┘ ``` --- ## BusinessUnit (базовый класс) **Назначение:** Базовый класс для всех бизнес-единиц. 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L33-L180) ### Основные свойства | Свойство | Тип | Описание | |----------|-----|----------| | `Id` | Guid | Уникальный ID единицы | | `Name` | string | Название | | `Type` | BusinessUnitType | Тип единицы | | `CompanyId` | Guid | ID компании-владельца | | `CityId` | string | ID города | | `X`, `Y` | int | Координаты на карте | | `Level` | int | Уровень развития (1-10) | | `Employees` | int | Количество сотрудников | | `MaxEmployees` | int | Макс. количество сотрудников | | `Efficiency` | int | Эффективность (0-100) | | `BuildCost` | decimal | Стоимость постройки | | `UpkeepCost` | decimal | Содержание в тик | | `LastPeriodIncome` | decimal | Доход за период | | `LastPeriodExpenses` | decimal | Расходы за период | | `IsActive` | bool | Работает ли единица | | `Building` | Building? | Ссылка на здание | | `Inventory` | Dictionary | Запасы | | `ActiveProduction` | ActiveProductionChain? | Производственная цепочка | ### Вычисляемые свойства | Свойство | Формула | |----------|---------| | `PeriodProfit` | `LastPeriodIncome - LastPeriodExpenses` | | `Profitability` | `(PeriodProfit / LastPeriodExpenses) * 100` | ### Методы | Метод | Описание | |-------|----------| | `UpdateEfficiency()` | Пересчитать эффективность | | `Tick()` | Обновить состояние (каждый тик) | | `HireEmployee()` | Нанять сотрудника | | `FireEmployee()` | Уволить сотрудника | | `Upgrade()` | Повысить уровень | ### Формула эффективности ``` staffRate = Employees / MaxEmployees Efficiency = 100 * staffRate + (Level - 1) * 5 Efficiency = Clamp(Efficiency, 0, 100) ``` **Пример:** - MaxEmployees = 10, Employees = 8 → 80% - Level = 3 → +10% - **Итого:** 90% --- ## Shop (магазин) **Назначение:** Розничная торговля товарами. 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L185-L210) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `SoldProductTypes` | List | Типы продаваемых продуктов | | `DailyRevenue` | decimal | Выручка за день | | `DailyCustomers` | int | Количество клиентов | ### Вычисляемые | Свойство | Формула | |----------|---------| | `AverageCheck` | `DailyRevenue / DailyCustomers` | ### Параметры по умолчанию | Параметр | Значение | |----------|----------| | `MaxEmployees` | 20 | | `BuildCost` | 50 000 | | `UpkeepCost` | 1 000 | --- ## Factory (фабрика) **Назначение:** Производство товаров из сырья/компонентов. 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L215-L240) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `OutputProductId` | string? | ID производимого продукта | | `RequiredInputs` | Dictionary | Требуемые ресурсы | | `LastTickOutput` | int | Произведено за тик | ### Вычисляемые | Свойство | Описание | |----------|----------| | `IsIdle` | `ActiveProduction == null \|\| !ActiveProduction.IsActive` | ### Параметры по умолчанию | Параметр | Значение | |----------|----------| | `MaxEmployees` | 100 | | `BuildCost` | 200 000 | | `UpkeepCost` | 5 000 | --- ## Warehouse (склад) **Назначение:** Хранение товаров и сырья. 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L245-L295) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `Capacity` | int | Вместимость (единиц) | | `UsedCapacity` | int | Использовано места | | `FreeCapacity` | int | Свободно места | ### Методы | Метод | Описание | |-------|----------| | `AddToInventory(productId, quantity)` | Добавить товар | | `RemoveFromInventory(productId, quantity)` | Взять товар | ### Параметры по умолчанию | Параметр | Значение | |----------|----------| | `MaxEmployees` | 10 | | `BuildCost` | 30 000 | | `UpkeepCost` | 500 | | `Capacity` | 10 000 | --- ## Office (офис) **Назначение:** Управление компанией, бонусы к эффективности. 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L300-L325) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `ManagementBonus` | int | Бонус к управлению (%) | | `ManagedBuildings` | int | Количество управляемых зданий | ### Параметры по умолчанию | Параметр | Значение | |----------|----------| | `MaxEmployees` | 50 | | `BuildCost` | 100 000 | | `UpkeepCost` | 3 000 | | `ManagementBonus` | 5 | --- ## ResearchLab (научная лаборатория) **Назначение:** Исследование новых технологий. 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L330-L375) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `CurrentResearch` | string? | Текущее исследование | | `ResearchProgress` | int | Прогресс (0-100%) | ### Вычисляемые | Свойство | Формула | |----------|---------| | `SciencePerTick` | `Employees * 10 * Efficiency / 100` | ### Методы | Метод | Описание | |-------|----------| | `StartResearch(technologyId)` | Начать исследование | | `Tick()` | Обновление прогресса | ### Параметры по умолчанию | Параметр | Значение | |----------|----------| | `MaxEmployees` | 30 | | `BuildCost` | 150 000 | | `UpkeepCost` | 4 000 | --- ## Перечисления ### BusinessUnitType | Значение | Описание | |----------|----------| | `Shop` | Магазин (розничная торговля) | | `Factory` | Фабрика (производство) | | `Warehouse` | Склад (хранение) | | `Office` | Офис (управление) | | `ResearchLab` | Научная лаборатория | 📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L5-L22) --- ## Примеры использования ### Создание магазина ```csharp var shop = new Shop { Name = "Центральный магазин", CityId = "city_1", X = 150, Y = 200, Employees = 10, SoldProductTypes = { "goods_food", "goods_clothing" } }; shop.HireEmployee(); // +1 сотрудник shop.UpdateEfficiency(); ``` ### Создание фабрики с производством ```csharp var factory = new Factory { Name = "Текстильная фабрика", CityId = "city_1", OutputProductId = "comp_fabric", RequiredInputs = { ["raw_cotton"] = 50 }, Employees = 50 }; // Запуск производства var config = new ProductionChainConfig { Id = "chain_fabric", OutputProductId = "comp_fabric", OutputQuantity = 40, RequiredBuildingId = "textile_factory", Steps = new List { new() { InputProductId = "raw_cotton", InputQuantity = 50, ProductionTime = 10 } } }; factory.ActiveProduction = new ActiveProductionChain { Config = config, Building = new Building(), IsActive = true }; // Каждый тик: factory.Tick(); ``` ### Управление складом ```csharp var warehouse = new Warehouse { Capacity = 5000 }; // Добавить товары warehouse.AddToInventory("raw_cotton", 1000); warehouse.AddToInventory("raw_steel", 500); Console.WriteLine($"Заполнено: {warehouse.UsedCapacity}/{warehouse.Capacity}"); // Взять товары var taken = warehouse.RemoveFromInventory("raw_cotton", 300); Console.WriteLine($"Взято: {taken}"); ``` ### Исследование технологий ```csharp var lab = new ResearchLab { Employees = 20, Efficiency = 100 }; lab.StartResearch("tech_advanced_production"); // Каждый тик: lab.Tick(); if (lab.ResearchProgress >= 100) { Console.WriteLine("Технология изучена!"); // Добавить технологию в компанию } ``` --- ## Тесты 📂 **Код:** [`backend/tests/MyBiz.Tests/UserTests.cs`](../../backend/tests/MyBiz.Tests/UserTests.cs) | Класс тестов | Количество | Описание | |--------------|------------|----------| | `BusinessUnitTests` | 10 | Базовый класс | | `ShopTests` | 3 | Магазины | | `FactoryTests` | 3 | Фабрики | | `WarehouseTests` | 6 | Склады | | `ResearchLabTests` | 4 | Лаборатории | | `CompanyBusinessUnitTests` | 6 | Компания + единицы | **Всего:** 32 теста --- ## Связанные документы - [Ядро](core.md) — базовые классы - [Управление пользователем](user-management.md) — User, Company - [Производство](production.md) — цепочки производства - [Здания](buildings.md) — типы зданий --- **Последнее обновление:** 21.02.2026