diff --git a/dokogen/variables.py b/dokogen/variables.py index b8a5bf3..ff1fcac 100644 --- a/dokogen/variables.py +++ b/dokogen/variables.py @@ -676,6 +676,7 @@ def _build_categorization_indicators(company, is_list): isys = is_list[0] if is_list else None rows = [] + first_cat_num = None # номер показателя, по которому объект отнесён к I категории (п. 6 ПП-127) for grp in criteria: section = grp.get('criteria', '') for ind in grp.get('indicators', []): @@ -688,7 +689,20 @@ def _build_categorization_indicators(company, is_list): value = '—' justification = '—' category = '—' - if not applicable: + if first_cat_num is not None: + # Остановка расчёта: объект уже отнесён к I категории по одному из показателей + # (п. 6 Правил, утв. ПП РФ № 127: «расчет по остальным показателям не проводится»). + if applicable: + value = '—' + justification = (f"Расчёт по данному показателю не проводится: объект отнесён к " + f"I категории значимости по показателю {first_cat_num} " + f"(п. 6 Правил категорирования, утв. ПП РФ № 127).") + category = '—' + else: + value = 'Показатель не применим.' + justification = (just.get(num) or just.get(grp_num) + or f"Показатель не применим к объекту КИИ организации сферы «{sphere or '—'}».") + elif not applicable: value = 'Показатель не применим.' justification = (just.get(num) or just.get(grp_num) or f"Показатель не применим к объекту КИИ организации сферы «{sphere or '—'}».") @@ -714,6 +728,10 @@ def _build_categorization_indicators(company, is_list): justification = (just.get(num) or just.get(grp_num) or 'Показатель применим к объекту КИИ; значение определяется по данным объекта.') + # Если по показателю присвоена I категория — фиксируем для остановки расчёта + if first_cat_num is None and category.startswith('I'): + first_cat_num = num + rows.append({ 'section': section, 'name': name,