{"text_format":"3","workbook":"xlsx","n_sheets":2,"sheets":["Критерии оценки","Перечень профессиональных задач"],"read":"whole","date_system":"1900"}

{"sheet":"Критерии оценки","index":0,"n_rows":76,"n_cols":9,"rows_kept":76,"merged":[[5,1,5,7],[24,1,24,7],[41,1,41,7],[58,1,58,7],[78,2,78,6]]}
[]
[null,"Мероприятие",null,"Региональный этап чемпионата высоких технологий"]
[null,"Наименование компетенции",null,"Конструктивная информационная безопасность автономных транспортных систем"]
[]
["Код","Субкритерий","Тип аспекта","Аспект","Судейский балл","Методика проверки аспекта","Требование или номинальный размер","Проф. задача","Макс. балл"]
["А","Кибериммунная архитектура",{"$nulls":6},{"$f":"SUM(I8:I24)","v":{"v":29,"d":"29.00"}}]
[1,"Реализация конструктивно безопасной архитектуры"]
[null,null,"И","Сформулированы цели безопасности (ЦБ)",null,"Файл ноутбука содержит не менее 2 ЦБ в текстовом виде. ЦБ чётко описывают регламент работы системы в частных ситуациях (прим. «В любых обстоятельствах светофор не пропускает одновременно людей и автотранспорт»)",null,2,{"v":2,"d":"2.00"}]
[null,null,"И","Формулировки ЦБ соответствуют ГОСТ Р 72118-2025",null,"Каждая ЦБ содержит: субъект, действие, объект. Отсутствует бытовой язык. Нет пустых формулировок (прим. «система должна быть безопасной»)",null,2,{"v":2,"d":"2.00"}]
[null,null,"И","Сформулированы предположения безопасности (ПБ)",null,"Файл содержит не менее 2 ПБ. ПБ описывают условия среды и доверенные компоненты (монитор входит в ДКБ)",null,2,{"v":1.5,"d":"1.50"}]
[null,null,"И","Файлы с кодом запускаемы",null,"При запуске ячеек ноутбука не возникает ошибок синтаксиса и импорта. Все ячейки выполняются без исключений",null,1,{"v":1.5,"d":"1.50"}]
[null,null,"И","Класс Event реализован с полями source, destination, operation",null,"Класс содержит атрибуты source, destination, operation. Задаются при инициализации или через __init__",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","Класс Event содержит поля params и timestamp",null,"Класс содержит атрибуты params и timestamp. timestamp заполняется автоматически (datetime.now)",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","Константа ALLOWED_STATES определена и содержит не менее 4 состояний",null,"В коде присутствует ALLOWED_STATES (list или tuple) с минимум 4 словарями/кортежами состояний. Состояния не дублируются",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","ALLOWED_STATES не включает запрещённые состояния (оба направления зелёные)",null,"Проверить вручную: ни в одном словаре ALLOWED_STATES не выполняется car_green == True AND ped_green == True",null,3,{"v":1.5,"d":"1.50"}]
[null,null,"И","Класс Monitor реализован с методами add_policy и _check_policies",null,"Класс содержит оба метода. add_policy принимает callable-политику. _check_policies вызывает все зарегистрированные политики",null,4,{"v":1.5,"d":"1.50"}]
[null,null,"И","Класс Monitor реализован с методами run и stop",null,"Класс содержит методы run и stop. run запускает цикл обработки очереди. stop корректно завершает цикл",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Класс ControlSystem реализован с методом request_state_change",null,"Класс содержит метод request_state_change. Метод создаёт объект Event и помещает его в очередь монитора (не напрямую в LightsGPIO)",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","Класс LightsGPIO реализован с методами set_state и run",null,"Класс содержит оба метода. set_state изменяет состояние GPIO. run запускает поток обработки команд на исполнение",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","Все юнит-тесты модуля А проходят успешно",null,"Запустить тестовые ячейки ноутбука. Все assert-проверки выполняются без исключений. Отчёт не содержит FAILED",null,5,{"v":0.5,"d":"0.50"}]
[null,null,"И","Архитектурная диаграмма соответствует политике разрешённых взаимодействий",null,"В ноутбуке присутствует диаграмма (текстовая или графическая) потоков событий. Направления стрелок соответствуют реализации: ControlSystem → Monitor → LightsGPIO. Прямой вызов LightsGPIO из ControlSystem отсутствует",null,3,{"v":2,"d":"2.00"}]
[null,null,"И","Класс Monitor реализован как единственная точка контроля событий",null,"Проверить код: LightsGPIO не вызывается напрямую ни из ControlSystem, ни из CitySystemConnector. Все команды на изменение состояния проходят через очередь Monitor",null,3,{"v":2,"d":"2.00"}]
[null,null,"И","Конкурсант  поддерживает порядок на рабочем месте",null,"На рабочем столе отсутствуют мусор и предметы кроме разрешённых в КЗ, вещи лежат аккуратно",null,6,1.25]
[null,null,"И","Наименьшее количество строк кода",null,"1) Код конкурсанта работает, все задания модуля выполнены\n2) Код конкурсанта содержит наименьшее количество строк по сравнению с работами других конкурсантов\n3) В случае, если наименьшая длина кода нескольких конкурсантов совпадает, балл присуждается всем этим конкурсантам",null,7,1.25]
["Б","Монитор безопасности",{"$nulls":6},{"$f":"SUM(I26:I41)","v":{"v":26,"d":"26.00"}}]
[1,"Создание политик безопасности"]
[null,null,"И","Файлы с кодом запускаемы",null,"При запуске ячеек ноутбука не возникает ошибок. Код политик импортируется корректно",null,1,{"v":1.5,"d":"1.50"}]
[null,null,"И","Политика monitor_policy (Б.1) реализована — проверка whitelist",null,"В мониторе зарегистрирована политика, проверяющая event.params против ALLOWED_STATES. Событие с запрещённым состоянием отклоняется",null,2,{"v":1.5,"d":"1.50"}]
[null,null,"И","Политика Б.1 возвращает False при запрещённом состоянии",null,"Тест: отправить Event с запрещённым состоянием (например car_green=True, ped_green=True). Монитор не передаёт команду в LightsGPIO",null,4,{"v":1.5,"d":"1.50"}]
[null,null,"И","Тесты Б.1 проходят успешно",null,"Запустить тестовые ячейки Б.1. Все результаты PASSED. Тест с допустимым состоянием — ОК, с запрещённым — BLOCKED",null,5,{"v":1.5,"d":"1.50"}]
[null,null,"И","Политика Б.2 — логирование нарушений реализована",null,"Журнал нарушений ведётся (список, файл или принт с пометкой). При отклонении события запись добавляется",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Запись в журнале содержит поле timestamp",null,"Каждая запись журнала нарушения содержит время события (timestamp из Event или текущее время)",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Запись в журнале содержит поля source и operation",null,"Каждая запись содержит source (откуда пришла команда) и operation (что запрашивалось). Проверяется распечаткой журнала",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Тесты Б.2 проходят успешно",null,"Запустить тестовые ячейки Б.2. После отправки нарушающего события журнал не пустой. Содержимое записи содержит ожидаемые поля",null,5,{"v":2,"d":"2.00"}]
[null,null,"И","Политика Б.3 — rate limiting реализована",null,"Код содержит счётчик или очередь событий по времени. При превышении лимита монитор блокирует дальнейшие события",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Лимит rate limiting не более 5 событий в секунду",null,"В коде параметр лимита указан явно (константа ≤ 5). Не требуется точно 5 — допустимо более строгое значение",null,3,{"v":1.5,"d":"1.50"}]
[null,null,"И","Порог блокировки: при ≥14 событиях из 20 источник блокируется",null,"Логика блокировки: при N из 20 последних событий от одного источника (N ≥ 14) источник блокируется или события отклоняются",null,3,{"v":2,"d":"2.00"}]
[null,null,"И","Тесты Б.3 проходят успешно",null,"Запустить тестовые ячейки Б.3. Быстрые события (>5/сек) вызывают отклонение. Отчёт PASSED. Медленные события (≤5/сек) — не блокируются",null,5,{"v":2,"d":"2.00"}]
[null,null,"И","Все тесты модуля Б проходят в совокупности",null,"Запустить все тестовые ячейки ноутбука подряд. Ни одна ячейка не вызывает исключение. Итоговый отчёт без FAILED",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","Конкурсант  поддерживает порядок на рабочем месте",null,"На рабочем столе отсутствуют мусор и предметы кроме разрешённых в КЗ, вещи лежат аккуратно",null,6,1.25]
[null,null,"И","Наименьшее количество строк кода",null,"1) Код конкурсанта работает, все задания модуля выполнены\n2) Код конкурсанта содержит наименьшее количество строк по сравнению с работами других конкурсантов\n3) В случае, если наименьшая длина кода нескольких конкурсантов совпадает, балл присуждается всем этим конкурсантам",null,7,1.25]
["В","Нейтрализация киберпрепятствий",{"$nulls":6},{"$f":"SUM(I43:I58)","v":{"v":25,"d":"25.00"}}]
[1,"Симуляция и нейтрализация киберпрепятствий"]
[null,null,"И","Файлы с кодом запускаемы",null,"При запуске ячеек ноутбука не возникает ошибок. Все защитные классы импортируются без исключений",null,1,{"v":1.5,"d":"1.50"}]
[null,null,"И","ЦБ-В.1: защита от инъекции запрещённого состояния реализована (CybTL_01)",null,"Код содержит проверку params против ALLOWED_STATES. Тест CybTL_01 — атакующий не может перевести светофор в запрещённое состояние",null,4,{"v":1.5,"d":"1.50"}]
[null,null,"И","Тест CybTL_01 проходит успешно",null,"Запустить тест CybTL_01. Результат PASSED. Событие с запрещённым состоянием отклонено монитором, LightsGPIO не меняет состояние",null,5,{"v":1.5,"d":"1.50"}]
[null,null,"И","ЦБ-В.2: защита от подмены источника реализована (CybTL_02)",null,"Монитор содержит реестр доверенных источников. Событие от незарегистрированного источника отклоняется",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Тест CybTL_02 проходит успешно",null,"Запустить тест CybTL_02. Результат PASSED. Событие от «постороннего» источника отклонено. Событие от доверенного источника принято",null,5,{"v":2,"d":"2.00"}]
[null,null,"И","Реестр доверенных источников явно задан в коде",null,"В коде присутствует список/множество/словарь с доверенными именами источников (например trusted_sources = {\"ControlSystem\", \"Monitor\"})",null,3,{"v":2,"d":"2.00"}]
[null,null,"И","ЦБ-В.3: защита от DoS-флуда реализована (CybTL_03)",null,"Rate limiting реализован с отслеживанием по источнику. При флуде событий монитор блокирует источник или отклоняет избыточные события",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Тест CybTL_03 проходит успешно",null,"Запустить тест CybTL_03. Результат PASSED. Флуд от одного источника вызывает блокировку. Нормальные события от другого источника не блокируются",null,5,{"v":2,"d":"2.00"}]
[null,null,"И","ЦБ-В.4: защита от Replay-атаки реализована (CybTL_04)",null,"Монитор проверяет timestamp события. Событие старше 1 секунды относительно текущего времени отклоняется",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Порог Replay-защиты: 1 секунда",null,"В коде параметр порога задан явно (константа ≤ 1.0 сек). Не требуется точно 1 сек — допустимо более строгое значение",null,3,{"v":1.5,"d":"1.50"}]
[null,null,"И","Тест CybTL_04 проходит успешно",null,"Запустить тест CybTL_04. Результат PASSED. Повторная (устаревшая) команда отклонена. Свежая команда с актуальным timestamp принята",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","Цель безопасности В.1 не нарушена при запуске всех атак",null,"Запустить все тесты CybTL_01–04 совместно. Ни одна атака не приводит к переходу светофора в запрещённое состояние",null,2,{"v":0.5,"d":"0.50"}]
[null,null,"И","Все тесты модуля В проходят в совокупности",null,"Запустить все тестовые ячейки ноутбука подряд. Итоговый отчёт: 4 из 4 тестов PASSED. Ни одного FAILED",null,5,{"v":2,"d":"2.00"}]
[null,null,"И","Конкурсант  поддерживает порядок на рабочем месте",null,"На рабочем столе отсутствуют мусор и предметы кроме разрешённых в КЗ, вещи лежат аккуратно",null,6,1.25]
[null,null,"И","Наименьшее количество строк кода",null,"1) Код конкурсанта работает, все задания модуля выполнены\n2) Код конкурсанта содержит наименьшее количество строк по сравнению с работами других конкурсантов\n3) В случае, если наименьшая длина кода нескольких конкурсантов совпадает, балл присуждается всем этим конкурсантам",null,7,1.25]
["Г","Интеграция с внешними системами",{"$nulls":6},{"$f":"SUM(I60:I75)","v":{"v":20,"d":"20.00"}}]
[1,"Реализация кода инетграции и защиты"]
[null,null,"И","Файлы с кодом запускаемы",null,"При запуске ячеек ноутбука не возникает ошибок. Класс CitySystemConnector импортируется без исключений",null,1,{"v":1,"d":"1.00"}]
[null,null,"И","Метод get_command_from_city() реализован",null,"Метод присутствует в классе CitySystemConnector. Метод выполняется без исключений и возвращает словарь/объект с данными команды",null,1,{"v":1.5,"d":"1.50"}]
[null,null,"И","get_command_from_city() возвращает корректный формат данных",null,"Возвращаемое значение содержит ключи operation и params (или аналоги). Тип: dict. Данные не пустые при наличии ответа сервера",null,4,{"v":1,"d":"1.00"}]
[null,null,"И","Метод send_command_to_monitor() реализован",null,"Метод присутствует в классе CitySystemConnector. Метод создаёт объект Event на основе полученных данных",null,1,{"v":2,"d":"2.00"}]
[null,null,"И","send_command_to_monitor() формирует Event с флагом from_city: True",null,"В создаваемом Event параметр params содержит ключ from_city со значением True. Проверяется распечаткой Event или логами",null,4,{"v":1.5,"d":"1.50"}]
[null,null,"И","Тесты Г.1 проходят успешно",null,"Запустить тестовые ячейки Г.1. Результаты PASSED. Mock-сервер возвращает данные, метод корректно создаёт Event",null,5,{"v":1.5,"d":"1.50"}]
[null,null,"И","Политика авторизации городских команд реализована в Monitor",null,"В мониторе зарегистрирована политика, проверяющая флаги from_city и authorized в event.params",null,4,{"v":1,"d":"1.00"}]
[null,null,"И","Политика разрешает команды только с from_city=True",null,"Тест: отправить Event без флага from_city. Монитор отклоняет (возвращает False или аналог). Проверяется логами монитора",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Политика разрешает команды только с authorized=True",null,"Тест: отправить Event с from_city=True но authorized=False. Монитор отклоняет. Оба флага обязательны одновременно",null,4,{"v":2,"d":"2.00"}]
[null,null,"И","Тесты Г.2 проходят успешно",null,"Запустить тестовые ячейки Г.2. Все сценарии: ОК/ОК, ОК/НЕТ, НЕТ/ОК, НЕТ/НЕТ — дают ожидаемый результат. Отчёт PASSED",null,5,{"v":2,"d":"2.00"}]
[null,null,"И","Городская система не обходит монитор — LightsGPIO изолирован",null,"Проверить архитектуру: CitySystemConnector не вызывает LightsGPIO напрямую. Все команды идут через очередь монитора",null,3,{"v":0.5,"d":"0.50"}]
[null,null,"И","Журналирование городских команд реализовано",null,"При получении команды от городской системы в журнал добавляется запись с отметкой источника (from_city)",null,2,{"v":0.5,"d":"0.50"}]
[null,null,"И","Все тесты модуля Г проходят в совокупности",null,"Запустить все тестовые ячейки ноутбука подряд. Итоговый отчёт без FAILED. Политика авторизации и коннектор работают совместно",null,1,{"v":1,"d":"1.00"}]
[null,null,"И","Конкурсант  поддерживает порядок на рабочем месте",null,"На рабочем столе отсутствуют мусор и предметы кроме разрешённых в КЗ, вещи лежат аккуратно",null,6,1.25]
[null,null,"И","Наименьшее количество строк кода",null,"1) Код конкурсанта работает, все задания модуля выполнены\n2) Код конкурсанта содержит наименьшее количество строк по сравнению с работами других конкурсантов\n3) В случае, если наименьшая длина кода нескольких конкурсантов совпадает, балл присуждается всем этим конкурсантам",null,7,1.25]
[{"$nulls":6},"Итого:",null,{"$f":"I6+I25+I42+I59","v":{"v":100,"d":"100.00"}}]

{"sheet":"Перечень профессиональных задач","index":1,"n_rows":8,"n_cols":2,"rows_kept":8,"merged":[[0,0,0,1],[9,0,9,1]]}
["Перечень профессиональных задач"]
[1,"Запуск и работа с интегрированной системой"]
[2,"Формулировка целей безопасности интегрированной системы"]
[3,"Выделение критического функционала автоматизированной системы"]
[4,"Реализация политик монитора безопасности"]
[5,"Верификация работы систем безопасности"]
[6,"Охрана труда при эксплуатации автономных систем"]
[7,"Бережливое производство в разработке автономных систем"]