Перейти до основного вмісту
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. Різниця між заходом, який налаштовано, і тим, який протестовано, видно лише тоді, коли хтось змінює маршрут і забуває про це.

Заголовки безпеки присутні в реальній відповіді, а не лише в конфігурації

У production вони читаються зовні: заборона вбудовування у frame, `nosniff`, сувора політика referrer, примусовий захищений transport на рік із піддоменами, політика дозволів, що закриває геолокацію, мікрофон і камеру, а також явна політика контенту. Ми перевіряємо це запитом, а не обіцянкою.

Мінімізація даних як заплановане завдання, з правовою підставою поруч

Журнали аудиту містять 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`, політика реферера, примусовий захищений транспорт і явна політика вмісту.

Можете пов’язати сайт з державним автентифікуванням і електронним підписом?

Код написано і протестовано, але вимкнено перемикачем, а типовий тест перевіряє саме те, що вимкнений стан нічого не пропускає. Чого бракує — не коду: бракує договору з органом влади та сертифіката системи. Працюючий сьогодні варіант — щоб громадянин підписав на офіційному порталі і завантажив підписаний документ назад. Ми воліємо сказати це до тендера, а не після.

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

У нас немає коду для неї, в жодному репозиторії — так само для шини інтероперабельності та для кабінету громадянина. Ми перевірили це пошуком цілого слова в усіх наших проєктах. Коли установа потребує їх, це робота з інтеграції з власними умовами і власним календарем погоджень, і так ми це пишемо в пропозиції.

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

Там, де це обов’язково за постановою уряду, так, і це вимога процедури, а не технічний вибір. Ми трактуємо це саме так від початку, бо це змінює спосіб публікації та список необхідних погоджень, а не лише адресу сервера.

Як ви показуєте, що сайт є доступним?

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

Що відбувається з фотографіями, надісланими громадянами?

У громадянській платформі сире фото лишається приватним доказом; публічно потрапляє лише відредагована версія, із збереженим походженням і з явним схваленням модератора, а той, хто редагує, не є тим, хто схвалює. Якщо стан зображення стає ненадійним, справа автоматично знімається з публікації. Це обмеження в базі даних, а не інструкції для оператора.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо