Перейти к основному содержимому
megapromotingДавайте обсудим

Решения · Учреждения & администрация

Разделы, которых требует постановление правительства, записанные в коде и обновляемые сотрудником — не добавленные в конце, как приложение.

Примэрия или учреждение имеет фиксированный перечень обязательных разделов, обязанность обеспечивать прозрачность принятия решений и сотрудника, который должен опубликовать объявление без звонка программисту. Мы строим именно это, с журналом аудита, который удаляется сам по сроку, и с лимитом на попытки аутентификации.

Уже построеноDouă platforme proprii, publice și verificabile azi. Prima e site-ul oficial al unei primării de comună: Laravel 12 pe PHP 8.2 cu MySQL 8, 40 de șabloane, 32 de rute, 10 migrări, cu conținutul editorial care se schimbă rar ținut într-un singur fișier de configurare de 1.613 linii și cu cel care se schimbă des în bază, editabil din panou; autentificarea în panou e limitată la 5 cereri pe minut, iar jurnalul de audit se șterge zilnic după 12 luni, cu trimitere explicită la temeiul legal. Antetele de securitate se pot citi din exterior chiar acum. A doua e o platformă civică în producție, cu 65 de rute de interfață de programare, peste 50 de migrări, 103 fișiere de test pe partea de server și 59 de scenarii capăt-la-capăt, cu verificare de accesibilitate în teste. Ce nu trecem la „livrat”: interoperabilitatea cu serviciile de stat — codul de autentificare federată și de semnătură electronică e scris și testat, dar oprit, pentru că lipsesc contractul cu autoritatea și certificatul de sistem.

Сайт государственного учреждения оценивают не по виду, а по списку. Постановление Правительства 728/2023 устанавливает, какие разделы должны быть: прозрачность принятия решений, проекты и решения, объявления, документы, контакты, бюджет. Они обязательны, проверяются и не подлежат обсуждению. Поэтому мы строим их с самого начала, как структуру, а не добавляем в конце — добавленные в конце они выглядят формально и бесполезно, и это сразу видно.

Второе условие более практичное: учреждение должно уметь публиковать само. Объявление о тендере, проект решения, вынесенный на консультацию, фотография с мероприятия — если все проходит через разработчика, общественно значимая информация остается на бумаге или в группе социальной сети, а сайт становится мертвой витриной. Мы намеренно разделили два вида контента: редакционный, который меняется редко, — география, история, учреждения, контакты, бюджет — хранится в одном файле конфигурации, читаемом напрямую шаблонами; тот, который меняется часто, хранится в базе данных и редактируется из панели.

Третье условие — то, о котором никто не спрашивает в техническом задании: что происходит с данными. Панель публичного администрирования нуждается в лимите на попытки аутентификации — на шестой запрос в минуту с одного и того же адреса ответ 429, и это покрыто автоматическим тестом, а не предполагается. Журнал аудита содержит IP-адреса, а значит, это персональные данные: запланированная задача ежедневно очищает его от всего, что старше двенадцати месяцев, с правовым основанием, записанным в комментарии к коду, а не в отдельном документе, который никто не открывает.

И, наконец, часть, о которой мы предпочитаем говорить до тендера: интероперабельность с государственными сервисами. Федеративная аутентификация и электронная подпись у нас написаны и протестированы, но отключены переключателем, потому что отсутствуют договор с органом и системный сертификат — отсутствует бумага, а не код. Для государственной платежной платформы, магистрали интероперабельности и кабинета гражданина у нас нет никакого кода, ни в одном репозитории, и мы пишем это как есть.

Что входит

Что конкретно меняется в учреждениях и администрации

Обязательные разделы, с самого начала построенные как структура

Прозрачность принятия решений, проекты и решения, объявления, документы, контакты, бюджет, а также заявление о доступности, информация об обработке данных, раздел открытых данных и карта сайта. Соответствие постановлению правительства записано в коде — в шаблонах и в конфигурации — а не только заявлено в предложении.

Два вида контента, два разных места

То, что меняется редко — данные о населенном пункте, история, учреждения, состав совета, контакты, бюджет — находится в одном файле конфигурации на 1.613 строк, который шаблоны читают напрямую; то, что меняется часто — объявления, галерея, проекты и решения, документы, настройки прозрачности — находится в базе данных и редактируется из панели. Разделение не эстетическое: оно сводит к минимуму то, что кто-то может испортить ошибочным редактированием.

Служащий публикует сам, без разработчика в цепочке

Панель охватывает ровно те операции, которые еженедельно выполняются в примэрии: новое объявление, проект решения, вынесенный на консультации, загруженный документ, несколько фотографий. Каждое административное действие попадает в таблицу аудита — кто, что, когда — потому что в государственном учреждении вопрос «кто это опубликовал» рано или поздно получает ответ, который имеет значение.

Лимит на аутентификацию, проверенный тестом

Пять запросов в минуту с одного и того же адреса для формы аутентификации; шестой получает 429. Это не настройка, о которой мы просто заявляем: есть автоматический тест, который проверяет именно возврат кода 429. Разница между настроенной мерой и протестированной видна только тогда, когда кто-то меняет маршрут и забывает о нем.

Заголовки безопасности присутствуют в реальном ответе, а не только в конфигурации

На продакшене они читаются извне: запрет встраивания в кадр, `nosniff`, строгая политика referrer, принудительный защищенный транспорт на год с поддоменами, политика разрешений, которая закрывает геолокацию, микрофон и камеру, плюс явная политика содержимого. Мы проверяем их запросом, а не обещанием.

Минимизация данных как запланированная задача, с правовым основанием рядом с ней

Журналы аудита содержат IP-адреса. Задача выполняется ежедневно и удаляет все, что старше двенадцати месяцев, с указанием правового основания, записанным в комментарии к коду. Это разница между политикой конфиденциальности, которая говорит «храним столько, сколько необходимо», и системой, в которой срок действительно применяется сам.

Автоматически проверяемая доступность при каждой поставке

В гражданской платформе проверка выполняется в автоматических тестах по критериям WCAG 2.0 A и AA плюс 2.1 A и AA, с контрольной линией на страницу: любая новая проблема останавливает поставку, даже если общий уровень не изменился. Для государственного учреждения доступность не является имиджевой опцией, а заявление о доступности не пишется без того, чтобы что-то уже было запущено.

Структурированные данные, которые сообщают машине, что вы — учреждение

Главная страница публикует структурированные данные типа правительственной организации, с почтовым адресом. Это важно для того, как учреждение отображается в результатах, и для систем, которые читают автоматически; это также одна из немногих категорий, для которой документация двигателя по-прежнему показывает обогащенный результат с часто задаваемыми вопросами — но «хорошо известный и авторитетный» не является флажком, который мы ставим, поэтому мы не продаем это как результат поставки.

Что мы не делаем, сказано до тендера

Мы не заявляем как поставленную связь с государственной платежной платформой, с магистралью интероперабельности или с кабинетом гражданина: у нас нет кода для них ни в одном репозитории. Федеративную аутентификацию и электронную подпись у нас записаны и протестированы, но они отключены — отсутствуют контракт с органом власти и системный сертификат. А размещение на государственной инфраструктуре, где это обязательно, — это процедурное требование, а не техническая опция.

Traseul

Как запрос проходит через систему.

01

Картируем требования до дизайна

Первая поставка — это список обязательных разделов для типа вашего учреждения и их соответствие тому, что вы публикуете сегодня. Отсюда видно, чего не хватает, что существует на бумаге и что опубликовано в месте, на которое нельзя сослаться. Дизайн идет после списка, а не наоборот.

02

Мы отделяем редакционный контент от операционного

Что меняется редко, уходит в конфигурацию; что меняется часто, уходит в базу, с панелью. Мы передаём заполненную структуру с реальными данными учреждения — не с заполняющим текстом — потому что сайт учреждения с временным содержанием никто не может оценить, и обычно он таким и остаётся.

03

Мы ставим ворота: лимит аутентификации, аудит, заголовки, сроки

Лимит на форму аутентификации с тестом, который его проверяет, журнал аудита с запланированным удалением в срок, заголовки безопасности, проверенные извне, страница с информацией об обработке данных с названными основаниями. Мы передаём результат проверок, а не только конфигурацию.

04

Передаём с обучением для того, кто публикует

Мы передаём репозиторий, документ ввода в эксплуатацию и доступы, плюс обучение для лица, которое будет публиковать объявления. Передача не считается завершённой, пока сотрудник не опубликует сам объявление, которое появится на сайте.

1Server web cu antete verificate din exterior2aplicație cu rutele publice și panoul3conținut editorial într-un fișier de configurare, conținutoperațional în bază4jurnal de audit cu ștergere programată la 12 luni
4 straturi

Данные

К чему прикасаемся, где оно лежит и сколько остаётся

Правила отличаются от одной отрасли к другой. Это те, что применяются в учреждениях и администрации.

Контент принадлежит учреждению; мы строим структуру
Данные о населенном пункте, составе совета, служебные контакты и бюджет предоставляются учреждением и остаются его данными. Служебные номера телефонов и имена сотрудников являются публичными на сайте учреждения, но не используются в маркетинговых материалах — ни нами, ни в портфолио.
Журнал аудита содержит персональные данные
IP-адрес в журнале — персональные данные. Поэтому у него есть срок: всё, что старше двенадцати месяцев, удаляется ежедневно, с правовым основанием, указанным рядом с кодом. Журнал сохраняет актера, его роль, тип события и то, внутреннее оно или публичное — это разделение важно, когда часть учёта нужно показать гражданину.
Что публикуется и что остаётся в внутреннем деле
В гражданской платформе идентификационные элементы — например регистрационный номер — уходят в дело для органа власти и никогда не появляются публично; публичная позиция округляется; ни одна фотография не попадает на сайт без размытия, утверждённого человеком, а тот, кто редактирует, не является тем, кто утверждает. Правила — это ограничения в базе, а не инструкции для оператора.
Сроки хранения, с опубликованным текстом рядом
Каждый срок хранит в той же таблице опубликованный текст слово в слово и правовое основание — сырые медиа 90 дней, отредактированные медиа 3 года, личность того, кто сообщает, 3 года, сканы этикеток 12 месяцев. Функция очистки по умолчанию сообщает, что она удалила бы; реальное удаление требует явного аргумента.
Права субъекта данных как маршруты, а не как адрес электронной почты
Экспорт, удаление и учёт запросов существуют как функции. Учреждение, которое получает запрос на доступ, должно быть в состоянии выполнить его без ручного открытия базы данных — иначе законный срок расходуется в ожидании разработчика.

Случай

Срок хранения, который применяется сам, каждую ночь

Ситуация

Панель администрирования сайта мэрии ведёт журнал аудита: кто опубликовал, что и когда. Журнал содержит IP-адреса, значит, содержит персональные данные. Почти все такие сайты решают проблему одной фразой в политике конфиденциальности — «мы храним данные столько, сколько необходимо» — и на этом всё заканчивается.

Что мы построили

Я написал срок как запланированную задачу: рутина запускается ежедневно и удаляет из журнала всё, что старше двенадцати месяцев, а ссылка на правовое основание указана в комментарии над кодом. На том же этапе я поставил ограничение для формы входа — пять запросов в минуту с одного и того же адреса — и автоматический тест, который проверяет возврат кода 429, чтобы мера не исчезла молча при рефакторинге.

Что получилось

Опубликованная политика и поведение системы говорят об одном и том же, и разницу можно проверить: срок — это строка кода, которая выполняется каждую ночь, а не намерение. Заголовки безопасности читаются снаружи одним запросом.

Чего этот случай не говорит

Хостинг, артефакты публикации и конфигурация сервера остаются внутренней информацией. А содержимое — данные о населенном пункте, составе совета, бюджете — принадлежит учреждению и предоставляется им: мы построили структуру и панель, а не данные.

Вопросы

Что спрашивают в учреждениях и администрации

Какие разделы обязательны и кто проверяет?

Список следует из Постановления Правительства 728/2023: прозрачность принятия решений, проекты и решения, объявления, документы, контакты, бюджет, а также страницы доступности и информирования об обработке данных. Мы строим их как структуру с самого начала. В работе, которую мы цитируем, соответствие записано в коде — в шаблонах и в конфигурации — а не только заявлено в предложении.

Можем ли мы опубликовать объявление сами, без того чтобы звонить вам?

Да, и это половина работы. Объявления, проекты решений, документы и галерея редактируются из панели. То, что остается в конфигурации, — это редко меняющееся содержимое: история, география, состав совета — именно для того, чтобы обычное редактирование не могло нарушить структуру.

Кто опубликовал объявление и когда — можно узнать?

Да. Каждое административное действие попадает в таблицу аудита, с участником, ролью, типом события и моментом. Журнал содержит и IP-адрес, значит, это персональные данные и у них есть срок: ежедневно удаляется всё, что старше двенадцати месяцев.

Что происходит, если кто-то пытается угадать пароль панели?

На шестом запросе в минуту с одного и того же адреса он получает 429. Это не утверждение: автоматический тест проверяет именно этот код ответа. Кроме того, заголовки безопасности в реальном ответе можно прочитать снаружи — запрет на встраивание в фрейм, `nosniff`, политика referrer, принудительный защищенный транспорт и явная политика содержимого.

Можете связать сайт с правительственной аутентификацией и электронной подписью?

Код написан и протестирован, но отключен с помощью переключателя, а тест по умолчанию как раз проверяет, что отключенное состояние ничего не пропускает. Не хватает не кода: не хватает договора с органом власти и сертификата системы. Рабочий вариант на сегодня — чтобы гражданин подписал на официальном портале и загрузил обратно подписанный документ. Мы предпочитаем говорить это до тендера, а не после.

А платежи в бюджет, через государственную платформу?

У нас нет кода для нее ни в одном репозитории — так же, как для магистрали интероперабельности и для кабинета гражданина. Мы проверили это поиском по целому слову во всех наших проектах. Когда учреждению они нужны, это работа по интеграции с его собственными условиями и собственным календарем согласований, и так мы и пишем это в предложении.

Сайт должен быть размещен на инфраструктуре государства?

Там, где это обязательно по постановлению правительства, да, и это требование процедуры, а не технический выбор. Мы относимся к этому так с самого начала, потому что это меняет способ публикации и список необходимых согласований, а не только адрес сервера.

Как вы показываете, что сайт доступен?

С проверкой, которая запускается в автоматических тестах, по критериям WCAG 2.0 A и AA плюс 2.1 A и AA, с базовой линией по каждой странице: любая новая проблема останавливает поставку. Заявление о доступности пишется после запуска проверки, а не до — иначе это текст, который противоречит странице, на которой он размещён.

Что происходит с фотографиями, присланными гражданами?

В гражданской платформе исходная фотография остаётся частным доказательством; в публичный доступ попадает только отредактированная версия, с сохранённым происхождением и с явным одобрением модератора, причём тот, кто редактирует, не тот, кто утверждает. Если состояние изображения становится небезопасным, дело автоматически убирается из публичного доступа. Это ограничения в базе данных, а не инструкции для оператора.

Что вы хотели бы наладить?

Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.

Давайте обсудим