Coverage Summary for Class: OrgRuNameGenerator (ru.eda.plgn.bizgen.core.generator.impl)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| OrgRuNameGenerator |
100%
(2/2)
|
|
100%
(3/3)
|
100%
(13/13)
|
| OrgRuNameGenerator$OrganizationRuNameGeneratorInner |
100%
(2/2)
|
75%
(3/4)
|
98.2%
(109/111)
|
99%
(1696/1713)
|
| Total |
100%
(4/4)
|
75%
(3/4)
|
98.2%
(112/114)
|
99%
(1709/1726)
|
package ru.eda.plgn.bizgen.core.generator.impl
import ru.eda.plgn.bizgen.core.generator.GeneratorResult
import ru.eda.plgn.bizgen.core.generator.GeneratorResultWithEscape
import ru.eda.plgn.bizgen.core.generator.GeneratorStr
import ru.eda.plgn.bizgen.core.generator.impl.OrgRuNameGenerator.OrganizationRuNameGeneratorInner.generateOrganizationName
import kotlin.random.Random
/**
* Генератор наименований организаций на русском языке.
*
* @author Dmitry_Emelyanenko
*/
class OrgRuNameGenerator : GeneratorStr {
override val uniqueDistance: Int = 130
override fun generate(): GeneratorResult<String> = GeneratorResultWithEscape(data = generateOrganizationName())
private object OrganizationRuNameGeneratorInner {
private val companyTypes = listOf(
// Коммерческие организации
"ООО", // Общество с ограниченной ответственностью
"АО", // Акционерное общество
"ПАО", // Публичное акционерное общество
"НАО", // Непубличное акционерное общество
"ИП", // Индивидуальный предприниматель
// Государственные и муниципальные
"ФКП", // Федеральное казённое предприятие
"ФГУП", // Федеральное государственное унитарное предприятие
"ГУП", // Государственное унитарное предприятие
"МУП", // Муниципальное унитарное предприятие
"ГБУ", // Государственное бюджетное учреждение
"МБУ", // Муниципальное бюджетное учреждение
"ГАУ", // Государственное автономное учреждение
"МАУ", // Муниципальное автономное учреждение
// Некоммерческие организации
"АНО", // Автономная некоммерческая организация
"НКО", // Некоммерческая организация
"Фонд", // Фонд
"Ассоциация",
)
private val firstWords = listOf(
"Глобал", "Техно", "Рос", "Металл", "Строй", "Транс", "Нефть", "Газ",
"Агро", "Мед", "Фарм", "Телеком", "Инвест", "Финанс", "Энерго", "Прогресс",
"Мега", "Космос", "Альфа", "Омега", "Дельта", "Сигма", "Вектор", "Квант",
"Сиб", "Даль", "Урал", "Север", "Юг", "Восток", "Запад", "Центр",
"Науч", "Тех", "Пром", "Хим", "Эко", "Био", "Нано", "Кибер",
"Москва", "Петербург", "Сибирь", "Байкал", "Волга", "Дон", "Амур", "Алтай",
"Камчатка", "Сахалин", "Крым", "Кавказ", "Черноземье", "Нева", "Обь", "Енисей",
"Лена", "Ангара", "Балтика", "Арктик", "Таймыр", "Приморье", "Забайкалье", "Курск",
"Тверь", "Рязань", "Владимир", "Ярославль", "Кострома", "Вологда", "Псков", "Новгород",
"Робот", "АйТи", "Код", "Софт", "Хард", "Чип", "Драйв", "Смарт",
"Дижитал", "Вирту", "Клауд", "Нейро", "Крипто", "Блокчейн", "Токен", "Айпи",
"Датчик", "Сенсор", "Микро", "Опто", "Лазер", "Плазмо", "Квантум", "Фотон",
"Дом", "Квартал", "Жил", "Комфорт", "Фасад", "Фундамент", "Кровля", "Бетон",
"Кирпич", "Стекло", "Метро", "Мост", "Тоннель", "Высот", "Архитек", "Проект",
"Авиа", "Авто", "Желдор", "Речфлот", "Морфлот", "Транзит", "Экспресс", "Карго",
"Фрахт", "Контейнер", "Логист", "Транса", "Аэро", "Такси", "Бус", "Троллей",
"Капитал", "Актив", "Траст", "Кредит", "Депозит", "Лизинг", "Факторинг", "Аудит",
"Консалт", "Маркет", "Бизнес", "Трейд", "Импэкс", "Экспо", "Форум", "Клуб",
"Академи", "Универ", "Колледж", "Лицей", "Институт", "Лаборатор", "Исслед", "Эксперимент",
"Знание", "Прогресс", "Интеллект", "Гений", "Талант", "Олимп", "Эрудит", "Курс",
"Медика", "Клиника", "Диагност", "Терапия", "Стомат", "Офтальмо", "Кардио", "Нейро",
"Фарма", "Вита", "Генетик", "Иммуно", "Био", "Гигиена", "Санаторий", "Спа",
"Торг", "Маркет", "Супер", "Гипер", "Мега", "Универсам", "Гастроном", "Продукт",
"Сервис", "Центр", "Плюс", "Экстра", "Премиум", "Люкс", "Гранд", "Элит",
"Лес", "Вода", "Воздух", "Земля", "Плодородие", "Эко", "Ресурс", "Гео",
"Нефте", "Газо", "Уголь", "Руда", "Металлург", "Хим", "Полимер", "Энерг",
"Арт", "Культ", "Театр", "Кино", "Музей", "Галерея", "Выставка", "Фестиваль",
"Концерт", "Филармония", "Оркестр", "Хор", "Балет", "Опера", "Драма", "Цирк",
"Спектр", "Импульс", "Горизонт", "Потенциал", "Резонанс", "Контур", "Парадигма",
"Модуль", "Матрица", "Платформа", "Экосистема", "Синергия", "Инициатива",
"Динамика", "Ориентир", "Полюс", "Фактор", "Баланс", "Интеграл", "Вектория",
"Полис", "Мегаполис", "Ареал", "Регионум", "Территория", "Доминион",
"Спин", "Кварк", "Бозон", "Нейтрон", "Изотоп", "Синтез", "Катализ",
"Геометрия", "Алгоритм", "Протокол", "Интерфейс", "Архитектура",
"Прайм", "Фокус", "Статус", "Профит", "Рента", "Аксиома", "Формула",
"Диверсиф", "Кооператив", "Инкубатор"
)
private val secondWords = listOf(
"Сервис", "Групп", "Холдинг", "Трейд", "Лизинг", "Банк", "Капитал", "Ресурс",
"Снаб", "Торг", "Пром", "Тех", "Индустрия", "Системы", "Технологии", "Решения",
"Консалтинг", "Менеджмент", "Развитие", "Партнеры", "Центр", "Альянс", "Траст",
"Корпорация", "Компани", "Концерн", "Синдикат", "Трест", "Ассоциация", "Фонд",
"Венчур", "Диджитал", "Инновации", "Логистика", "Маркет", "Недвижимость", "Ойл",
"Проект", "Строй", "Транзит", "Универсал", "Фабрика", "Хайтек", "Центр", "Эксперт",
"Юнион", "Ярд", "Лаб", "Медиа", "Нетворк", "Онлайн", "Премиум", "Квалити",
"Солюшнс", "Инжиниринг", "Девелопмент", "Аналитика", "Операции",
"Инфраструктура", "Интеграция", "Автоматизация", "Оптимизация",
"Поддержка", "Эксплуатация", "Модернизация", "Сопровождение",
"Партнерство", "Консорциум", "Коалиция", "Объединение",
"Инициатива", "Платформа", "Экосистема",
"Датацентр", "Облака", "Кибербезопасность", "Разработка",
"Продукты", "Сервисы", "РешенияПлюс"
)
private val longSuffixes = listOf(
" имени академика Петрова-Соколова",
" Северо-Западного федерального округа",
" по производству высокотехнологичного оборудования",
" для нефтегазовой промышленности и энергетики",
" в сфере информационных технологий и цифровой трансформации",
" городского округа Краснознаменск Московской области",
" при Правительстве Российской Федерации",
" по разработке инновационных решений в области искусственного интеллекта",
" и дочерние предприятия группы компаний 'Восток-Запад'",
" (бывшее предприятие 'Прогресс-Электронмаш')",
" федерального значения в области стратегического развития",
" полного инновационного цикла от исследований до внедрения",
" с участием международных технологических партнеров",
" в рамках национальных и межрегиональных программ",
" по комплексной цифровизации производственных процессов",
" на базе собственных научно-исследовательских центров",
" с распределенной структурой управления и филиальной сетью",
" в сфере импортозамещения и технологического суверенитета",
" в интересах государственных и корпоративных заказчиков",
" с применением сертифицированных методологий и стандартов",
" действующее на основании устава и законодательства РФ",
" зарегистрированное в установленном законом порядке",
" с местом нахождения в Российской Федерации",
" осуществляющее деятельность на территории РФ"
)
private val separators = listOf("", "-", " ")
fun generateOrganizationName(): String {
val random = Random.Default
val type = companyTypes.random()
val baseName = buildString {
append(firstWords.random())
append(separators.random())
append(secondWords.random())
}
// 50% chance to add long suffix
val fullName = if (random.nextDouble() < 0.5) {
val suffix = longSuffixes.random()
// Ensure total length doesn't exceed 255 chars
if (type.length + 1 + baseName.length + suffix.length <= 255) {
"$type $baseName$suffix"
} else {
// If too long, truncate suffix
val maxSuffixLength = 255 - (type.length + 1 + baseName.length)
"$type $baseName${suffix.take(maxSuffixLength)}"
}
} else {
"$type $baseName"
}
return fullName
}
}
}