feat: окно критериев значимости — дословная таблица ПП РФ № 127

- criteria_127.json переписан точно по Постановлению Правительства РФ
  от 08.02.2019 № 127 (приложение): 5 критериев (социальная, политическая,
  экономическая, экологическая, значимость для обороны страны), 30 показателей
  (1-14 с подпунктами а/б/в/г), значения сразу привязаны к категориям III/II/I
- окно 980x700 со скроллом: у каждого показателя выбор значения из документа
  («III категория: …», «II категория: …», «I категория: …»)
- категория значимости по наивысшей выбранной: I→1-я, II→2-я, III→3-я, иначе без категории
- обоснование: автогенерация текста с перечнем выбранных показателей,
  если поле пустое; кнопки «Рассчитать категорию» и «Сохранить»
- категория сразу подставляется в поле категории значимости объекта
This commit is contained in:
2026-08-04 19:20:52 +04:00
parent 879ada5859
commit 8e647fc79a
2 changed files with 322 additions and 134 deletions
+239 -77
View File
@@ -1,133 +1,295 @@
[ [
{ {
"criteria": "Социальная значимость", "criteria": "I. Социальная значимость",
"indicators": [ "indicators": [
{ {
"name": "Количество пользователей объекта КИИ, которым может быть причинён ущерб", "num": "1",
"scale": { "name": "Причинение ущерба жизни и здоровью людей (человек)",
"4": "более 5 млн человек", "values": {
"3": "от 1 до 5 млн человек", "III": "более или равно 1, но менее или равно 50",
"2": "от 100 тыс. до 1 млн человек", "II": "более 50, но менее или равно 500",
"1": "менее 100 тыс. человек" "I": "более 500"
} }
}, },
{ {
"name": "Доля пользователей объекта КИИ, которым может быть причинён ущерб, от общего числа пользователей", "num": "2а",
"scale": { "name": "Прекращение или нарушение функционирования объектов обеспечения жизнедеятельности населения, оцениваемые на территории, на которой возможно нарушение обеспечения жизнедеятельности населения",
"4": "более 20%", "values": {
"3": "от 10% до 20%", "III": "в пределах территории одного муниципального образования (численностью от 2 тыс. чел.) или одной внутригородской территории города федерального значения",
"2": "от 5% до 10%", "II": "выход за пределы территории одного муниципального образования (численностью от 2 тыс. чел.) или одной внутригородской территории города федерального значения, но не за пределы территории одного субъекта Российской Федерации или территории города федерального значения",
"1": "менее 5%" "I": "выход за пределы территории одного субъекта Российской Федерации или территории города федерального значения"
} }
}, },
{ {
"name": "Продолжительность нарушения безопасности объекта КИИ, которое может привести к причинению ущерба", "num": "2б",
"scale": { "name": "Прекращение или нарушение функционирования объектов обеспечения жизнедеятельности населения, оцениваемые по количеству людей, условия жизнедеятельности которых могут быть нарушены (тыс. человек)",
"4": "более 72 часов", "values": {
"3": "от 24 до 72 часов", "III": "более или равно 2, но менее 1 000",
"2": "от 1 до 24 часов", "II": "более или равно 1 000, но менее 5 000",
"1": "менее 1 часа" "I": "более или равно 5 000"
}
},
{
"num": "3а",
"name": "Прекращение или нарушение функционирования объектов транспортной инфраструктуры, организаций, осуществляющих деятельность в области грузовых и пассажирских перевозок, транспортных средств, в том числе высокоавтоматизированных транспортных средств, оцениваемые на территории, на которой возможно нарушение транспортного сообщения или предоставления транспортных услуг (пассажирских и грузовых перевозок)",
"values": {
"III": "в пределах территории одного муниципального образования (численностью от 2 тыс. человек) или одной внутригородской территории города федерального значения",
"II": "выход за пределы территории одного муниципального образования (численностью от 2 тыс. человек) или одной внутригородской территории города федерального значения, но не за пределы территории одного субъекта Российской Федерации или территории города федерального значения",
"I": "выход за пределы территории одного субъекта Российской Федерации или территории города федерального значения"
}
},
{
"num": "3б",
"name": "Прекращение или нарушение функционирования объектов транспортной инфраструктуры, оцениваемые по количеству людей, для которых могут быть недоступны транспортные услуги (тыс. человек)",
"values": {
"III": "более или равно 2, но менее 1000",
"II": "более или равно 1000, но менее 5000",
"I": "более или равно 5000"
}
},
{
"num": "3в",
"name": "Прекращение или нарушение функционирования объектов транспортной инфраструктуры, оцениваемые по типам нарушенных перевозок и грузов",
"values": {
"III": "мультимодальные и интермодальные перевозки",
"II": "перевозка, погрузка, разгрузка, хранение опасных грузов, на перевозку которых требуется специальное разрешение, и (или) грузов повышенной опасности в пределах территории одного субъекта Российской Федерации",
"I": "перевозка, погрузка, разгрузка, хранение опасных грузов, на перевозку которых требуется специальное разрешение, и (или) грузов повышенной опасности в пределах территорий 2 и более субъектов Российской Федерации"
}
},
{
"num": "3г",
"name": "Прекращение или нарушение функционирования объектов транспортной инфраструктуры, оцениваемые по категорированию объектов транспортной инфраструктуры",
"values": {
"III": "объект транспортной инфраструктуры 3-й или 4-й категории",
"II": "объект транспортной инфраструктуры 2-й категории",
"I": "объект транспортной инфраструктуры 1-й категории"
}
},
{
"num": "4а",
"name": "Прекращение или нарушение функционирования сети связи, оцениваемые по количеству абонентов, для которых могут быть недоступны услуги связи (тыс. человек)",
"values": {
"III": "более или равно 3, но менее 1 000",
"II": "более или равно 1 000, но менее 5 000",
"I": "более или равно 5 000"
}
},
{
"num": "4б",
"name": "Прекращение или нарушение функционирования сети связи, оцениваемые по уровню органа государственной власти (количеству органов) или организации, для которых могут быть нарушены или недоступны услуги связи",
"values": {
"III": "орган государственной власти субъекта Российской Федерации",
"II": "федеральный орган государственной власти, государственная корпорация, Центральный банк Российской Федерации, 2 и более органа государственной власти субъекта Российской Федерации",
"I": "Администрация Президента Российской Федерации, Правительство Российской Федерации, Федеральное Собрание Российской Федерации, Совет Безопасности Российской Федерации, Верховный Суд Российской Федерации, Конституционный Суд Российской Федерации, 2 и более федеральных органа государственной власти"
}
},
{
"num": "5а",
"name": "Отсутствие доступа к государственной услуге, оцениваемое в максимальном допустимом времени, в течение которого государственная услуга может быть недоступна для получателей такой услуги (часов)",
"values": {
"III": "менее или равно 24, но более 12",
"II": "менее или равно 12, но более 6",
"I": "менее или равно 6"
}
},
{
"num": "5б",
"name": "Отсутствие доступа к государственной услуге, оцениваемое во времени с момента приема запроса о предоставлении государственной услуги органом, предоставляющим государственную услугу, или подведомственной государственному органу организацией, участвующей в предоставлении государственной услуги, в течение которого государственная услуга не может быть оказана (в процентах от времени предоставления услуги, предусмотренного административным регламентом)",
"values": {
"III": "менее или равно 30",
"II": "более 30, но менее или равно 70",
"I": "более 70"
} }
} }
] ]
}, },
{ {
"criteria": "Политическая значимость", "criteria": "II. Политическая значимость",
"indicators": [ "indicators": [
{ {
"name": "Значимость объекта КИИ для обеспечения обороноспособности страны, безопасности государства и правопорядка", "num": "6",
"scale": { "name": "Прекращение или нарушение функционирования государственного органа или организации, созданной на основании федерального закона, в части невыполнения возложенной на них функции (полномочия)",
"4": "критическая значимость", "values": {
"3": "высокая значимость", "III": "прекращение или нарушение функционирования органа государственной власти субъекта Российской Федерации",
"2": "средняя значимость", "II": "прекращение или нарушение функционирования федерального органа государственной власти, государственной корпорации, Центрального банка Российской Федерации, 2 и более органов государственной власти субъекта Российской Федерации",
"1": "низкая значимость" "I": "прекращение или нарушение функционирования Администрации Президента Российской Федерации, Правительства Российской Федерации, Федерального Собрания Российской Федерации, Совета Безопасности Российской Федерации, Верховного Суда Российской Федерации, Конституционного Суда Российской Федерации, 2 и более федеральных органов государственной власти"
} }
}, },
{ {
"name": "Международная значимость объекта КИИ (используется при реализации международных договоров и соглашений)", "num": "7",
"scale": { "name": "Нарушение условий международного договора Российской Федерации, срыв переговоров или подписания планируемого к заключению международного договора Российской Федерации, оцениваемые по уровню международного договора Российской Федерации",
"4": "международное значение", "values": {
"3": "федеральное значение", "III": "нарушение условий договора межведомственного характера (срыв переговоров или подписания)",
"2": "региональное значение", "II": "нарушение условий межправительственного договора (срыв переговоров или подписания)",
"1": "местное значение" "I": "нарушение условий межгосударственного договора (срыв переговоров или подписания)"
} }
} }
] ]
}, },
{ {
"criteria": "Экономическая значимость", "criteria": "III. Экономическая значимость",
"indicators": [ "indicators": [
{ {
"name": "Размер возможного прямого ущерба в результате нарушения безопасности объекта КИИ", "num": "8",
"scale": { "name": "Возникновение ущерба субъекту критической информационной инфраструктуры, который является государственной корпорацией, государственным унитарным предприятием, государственной компанией, организацией оборонно-промышленного комплекса, стратегическим акционерным обществом, стратегическим предприятием, оцениваемого в снижении уровня дохода (с учетом налога на добавленную стоимость, акцизов и иных обязательных платежей) по всем видам деятельности (процентов от годового объема доходов, усредненного за прошедший пятилетний период)",
"4": "более 5 млрд рублей", "values": {
"3": "от 1 до 5 млрд рублей", "III": "более или равно 1, но менее или равно 10",
"2": "от 100 млн до 1 млрд рублей", "II": "более 10, но менее или равно 20",
"1": "менее 100 млн рублей" "I": "более 20"
} }
}, },
{ {
"name": "Размер возможного косвенного ущерба (упущенная выгода, затраты на восстановление)", "num": "9",
"scale": { "name": "Возникновение ущерба бюджету Российской Федерации, оцениваемого в снижении выплат (отчислений) в бюджет, осуществляемых субъектом критической информационной инфраструктуры (процентов прогнозируемого годового дохода федерального бюджета, усредненного за планируемый 3-летний период)",
"4": "более 10 млрд рублей", "values": {
"3": "от 1 до 10 млрд рублей", "III": "более 0,0003, но менее или равно 0,0006",
"2": "от 100 млн до 1 млрд рублей", "II": "более 0,0006, но менее или равно 0,001",
"1": "менее 100 млн рублей" "I": "более 0,001"
} }
}, },
{ {
"name": "Влияние нарушения безопасности объекта КИИ на экономическую безопасность государства", "num": "10",
"scale": { "name": "Прекращение или нарушение проведения клиентами операций по осуществлению перевода денежных средств, осуществляемых субъектом критической информационной инфраструктуры, являющимся в соответствии с законодательством Российской Федерации оператором платформы цифрового рубля, системно значимой кредитной организацией, кредитной организацией, выполняющей функции оператора услуг платежной инфраструктуры системно и социально значимых платежных систем, кредитной организацией, значимой на рынке платежных услуг, оператором услуг платежной инфраструктуры, оказывающим услуги платежной инфраструктуры в рамках системно значимых платежных систем, оцениваемые среднедневным (по отношению к числу календарных дней в году) количеством осуществляемых операций (млн. единиц) (расчет осуществляется по итогам года, а для создаваемых объектов — на основе прогнозных значений)",
"4": "критическое влияние", "values": {
"3": "высокое влияние", "III": "менее или равно 70",
"2": "среднее влияние", "II": "более 70, но менее или равно 120",
"1": "низкое влияние" "I": "более 120"
}
},
{
"num": "10.1",
"name": "Прекращение или нарушение проведения операций по исполнению обязательств, осуществляемых субъектом критической информационной инфраструктуры, являющимся центральным контрагентом, среднедневной размер обязательств которого по передаче денежных средств в валюте Российской Федерации по итогам клиринга за последние 12 месяцев (трлн. рублей)",
"values": {
"III": "менее 1",
"II": "более или равно 1, но менее 10",
"I": "более или равно 10"
}
},
{
"num": "10.2",
"name": "Прекращение или нарушение проведения учетно-расчетных операций, осуществляемых субъектом критической информационной инфраструктуры, являющимся центральным депозитарием и регистратором финансовых транзакций, среднедневное количество ценных бумаг (ISIN) российских эмитентов, которые учитывались на счетах в центральном депозитарии (оцениваемые за последние 12 месяцев в тыс. штук)",
"values": {
"III": "менее 10",
"II": "более или равно 10, но менее 25",
"I": "более или равно 25"
}
},
{
"num": "10.3",
"name": "Прекращение или нарушение проведения операций по выплатам, передаче и размещению денежных средств, осуществляемых субъектом критической информационной инфраструктуры, являющимся негосударственным пенсионным фондом, которые оцениваются объемом активов (суммой пенсионных накоплений и пенсионных резервов) негосударственного пенсионного фонда (млрд. рублей)",
"values": {
"III": "более или равно 50, но менее 1000",
"II": "более или равно 1000, но менее 2000",
"I": "более или равно 2000"
}
},
{
"num": "10.4",
"name": "Прекращение или нарушение проведения операций по выплатам, перестрахованию, инвестициям, осуществляемых субъектом критической информационной инфраструктуры, являющимся страховой организацией, которые оцениваются объемом активов страховой организации (млрд. рублей)",
"values": {
"III": "более или равно 100, но менее 1500",
"II": "более или равно 1500, но менее 5000",
"I": "более или равно 5000"
}
},
{
"num": "10.5",
"name": "Прекращение или нарушение выполнения функций по переводу денежных средств, осуществляемых субъектом критической информационной инфраструктуры, являющимся оператором услуг информационного обмена (некредитной организацией), который оценивается количеством заключенных договоров с кредитными организациями",
"values": {
"III": "более или равно 25, но менее 100",
"II": "более или равно 100, но менее 150",
"I": "более или равно 150"
}
},
{
"num": "10.6",
"name": "Прекращение или нарушение выполнения деятельности по предоставлению потребительских займов субъектом критической информационной инфраструктуры, являющимся микрофинансовой компанией, которые оцениваются суммой микрозаймов, выданных за годовой отчетный период (млрд. рублей)",
"values": {
"III": "более или равно 100, но менее 1000",
"II": "более или равно 1000, но менее 5000",
"I": "более или равно 5000"
}
},
{
"num": "10.7",
"name": "Прекращение или нарушение предоставления пользователям кредитных историй и субъектам кредитных историй услуг, предусмотренных Федеральным законом «О кредитных историях», субъектом критической информационной инфраструктуры, являющимся бюро кредитных историй, которые оцениваются количеством кредитных историй, хранящихся в бюро кредитных историй (млн. единиц)",
"values": {
"III": "более или равно 30, но менее 200",
"II": "более или равно 200, но менее 500",
"I": "более или равно 500"
} }
} }
] ]
}, },
{ {
"criteria": "Экологическая значимость", "criteria": "IV. Экологическая значимость",
"indicators": [ "indicators": [
{ {
"name": "Площадь территории, на которой может быть оказано негативное воздействие на окружающую среду", "num": "11а",
"scale": { "name": "Вредные воздействия на окружающую среду, оцениваемые на территории, на которой окружающая среда может подвергнуться вредным воздействиям",
"4": "более 1000 кв. км", "values": {
"3": "от 100 до 1000 кв. км", "III": "в пределах территории одного муниципального образования (численностью от 2 тыс. чел.) или одной внутригородской территории города федерального значения, с выходом вредных воздействий за пределы территории субъекта критической информационной инфраструктуры",
"2": "от 10 до 100 кв. км", "II": "выход за пределы территории одного муниципального образования (численностью от 2 тыс. чел.) или одной внутригородской территории города федерального значения, но не за пределы территории одного субъекта Российской Федерации или территории города федерального значения, с выходом вредных воздействий за пределы территории субъекта критической информационной инфраструктуры",
"1": "менее 10 кв. км" "I": "выход за пределы территории одного субъекта Российской Федерации или территории города федерального значения, с выходом вредных воздействий за пределы территории субъекта критической информационной инфраструктуры"
} }
}, },
{ {
"name": "Возможность нанесения ущерба объектам животного и растительного мира, водным объектам", "num": "11б",
"scale": { "name": "Вредные воздействия на окружающую среду, оцениваемые по количеству людей, которые могут быть подвержены вредным воздействиям (тыс. человек)",
"4": "необратимый ущерб экосистемам", "values": {
"3": "значительный ущерб", "III": "более или равно 2, но менее 1 000",
"2": "умеренный ущерб", "II": "более или равно 1 000, но менее 5 000",
"1": "незначительный ущерб" "I": "более или равно 5 000"
} }
} }
] ]
}, },
{ {
"criteria": "Значимость для обороны страны, безопасности государства и правопорядка", "criteria": "V. Значимость для обеспечения обороны страны, безопасности государства и правопорядка",
"indicators": [ "indicators": [
{ {
"name": "Влияние нарушения безопасности объекта КИИ на обороноспособность страны", "num": "12",
"scale": { "name": "Прекращение или нарушение функционирования (невыполнение установленных показателей) пункта управления (ситуационного центра), оцениваемое в уровне (значимости) пункта управления или ситуационного центра",
"4": "критическое влияние", "values": {
"3": "высокое влияние", "III": "прекращение или нарушение функционирования пункта управления или ситуационного центра органа государственной власти субъекта Российской Федерации или города федерального значения",
"2": "среднее влияние", "II": "прекращение или нарушение функционирования пункта управления или ситуационного центра федерального органа государственной власти или государственной корпорации",
"1": "низкое влияние" "I": "прекращение или нарушение функционирования пункта управления государством или ситуационного центра Администрации Президента Российской Федерации, Правительства Российской Федерации, Федерального Собрания Российской Федерации, Совета Безопасности Российской Федерации, Верховного Суда Российской Федерации, Конституционного Суда Российской Федерации"
} }
}, },
{ {
"name": "Влияние нарушения безопасности объекта КИИ на безопасность государства и правопорядок", "num": "13а",
"scale": { "name": "Снижение показателей государственного оборонного заказа, выполняемого (обеспечиваемого) субъектом критической информационной инфраструктуры, оцениваемое в снижении объемов продукции (работ, услуг) в заданный период времени (процентов заданного объема продукции)",
"4": "критическое влияние", "values": {
"3": "высокое влияние", "III": "более 0, но менее или равно 10",
"2": "среднее влияние", "II": "более 10, но менее или равно 15",
"1": "низкое влияние" "I": "более 15"
}
},
{
"num": "13б",
"name": "Снижение показателей государственного оборонного заказа, выполняемого (обеспечиваемого) субъектом критической информационной инфраструктуры, оцениваемое в увеличении времени изготовления единицы продукции с заданным объемом (процентов установленного времени на изготовление единицы продукции)",
"values": {
"III": "более 0, но менее или равно 10",
"II": "более 10, но менее или равно 40",
"I": "более 40"
}
},
{
"num": "13.1",
"name": "Снижение показателей государственного оборонного заказа, выполняемого (обеспечиваемого) субъектом критической информационной инфраструктуры, оцениваемое по его статусу в кооперации головного исполнителя поставок продукции по государственному оборонному заказу",
"values": {
"III": "соисполнитель, субподрядчик или поставщик части продукции, работ и услуг в рамках контракта по государственному оборонному заказу совместно с исполнителем, заключившим контракт с головным исполнителем государственного оборонного заказа",
"II": "исполнитель контракта по государственному оборонному заказу, заключивший контракт с головным исполнителем государственного оборонного заказа",
"I": "головной исполнитель поставок продукции, работ и услуг по государственному оборонному заказу"
}
},
{
"num": "14",
"name": "Прекращение или нарушение функционирования (невыполнение установленных показателей) информационной системы в области обеспечения обороны страны, безопасности государства и правопорядка, оцениваемое в максимально допустимом времени, в течение которого информационная система может быть недоступна пользователю (часов)",
"values": {
"III": "менее или равно 4, но более 2",
"II": "менее или равно 2, но более 1",
"I": "менее или равно 1"
} }
} }
] ]
+83 -57
View File
@@ -1746,12 +1746,16 @@ class DokoGenApp:
self.users_listbox.insert(tk.END, user) self.users_listbox.insert(tk.END, user)
def _open_criteria_127_dialog(self): def _open_criteria_127_dialog(self):
"""Окно заполнения показателей критериев значимости по таблице ПП РФ № 127. """Окно заполнения показателей критериев значимости по ПП РФ № 127.
Показатели и обоснование объединены в одном окне: Таблица перенесена дословно из Постановления Правительства РФ от 08.02.2019 № 127:
для каждого показателя выбирается значение (1-4), внизу — общее обоснование. 5 критериев (социальная, политическая, экономическая, экологическая,
По максимальному баллу автоматически рассчитывается категория значимости: значимость для обороны страны), показатели 1-14 с подпунктами,
4 → 1-я, 3 → 2-я, 2 → 3-я, иначе «без категории». значения сразу привязаны к категориям III / II / I.
Категория значимости объекта определяется по наибольшей категории,
которой соответствует хотя бы один выбранный показатель:
I → 1-я категория, II → 2-я, III → 3-я, иначе «без категории».
""" """
import json as _json import json as _json
dict_path = os.path.join(os.path.dirname(__file__), 'dictionaries', 'criteria_127.json') dict_path = os.path.join(os.path.dirname(__file__), 'dictionaries', 'criteria_127.json')
@@ -1764,7 +1768,7 @@ class DokoGenApp:
dialog = tk.Toplevel(self.root) dialog = tk.Toplevel(self.root)
dialog.title("Показатели критериев значимости (ПП РФ № 127)") dialog.title("Показатели критериев значимости (ПП РФ № 127)")
dialog.geometry("860x640") dialog.geometry("980x700")
dialog.transient(self.root) dialog.transient(self.root)
dialog.grab_set() dialog.grab_set()
@@ -1780,39 +1784,46 @@ class DokoGenApp:
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y) scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
ttk.Label(body, text="Показатели критериев значимости объекта КИИ (ПП РФ № 127)", ttk.Label(body, text="Показатели критериев значимости объекта КИИ",
font=('Arial', 10, 'bold')).pack(anchor=tk.W, pady=(0, 4)) font=('Arial', 11, 'bold')).pack(anchor=tk.W, pady=(0, 2))
ttk.Label(body, text="По каждому показателю выберите значение от 1 до 4 " ttk.Label(body, text="Постановление Правительства РФ от 08.02.2019 № 127 «Об утверждении Правил категорирования "
"(4 — максимальная значимость). Категория рассчитывается автоматически.", "объектов критической информационной инфраструктуры РФ» (приложение). "
foreground='gray', wraplength=780).pack(anchor=tk.W, pady=(0, 8)) "По каждому показателю выберите значение, которому соответствует объект. "
"Категория определяется по наивысшей из выбранных.",
foreground='gray', wraplength=920, justify=tk.LEFT).pack(anchor=tk.W, pady=(0, 8))
# Текущие значения из listbox (чтобы предзаполнить, если уже заполнено) rows = [] # (num, name, values{III:..,II:..,I:..}, var)
cur_values = set()
if hasattr(self, 'is_criteria_values_listbox'):
for i in range(self.is_criteria_values_listbox.size()):
cur_values.add(str(self.is_criteria_values_listbox.get(i)))
rows = [] # (критерий, показатель, scale, var)
for crit in criteria: for crit in criteria:
grp = ttk.LabelFrame(body, text=crit.get('criteria', ''), padding=6) grp = ttk.LabelFrame(body, text=crit.get('criteria', ''), padding=6)
grp.pack(fill=tk.X, pady=4) grp.pack(fill=tk.X, pady=4)
for ind in crit.get('indicators', []): for ind in crit.get('indicators', []):
num = ind.get('num', '')
name = ind.get('name', '') name = ind.get('name', '')
scale = ind.get('scale', {}) values = ind.get('values', {})
row = ttk.Frame(grp) row = ttk.Frame(grp)
row.pack(fill=tk.X, pady=2) row.pack(fill=tk.X, pady=2)
ttk.Label(row, text=name, wraplength=520, justify=tk.LEFT).pack(side=tk.LEFT) # Номер показателя
ttk.Label(row, text=num, width=4, font=('Arial', 9, 'bold')).pack(side=tk.LEFT)
# Текст показателя
ttk.Label(row, text=name, wraplength=640, justify=tk.LEFT).pack(side=tk.LEFT)
# Выбор значения (категория)
var = tk.StringVar(value='') var = tk.StringVar(value='')
combo = ttk.Combobox(row, textvariable=var, state='readonly', width=6, options = ['']
values=['', '1', '2', '3', '4']) for cat in ('III', 'II', 'I'):
v = values.get(cat, '')
if v:
options.append(f"{cat} категория: {v}")
combo = ttk.Combobox(row, textvariable=var, state='readonly', width=34,
values=options)
combo.pack(side=tk.RIGHT, padx=6) combo.pack(side=tk.RIGHT, padx=6)
rows.append((crit.get('criteria', ''), name, scale, var)) rows.append((num, name, values, var))
# Обоснование
ttk.Label(body, text="Обоснование полученных значений:", font=('Arial', 9, 'bold')).pack( ttk.Label(body, text="Обоснование полученных значений:", font=('Arial', 9, 'bold')).pack(
anchor=tk.W, pady=(10, 2)) anchor=tk.W, pady=(10, 2))
justify_txt = tk.Text(body, width=90, height=5, wrap=tk.WORD) justify_txt = tk.Text(body, width=110, height=5, wrap=tk.WORD)
justify_txt.pack(fill=tk.X, pady=(0, 6)) justify_txt.pack(fill=tk.X, pady=(0, 6))
# предзаполнить обоснование из listbox, если есть
if hasattr(self, 'is_criteria_justification_listbox') and self.is_criteria_justification_listbox.size(): if hasattr(self, 'is_criteria_justification_listbox') and self.is_criteria_justification_listbox.size():
justify_txt.insert('1.0', '\n'.join( justify_txt.insert('1.0', '\n'.join(
self.is_criteria_justification_listbox.get(i) self.is_criteria_justification_listbox.get(i)
@@ -1821,52 +1832,67 @@ class DokoGenApp:
result_lbl = ttk.Label(body, text="Категория значимости: —", font=('Arial', 10, 'bold')) result_lbl = ttk.Label(body, text="Категория значимости: —", font=('Arial', 10, 'bold'))
result_lbl.pack(anchor=tk.W, pady=(6, 0)) result_lbl.pack(anchor=tk.W, pady=(6, 0))
def _selected():
"""Список выбранных: [(num, name, категория, значение)]."""
out = []
for num, name, values, var in rows:
s = var.get().strip()
if not s:
continue
cat = s.split(' ')[0] # III/II/I
val = s.split(': ', 1)[1] if ': ' in s else ''
out.append((num, name, cat, val))
return out
def _calc_category(selected):
"""Категория по наивысшей из выбранных."""
cats = [c for _, _, c, _ in selected]
if 'I' in cats:
return '1'
if 'II' in cats:
return '2'
if 'III' in cats:
return '3'
return 'без категории'
def _calc(): def _calc():
vals = [] selected = _selected()
for crit_name, ind_name, scale, var in rows: if not selected:
v = var.get().strip()
if v:
desc = scale.get(v, '')
vals.append(f"{crit_name}: {ind_name}{v}" + (f" ({desc})" if desc else ""))
if vals:
self.is_criteria_values_listbox.delete(0, tk.END)
for line in vals:
self.is_criteria_values_listbox.insert(tk.END, line)
# Категория по максимальному баллу
nums = [int(var.get()) for _, _, _, var in rows if var.get().strip().isdigit()]
if nums:
mx = max(nums)
cat = {4: '1', 3: '2', 2: '3'}.get(mx, 'без категории')
result_lbl.config(text=f"Категория значимости: {cat} (макс. балл {mx})")
else:
result_lbl.config(text="Категория значимости: — (ничего не выбрано)") result_lbl.config(text="Категория значимости: — (ничего не выбрано)")
return
cat = _calc_category(selected)
result_lbl.config(text=f"Категория значимости: {cat} (выбрано показателей: {len(selected)})")
def _save(): def _save():
vals = [] selected = _selected()
for crit_name, ind_name, scale, var in rows: # Заполняем список показателей
v = var.get().strip() lines = []
if v: for num, name, cat, val in selected:
desc = scale.get(v, '') lines.append(f"Показатель {num}. {name}{cat} категория: {val}")
vals.append(f"{crit_name}: {ind_name}{v}" + (f" ({desc})" if desc else ""))
if hasattr(self, 'is_criteria_values_listbox'): if hasattr(self, 'is_criteria_values_listbox'):
self.is_criteria_values_listbox.delete(0, tk.END) self.is_criteria_values_listbox.delete(0, tk.END)
for line in vals: for line in lines:
self.is_criteria_values_listbox.insert(tk.END, line) self.is_criteria_values_listbox.insert(tk.END, line)
# Обоснование # Категория значимости
cat = _calc_category(selected)
if hasattr(self, 'is_category_var'):
self.is_category_var.set(cat)
# Обоснование: если поле пустое — сформируем автоматически
j = justify_txt.get('1.0', 'end-1c').strip() j = justify_txt.get('1.0', 'end-1c').strip()
auto_just = (
f"Категория значимости объекта КИИ определена в соответствии с Правилами категорирования "
f"объектов критической информационной инфраструктуры РФ (ПП РФ от 08.02.2019 № 127). "
f"Объект отнесён к {cat} категории значимости. Основания: "
+ "; ".join(f"показатель {num} ({cat} категория)" for num, _, cat, _ in selected) + "."
)
if not j:
j = auto_just
if hasattr(self, 'is_criteria_justification_listbox'): if hasattr(self, 'is_criteria_justification_listbox'):
self.is_criteria_justification_listbox.delete(0, tk.END) self.is_criteria_justification_listbox.delete(0, tk.END)
for line in j.split('\n'): for line in j.split('\n'):
if line.strip(): if line.strip():
self.is_criteria_justification_listbox.insert(tk.END, line.strip()) self.is_criteria_justification_listbox.insert(tk.END, line.strip())
# Категория → в поле категории объекта self.log(f"📋 Критерии значимости (ПП 127) сохранены: категория {cat}, показателей: {len(selected)}")
nums = [int(var.get()) for _, _, _, var in rows if var.get().strip().isdigit()]
if nums:
mx = max(nums)
cat = {4: '1', 3: '2', 2: '3'}.get(mx, 'без категории')
if hasattr(self, 'is_category_var'):
self.is_category_var.set(cat)
self.log(f"📋 Показатели критериев значимости сохранены ({len(vals)} шт.)")
dialog.destroy() dialog.destroy()
btn_frame = ttk.Frame(body) btn_frame = ttk.Frame(body)